From 1f6e49b7e8655afe64df7e722160c7d301b67b05 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sat, 12 Jul 2025 23:24:57 +0200 Subject: [PATCH 001/111] Forgot to commit previously, but this is the basic setup, and start to the landing page, auth flow and some of the basic functionality. --- .gitignore | 19 +- Procfile | 1 - frontend/.prettierrc | 8 + frontend/config/README.md | 28 ++ frontend/config/lighthouserc.json | 20 + frontend/config/postcss.config.js | 9 + frontend/config/vitest.config.js | 22 ++ frontend/dist/assets/index-BJRqtcJi.css | 1 + frontend/dist/assets/index-CGuCVMO8.js | 113 ++++++ frontend/dist/assets/vendor-BtP0CW_r.js | 32 ++ frontend/dist/index.html | 15 + frontend/dist/vite.svg | 1 + frontend/package.json | 30 +- frontend/src/App.jsx | 34 +- .../src/components/auth/ProtectedRoute.jsx | 20 + frontend/src/components/ui/Button.jsx | 33 ++ frontend/src/components/ui/Navbar.jsx | 67 ++++ frontend/src/contexts/AuthContext.jsx | 174 +++++++++ frontend/src/index.css | 61 +++ frontend/src/lib/store.js | 105 ++++++ frontend/src/lib/utils.js | 5 + frontend/src/pages/DashboardPage.jsx | 225 +++++++++++ frontend/src/pages/LandingPage.jsx | 201 ++++++++++ frontend/src/pages/LoginPage.jsx | 236 ++++++++++++ frontend/src/pages/RegisterPage.jsx | 352 ++++++++++++++++++ frontend/src/test/setup.js | 32 ++ frontend/tailwind.config.js | 43 +++ frontend/vite.config.js | 26 ++ package.json | 10 +- 29 files changed, 1913 insertions(+), 10 deletions(-) delete mode 100644 Procfile create mode 100644 frontend/.prettierrc create mode 100644 frontend/config/README.md create mode 100644 frontend/config/lighthouserc.json create mode 100644 frontend/config/postcss.config.js create mode 100644 frontend/config/vitest.config.js create mode 100644 frontend/dist/assets/index-BJRqtcJi.css create mode 100644 frontend/dist/assets/index-CGuCVMO8.js create mode 100644 frontend/dist/assets/vendor-BtP0CW_r.js create mode 100644 frontend/dist/index.html create mode 100644 frontend/dist/vite.svg create mode 100644 frontend/src/components/auth/ProtectedRoute.jsx create mode 100644 frontend/src/components/ui/Button.jsx create mode 100644 frontend/src/components/ui/Navbar.jsx create mode 100644 frontend/src/contexts/AuthContext.jsx create mode 100644 frontend/src/lib/store.js create mode 100644 frontend/src/lib/utils.js create mode 100644 frontend/src/pages/DashboardPage.jsx create mode 100644 frontend/src/pages/LandingPage.jsx create mode 100644 frontend/src/pages/LoginPage.jsx create mode 100644 frontend/src/pages/RegisterPage.jsx create mode 100644 frontend/src/test/setup.js create mode 100644 frontend/tailwind.config.js diff --git a/.gitignore b/.gitignore index 3d70248ba2..cf8c2d4d0d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,21 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -package-lock.json \ No newline at end of file +package-lock.json + +.AI_context +Frontend_prd +frontend_tasklist.txt +.cursor +.claude + +.env.example +.eslintrc.json +.prettierrc.json +.prettierignore +.prettierignore +CLAUDE.md +.cursor/rules/frontend-assumptions.mdc +.cursor/rules/frontend-assumptions.md +.cursor/rules/frontend-assumptions.txt +.cursor/rules/frontend-assumptions.txt \ No newline at end of file diff --git a/Procfile b/Procfile deleted file mode 100644 index dc14c0b63a..0000000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: npm start --prefix backend \ No newline at end of file diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000000..bd8d004fc4 --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": true, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false +} \ No newline at end of file diff --git a/frontend/config/README.md b/frontend/config/README.md new file mode 100644 index 0000000000..1cc429383f --- /dev/null +++ b/frontend/config/README.md @@ -0,0 +1,28 @@ +# Configuration Files + +This directory contains all configuration files for the frontend application. + +## Files Overview + +| File | Purpose | Documentation | +| -------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------- | +| `.eslintrc.js` | ESLint configuration for code quality and style enforcement | [ESLint Docs](https://eslint.org/docs/user-guide/configuring/) | +| `.prettierrc` | Prettier configuration for code formatting | [Prettier Docs](https://prettier.io/docs/en/configuration.html) | +| `tailwind.config.js` | Tailwind CSS configuration and design tokens | [Tailwind Docs](https://tailwindcss.com/docs/configuration) | +| `postcss.config.js` | PostCSS configuration for CSS processing | [PostCSS Docs](https://postcss.org/) | +| `vitest.config.js` | Vitest configuration for testing | [Vitest Docs](https://vitest.dev/config/) | +| `lighthouserc.json` | Lighthouse CI configuration for performance monitoring | [Lighthouse CI Docs](https://github.com/GoogleChrome/lighthouse-ci) | + +## Usage + +Most tools automatically detect their config files in this directory through explicit references in: + +- `package.json` scripts +- `vite.config.js` +- GitHub Actions workflow + +## Notes + +- Paths in config files are relative to the project root, not the config directory +- Changes to these files may require restarting development servers +- All configs follow the project's ESLint and Prettier rules diff --git a/frontend/config/lighthouserc.json b/frontend/config/lighthouserc.json new file mode 100644 index 0000000000..be5ff202d6 --- /dev/null +++ b/frontend/config/lighthouserc.json @@ -0,0 +1,20 @@ +{ + "ci": { + "collect": { + "startServerCommand": "npm run preview", + "url": ["http://localhost:4173"], + "numberOfRuns": 3 + }, + "assert": { + "assertions": { + "categories:performance": ["error", {"minScore": 0.9}], + "categories:accessibility": ["error", {"minScore": 0.9}], + "categories:best-practices": ["error", {"minScore": 0.9}], + "categories:seo": ["error", {"minScore": 0.9}] + } + }, + "upload": { + "target": "temporary-public-storage" + } + } +} \ No newline at end of file diff --git a/frontend/config/postcss.config.js b/frontend/config/postcss.config.js new file mode 100644 index 0000000000..760d963261 --- /dev/null +++ b/frontend/config/postcss.config.js @@ -0,0 +1,9 @@ +import tailwindcss from 'tailwindcss' +import autoprefixer from 'autoprefixer' + +export default { + plugins: [ + tailwindcss({ config: './tailwind.config.js' }), + autoprefixer, + ], +} diff --git a/frontend/config/vitest.config.js b/frontend/config/vitest.config.js new file mode 100644 index 0000000000..0cb7e064a6 --- /dev/null +++ b/frontend/config/vitest.config.js @@ -0,0 +1,22 @@ +import { defineConfig } from 'vitest/config' +import react from '@vitejs/plugin-react' +import path from 'path' + +export default defineConfig({ + plugins: [react()], + test: { + globals: true, + environment: 'jsdom', + setupFiles: './src/test/setup.js', + }, + resolve: { + alias: { + '@': path.resolve(__dirname, '../src'), + '@components': path.resolve(__dirname, '../src/components'), + '@pages': path.resolve(__dirname, '../src/pages'), + '@hooks': path.resolve(__dirname, '../src/hooks'), + '@utils': path.resolve(__dirname, '../src/utils'), + '@assets': path.resolve(__dirname, '../src/assets'), + }, + }, +}) \ No newline at end of file diff --git a/frontend/dist/assets/index-BJRqtcJi.css b/frontend/dist/assets/index-BJRqtcJi.css new file mode 100644 index 0000000000..0264354b76 --- /dev/null +++ b/frontend/dist/assets/index-BJRqtcJi.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}.dark{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}body{font-feature-settings:"rlig" 1,"calt" 1}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn:disabled{pointer-events:none;opacity:.5}.btn-primary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-secondary:disabled{pointer-events:none;opacity:.5}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(77 124 15 / var(--tw-bg-opacity, 1))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-outline:disabled{pointer-events:none;opacity:.5}.btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.btn-outline:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.btn-outline:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.btn-outline:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.-ml-1{margin-left:-.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.min-h-screen{min-height:100vh}.w-12{width:3rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-t{border-top-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-20{padding-top:5rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tracking-tight{letter-spacing:-.025em}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 768px){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width: 1024px){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}} diff --git a/frontend/dist/assets/index-CGuCVMO8.js b/frontend/dist/assets/index-CGuCVMO8.js new file mode 100644 index 0000000000..1532a39b77 --- /dev/null +++ b/frontend/dist/assets/index-CGuCVMO8.js @@ -0,0 +1,113 @@ +import{r as Xt,g as Zt,a as Qt}from"./vendor-BtP0CW_r.js";function Fr(e,t){for(var r=0;rn[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function r(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(a){if(a.ep)return;a.ep=!0;const o=r(a);fetch(a.href,o)}})();var Ze={exports:{}},me={};/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var St;function Ur(){if(St)return me;St=1;var e=Xt(),t=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,a=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function i(c,l,h){var u,d={},m=null,p=null;h!==void 0&&(m=""+h),l.key!==void 0&&(m=""+l.key),l.ref!==void 0&&(p=l.ref);for(u in l)n.call(l,u)&&!o.hasOwnProperty(u)&&(d[u]=l[u]);if(c&&c.defaultProps)for(u in l=c.defaultProps,l)d[u]===void 0&&(d[u]=l[u]);return{$$typeof:t,type:c,key:m,ref:p,props:d,_owner:a.current}}return me.Fragment=r,me.jsx=i,me.jsxs=i,me}var Ct;function Vr(){return Ct||(Ct=1,Ze.exports=Ur()),Ze.exports}var s=Vr(),f=Xt();const Z=Zt(f),qr=Fr({__proto__:null,default:Z},[f]);var Pe={},Pt;function Hr(){if(Pt)return Pe;Pt=1;var e=Qt();return Pe.createRoot=e.createRoot,Pe.hydrateRoot=e.hydrateRoot,Pe}var Gr=Hr();const Jr=Zt(Gr);Qt();/** + * @remix-run/router v1.23.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function xe(){return xe=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function er(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Kr(){return Math.random().toString(36).substr(2,8)}function Rt(e,t){return{usr:e.state,key:e.key,idx:t}}function st(e,t,r,n){return r===void 0&&(r=null),xe({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?ie(t):t,{state:r,key:t&&t.key||n||Kr()})}function Me(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function ie(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function Xr(e,t,r,n){n===void 0&&(n={});let{window:a=document.defaultView,v5Compat:o=!1}=n,i=a.history,c=V.Pop,l=null,h=u();h==null&&(h=0,i.replaceState(xe({},i.state,{idx:h}),""));function u(){return(i.state||{idx:null}).idx}function d(){c=V.Pop;let g=u(),x=g==null?null:g-h;h=g,l&&l({action:c,location:v.location,delta:x})}function m(g,x){c=V.Push;let y=st(v.location,g,x);h=u()+1;let w=Rt(y,h),N=v.createHref(y);try{i.pushState(w,"",N)}catch(P){if(P instanceof DOMException&&P.name==="DataCloneError")throw P;a.location.assign(N)}o&&l&&l({action:c,location:v.location,delta:1})}function p(g,x){c=V.Replace;let y=st(v.location,g,x);h=u();let w=Rt(y,h),N=v.createHref(y);i.replaceState(w,"",N),o&&l&&l({action:c,location:v.location,delta:0})}function b(g){let x=a.location.origin!=="null"?a.location.origin:a.location.href,y=typeof g=="string"?g:Me(g);return y=y.replace(/ $/,"%20"),R(x,"No window.location.(origin|href) available to create URL for href: "+y),new URL(y,x)}let v={get action(){return c},get location(){return e(a,i)},listen(g){if(l)throw new Error("A history only accepts one active listener");return a.addEventListener(Et,d),l=g,()=>{a.removeEventListener(Et,d),l=null}},createHref(g){return t(a,g)},createURL:b,encodeLocation(g){let x=b(g);return{pathname:x.pathname,search:x.search,hash:x.hash}},push:m,replace:p,go(g){return i.go(g)}};return v}var Lt;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Lt||(Lt={}));function Zr(e,t,r){return r===void 0&&(r="/"),Qr(e,t,r)}function Qr(e,t,r,n){let a=typeof t=="string"?ie(t):t,o=ft(a.pathname||"/",r);if(o==null)return null;let i=tr(e);en(i);let c=null;for(let l=0;c==null&&l{let l={relativePath:c===void 0?o.path||"":c,caseSensitive:o.caseSensitive===!0,childrenIndex:i,route:o};l.relativePath.startsWith("/")&&(R(l.relativePath.startsWith(n),'Absolute route path "'+l.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),l.relativePath=l.relativePath.slice(n.length));let h=q([n,l.relativePath]),u=r.concat(l);o.children&&o.children.length>0&&(R(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+h+'".')),tr(o.children,t,u,h)),!(o.path==null&&!o.index)&&t.push({path:h,score:ln(h,o.index),routesMeta:u})};return e.forEach((o,i)=>{var c;if(o.path===""||!((c=o.path)!=null&&c.includes("?")))a(o,i);else for(let l of rr(o.path))a(o,i,l)}),t}function rr(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,a=r.endsWith("?"),o=r.replace(/\?$/,"");if(n.length===0)return a?[o,""]:[o];let i=rr(n.join("/")),c=[];return c.push(...i.map(l=>l===""?o:[o,l].join("/"))),a&&c.push(...i),c.map(l=>e.startsWith("/")&&l===""?"/":l)}function en(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:cn(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const tn=/^:[\w-]+$/,rn=3,nn=2,sn=1,an=10,on=-2,It=e=>e==="*";function ln(e,t){let r=e.split("/"),n=r.length;return r.some(It)&&(n+=on),t&&(n+=nn),r.filter(a=>!It(a)).reduce((a,o)=>a+(tn.test(o)?rn:o===""?sn:an),n)}function cn(e,t){return e.length===t.length&&e.slice(0,-1).every((n,a)=>n===t[a])?e[e.length-1]-t[t.length-1]:0}function dn(e,t,r){let{routesMeta:n}=e,a={},o="/",i=[];for(let c=0;c{let{paramName:m,isOptional:p}=u;if(m==="*"){let v=c[d]||"";i=o.slice(0,o.length-v.length).replace(/(.)\/+$/,"$1")}const b=c[d];return p&&!b?h[m]=void 0:h[m]=(b||"").replace(/%2F/g,"/"),h},{}),pathname:o,pathnameBase:i,pattern:e}}function hn(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),er(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],a="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(i,c,l)=>(n.push({paramName:c,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),a+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?a+="\\/*$":e!==""&&e!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,t?void 0:"i"),n]}function mn(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return er(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function ft(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function fn(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:a=""}=typeof e=="string"?ie(e):e;return{pathname:r?r.startsWith("/")?r:pn(r,t):t,search:vn(n),hash:yn(a)}}function pn(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(a=>{a===".."?r.length>1&&r.pop():a!=="."&&r.push(a)}),r.length>1?r.join("/"):"/"}function Qe(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function gn(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function pt(e,t){let r=gn(e);return t?r.map((n,a)=>a===r.length-1?n.pathname:n.pathnameBase):r.map(n=>n.pathnameBase)}function gt(e,t,r,n){n===void 0&&(n=!1);let a;typeof e=="string"?a=ie(e):(a=xe({},e),R(!a.pathname||!a.pathname.includes("?"),Qe("?","pathname","search",a)),R(!a.pathname||!a.pathname.includes("#"),Qe("#","pathname","hash",a)),R(!a.search||!a.search.includes("#"),Qe("#","search","hash",a)));let o=e===""||a.pathname==="",i=o?"/":a.pathname,c;if(i==null)c=r;else{let d=t.length-1;if(!n&&i.startsWith("..")){let m=i.split("/");for(;m[0]==="..";)m.shift(),d-=1;a.pathname=m.join("/")}c=d>=0?t[d]:"/"}let l=fn(a,c),h=i&&i!=="/"&&i.endsWith("/"),u=(o||i===".")&&r.endsWith("/");return!l.pathname.endsWith("/")&&(h||u)&&(l.pathname+="/"),l}const q=e=>e.join("/").replace(/\/\/+/g,"/"),xn=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),vn=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,yn=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function bn(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const nr=["post","put","patch","delete"];new Set(nr);const wn=["get",...nr];new Set(wn);/** + * React Router v6.30.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function ve(){return ve=Object.assign?Object.assign.bind():function(e){for(var t=1;t{c.current=!0}),f.useCallback(function(h,u){if(u===void 0&&(u={}),!c.current)return;if(typeof h=="number"){n.go(h);return}let d=gt(h,JSON.parse(i),o,u.relative==="path");e==null&&t!=="/"&&(d.pathname=d.pathname==="/"?t:q([t,d.pathname])),(u.replace?n.replace:n.push)(d,u.state,u)},[t,n,i,o,e])}function or(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=f.useContext(H),{matches:a}=f.useContext(G),{pathname:o}=be(),i=JSON.stringify(pt(a,n.v7_relativeSplatPath));return f.useMemo(()=>gt(e,JSON.parse(i),o,r==="path"),[e,i,o,r])}function Sn(e,t){return Cn(e,t)}function Cn(e,t,r,n){le()||R(!1);let{navigator:a}=f.useContext(H),{matches:o}=f.useContext(G),i=o[o.length-1],c=i?i.params:{};i&&i.pathname;let l=i?i.pathnameBase:"/";i&&i.route;let h=be(),u;if(t){var d;let g=typeof t=="string"?ie(t):t;l==="/"||(d=g.pathname)!=null&&d.startsWith(l)||R(!1),u=g}else u=h;let m=u.pathname||"/",p=m;if(l!=="/"){let g=l.replace(/^\//,"").split("/");p="/"+m.replace(/^\//,"").split("/").slice(g.length).join("/")}let b=Zr(e,{pathname:p}),v=In(b&&b.map(g=>Object.assign({},g,{params:Object.assign({},c,g.params),pathname:q([l,a.encodeLocation?a.encodeLocation(g.pathname).pathname:g.pathname]),pathnameBase:g.pathnameBase==="/"?l:q([l,a.encodeLocation?a.encodeLocation(g.pathnameBase).pathname:g.pathnameBase])})),o,r,n);return t&&v?f.createElement(We.Provider,{value:{location:ve({pathname:"/",search:"",hash:"",state:null,key:"default"},u),navigationType:V.Pop}},v):v}function Pn(){let e=Mn(),t=bn(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,a={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},t),r?f.createElement("pre",{style:a},r):null,null)}const En=f.createElement(Pn,null);class Rn extends f.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?f.createElement(G.Provider,{value:this.props.routeContext},f.createElement(sr.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Ln(e){let{routeContext:t,match:r,children:n}=e,a=f.useContext(xt);return a&&a.static&&a.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=r.route.id),f.createElement(G.Provider,{value:t},n)}function In(e,t,r,n){var a;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var o;if(!r)return null;if(r.errors)e=r.matches;else if((o=n)!=null&&o.v7_partialHydration&&t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,c=(a=r)==null?void 0:a.errors;if(c!=null){let u=i.findIndex(d=>d.route.id&&(c==null?void 0:c[d.route.id])!==void 0);u>=0||R(!1),i=i.slice(0,Math.min(i.length,u+1))}let l=!1,h=-1;if(r&&n&&n.v7_partialHydration)for(let u=0;u=0?i=i.slice(0,h+1):i=[i[0]];break}}}return i.reduceRight((u,d,m)=>{let p,b=!1,v=null,g=null;r&&(p=c&&d.route.id?c[d.route.id]:void 0,v=d.route.errorElement||En,l&&(h<0&&m===0?(Tn("route-fallback"),b=!0,g=null):h===m&&(b=!0,g=d.route.hydrateFallbackElement||null)));let x=t.concat(i.slice(0,m+1)),y=()=>{let w;return p?w=v:b?w=g:d.route.Component?w=f.createElement(d.route.Component,null):d.route.element?w=d.route.element:w=u,f.createElement(Ln,{match:d,routeContext:{outlet:u,matches:x,isDataRoute:r!=null},children:w})};return r&&(d.route.ErrorBoundary||d.route.errorElement||m===0)?f.createElement(Rn,{location:r.location,revalidation:r.revalidation,component:v,error:p,children:y(),routeContext:{outlet:null,matches:x,isDataRoute:!0}}):y()},null)}var ir=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(ir||{}),lr=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(lr||{});function On(e){let t=f.useContext(xt);return t||R(!1),t}function An(e){let t=f.useContext(jn);return t||R(!1),t}function _n(e){let t=f.useContext(G);return t||R(!1),t}function cr(e){let t=_n(),r=t.matches[t.matches.length-1];return r.route.id||R(!1),r.route.id}function Mn(){var e;let t=f.useContext(sr),r=An(),n=cr();return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function $n(){let{router:e}=On(ir.UseNavigateStable),t=cr(lr.UseNavigateStable),r=f.useRef(!1);return ar(()=>{r.current=!0}),f.useCallback(function(a,o){o===void 0&&(o={}),r.current&&(typeof a=="number"?e.navigate(a):e.navigate(a,ve({fromRouteId:t},o)))},[e,t])}const Ot={};function Tn(e,t,r){Ot[e]||(Ot[e]=!0)}function Bn(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function Dn(e){let{to:t,replace:r,state:n,relative:a}=e;le()||R(!1);let{future:o,static:i}=f.useContext(H),{matches:c}=f.useContext(G),{pathname:l}=be(),h=ze(),u=gt(t,pt(c,o.v7_relativeSplatPath),l,a==="path"),d=JSON.stringify(u);return f.useEffect(()=>h(JSON.parse(d),{replace:r,state:n,relative:a}),[h,d,a,r,n]),null}function fe(e){R(!1)}function Wn(e){let{basename:t="/",children:r=null,location:n,navigationType:a=V.Pop,navigator:o,static:i=!1,future:c}=e;le()&&R(!1);let l=t.replace(/^\/*/,"/"),h=f.useMemo(()=>({basename:l,navigator:o,static:i,future:ve({v7_relativeSplatPath:!1},c)}),[l,c,o,i]);typeof n=="string"&&(n=ie(n));let{pathname:u="/",search:d="",hash:m="",state:p=null,key:b="default"}=n,v=f.useMemo(()=>{let g=ft(u,l);return g==null?null:{location:{pathname:g,search:d,hash:m,state:p,key:b},navigationType:a}},[l,u,d,m,p,b,a]);return v==null?null:f.createElement(H.Provider,{value:h},f.createElement(We.Provider,{children:r,value:v}))}function zn(e){let{children:t,location:r}=e;return Sn(at(t),r)}new Promise(()=>{});function at(e,t){t===void 0&&(t=[]);let r=[];return f.Children.forEach(e,(n,a)=>{if(!f.isValidElement(n))return;let o=[...t,a];if(n.type===f.Fragment){r.push.apply(r,at(n.props.children,o));return}n.type!==fe&&R(!1),!n.props.index||!n.props.children||R(!1);let i={id:n.props.id||o.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(i.children=at(n.props.children,o)),r.push(i)}),r}/** + * React Router DOM v6.30.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function ot(){return ot=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[a]=e[a]);return r}function Un(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Vn(e,t){return e.button===0&&(!t||t==="_self")&&!Un(e)}const qn=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],Hn="6";try{window.__reactRouterVersion=Hn}catch{}const Gn="startTransition",At=qr[Gn];function Jn(e){let{basename:t,children:r,future:n,window:a}=e,o=f.useRef();o.current==null&&(o.current=Yr({window:a,v5Compat:!0}));let i=o.current,[c,l]=f.useState({action:i.action,location:i.location}),{v7_startTransition:h}=n||{},u=f.useCallback(d=>{h&&At?At(()=>l(d)):l(d)},[l,h]);return f.useLayoutEffect(()=>i.listen(u),[i,u]),f.useEffect(()=>Bn(n),[n]),f.createElement(Wn,{basename:t,children:r,location:c.location,navigationType:c.action,navigator:i,future:n})}const Yn=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Kn=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,$=f.forwardRef(function(t,r){let{onClick:n,relative:a,reloadDocument:o,replace:i,state:c,target:l,to:h,preventScrollReset:u,viewTransition:d}=t,m=Fn(t,qn),{basename:p}=f.useContext(H),b,v=!1;if(typeof h=="string"&&Kn.test(h)&&(b=h,Yn))try{let w=new URL(window.location.href),N=h.startsWith("//")?new URL(w.protocol+h):new URL(h),P=ft(N.pathname,p);N.origin===w.origin&&P!=null?h=P+N.search+N.hash:v=!0}catch{}let g=Nn(h,{relative:a}),x=Xn(h,{replace:i,state:c,target:l,preventScrollReset:u,relative:a,viewTransition:d});function y(w){n&&n(w),w.defaultPrevented||x(w)}return f.createElement("a",ot({},m,{href:b||g,onClick:v||o?n:y,ref:r,target:l}))});var _t;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(_t||(_t={}));var Mt;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Mt||(Mt={}));function Xn(e,t){let{target:r,replace:n,state:a,preventScrollReset:o,relative:i,viewTransition:c}=t===void 0?{}:t,l=ze(),h=be(),u=or(e,{relative:i});return f.useCallback(d=>{if(Vn(d,r)){d.preventDefault();let m=n!==void 0?n:Me(h)===Me(u);l(e,{replace:m,state:a,preventScrollReset:o,relative:i,viewTransition:c})}},[h,l,u,n,a,r,e,o,i,c])}var O=function(){return O=Object.assign||function(t){for(var r,n=1,a=arguments.length;n0?I(ce,--M):0,ne--,L===10&&(ne=1,Ue--),L}function T(){return L=M2||lt(L)>3?"":" "}function is(e,t){for(;--t&&T()&&!(L<48||L>102||L>57&&L<65||L>70&&L<97););return qe(e,Ie()+(t<6&&K()==32&&T()==32))}function ct(e){for(;T();)switch(L){case e:return M;case 34:case 39:e!==34&&e!==39&&ct(L);break;case 40:e===41&&ct(e);break;case 92:T();break}return M}function ls(e,t){for(;T()&&e+L!==57;)if(e+L===84&&K()===47)break;return"/*"+qe(t,M-1)+"*"+yt(e===47?e:T())}function cs(e){for(;!lt(K());)T();return qe(e,M)}function ds(e){return as(Oe("",null,null,null,[""],e=ss(e),0,[0],e))}function Oe(e,t,r,n,a,o,i,c,l){for(var h=0,u=0,d=i,m=0,p=0,b=0,v=1,g=1,x=1,y=0,w="",N=a,P=o,C=n,k=w;g;)switch(b=y,y=T()){case 40:if(b!=108&&I(k,d-1)==58){Le(k+=j(et(y),"&","&\f"),"&\f",hr(h?c[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:k+=et(y);break;case 9:case 10:case 13:case 32:k+=os(b);break;case 92:k+=is(Ie()-1,7);continue;case 47:switch(K()){case 42:case 47:pe(us(ls(T(),Ie()),t,r,l),l);break;default:k+="/"}break;case 123*v:c[h++]=B(k)*x;case 125*v:case 59:case 0:switch(y){case 0:case 125:g=0;case 59+u:x==-1&&(k=j(k,/\f/g,"")),p>0&&B(k)-d&&pe(p>32?Bt(k+";",n,r,d-1,l):Bt(j(k," ","")+";",n,r,d-2,l),l);break;case 59:k+=";";default:if(pe(C=Tt(k,t,r,h,u,a,c,w,N=[],P=[],d,o),o),y===123)if(u===0)Oe(k,t,C,C,N,o,d,c,P);else switch(m===99&&I(k,3)===110?100:m){case 100:case 108:case 109:case 115:Oe(e,C,C,n&&pe(Tt(e,C,C,0,0,a,c,w,a,N=[],d,P),P),a,P,d,c,n?N:P);break;default:Oe(k,C,C,C,[""],P,0,c,P)}}h=u=p=0,v=x=1,w=k="",d=i;break;case 58:d=1+B(k),p=b;default:if(v<1){if(y==123)--v;else if(y==125&&v++==0&&ns()==125)continue}switch(k+=yt(y),y*v){case 38:x=u>0?1:(k+="\f",-1);break;case 44:c[h++]=(B(k)-1)*x,x=1;break;case 64:K()===45&&(k+=et(T())),m=K(),u=d=B(w=k+=cs(Ie())),y++;break;case 45:b===45&&B(k)==2&&(v=0)}}return o}function Tt(e,t,r,n,a,o,i,c,l,h,u,d){for(var m=a-1,p=a===0?o:[""],b=fr(p),v=0,g=0,x=0;v0?p[y]+" "+w:j(w,/&\f/g,p[y])))&&(l[x++]=N);return Ve(e,t,r,a===0?Fe:c,l,h,u,d)}function us(e,t,r,n){return Ve(e,t,r,dr,yt(rs()),re(e,2,-2),0,n)}function Bt(e,t,r,n,a){return Ve(e,t,r,vt,re(e,0,n),re(e,n+1,-1),n,a)}function gr(e,t,r){switch(es(e,t)){case 5103:return S+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return S+e+e;case 4789:return ge+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return S+e+ge+e+E+e+e;case 5936:switch(I(e,t+11)){case 114:return S+e+E+j(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return S+e+E+j(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return S+e+E+j(e,/[svh]\w+-[tblr]{2}/,"lr")+e}case 6828:case 4268:case 2903:return S+e+E+e+e;case 6165:return S+e+E+"flex-"+e+e;case 5187:return S+e+j(e,/(\w+).+(:[^]+)/,S+"box-$1$2"+E+"flex-$1$2")+e;case 5443:return S+e+E+"flex-item-"+j(e,/flex-|-self/g,"")+(W(e,/flex-|baseline/)?"":E+"grid-row-"+j(e,/flex-|-self/g,""))+e;case 4675:return S+e+E+"flex-line-pack"+j(e,/align-content|flex-|-self/g,"")+e;case 5548:return S+e+E+j(e,"shrink","negative")+e;case 5292:return S+e+E+j(e,"basis","preferred-size")+e;case 6060:return S+"box-"+j(e,"-grow","")+S+e+E+j(e,"grow","positive")+e;case 4554:return S+j(e,/([^-])(transform)/g,"$1"+S+"$2")+e;case 6187:return j(j(j(e,/(zoom-|grab)/,S+"$1"),/(image-set)/,S+"$1"),e,"")+e;case 5495:case 3959:return j(e,/(image-set\([^]*)/,S+"$1$`$1");case 4968:return j(j(e,/(.+:)(flex-)?(.*)/,S+"box-pack:$3"+E+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+S+e+e;case 4200:if(!W(e,/flex-|baseline/))return E+"grid-column-align"+re(e,t)+e;break;case 2592:case 3360:return E+j(e,"template-","")+e;case 4384:case 3616:return r&&r.some(function(n,a){return t=a,W(n.props,/grid-\w+-end/)})?~Le(e+(r=r[t].value),"span",0)?e:E+j(e,"-start","")+e+E+"grid-row-span:"+(~Le(r,"span",0)?W(r,/\d+/):+W(r,/\d+/)-+W(e,/\d+/))+";":E+j(e,"-start","")+e;case 4896:case 4128:return r&&r.some(function(n){return W(n.props,/grid-\w+-start/)})?e:E+j(j(e,"-end","-span"),"span ","")+e;case 4095:case 3583:case 4068:case 2532:return j(e,/(.+)-inline(.+)/,S+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(B(e)-1-t>6)switch(I(e,t+1)){case 109:if(I(e,t+4)!==45)break;case 102:return j(e,/(.+:)(.+)-([^]+)/,"$1"+S+"$2-$3$1"+ge+(I(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~Le(e,"stretch",0)?gr(j(e,"stretch","fill-available"),t,r)+e:e}break;case 5152:case 5920:return j(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(n,a,o,i,c,l,h){return E+a+":"+o+h+(i?E+a+"-span:"+(c?l:+l-+o)+h:"")+e});case 4949:if(I(e,t+6)===121)return j(e,":",":"+S)+e;break;case 6444:switch(I(e,I(e,14)===45?18:11)){case 120:return j(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+S+(I(e,14)===45?"inline-":"")+"box$3$1"+S+"$2$3$1"+E+"$2box$3")+e;case 100:return j(e,":",":"+E)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return j(e,"scroll-","scroll-snap-")+e}return e}function Te(e,t){for(var r="",n=0;n-1&&!e.return)switch(e.type){case vt:e.return=gr(e.value,e.length,r);return;case ur:return Te([U(e,{value:j(e.value,"@","@"+S)})],n);case Fe:if(e.length)return ts(r=e.props,function(a){switch(W(a,n=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":ee(U(e,{props:[j(a,/:(read-\w+)/,":"+ge+"$1")]})),ee(U(e,{props:[a]})),it(e,{props:$t(r,n)});break;case"::placeholder":ee(U(e,{props:[j(a,/:(plac\w+)/,":"+S+"input-$1")]})),ee(U(e,{props:[j(a,/:(plac\w+)/,":"+ge+"$1")]})),ee(U(e,{props:[j(a,/:(plac\w+)/,E+"input-$1")]})),ee(U(e,{props:[a]})),it(e,{props:$t(r,n)});break}return""})}}var gs={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},A={},se=typeof process<"u"&&A!==void 0&&(A.REACT_APP_SC_ATTR||A.SC_ATTR)||"data-styled",xr="active",vr="data-styled-version",He="6.1.19",bt=`/*!sc*/ +`,Be=typeof window<"u"&&typeof document<"u",xs=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process<"u"&&A!==void 0&&A.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&A.REACT_APP_SC_DISABLE_SPEEDY!==""?A.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&A.REACT_APP_SC_DISABLE_SPEEDY:typeof process<"u"&&A!==void 0&&A.SC_DISABLE_SPEEDY!==void 0&&A.SC_DISABLE_SPEEDY!==""&&A.SC_DISABLE_SPEEDY!=="false"&&A.SC_DISABLE_SPEEDY),Ge=Object.freeze([]),ae=Object.freeze({});function vs(e,t,r){return r===void 0&&(r=ae),e.theme!==r.theme&&e.theme||t||r.theme}var yr=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),ys=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,bs=/(^-|-$)/g;function Dt(e){return e.replace(ys,"-").replace(bs,"")}var ws=/(a)(d)/gi,Ee=52,Wt=function(e){return String.fromCharCode(e+(e>25?39:97))};function dt(e){var t,r="";for(t=Math.abs(e);t>Ee;t=t/Ee|0)r=Wt(t%Ee)+r;return(Wt(t%Ee)+r).replace(ws,"$1-$2")}var tt,br=5381,te=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},wr=function(e){return te(br,e)};function js(e){return dt(wr(e)>>>0)}function Ns(e){return e.displayName||e.name||"Component"}function rt(e){return typeof e=="string"&&!0}var jr=typeof Symbol=="function"&&Symbol.for,Nr=jr?Symbol.for("react.memo"):60115,ks=jr?Symbol.for("react.forward_ref"):60112,Ss={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Cs={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},kr={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Ps=((tt={})[ks]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},tt[Nr]=kr,tt);function zt(e){return("type"in(t=e)&&t.type.$$typeof)===Nr?kr:"$$typeof"in e?Ps[e.$$typeof]:Ss;var t}var Es=Object.defineProperty,Rs=Object.getOwnPropertyNames,Ft=Object.getOwnPropertySymbols,Ls=Object.getOwnPropertyDescriptor,Is=Object.getPrototypeOf,Ut=Object.prototype;function Sr(e,t,r){if(typeof t!="string"){if(Ut){var n=Is(t);n&&n!==Ut&&Sr(e,n,r)}var a=Rs(t);Ft&&(a=a.concat(Ft(t)));for(var o=zt(e),i=zt(t),c=0;c0?" Args: ".concat(t.join(", ")):""))}var Os=function(){function e(t){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=t}return e.prototype.indexOfGroup=function(t){for(var r=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,a=n.length,o=a;t>=o;)if((o<<=1)<0)throw we(16,"".concat(t));this.groupSizes=new Uint32Array(o),this.groupSizes.set(n),this.length=o;for(var i=a;i=this.length||this.groupSizes[t]===0)return r;for(var n=this.groupSizes[t],a=this.indexOfGroup(t),o=a+n,i=a;i=0){var n=document.createTextNode(r);return this.element.insertBefore(n,this.nodes[t]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(t){this.element.removeChild(this.nodes[t]),this.length--},e.prototype.getRule=function(t){return t0&&(g+="".concat(x,","))}),l+="".concat(b).concat(v,'{content:"').concat(g,'"}').concat(bt)},u=0;u0?".".concat(t):m},u=l.slice();u.push(function(m){m.type===Fe&&m.value.includes("&")&&(m.props[0]=m.props[0].replace(Us,r).replace(n,h))}),i.prefix&&u.push(ps),u.push(hs);var d=function(m,p,b,v){p===void 0&&(p=""),b===void 0&&(b=""),v===void 0&&(v="&"),t=v,r=p,n=new RegExp("\\".concat(r,"\\b"),"g");var g=m.replace(Vs,""),x=ds(b||p?"".concat(b," ").concat(p," { ").concat(g," }"):g);i.namespace&&(x=Er(x,i.namespace));var y=[];return Te(x,ms(u.concat(fs(function(w){return y.push(w)})))),y};return d.hash=l.length?l.reduce(function(m,p){return p.name||we(15),te(m,p.name)},br).toString():"",d}var Hs=new Pr,ht=qs(),Rr=Z.createContext({shouldForwardProp:void 0,styleSheet:Hs,stylis:ht});Rr.Consumer;Z.createContext(void 0);function Gt(){return f.useContext(Rr)}var Gs=function(){function e(t,r){var n=this;this.inject=function(a,o){o===void 0&&(o=ht);var i=n.name+o.hash;a.hasNameForId(n.id,i)||a.insertRules(n.id,i,o(n.rules,i,"@keyframes"))},this.name=t,this.id="sc-keyframes-".concat(t),this.rules=r,jt(this,function(){throw we(12,String(n.name))})}return e.prototype.getName=function(t){return t===void 0&&(t=ht),this.name+t.hash},e}(),Js=function(e){return e>="A"&&e<="Z"};function Jt(e){for(var t="",r=0;r>>0);if(!r.hasNameForId(this.componentId,i)){var c=n(o,".".concat(i),void 0,this.componentId);r.insertRules(this.componentId,i,c)}a=Y(a,i),this.staticRulesId=i}else{for(var l=te(this.baseHash,n.hash),h="",u=0;u>>0);r.hasNameForId(this.componentId,p)||r.insertRules(this.componentId,p,n(h,".".concat(p),void 0,this.componentId)),a=Y(a,p)}}return a},e}(),Or=Z.createContext(void 0);Or.Consumer;var nt={};function Zs(e,t,r){var n=wt(e),a=e,o=!rt(e),i=t.attrs,c=i===void 0?Ge:i,l=t.componentId,h=l===void 0?function(N,P){var C=typeof N!="string"?"sc":Dt(N);nt[C]=(nt[C]||0)+1;var k="".concat(C,"-").concat(js(He+C+nt[C]));return P?"".concat(P,"-").concat(k):k}(t.displayName,t.parentComponentId):l,u=t.displayName,d=u===void 0?function(N){return rt(N)?"styled.".concat(N):"Styled(".concat(Ns(N),")")}(e):u,m=t.displayName&&t.componentId?"".concat(Dt(t.displayName),"-").concat(t.componentId):t.componentId||h,p=n&&a.attrs?a.attrs.concat(c).filter(Boolean):c,b=t.shouldForwardProp;if(n&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var g=t.shouldForwardProp;b=function(N,P){return v(N,P)&&g(N,P)}}else b=v}var x=new Xs(r,m,n?a.componentStyle:void 0);function y(N,P){return function(C,k,Q){var je=C.attrs,Mr=C.componentStyle,$r=C.defaultProps,Tr=C.foldedComponentIds,Br=C.styledComponentId,Dr=C.target,Wr=Z.useContext(Or),zr=Gt(),Ye=C.shouldForwardProp||zr.shouldForwardProp,Nt=vs(k,Wr,$r)||ae,D=function(ke,ue,Se){for(var he,J=O(O({},ue),{className:void 0,theme:Se}),Xe=0;Xe{const[e,t]=f.useState(!1),r=()=>t(!e),n="text-gray-700 hover:text-green-600 transition-colors px-4 py-2 text-base font-medium",a=s.jsxs(s.Fragment,{children:[s.jsx("a",{href:"#features",className:n,children:"Features"}),s.jsx("a",{href:"#about",className:n,children:"About"}),s.jsx($,{to:"/login",className:n,children:"Login"}),s.jsx($,{to:"/register",className:"ml-2 bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 transition-colors text-base font-medium",children:"Get Started"})]});return s.jsxs("nav",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 backdrop-blur-sm border-b border-gray-200",children:[s.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:s.jsxs("div",{className:"flex justify-between items-center h-16",children:[s.jsx($,{to:"/",className:"text-2xl font-extrabold text-green-600 tracking-tight",children:"Nanwa"}),s.jsx("div",{className:"hidden md:flex items-center gap-4",children:a}),s.jsx("button",{"aria-label":"Toggle menu",className:"md:hidden text-gray-700 hover:text-green-600 focus:outline-none",onClick:r,children:e?s.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}):s.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})})]})}),e&&s.jsx("div",{className:"md:hidden border-t border-gray-200 bg-white px-4 pb-4 space-y-1",children:a})]})},ta=_.section` + background: linear-gradient(135deg, #10b981 0%, #059669 100%); + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + position: relative; + overflow: hidden; +`,ra=_.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); + opacity: 0.3; +`,na=()=>s.jsxs("div",{className:"min-h-screen bg-white",children:[s.jsx(ea,{}),s.jsxs(ta,{className:"pt-20",children:[s.jsx(ra,{}),s.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24",children:s.jsxs("div",{className:"text-center",children:[s.jsxs("h1",{className:"text-4xl md:text-6xl font-bold text-white mb-6",children:["Discover, Monitor & Export",s.jsx("span",{className:"block text-green-200",children:"Real-Time Tree Insights"})]}),s.jsx("p",{className:"text-xl md:text-2xl text-green-100 mb-8 max-w-3xl mx-auto",children:"Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights."}),s.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[s.jsx($,{to:"/register",className:"bg-white text-green-600 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 transition-colors",children:"Start Your Free Trial"}),s.jsx("a",{href:"#features",className:"border-2 border-white text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-white hover:text-green-600 transition-colors",children:"Learn More"})]})]})})]}),s.jsx("section",{id:"features",className:"py-20 bg-gray-50",children:s.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[s.jsxs("div",{className:"text-center mb-16",children:[s.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 mb-4",children:"Powerful Features for Tree Management"}),s.jsx("p",{className:"text-xl text-gray-600 max-w-2xl mx-auto",children:"Everything you need to monitor, analyze, and export tree data with precision and ease."})]}),s.jsxs("div",{className:"grid md:grid-cols-3 gap-8",children:[s.jsxs("div",{className:"bg-white p-8 rounded-xl shadow-lg",children:[s.jsx("div",{className:"w-12 h-12 bg-green-100 rounded-lg flex items-center justify-center mb-6",children:s.jsx("svg",{className:"w-6 h-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})})}),s.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Real-Time Analytics"}),s.jsx("p",{className:"text-gray-600",children:"Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics."})]}),s.jsxs("div",{className:"bg-white p-8 rounded-xl shadow-lg",children:[s.jsx("div",{className:"w-12 h-12 bg-green-100 rounded-lg flex items-center justify-center mb-6",children:s.jsxs("svg",{className:"w-6 h-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]})}),s.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Interactive Mapping"}),s.jsx("p",{className:"text-gray-600",children:"Visualize forests and individual trees with marker clustering and detailed tree information."})]}),s.jsxs("div",{className:"bg-white p-8 rounded-xl shadow-lg",children:[s.jsx("div",{className:"w-12 h-12 bg-green-100 rounded-lg flex items-center justify-center mb-6",children:s.jsx("svg",{className:"w-6 h-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})})}),s.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Data Export"}),s.jsx("p",{className:"text-gray-600",children:"Export filtered datasets to CSV or XLSX format for reporting and analysis."})]})]})]})}),s.jsx("section",{id:"about",className:"py-20 bg-white",children:s.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:s.jsxs("div",{className:"grid md:grid-cols-2 gap-12 items-center",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 mb-6",children:"Empowering Sustainable Forestry"}),s.jsx("p",{className:"text-lg text-gray-600 mb-6",children:"Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects."}),s.jsx("p",{className:"text-lg text-gray-600 mb-8",children:"Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs."}),s.jsx($,{to:"/register",className:"bg-green-600 text-white px-6 py-3 rounded-lg text-lg font-semibold hover:bg-green-700 transition-colors inline-block",children:"Join Nanwa Today"})]}),s.jsx("div",{className:"bg-green-50 p-8 rounded-xl",children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-600 mb-2",children:"10K+"}),s.jsx("div",{className:"text-gray-600",children:"Trees Monitored"})]}),s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-600 mb-2",children:"95%"}),s.jsx("div",{className:"text-gray-600",children:"Survival Rate"})]}),s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-600 mb-2",children:"50+"}),s.jsx("div",{className:"text-gray-600",children:"Forest Projects"})]}),s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-600 mb-2",children:"24/7"}),s.jsx("div",{className:"text-gray-600",children:"Real-Time Data"})]})]})})]})})}),s.jsx("footer",{className:"bg-gray-900 text-white py-12",children:s.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[s.jsxs("div",{className:"grid md:grid-cols-4 gap-8",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"text-2xl font-bold text-green-400 mb-4",children:"Nanwa"}),s.jsx("p",{className:"text-gray-400",children:"Empowering sustainable forestry through data-driven insights and real-time monitoring."})]}),s.jsxs("div",{children:[s.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Product"}),s.jsxs("ul",{className:"space-y-2 text-gray-400",children:[s.jsx("li",{children:s.jsx("a",{href:"#features",className:"hover:text-white transition-colors",children:"Features"})}),s.jsx("li",{children:s.jsx($,{to:"/login",className:"hover:text-white transition-colors",children:"Login"})}),s.jsx("li",{children:s.jsx($,{to:"/register",className:"hover:text-white transition-colors",children:"Register"})})]})]}),s.jsxs("div",{children:[s.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Company"}),s.jsxs("ul",{className:"space-y-2 text-gray-400",children:[s.jsx("li",{children:s.jsx("a",{href:"#about",className:"hover:text-white transition-colors",children:"About"})}),s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Contact"})}),s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Privacy"})})]})]}),s.jsxs("div",{children:[s.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Support"}),s.jsxs("ul",{className:"space-y-2 text-gray-400",children:[s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Help Center"})}),s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Documentation"})}),s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"API"})})]})]})]}),s.jsx("div",{className:"border-t border-gray-800 mt-8 pt-8 text-center text-gray-400",children:s.jsx("p",{children:"© 2024 Nanwa. All rights reserved."})})]})})]}),_r=f.createContext(),Je=()=>{const e=f.useContext(_r);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},sa=({children:e})=>{const[t,r]=f.useState(null),[n,a]=f.useState(!0),o=ze();f.useEffect(()=>{const d=localStorage.getItem("authToken"),m=localStorage.getItem("userData");if(d&&m)try{r(JSON.parse(m))}catch(p){console.error("Error parsing user data:",p),localStorage.removeItem("authToken"),localStorage.removeItem("userData")}a(!1)},[]);const u={user:t,loading:n,login:async(d,m)=>{try{a(!0);const p=await aa(d,m),{token:b,user:v}=p;return localStorage.setItem("authToken",b),localStorage.setItem("userData",JSON.stringify(v)),r(v),o("/dashboard"),{success:!0}}catch(p){return{success:!1,error:p.message}}finally{a(!1)}},register:async(d,m,p)=>{try{if(a(!0),m!==p)throw new Error("Passwords do not match");const b=await oa(d,m),{token:v,user:g}=b;return localStorage.setItem("authToken",v),localStorage.setItem("userData",JSON.stringify(g)),r(g),o("/dashboard"),{success:!0}}catch(b){return{success:!1,error:b.message}}finally{a(!1)}},logout:()=>{localStorage.removeItem("authToken"),localStorage.removeItem("userData"),r(null),o("/")},isAdmin:()=>(t==null?void 0:t.role)==="admin"};return s.jsx(_r.Provider,{value:u,children:e})},aa=async(e,t)=>{if(await new Promise(r=>setTimeout(r,1e3)),!e||!t)throw new Error("Email and password are required");if(e==="admin@nanwa.com"&&t==="admin123")return{token:"mock-jwt-token-admin",user:{id:1,email:"admin@nanwa.com",role:"admin",name:"Admin User"}};if(e==="user@nanwa.com"&&t==="user123")return{token:"mock-jwt-token-user",user:{id:2,email:"user@nanwa.com",role:"user",name:"Regular User"}};throw new Error("Invalid email or password")},oa=async(e,t)=>{if(await new Promise(r=>setTimeout(r,1e3)),!e||!t)throw new Error("Email and password are required");if(t.length<6)throw new Error("Password must be at least 6 characters long");return{token:"mock-jwt-token-new-user",user:{id:Math.floor(Math.random()*1e3),email:e,role:"user",name:e.split("@")[0]}}},ia=_.div` + min-height: 100vh; + background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%); + display: flex; + align-items: center; + justify-content: center; + padding: 1rem; +`,la=_.div` + background: white; + border-radius: 1rem; + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + padding: 2rem; + width: 100%; + max-width: 400px; +`,ca=()=>{const[e,t]=f.useState({email:"",password:""}),[r,n]=f.useState({}),[a,o]=f.useState(!1),[i,c]=f.useState(!1),{login:l}=Je();ze();const h=()=>{const m={};return e.email?/\S+@\S+\.\S+/.test(e.email)||(m.email="Email is invalid"):m.email="Email is required",e.password?e.password.length<6&&(m.password="Password must be at least 6 characters"):m.password="Password is required",n(m),Object.keys(m).length===0},u=m=>{const{name:p,value:b}=m.target;t(v=>({...v,[p]:b})),r[p]&&n(v=>({...v,[p]:""}))},d=async m=>{if(m.preventDefault(),!!h()){o(!0);try{const p=await l(e.email,e.password);p.success||n({general:p.error})}catch{n({general:"An unexpected error occurred. Please try again."})}finally{o(!1)}}};return s.jsx(ia,{children:s.jsxs(la,{children:[s.jsxs("div",{className:"text-center mb-8",children:[s.jsx($,{to:"/",className:"inline-block mb-6",children:s.jsx("h1",{className:"text-3xl font-bold text-green-600",children:"Nanwa"})}),s.jsx("h2",{className:"text-2xl font-bold text-gray-900 mb-2",children:"Welcome back"}),s.jsx("p",{className:"text-gray-600",children:"Sign in to your account to continue"})]}),s.jsxs("form",{onSubmit:d,className:"space-y-6",children:[r.general&&s.jsx("div",{className:"bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded-lg",children:r.general}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"email",className:"block text-sm font-medium text-gray-700 mb-2",children:"Email address"}),s.jsx("input",{type:"email",id:"email",name:"email",value:e.email,onChange:u,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.email?"border-red-300":"border-gray-300"}`,placeholder:"Enter your email",disabled:a,"aria-describedby":r.email?"email-error":void 0}),r.email&&s.jsx("p",{id:"email-error",className:"mt-1 text-sm text-red-600",children:r.email})]}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"password",className:"block text-sm font-medium text-gray-700 mb-2",children:"Password"}),s.jsxs("div",{className:"relative",children:[s.jsx("input",{type:i?"text":"password",id:"password",name:"password",value:e.password,onChange:u,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.password?"border-red-300":"border-gray-300"}`,placeholder:"Enter your password",disabled:a,"aria-describedby":r.password?"password-error":void 0}),s.jsx("button",{type:"button",onClick:()=>c(!i),className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:a,children:i?s.jsx("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})}):s.jsxs("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]})})]}),r.password&&s.jsx("p",{id:"password-error",className:"mt-1 text-sm text-red-600",children:r.password})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center",children:[s.jsx("input",{id:"remember-me",name:"remember-me",type:"checkbox",className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 rounded"}),s.jsx("label",{htmlFor:"remember-me",className:"ml-2 block text-sm text-gray-900",children:"Remember me"})]}),s.jsx("div",{className:"text-sm",children:s.jsx("a",{href:"#",className:"font-medium text-green-600 hover:text-green-500",children:"Forgot your password?"})})]}),s.jsx("button",{type:"submit",disabled:a,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:a?s.jsxs("div",{className:"flex items-center",children:[s.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[s.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),s.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Signing in..."]}):"Sign in"})]}),s.jsx("div",{className:"mt-6 text-center",children:s.jsxs("p",{className:"text-sm text-gray-600",children:["Don't have an account?"," ",s.jsx($,{to:"/register",className:"font-medium text-green-600 hover:text-green-500",children:"Sign up"})]})}),s.jsxs("div",{className:"mt-8 p-4 bg-gray-50 rounded-lg",children:[s.jsx("p",{className:"text-sm text-gray-600 mb-2",children:"Demo credentials:"}),s.jsxs("div",{className:"text-xs text-gray-500 space-y-1",children:[s.jsxs("p",{children:[s.jsx("strong",{children:"Admin:"})," admin@nanwa.com / admin123"]}),s.jsxs("p",{children:[s.jsx("strong",{children:"User:"})," user@nanwa.com / user123"]})]})]})]})})},da=_.div` + min-height: 100vh; + background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%); + display: flex; + align-items: center; + justify-content: center; + padding: 1rem; +`,ua=_.div` + background: white; + border-radius: 1rem; + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + padding: 2rem; + width: 100%; + max-width: 450px; +`,ha=_.div` + width: 100%; + height: 4px; + background-color: #e5e7eb; + border-radius: 2px; + overflow: hidden; + margin-top: 0.5rem; +`,ma=_.div` + height: 100%; + background-color: ${e=>e.strength==="weak"?"#ef4444":e.strength==="medium"?"#f59e0b":e.strength==="strong"?"#10b981":"#e5e7eb"}; + width: ${e=>e.strength==="weak"?"33%":e.strength==="medium"?"66%":e.strength==="strong"?"100%":"0%"}; + transition: all 0.3s ease; +`,fa=()=>{const[e,t]=f.useState({email:"",password:"",confirmPassword:""}),[r,n]=f.useState({}),[a,o]=f.useState(!1),[i,c]=f.useState(!1),[l,h]=f.useState(!1),{register:u}=Je(),m=(x=>{if(!x)return{strength:"none",score:0};let y=0;return x.length>=8&&(y+=1),/[a-z]/.test(x)&&(y+=1),/[A-Z]/.test(x)&&(y+=1),/[0-9]/.test(x)&&(y+=1),/[^A-Za-z0-9]/.test(x)&&(y+=1),y<=2?{strength:"weak",score:y}:y<=3?{strength:"medium",score:y}:{strength:"strong",score:y}})(e.password),p=()=>{const x={};return e.email?/\S+@\S+\.\S+/.test(e.email)||(x.email="Email is invalid"):x.email="Email is required",e.password?e.password.length<6?x.password="Password must be at least 6 characters":m.strength==="weak"&&(x.password="Password is too weak. Include uppercase, lowercase, numbers, and special characters."):x.password="Password is required",e.confirmPassword?e.password!==e.confirmPassword&&(x.confirmPassword="Passwords do not match"):x.confirmPassword="Please confirm your password",n(x),Object.keys(x).length===0},b=x=>{const{name:y,value:w}=x.target;t(N=>({...N,[y]:w})),r[y]&&n(N=>({...N,[y]:""}))},v=async x=>{if(x.preventDefault(),!!p()){o(!0);try{const y=await u(e.email,e.password,e.confirmPassword);y.success||n({general:y.error})}catch{n({general:"An unexpected error occurred. Please try again."})}finally{o(!1)}}},g=()=>{switch(m.strength){case"weak":return"Weak password";case"medium":return"Medium strength password";case"strong":return"Strong password";default:return""}};return s.jsx(da,{children:s.jsxs(ua,{children:[s.jsxs("div",{className:"text-center mb-8",children:[s.jsx($,{to:"/",className:"inline-block mb-6",children:s.jsx("h1",{className:"text-3xl font-bold text-green-600",children:"Nanwa"})}),s.jsx("h2",{className:"text-2xl font-bold text-gray-900 mb-2",children:"Create your account"}),s.jsx("p",{className:"text-gray-600",children:"Join Nanwa to start monitoring your trees"})]}),s.jsxs("form",{onSubmit:v,className:"space-y-6",children:[r.general&&s.jsx("div",{className:"bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded-lg",children:r.general}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"email",className:"block text-sm font-medium text-gray-700 mb-2",children:"Email address"}),s.jsx("input",{type:"email",id:"email",name:"email",value:e.email,onChange:b,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.email?"border-red-300":"border-gray-300"}`,placeholder:"Enter your email",disabled:a,"aria-describedby":r.email?"email-error":void 0}),r.email&&s.jsx("p",{id:"email-error",className:"mt-1 text-sm text-red-600",children:r.email})]}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"password",className:"block text-sm font-medium text-gray-700 mb-2",children:"Password"}),s.jsxs("div",{className:"relative",children:[s.jsx("input",{type:i?"text":"password",id:"password",name:"password",value:e.password,onChange:b,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.password?"border-red-300":"border-gray-300"}`,placeholder:"Create a strong password",disabled:a,"aria-describedby":r.password?"password-error":void 0}),s.jsx("button",{type:"button",onClick:()=>c(!i),className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:a,children:i?s.jsx("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})}):s.jsxs("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]})})]}),e.password&&s.jsxs("div",{className:"mt-2",children:[s.jsx(ha,{children:s.jsx(ma,{strength:m.strength})}),s.jsx("p",{className:`text-xs mt-1 ${m.strength==="weak"?"text-red-600":m.strength==="medium"?"text-yellow-600":m.strength==="strong"?"text-green-600":"text-gray-500"}`,children:g()})]}),r.password&&s.jsx("p",{id:"password-error",className:"mt-1 text-sm text-red-600",children:r.password})]}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"confirmPassword",className:"block text-sm font-medium text-gray-700 mb-2",children:"Confirm password"}),s.jsxs("div",{className:"relative",children:[s.jsx("input",{type:l?"text":"password",id:"confirmPassword",name:"confirmPassword",value:e.confirmPassword,onChange:b,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.confirmPassword?"border-red-300":"border-gray-300"}`,placeholder:"Confirm your password",disabled:a,"aria-describedby":r.confirmPassword?"confirm-password-error":void 0}),s.jsx("button",{type:"button",onClick:()=>h(!l),className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:a,children:l?s.jsx("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})}):s.jsxs("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]})})]}),r.confirmPassword&&s.jsx("p",{id:"confirm-password-error",className:"mt-1 text-sm text-red-600",children:r.confirmPassword})]}),s.jsxs("div",{className:"flex items-center",children:[s.jsx("input",{id:"terms",name:"terms",type:"checkbox",required:!0,className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 rounded"}),s.jsxs("label",{htmlFor:"terms",className:"ml-2 block text-sm text-gray-900",children:["I agree to the"," ",s.jsx("a",{href:"#",className:"font-medium text-green-600 hover:text-green-500",children:"Terms of Service"})," ","and"," ",s.jsx("a",{href:"#",className:"font-medium text-green-600 hover:text-green-500",children:"Privacy Policy"})]})]}),s.jsx("button",{type:"submit",disabled:a,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:a?s.jsxs("div",{className:"flex items-center",children:[s.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[s.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),s.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Creating account..."]}):"Create account"})]}),s.jsx("div",{className:"mt-6 text-center",children:s.jsxs("p",{className:"text-sm text-gray-600",children:["Already have an account?"," ",s.jsx($,{to:"/login",className:"font-medium text-green-600 hover:text-green-500",children:"Sign in"})]})})]})})},pa=_.div` + min-height: 100vh; + background-color: #f9fafb; +`,ga=_.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`,xa=_.aside` + background: white; + border-right: 1px solid #e5e7eb; + width: 250px; + position: fixed; + top: 0; + left: 0; + height: 100vh; + overflow-y: auto; + z-index: 10; +`,va=_.main` + margin-left: 250px; + padding: 2rem; +`,ya=()=>{const{user:e,logout:t,isAdmin:r}=Je(),n=()=>{t()};return s.jsxs(pa,{children:[s.jsx(ga,{children:s.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("div",{className:"flex items-center",children:s.jsx("h1",{className:"text-2xl font-bold text-green-600",children:"Nanwa Dashboard"})}),s.jsxs("div",{className:"flex items-center space-x-4",children:[s.jsxs("div",{className:"text-sm text-gray-700",children:["Welcome, ",s.jsx("span",{className:"font-medium",children:e==null?void 0:e.name}),r()&&s.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 text-red-800 text-xs rounded-full",children:"Admin"})]}),s.jsx("button",{onClick:n,className:"text-gray-700 hover:text-green-600 transition-colors",children:s.jsx("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})})})]})]})})}),s.jsx(xa,{children:s.jsx("div",{className:"p-6",children:s.jsxs("nav",{className:"space-y-2",children:[s.jsxs("a",{href:"#dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 bg-green-50 rounded-lg",children:[s.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),s.jsxs("a",{href:"#map",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[s.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),s.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[s.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),r()&&s.jsxs("a",{href:"#audit",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[s.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})}),s.jsx(va,{children:s.jsxs("div",{className:"max-w-7xl mx-auto",children:[s.jsxs("div",{className:"mb-8",children:[s.jsx("h2",{className:"text-3xl font-bold text-gray-900 mb-2",children:"Welcome to Nanwa"}),s.jsx("p",{className:"text-gray-600",children:"Monitor your forests and track tree growth with real-time insights."})]}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:[s.jsx("div",{className:"bg-white p-6 rounded-lg shadow-sm border border-gray-200",children:s.jsxs("div",{className:"flex items-center",children:[s.jsx("div",{className:"p-2 bg-green-100 rounded-lg",children:s.jsx("svg",{className:"h-6 w-6 text-green-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})})}),s.jsxs("div",{className:"ml-4",children:[s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Total Trees"}),s.jsx("p",{className:"text-2xl font-bold text-gray-900",children:"10,247"})]})]})}),s.jsx("div",{className:"bg-white p-6 rounded-lg shadow-sm border border-gray-200",children:s.jsxs("div",{className:"flex items-center",children:[s.jsx("div",{className:"p-2 bg-blue-100 rounded-lg",children:s.jsx("svg",{className:"h-6 w-6 text-blue-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})})}),s.jsxs("div",{className:"ml-4",children:[s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Survival Rate"}),s.jsx("p",{className:"text-2xl font-bold text-gray-900",children:"95.2%"})]})]})}),s.jsx("div",{className:"bg-white p-6 rounded-lg shadow-sm border border-gray-200",children:s.jsxs("div",{className:"flex items-center",children:[s.jsx("div",{className:"p-2 bg-yellow-100 rounded-lg",children:s.jsx("svg",{className:"h-6 w-6 text-yellow-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"})})}),s.jsxs("div",{className:"ml-4",children:[s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Avg Height"}),s.jsx("p",{className:"text-2xl font-bold text-gray-900",children:"2.4m"})]})]})}),s.jsx("div",{className:"bg-white p-6 rounded-lg shadow-sm border border-gray-200",children:s.jsxs("div",{className:"flex items-center",children:[s.jsx("div",{className:"p-2 bg-purple-100 rounded-lg",children:s.jsx("svg",{className:"h-6 w-6 text-purple-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})})}),s.jsxs("div",{className:"ml-4",children:[s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"CO₂ Absorbed"}),s.jsx("p",{className:"text-2xl font-bold text-gray-900",children:"1.2t"})]})]})})]}),s.jsxs("div",{className:"bg-white p-8 rounded-lg shadow-sm border border-gray-200",children:[s.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Coming Soon"}),s.jsx("p",{className:"text-gray-600 mb-4",children:"The dashboard is currently being developed. Soon you'll be able to:"}),s.jsxs("ul",{className:"space-y-2 text-gray-600",children:[s.jsxs("li",{className:"flex items-center",children:[s.jsx("svg",{className:"h-4 w-4 text-green-500 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"View real-time charts and analytics"]}),s.jsxs("li",{className:"flex items-center",children:[s.jsx("svg",{className:"h-4 w-4 text-green-500 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Explore interactive maps with tree locations"]}),s.jsxs("li",{className:"flex items-center",children:[s.jsx("svg",{className:"h-4 w-4 text-green-500 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Export data in CSV or XLSX format"]}),s.jsxs("li",{className:"flex items-center",children:[s.jsx("svg",{className:"h-4 w-4 text-green-500 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Filter and search through tree data"]})]})]})]})})]})},ba=({children:e})=>{const{user:t,loading:r}=Je();return r?s.jsx("div",{className:"min-h-screen flex items-center justify-center",children:s.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-green-600"})}):t?e:s.jsx(Dn,{to:"/login",replace:!0})},wa=()=>s.jsx(Jn,{children:s.jsx(sa,{children:s.jsxs(zn,{children:[s.jsx(fe,{path:"/",element:s.jsx(na,{})}),s.jsx(fe,{path:"/login",element:s.jsx(ca,{})}),s.jsx(fe,{path:"/register",element:s.jsx(fa,{})}),s.jsx(fe,{path:"/dashboard",element:s.jsx(ba,{children:s.jsx(ya,{})})})]})})});Jr.createRoot(document.getElementById("root")).render(s.jsx(Z.StrictMode,{children:s.jsx(wa,{})})); diff --git a/frontend/dist/assets/vendor-BtP0CW_r.js b/frontend/dist/assets/vendor-BtP0CW_r.js new file mode 100644 index 0000000000..257971db96 --- /dev/null +++ b/frontend/dist/assets/vendor-BtP0CW_r.js @@ -0,0 +1,32 @@ +function Pc(R){return R&&R.__esModule&&Object.prototype.hasOwnProperty.call(R,"default")?R.default:R}var wi={exports:{}},D={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var ga;function kc(){if(ga)return D;ga=1;var R=Symbol.for("react.element"),b=Symbol.for("react.portal"),m=Symbol.for("react.fragment"),dt=Symbol.for("react.strict_mode"),Fe=Symbol.for("react.profiler"),Ke=Symbol.for("react.provider"),Ye=Symbol.for("react.context"),Te=Symbol.for("react.forward_ref"),de=Symbol.for("react.suspense"),je=Symbol.for("react.memo"),ln=Symbol.for("react.lazy"),ie=Symbol.iterator;function ne(f){return f===null||typeof f!="object"?null:(f=ie&&f[ie]||f["@@iterator"],typeof f=="function"?f:null)}var pt={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ue=Object.assign,K={};function B(f,h,M){this.props=f,this.context=h,this.refs=K,this.updater=M||pt}B.prototype.isReactComponent={},B.prototype.setState=function(f,h){if(typeof f!="object"&&typeof f!="function"&&f!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,f,h,"setState")},B.prototype.forceUpdate=function(f){this.updater.enqueueForceUpdate(this,f,"forceUpdate")};function mt(){}mt.prototype=B.prototype;function lt(f,h,M){this.props=f,this.context=h,this.refs=K,this.updater=M||pt}var Xe=lt.prototype=new mt;Xe.constructor=lt,Ue(Xe,B.prototype),Xe.isPureReactComponent=!0;var pe=Array.isArray,Ge=Object.prototype.hasOwnProperty,ge={current:null},ke={key:!0,ref:!0,__self:!0,__source:!0};function Ve(f,h,M){var O,F={},j=null,H=null;if(h!=null)for(O in h.ref!==void 0&&(H=h.ref),h.key!==void 0&&(j=""+h.key),h)Ge.call(h,O)&&!ke.hasOwnProperty(O)&&(F[O]=h[O]);var V=arguments.length-2;if(V===1)F.children=M;else if(1>>1,h=S[f];if(0>>1;fFe(F,C))jFe(H,F)?(S[f]=H,S[j]=C,f=j):(S[f]=F,S[O]=C,f=O);else if(jFe(H,C))S[f]=H,S[j]=C,f=j;else break e}}return T}function Fe(S,T){var C=S.sortIndex-T.sortIndex;return C!==0?C:S.id-T.id}if(typeof performance=="object"&&typeof performance.now=="function"){var Ke=performance;R.unstable_now=function(){return Ke.now()}}else{var Ye=Date,Te=Ye.now();R.unstable_now=function(){return Ye.now()-Te}}var de=[],je=[],ln=1,ie=null,ne=3,pt=!1,Ue=!1,K=!1,B=typeof setTimeout=="function"?setTimeout:null,mt=typeof clearTimeout=="function"?clearTimeout:null,lt=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function Xe(S){for(var T=m(je);T!==null;){if(T.callback===null)dt(je);else if(T.startTime<=S)dt(je),T.sortIndex=T.expirationTime,b(de,T);else break;T=m(je)}}function pe(S){if(K=!1,Xe(S),!Ue)if(m(de)!==null)Ue=!0,Ee(Ge);else{var T=m(je);T!==null&&J(pe,T.startTime-S)}}function Ge(S,T){Ue=!1,K&&(K=!1,mt(Ve),Ve=-1),pt=!0;var C=ne;try{for(Xe(T),ie=m(de);ie!==null&&(!(ie.expirationTime>T)||S&&!$t());){var f=ie.callback;if(typeof f=="function"){ie.callback=null,ne=ie.priorityLevel;var h=f(ie.expirationTime<=T);T=R.unstable_now(),typeof h=="function"?ie.callback=h:ie===m(de)&&dt(de),Xe(T)}else dt(de);ie=m(de)}if(ie!==null)var M=!0;else{var O=m(je);O!==null&&J(pe,O.startTime-T),M=!1}return M}finally{ie=null,ne=C,pt=!1}}var ge=!1,ke=null,Ve=-1,_t=5,vt=-1;function $t(){return!(R.unstable_now()-vt<_t)}function ut(){if(ke!==null){var S=R.unstable_now();vt=S;var T=!0;try{T=ke(!0,S)}finally{T?Le():(ge=!1,ke=null)}}else ge=!1}var Le;if(typeof lt=="function")Le=function(){lt(ut)};else if(typeof MessageChannel<"u"){var Ze=new MessageChannel,it=Ze.port2;Ze.port1.onmessage=ut,Le=function(){it.postMessage(null)}}else Le=function(){B(ut,0)};function Ee(S){ke=S,ge||(ge=!0,Le())}function J(S,T){Ve=B(function(){S(R.unstable_now())},T)}R.unstable_IdlePriority=5,R.unstable_ImmediatePriority=1,R.unstable_LowPriority=4,R.unstable_NormalPriority=3,R.unstable_Profiling=null,R.unstable_UserBlockingPriority=2,R.unstable_cancelCallback=function(S){S.callback=null},R.unstable_continueExecution=function(){Ue||pt||(Ue=!0,Ee(Ge))},R.unstable_forceFrameRate=function(S){0>S||125f?(S.sortIndex=C,b(je,S),m(de)===null&&S===m(je)&&(K?(mt(Ve),Ve=-1):K=!0,J(pe,C-f))):(S.sortIndex=h,b(de,S),Ue||pt||(Ue=!0,Ee(Ge))),S},R.unstable_shouldYield=$t,R.unstable_wrapCallback=function(S){var T=ne;return function(){var C=ne;ne=T;try{return S.apply(this,arguments)}finally{ne=C}}}}(Ei)),Ei}var ka;function _c(){return ka||(ka=1,ki.exports=Cc()),ki.exports}/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Ea;function xc(){if(Ea)return ze;Ea=1;var R=Ec(),b=_c();function m(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),de=Object.prototype.hasOwnProperty,je=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,ln={},ie={};function ne(e){return de.call(ie,e)?!0:de.call(ln,e)?!1:je.test(e)?ie[e]=!0:(ln[e]=!0,!1)}function pt(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Ue(e,t,n,r){if(t===null||typeof t>"u"||pt(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function K(e,t,n,r,l,u,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=u,this.removeEmptyString=i}var B={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){B[e]=new K(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];B[t]=new K(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){B[e]=new K(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){B[e]=new K(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){B[e]=new K(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){B[e]=new K(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){B[e]=new K(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){B[e]=new K(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){B[e]=new K(e,5,!1,e.toLowerCase(),null,!1,!1)});var mt=/[\-:]([a-z])/g;function lt(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(mt,lt);B[t]=new K(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(mt,lt);B[t]=new K(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(mt,lt);B[t]=new K(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){B[e]=new K(e,1,!1,e.toLowerCase(),null,!1,!1)}),B.xlinkHref=new K("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){B[e]=new K(e,1,!1,e.toLowerCase(),null,!0,!0)});function Xe(e,t,n,r){var l=B.hasOwnProperty(t)?B[t]:null;(l!==null?l.type!==0:r||!(2o||l[i]!==u[o]){var s=` +`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=o);break}}}finally{M=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?h(e):""}function F(e){switch(e.tag){case 5:return h(e.type);case 16:return h("Lazy");case 13:return h("Suspense");case 19:return h("SuspenseList");case 0:case 2:case 15:return e=O(e.type,!1),e;case 11:return e=O(e.type.render,!1),e;case 1:return e=O(e.type,!0),e;default:return""}}function j(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case ke:return"Fragment";case ge:return"Portal";case _t:return"Profiler";case Ve:return"StrictMode";case Le:return"Suspense";case Ze:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case $t:return(e.displayName||"Context")+".Consumer";case vt:return(e._context.displayName||"Context")+".Provider";case ut:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case it:return t=e.displayName||null,t!==null?t:j(e.type)||"Memo";case Ee:t=e._payload,e=e._init;try{return j(e(t))}catch{}}return null}function H(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return j(t);case 8:return t===Ve?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function V(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Y(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Re(e){var t=Y(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,u=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,u.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function hr(e){e._valueTracker||(e._valueTracker=Re(e))}function Ci(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Y(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function yr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Pl(e,t){var n=t.checked;return C({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function _i(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=V(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function xi(e,t){t=t.checked,t!=null&&Xe(e,"checked",t,!1)}function Nl(e,t){xi(e,t);var n=V(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?zl(e,t.type,n):t.hasOwnProperty("defaultValue")&&zl(e,t.type,V(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Pi(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function zl(e,t,n){(t!=="number"||yr(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Rn=Array.isArray;function un(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=gr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Mn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Dn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},_a=["Webkit","ms","Moz","O"];Object.keys(Dn).forEach(function(e){_a.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Dn[t]=Dn[e]})});function Mi(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Dn.hasOwnProperty(e)&&Dn[e]?(""+t).trim():t+"px"}function Di(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=Mi(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var xa=C({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Rl(e,t){if(t){if(xa[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(m(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(m(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(m(61))}if(t.style!=null&&typeof t.style!="object")throw Error(m(62))}}function Ml(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Dl=null;function Ol(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Il=null,on=null,sn=null;function Oi(e){if(e=tr(e)){if(typeof Il!="function")throw Error(m(280));var t=e.stateNode;t&&(t=Br(t),Il(e.stateNode,e.type,t))}}function Ii(e){on?sn?sn.push(e):sn=[e]:on=e}function Fi(){if(on){var e=on,t=sn;if(sn=on=null,Oi(e),t)for(e=0;e>>=0,e===0?32:31-(Fa(e)/ja|0)|0}var Cr=64,_r=4194304;function jn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function xr(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,u=e.pingedLanes,i=n&268435455;if(i!==0){var o=i&~l;o!==0?r=jn(o):(u&=i,u!==0&&(r=jn(u)))}else i=n&~l,i!==0?r=jn(i):u!==0&&(r=jn(u));if(r===0)return 0;if(t!==0&&t!==r&&(t&l)===0&&(l=r&-r,u=t&-t,l>=u||l===16&&(u&4194240)!==0))return t;if((r&4)!==0&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Un(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Je(t),e[t]=n}function Ba(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Kn),fo=" ",co=!1;function po(e,t){switch(e){case"keyup":return hf.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function mo(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var cn=!1;function gf(e,t){switch(e){case"compositionend":return mo(t);case"keypress":return t.which!==32?null:(co=!0,fo);case"textInput":return e=t.data,e===fo&&co?null:e;default:return null}}function wf(e,t){if(cn)return e==="compositionend"||!bl&&po(e,t)?(e=lo(),Lr=Yl=Tt=null,cn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ko(n)}}function Co(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Co(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function _o(){for(var e=window,t=yr();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=yr(e.document)}return t}function nu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function zf(e){var t=_o(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Co(n.ownerDocument.documentElement,n)){if(r!==null&&nu(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,u=Math.min(r.start,l);r=r.end===void 0?u:Math.min(r.end,l),!e.extend&&u>r&&(l=r,r=u,u=l),l=Eo(n,u);var i=Eo(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),u>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,dn=null,ru=null,Zn=null,lu=!1;function xo(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;lu||dn==null||dn!==yr(r)||(r=dn,"selectionStart"in r&&nu(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Zn&&Gn(Zn,r)||(Zn=r,r=Ur(ru,"onSelect"),0yn||(e.current=hu[yn],hu[yn]=null,yn--)}function W(e,t){yn++,hu[yn]=e.current,e.current=t}var Dt={},me=Mt(Dt),Ce=Mt(!1),Yt=Dt;function gn(e,t){var n=e.type.contextTypes;if(!n)return Dt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},u;for(u in n)l[u]=t[u];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function _e(e){return e=e.childContextTypes,e!=null}function Hr(){Q(Ce),Q(me)}function Ao(e,t,n){if(me.current!==Dt)throw Error(m(168));W(me,t),W(Ce,n)}function Bo(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(m(108,H(e)||"Unknown",l));return C({},n,r)}function Wr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Dt,Yt=me.current,W(me,e),W(Ce,Ce.current),!0}function Ho(e,t,n){var r=e.stateNode;if(!r)throw Error(m(169));n?(e=Bo(e,t,Yt),r.__reactInternalMemoizedMergedChildContext=e,Q(Ce),Q(me),W(me,e)):Q(Ce),W(Ce,n)}var yt=null,$r=!1,yu=!1;function Wo(e){yt===null?yt=[e]:yt.push(e)}function Af(e){$r=!0,Wo(e)}function Ot(){if(!yu&&yt!==null){yu=!0;var e=0,t=A;try{var n=yt;for(A=1;e>=i,l-=i,gt=1<<32-Je(t)+l|n<L?(ae=z,z=null):ae=z.sibling;var U=v(c,z,d[L],w);if(U===null){z===null&&(z=ae);break}e&&z&&U.alternate===null&&t(c,z),a=u(U,a,L),N===null?P=U:N.sibling=U,N=U,z=ae}if(L===d.length)return n(c,z),X&&Gt(c,L),P;if(z===null){for(;LL?(ae=z,z=null):ae=z.sibling;var Wt=v(c,z,U.value,w);if(Wt===null){z===null&&(z=ae);break}e&&z&&Wt.alternate===null&&t(c,z),a=u(Wt,a,L),N===null?P=Wt:N.sibling=Wt,N=Wt,z=ae}if(U.done)return n(c,z),X&&Gt(c,L),P;if(z===null){for(;!U.done;L++,U=d.next())U=g(c,U.value,w),U!==null&&(a=u(U,a,L),N===null?P=U:N.sibling=U,N=U);return X&&Gt(c,L),P}for(z=r(c,z);!U.done;L++,U=d.next())U=k(z,c,L,U.value,w),U!==null&&(e&&U.alternate!==null&&z.delete(U.key===null?L:U.key),a=u(U,a,L),N===null?P=U:N.sibling=U,N=U);return e&&z.forEach(function(Sc){return t(c,Sc)}),X&&Gt(c,L),P}function te(c,a,d,w){if(typeof d=="object"&&d!==null&&d.type===ke&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case Ge:e:{for(var P=d.key,N=a;N!==null;){if(N.key===P){if(P=d.type,P===ke){if(N.tag===7){n(c,N.sibling),a=l(N,d.props.children),a.return=c,c=a;break e}}else if(N.elementType===P||typeof P=="object"&&P!==null&&P.$$typeof===Ee&&Go(P)===N.type){n(c,N.sibling),a=l(N,d.props),a.ref=nr(c,N,d),a.return=c,c=a;break e}n(c,N);break}else t(c,N);N=N.sibling}d.type===ke?(a=rn(d.props.children,c.mode,w,d.key),a.return=c,c=a):(w=gl(d.type,d.key,d.props,null,c.mode,w),w.ref=nr(c,a,d),w.return=c,c=w)}return i(c);case ge:e:{for(N=d.key;a!==null;){if(a.key===N)if(a.tag===4&&a.stateNode.containerInfo===d.containerInfo&&a.stateNode.implementation===d.implementation){n(c,a.sibling),a=l(a,d.children||[]),a.return=c,c=a;break e}else{n(c,a);break}else t(c,a);a=a.sibling}a=mi(d,c.mode,w),a.return=c,c=a}return i(c);case Ee:return N=d._init,te(c,a,N(d._payload),w)}if(Rn(d))return _(c,a,d,w);if(T(d))return x(c,a,d,w);Xr(c,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,a!==null&&a.tag===6?(n(c,a.sibling),a=l(a,d),a.return=c,c=a):(n(c,a),a=pi(d,c.mode,w),a.return=c,c=a),i(c)):n(c,a)}return te}var En=Zo(!0),Jo=Zo(!1),Gr=Mt(null),Zr=null,Cn=null,Cu=null;function _u(){Cu=Cn=Zr=null}function xu(e){var t=Gr.current;Q(Gr),e._currentValue=t}function Pu(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function _n(e,t){Zr=e,Cu=Cn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(xe=!0),e.firstContext=null)}function He(e){var t=e._currentValue;if(Cu!==e)if(e={context:e,memoizedValue:t,next:null},Cn===null){if(Zr===null)throw Error(m(308));Cn=e,Zr.dependencies={lanes:0,firstContext:e}}else Cn=Cn.next=e;return t}var Zt=null;function Nu(e){Zt===null?Zt=[e]:Zt.push(e)}function qo(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,Nu(t)):(n.next=l.next,l.next=n),t.interleaved=n,St(e,r)}function St(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var It=!1;function zu(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function bo(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function kt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ft(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,(I&2)!==0){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,St(e,n)}return l=r.interleaved,l===null?(t.next=t,Nu(r)):(t.next=l.next,l.next=t),r.interleaved=t,St(e,n)}function Jr(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Hl(e,n)}}function es(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,u=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};u===null?l=u=i:u=u.next=i,n=n.next}while(n!==null);u===null?l=u=t:u=u.next=t}else l=u=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:u,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function qr(e,t,n,r){var l=e.updateQueue;It=!1;var u=l.firstBaseUpdate,i=l.lastBaseUpdate,o=l.shared.pending;if(o!==null){l.shared.pending=null;var s=o,p=s.next;s.next=null,i===null?u=p:i.next=p,i=s;var y=e.alternate;y!==null&&(y=y.updateQueue,o=y.lastBaseUpdate,o!==i&&(o===null?y.firstBaseUpdate=p:o.next=p,y.lastBaseUpdate=s))}if(u!==null){var g=l.baseState;i=0,y=p=s=null,o=u;do{var v=o.lane,k=o.eventTime;if((r&v)===v){y!==null&&(y=y.next={eventTime:k,lane:0,tag:o.tag,payload:o.payload,callback:o.callback,next:null});e:{var _=e,x=o;switch(v=t,k=n,x.tag){case 1:if(_=x.payload,typeof _=="function"){g=_.call(k,g,v);break e}g=_;break e;case 3:_.flags=_.flags&-65537|128;case 0:if(_=x.payload,v=typeof _=="function"?_.call(k,g,v):_,v==null)break e;g=C({},g,v);break e;case 2:It=!0}}o.callback!==null&&o.lane!==0&&(e.flags|=64,v=l.effects,v===null?l.effects=[o]:v.push(o))}else k={eventTime:k,lane:v,tag:o.tag,payload:o.payload,callback:o.callback,next:null},y===null?(p=y=k,s=g):y=y.next=k,i|=v;if(o=o.next,o===null){if(o=l.shared.pending,o===null)break;v=o,o=v.next,v.next=null,l.lastBaseUpdate=v,l.shared.pending=null}}while(!0);if(y===null&&(s=g),l.baseState=s,l.firstBaseUpdate=p,l.lastBaseUpdate=y,t=l.shared.interleaved,t!==null){l=t;do i|=l.lane,l=l.next;while(l!==t)}else u===null&&(l.shared.lanes=0);bt|=i,e.lanes=i,e.memoizedState=g}}function ts(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Du.transition;Du.transition={};try{e(!1),t()}finally{A=n,Du.transition=r}}function Ss(){return We().memoizedState}function $f(e,t,n){var r=At(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},ks(e))Es(t,n);else if(n=qo(e,t,n,r),n!==null){var l=Se();rt(n,e,r,l),Cs(n,t,r)}}function Qf(e,t,n){var r=At(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(ks(e))Es(t,l);else{var u=e.alternate;if(e.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var i=t.lastRenderedState,o=u(i,n);if(l.hasEagerState=!0,l.eagerState=o,qe(o,i)){var s=t.interleaved;s===null?(l.next=l,Nu(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=qo(e,t,l,r),n!==null&&(l=Se(),rt(n,e,r,l),Cs(n,t,r))}}function ks(e){var t=e.alternate;return e===Z||t!==null&&t===Z}function Es(e,t){ir=tl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Cs(e,t,n){if((n&4194240)!==0){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Hl(e,n)}}var ll={readContext:He,useCallback:ve,useContext:ve,useEffect:ve,useImperativeHandle:ve,useInsertionEffect:ve,useLayoutEffect:ve,useMemo:ve,useReducer:ve,useRef:ve,useState:ve,useDebugValue:ve,useDeferredValue:ve,useTransition:ve,useMutableSource:ve,useSyncExternalStore:ve,useId:ve,unstable_isNewReconciler:!1},Kf={readContext:He,useCallback:function(e,t){return ft().memoizedState=[e,t===void 0?null:t],e},useContext:He,useEffect:ds,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,nl(4194308,4,vs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return nl(4194308,4,e,t)},useInsertionEffect:function(e,t){return nl(4,2,e,t)},useMemo:function(e,t){var n=ft();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ft();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=$f.bind(null,Z,e),[r.memoizedState,e]},useRef:function(e){var t=ft();return e={current:e},t.memoizedState=e},useState:fs,useDebugValue:Au,useDeferredValue:function(e){return ft().memoizedState=e},useTransition:function(){var e=fs(!1),t=e[0];return e=Wf.bind(null,e[1]),ft().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Z,l=ft();if(X){if(n===void 0)throw Error(m(407));n=n()}else{if(n=t(),se===null)throw Error(m(349));(qt&30)!==0||us(r,t,n)}l.memoizedState=n;var u={value:n,getSnapshot:t};return l.queue=u,ds(os.bind(null,r,u,e),[e]),r.flags|=2048,ar(9,is.bind(null,r,u,n,t),void 0,null),n},useId:function(){var e=ft(),t=se.identifierPrefix;if(X){var n=wt,r=gt;n=(r&~(1<<32-Je(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=or++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[st]=t,e[er]=r,Ws(e,t,!1,!1),t.stateNode=e;e:{switch(i=Ml(n,r),n){case"dialog":$("cancel",e),$("close",e),l=r;break;case"iframe":case"object":case"embed":$("load",e),l=r;break;case"video":case"audio":for(l=0;lTn&&(t.flags|=128,r=!0,fr(u,!1),t.lanes=4194304)}else{if(!r)if(e=br(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),fr(u,!0),u.tail===null&&u.tailMode==="hidden"&&!i.alternate&&!X)return he(t),null}else 2*ee()-u.renderingStartTime>Tn&&n!==1073741824&&(t.flags|=128,r=!0,fr(u,!1),t.lanes=4194304);u.isBackwards?(i.sibling=t.child,t.child=i):(n=u.last,n!==null?n.sibling=i:t.child=i,u.last=i)}return u.tail!==null?(t=u.tail,u.rendering=t,u.tail=t.sibling,u.renderingStartTime=ee(),t.sibling=null,n=G.current,W(G,r?n&1|2:n&1),t):(he(t),null);case 22:case 23:return fi(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&(t.mode&1)!==0?(Ie&1073741824)!==0&&(he(t),t.subtreeFlags&6&&(t.flags|=8192)):he(t),null;case 24:return null;case 25:return null}throw Error(m(156,t.tag))}function ec(e,t){switch(wu(t),t.tag){case 1:return _e(t.type)&&Hr(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return xn(),Q(Ce),Q(me),Mu(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Lu(t),null;case 13:if(Q(G),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(m(340));kn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Q(G),null;case 4:return xn(),null;case 10:return xu(t.type._context),null;case 22:case 23:return fi(),null;case 24:return null;default:return null}}var sl=!1,ye=!1,tc=typeof WeakSet=="function"?WeakSet:Set,E=null;function Nn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){q(e,t,r)}else n.current=null}function qu(e,t,n){try{n()}catch(r){q(e,t,r)}}var Ks=!1;function nc(e,t){if(fu=zr,e=_o(),nu(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,u=r.focusNode;r=r.focusOffset;try{n.nodeType,u.nodeType}catch{n=null;break e}var i=0,o=-1,s=-1,p=0,y=0,g=e,v=null;t:for(;;){for(var k;g!==n||l!==0&&g.nodeType!==3||(o=i+l),g!==u||r!==0&&g.nodeType!==3||(s=i+r),g.nodeType===3&&(i+=g.nodeValue.length),(k=g.firstChild)!==null;)v=g,g=k;for(;;){if(g===e)break t;if(v===n&&++p===l&&(o=i),v===u&&++y===r&&(s=i),(k=g.nextSibling)!==null)break;g=v,v=g.parentNode}g=k}n=o===-1||s===-1?null:{start:o,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(cu={focusedElem:e,selectionRange:n},zr=!1,E=t;E!==null;)if(t=E,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,E=e;else for(;E!==null;){t=E;try{var _=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(_!==null){var x=_.memoizedProps,te=_.memoizedState,c=t.stateNode,a=c.getSnapshotBeforeUpdate(t.elementType===t.type?x:et(t.type,x),te);c.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(m(163))}}catch(w){q(t,t.return,w)}if(e=t.sibling,e!==null){e.return=t.return,E=e;break}E=t.return}return _=Ks,Ks=!1,_}function cr(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var u=l.destroy;l.destroy=void 0,u!==void 0&&qu(t,n,u)}l=l.next}while(l!==r)}}function al(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function bu(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Ys(e){var t=e.alternate;t!==null&&(e.alternate=null,Ys(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[st],delete t[er],delete t[vu],delete t[Uf],delete t[Vf])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Xs(e){return e.tag===5||e.tag===3||e.tag===4}function Gs(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Xs(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function ei(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Ar));else if(r!==4&&(e=e.child,e!==null))for(ei(e,t,n),e=e.sibling;e!==null;)ei(e,t,n),e=e.sibling}function ti(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(ti(e,t,n),e=e.sibling;e!==null;)ti(e,t,n),e=e.sibling}var fe=null,tt=!1;function jt(e,t,n){for(n=n.child;n!==null;)Zs(e,t,n),n=n.sibling}function Zs(e,t,n){if(ot&&typeof ot.onCommitFiberUnmount=="function")try{ot.onCommitFiberUnmount(Er,n)}catch{}switch(n.tag){case 5:ye||Nn(n,t);case 6:var r=fe,l=tt;fe=null,jt(e,t,n),fe=r,tt=l,fe!==null&&(tt?(e=fe,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):fe.removeChild(n.stateNode));break;case 18:fe!==null&&(tt?(e=fe,n=n.stateNode,e.nodeType===8?mu(e.parentNode,n):e.nodeType===1&&mu(e,n),Wn(e)):mu(fe,n.stateNode));break;case 4:r=fe,l=tt,fe=n.stateNode.containerInfo,tt=!0,jt(e,t,n),fe=r,tt=l;break;case 0:case 11:case 14:case 15:if(!ye&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var u=l,i=u.destroy;u=u.tag,i!==void 0&&((u&2)!==0||(u&4)!==0)&&qu(n,t,i),l=l.next}while(l!==r)}jt(e,t,n);break;case 1:if(!ye&&(Nn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(o){q(n,t,o)}jt(e,t,n);break;case 21:jt(e,t,n);break;case 22:n.mode&1?(ye=(r=ye)||n.memoizedState!==null,jt(e,t,n),ye=r):jt(e,t,n);break;default:jt(e,t,n)}}function Js(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new tc),t.forEach(function(r){var l=cc.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function nt(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~u}if(r=l,r=ee()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*lc(r/1960))-r,10e?16:e,Vt===null)var r=!1;else{if(e=Vt,Vt=null,ml=0,(I&6)!==0)throw Error(m(331));var l=I;for(I|=4,E=e.current;E!==null;){var u=E,i=u.child;if((E.flags&16)!==0){var o=u.deletions;if(o!==null){for(var s=0;see()-li?tn(e,0):ri|=n),Ne(e,t)}function fa(e,t){t===0&&((e.mode&1)===0?t=1:(t=_r,_r<<=1,(_r&130023424)===0&&(_r=4194304)));var n=Se();e=St(e,t),e!==null&&(Un(e,t,n),Ne(e,n))}function fc(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),fa(e,n)}function cc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(m(314))}r!==null&&r.delete(t),fa(e,n)}var ca;ca=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ce.current)xe=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return xe=!1,qf(e,t,n);xe=(e.flags&131072)!==0}else xe=!1,X&&(t.flags&1048576)!==0&&$o(t,Kr,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;ol(e,t),e=t.pendingProps;var l=gn(t,me.current);_n(t,n),l=Iu(null,t,r,e,l,n);var u=Fu();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,_e(r)?(u=!0,Wr(t)):u=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,zu(t),l.updater=ul,t.stateNode=l,l._reactInternals=t,Hu(t,r,e,n),t=Ku(null,t,r,!0,u,n)):(t.tag=0,X&&u&&gu(t),we(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(ol(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=pc(r),e=et(r,e),l){case 0:t=Qu(null,t,r,e,n);break e;case 1:t=js(null,t,r,e,n);break e;case 11:t=Ms(null,t,r,e,n);break e;case 14:t=Ds(null,t,r,et(r.type,e),n);break e}throw Error(m(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:et(r,l),Qu(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:et(r,l),js(e,t,r,l,n);case 3:e:{if(Us(t),e===null)throw Error(m(387));r=t.pendingProps,u=t.memoizedState,l=u.element,bo(e,t),qr(t,r,null,n);var i=t.memoizedState;if(r=i.element,u.isDehydrated)if(u={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=u,t.memoizedState=u,t.flags&256){l=Pn(Error(m(423)),t),t=Vs(e,t,r,n,l);break e}else if(r!==l){l=Pn(Error(m(424)),t),t=Vs(e,t,r,n,l);break e}else for(Oe=Rt(t.stateNode.containerInfo.firstChild),De=t,X=!0,be=null,n=Jo(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(kn(),r===l){t=Et(e,t,n);break e}we(e,t,r,n)}t=t.child}return t;case 5:return ns(t),e===null&&ku(t),r=t.type,l=t.pendingProps,u=e!==null?e.memoizedProps:null,i=l.children,du(r,l)?i=null:u!==null&&du(r,u)&&(t.flags|=32),Fs(e,t),we(e,t,i,n),t.child;case 6:return e===null&&ku(t),null;case 13:return As(e,t,n);case 4:return Tu(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=En(t,null,r,n):we(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:et(r,l),Ms(e,t,r,l,n);case 7:return we(e,t,t.pendingProps,n),t.child;case 8:return we(e,t,t.pendingProps.children,n),t.child;case 12:return we(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,u=t.memoizedProps,i=l.value,W(Gr,r._currentValue),r._currentValue=i,u!==null)if(qe(u.value,i)){if(u.children===l.children&&!Ce.current){t=Et(e,t,n);break e}}else for(u=t.child,u!==null&&(u.return=t);u!==null;){var o=u.dependencies;if(o!==null){i=u.child;for(var s=o.firstContext;s!==null;){if(s.context===r){if(u.tag===1){s=kt(-1,n&-n),s.tag=2;var p=u.updateQueue;if(p!==null){p=p.shared;var y=p.pending;y===null?s.next=s:(s.next=y.next,y.next=s),p.pending=s}}u.lanes|=n,s=u.alternate,s!==null&&(s.lanes|=n),Pu(u.return,n,t),o.lanes|=n;break}s=s.next}}else if(u.tag===10)i=u.type===t.type?null:u.child;else if(u.tag===18){if(i=u.return,i===null)throw Error(m(341));i.lanes|=n,o=i.alternate,o!==null&&(o.lanes|=n),Pu(i,n,t),i=u.sibling}else i=u.child;if(i!==null)i.return=u;else for(i=u;i!==null;){if(i===t){i=null;break}if(u=i.sibling,u!==null){u.return=i.return,i=u;break}i=i.return}u=i}we(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,_n(t,n),l=He(l),r=r(l),t.flags|=1,we(e,t,r,n),t.child;case 14:return r=t.type,l=et(r,t.pendingProps),l=et(r.type,l),Ds(e,t,r,l,n);case 15:return Os(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:et(r,l),ol(e,t),t.tag=1,_e(r)?(e=!0,Wr(t)):e=!1,_n(t,n),xs(t,r,l),Hu(t,r,l,n),Ku(null,t,r,!0,e,n);case 19:return Hs(e,t,n);case 22:return Is(e,t,n)}throw Error(m(156,t.tag))};function da(e,t){return $i(e,t)}function dc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Qe(e,t,n,r){return new dc(e,t,n,r)}function di(e){return e=e.prototype,!(!e||!e.isReactComponent)}function pc(e){if(typeof e=="function")return di(e)?1:0;if(e!=null){if(e=e.$$typeof,e===ut)return 11;if(e===it)return 14}return 2}function Ht(e,t){var n=e.alternate;return n===null?(n=Qe(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function gl(e,t,n,r,l,u){var i=2;if(r=e,typeof e=="function")di(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case ke:return rn(n.children,l,u,t);case Ve:i=8,l|=8;break;case _t:return e=Qe(12,n,t,l|2),e.elementType=_t,e.lanes=u,e;case Le:return e=Qe(13,n,t,l),e.elementType=Le,e.lanes=u,e;case Ze:return e=Qe(19,n,t,l),e.elementType=Ze,e.lanes=u,e;case J:return wl(n,l,u,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case vt:i=10;break e;case $t:i=9;break e;case ut:i=11;break e;case it:i=14;break e;case Ee:i=16,r=null;break e}throw Error(m(130,e==null?e:typeof e,""))}return t=Qe(i,n,t,l),t.elementType=e,t.type=r,t.lanes=u,t}function rn(e,t,n,r){return e=Qe(7,e,r,t),e.lanes=n,e}function wl(e,t,n,r){return e=Qe(22,e,r,t),e.elementType=J,e.lanes=n,e.stateNode={isHidden:!1},e}function pi(e,t,n){return e=Qe(6,e,null,t),e.lanes=n,e}function mi(e,t,n){return t=Qe(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function mc(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Bl(0),this.expirationTimes=Bl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Bl(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function vi(e,t,n,r,l,u,i,o,s){return e=new mc(e,t,n,o,s),t===1?(t=1,u===!0&&(t|=8)):t=0,u=Qe(3,null,null,t),e.current=u,u.stateNode=e,u.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},zu(u),e}function vc(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(R)}catch(b){console.error(b)}}return R(),Si.exports=xc(),Si.exports}export{Nc as a,Pc as g,Ec as r}; diff --git a/frontend/dist/index.html b/frontend/dist/index.html new file mode 100644 index 0000000000..54085eb331 --- /dev/null +++ b/frontend/dist/index.html @@ -0,0 +1,15 @@ + + + + + + + Technigo React Vite Boiler Plate + + + + + +
+ + diff --git a/frontend/dist/vite.svg b/frontend/dist/vite.svg new file mode 100644 index 0000000000..e7b8dfb1b2 --- /dev/null +++ b/frontend/dist/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index 7b2747e949..a54983467c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,20 +7,44 @@ "dev": "vite", "build": "vite build", "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" + "lint:fix": "eslint . --ext js,jsx --fix", + "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"", + "format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"", + "preview": "vite preview", + "prepare": "husky install", + "test": "vitest --config config/vitest.config.js", + "test:ui": "vitest --ui --config config/vitest.config.js" }, "dependencies": { + "autoprefixer": "^10.4.14", + "clsx": "^2.0.0", + "postcss": "^8.4.24", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.14.0", + "styled-components": "^6.1.19", + "tailwindcss": "^3.3.0", + "zustand": "^4.4.0" }, "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", "@vitejs/plugin-react": "^4.0.3", + "concurrently": "^9.2.0", "eslint": "^8.45.0", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", - "vite": "^6.3.5" + "husky": "^8.0.3", + "jsdom": "^22.1.0", + "lint-staged": "^13.2.3", + "prettier": "^3.0.0", + "vite": "^6.3.5", + "vitest": "^0.34.0" + }, + "msw": { + "workerDirectory": "public" } } diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 0a24275e6e..0e69f49ae9 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,8 +1,34 @@ -export const App = () => { +import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; +import { LandingPage } from './pages/LandingPage'; +import { LoginPage } from './pages/LoginPage'; +import { RegisterPage } from './pages/RegisterPage'; +import { DashboardPage } from './pages/DashboardPage'; +import { ProtectedRoute } from './components/auth/ProtectedRoute'; +import { AuthProvider } from './contexts/AuthContext'; +export const App = () => { return ( - <> -

Welcome to Final Project!

- + + + + } /> + } /> + } /> + + + + } + /> + + + ); }; diff --git a/frontend/src/components/auth/ProtectedRoute.jsx b/frontend/src/components/auth/ProtectedRoute.jsx new file mode 100644 index 0000000000..4738d4c084 --- /dev/null +++ b/frontend/src/components/auth/ProtectedRoute.jsx @@ -0,0 +1,20 @@ +import { Navigate } from 'react-router-dom'; +import { useAuth } from '../../contexts/AuthContext'; + +export const ProtectedRoute = ({ children }) => { + const { user, loading } = useAuth(); + + if (loading) { + return ( +
+
+
+ ); + } + + if (!user) { + return ; + } + + return children; +}; \ No newline at end of file diff --git a/frontend/src/components/ui/Button.jsx b/frontend/src/components/ui/Button.jsx new file mode 100644 index 0000000000..d70601ef1c --- /dev/null +++ b/frontend/src/components/ui/Button.jsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { cn } from '@/lib/utils'; + +const buttonVariants = { + primary: 'btn-primary', + secondary: 'btn-secondary', + outline: 'btn-outline', +}; + +const buttonSizes = { + sm: 'h-8 px-3 text-xs', + md: 'h-10 px-4 py-2', + lg: 'h-12 px-8', +}; + +export const Button = React.forwardRef( + ({ className, variant = 'primary', size = 'md', ...props }, ref) => { + return ( + + + + + {/* Mobile Menu Dropdown */} + {open &&
{menuItems}
} + + ); +}; \ No newline at end of file diff --git a/frontend/src/contexts/AuthContext.jsx b/frontend/src/contexts/AuthContext.jsx new file mode 100644 index 0000000000..9f97c27dd6 --- /dev/null +++ b/frontend/src/contexts/AuthContext.jsx @@ -0,0 +1,174 @@ +import { createContext, useContext, useState, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; + +const AuthContext = createContext(); + +export const useAuth = () => { + const context = useContext(AuthContext); + if (!context) { + throw new Error('useAuth must be used within an AuthProvider'); + } + return context; +}; + +export const AuthProvider = ({ children }) => { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + const navigate = useNavigate(); + + // Check for existing token on app load + useEffect(() => { + const token = localStorage.getItem('authToken'); + const userData = localStorage.getItem('userData'); + + if (token && userData) { + try { + setUser(JSON.parse(userData)); + } catch (error) { + console.error('Error parsing user data:', error); + localStorage.removeItem('authToken'); + localStorage.removeItem('userData'); + } + } + setLoading(false); + }, []); + + const login = async (email, password) => { + try { + setLoading(true); + // TODO: Replace with actual API call when backend is ready + // For now, simulate API call + const response = await simulateLoginAPI(email, password); + + const { token, user: userData } = response; + + // Store token and user data securely + localStorage.setItem('authToken', token); + localStorage.setItem('userData', JSON.stringify(userData)); + + setUser(userData); + navigate('/dashboard'); + + return { success: true }; + } catch (error) { + return { success: false, error: error.message }; + } finally { + setLoading(false); + } + }; + + const register = async (email, password, confirmPassword) => { + try { + setLoading(true); + + if (password !== confirmPassword) { + throw new Error('Passwords do not match'); + } + + // TODO: Replace with actual API call when backend is ready + const response = await simulateRegisterAPI(email, password); + + const { token, user: userData } = response; + + localStorage.setItem('authToken', token); + localStorage.setItem('userData', JSON.stringify(userData)); + + setUser(userData); + navigate('/dashboard'); + + return { success: true }; + } catch (error) { + return { success: false, error: error.message }; + } finally { + setLoading(false); + } + }; + + const logout = () => { + localStorage.removeItem('authToken'); + localStorage.removeItem('userData'); + setUser(null); + navigate('/'); + }; + + const isAdmin = () => { + return user?.role === 'admin'; + }; + + const value = { + user, + loading, + login, + register, + logout, + isAdmin, + }; + + return ( + + {children} + + ); +}; + +// Temporary mock API functions - replace with real API calls when backend is ready +const simulateLoginAPI = async (email, password) => { + // Simulate API delay + await new Promise(resolve => setTimeout(resolve, 1000)); + + // Basic validation + if (!email || !password) { + throw new Error('Email and password are required'); + } + + if (email === 'admin@nanwa.com' && password === 'admin123') { + return { + token: 'mock-jwt-token-admin', + user: { + id: 1, + email: 'admin@nanwa.com', + role: 'admin', + name: 'Admin User' + } + }; + } + + if (email === 'user@nanwa.com' && password === 'user123') { + return { + token: 'mock-jwt-token-user', + user: { + id: 2, + email: 'user@nanwa.com', + role: 'user', + name: 'Regular User' + } + }; + } + + throw new Error('Invalid email or password'); +}; + +const simulateRegisterAPI = async (email, password) => { + // Simulate API delay + await new Promise(resolve => setTimeout(resolve, 1000)); + + // Basic validation + if (!email || !password) { + throw new Error('Email and password are required'); + } + + if (password.length < 6) { + throw new Error('Password must be at least 6 characters long'); + } + + // Simulate successful registration + return { + token: 'mock-jwt-token-new-user', + user: { + id: Math.floor(Math.random() * 1000), + email, + role: 'user', + name: email.split('@')[0] + } + }; +}; \ No newline at end of file diff --git a/frontend/src/index.css b/frontend/src/index.css index e69de29bb2..206b591f08 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -0,0 +1,61 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --color-primary: 14 165 233; + --color-secondary: 132 204 22; + --color-success: 34 197 94; + --color-warning: 245 158 11; + --color-error: 239 68 68; + } + + .dark { + --color-primary: 14 165 233; + --color-secondary: 132 204 22; + --color-success: 34 197 94; + --color-warning: 245 158 11; + --color-error: 239 68 68; + } + + body { + font-feature-settings: "rlig" 1, "calt" 1; + } +} + +@layer components { + .btn { + @apply inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none; + } + + .btn-primary { + @apply btn bg-primary-600 text-white hover:bg-primary-700; + } + + .btn-secondary { + @apply btn bg-secondary-600 text-white hover:bg-secondary-700; + } + + .btn-outline { + @apply btn border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700; + } + + .form-input { + @apply flex h-10 w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm placeholder:text-gray-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100 dark:placeholder:text-gray-400; + } + + .form-label { + @apply text-sm font-medium leading-none; + } + + .card { + @apply rounded-lg border border-gray-200 bg-white text-gray-950 shadow-sm dark:border-gray-800 dark:bg-gray-950 dark:text-gray-50; + } +} + +@layer utilities { + .skip-link { + @apply absolute left-0 top-0 z-50 -translate-y-full transform bg-primary-600 px-4 py-2 text-white transition-transform focus:translate-y-0; + } +} diff --git a/frontend/src/lib/store.js b/frontend/src/lib/store.js new file mode 100644 index 0000000000..9034fe2835 --- /dev/null +++ b/frontend/src/lib/store.js @@ -0,0 +1,105 @@ +import { create } from 'zustand'; +import { devtools, persist } from 'zustand/middleware'; + +// Auth store +export const useAuthStore = create( + devtools( + persist( + (set, get) => ({ + user: null, + token: null, + isAuthenticated: false, + isLoading: false, + + login: (userData, token) => { + localStorage.setItem('authToken', token); + set({ + user: userData, + token, + isAuthenticated: true, + isLoading: false, + }); + }, + + logout: () => { + localStorage.removeItem('authToken'); + set({ + user: null, + token: null, + isAuthenticated: false, + isLoading: false, + }); + }, + + setLoading: (loading) => set({ isLoading: loading }), + + updateUser: (userData) => set({ user: userData }), + }), + { + name: 'auth-storage', + partialize: (state) => ({ + user: state.user, + token: state.token, + isAuthenticated: state.isAuthenticated + }), + } + ), + { name: 'auth-store' } + ) +); + +// App store for global state +export const useAppStore = create( + devtools( + (set, get) => ({ + // Global filters + filters: { + dateRange: { start: null, end: null }, + forests: [], + regions: [], + }, + + // UI state + sidebarOpen: false, + darkMode: false, + + // Data + forests: [], + trees: [], + loading: false, + error: null, + + // Actions + setFilters: (filters) => set((state) => ({ + filters: { ...state.filters, ...filters } + })), + + clearFilters: () => set({ + filters: { + dateRange: { start: null, end: null }, + forests: [], + regions: [], + } + }), + + setSidebarOpen: (open) => set({ sidebarOpen: open }), + + setDarkMode: (dark) => { + if (dark) { + document.documentElement.classList.add('dark'); + } else { + document.documentElement.classList.remove('dark'); + } + set({ darkMode: dark }); + }, + + setForests: (forests) => set({ forests }), + setTrees: (trees) => set({ trees }), + setLoading: (loading) => set({ loading }), + setError: (error) => set({ error }), + + clearError: () => set({ error: null }), + }), + { name: 'app-store' } + ) +); \ No newline at end of file diff --git a/frontend/src/lib/utils.js b/frontend/src/lib/utils.js new file mode 100644 index 0000000000..5f1dc6001a --- /dev/null +++ b/frontend/src/lib/utils.js @@ -0,0 +1,5 @@ +import { clsx } from 'clsx'; + +export function cn(...inputs) { + return clsx(inputs); +} \ No newline at end of file diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx new file mode 100644 index 0000000000..b0ac2a7cfc --- /dev/null +++ b/frontend/src/pages/DashboardPage.jsx @@ -0,0 +1,225 @@ +import { useAuth } from '../contexts/AuthContext'; +import styled from 'styled-components'; + +const DashboardContainer = styled.div` + min-height: 100vh; + background-color: #f9fafb; +`; + +const Header = styled.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`; + +const Sidebar = styled.aside` + background: white; + border-right: 1px solid #e5e7eb; + width: 250px; + position: fixed; + top: 0; + left: 0; + height: 100vh; + overflow-y: auto; + z-index: 10; +`; + +const MainContent = styled.main` + margin-left: 250px; + padding: 2rem; +`; + +export const DashboardPage = () => { + const { user, logout, isAdmin } = useAuth(); + + const handleLogout = () => { + logout(); + }; + + return ( + + {/* Header */} +
+
+
+
+

Nanwa Dashboard

+
+
+
+ Welcome, {user?.name} + {isAdmin() && ( + + Admin + + )} +
+ +
+
+
+
+ + {/* Sidebar */} + + + + + {/* Main Content */} + +
+ {/* Welcome Section */} +
+

Welcome to Nanwa

+

+ Monitor your forests and track tree growth with real-time insights. +

+
+ + {/* Stats Cards */} +
+
+
+
+ + + +
+
+

Total Trees

+

10,247

+
+
+
+ +
+
+
+ + + +
+
+

Survival Rate

+

95.2%

+
+
+
+ +
+
+
+ + + +
+
+

Avg Height

+

2.4m

+
+
+
+ +
+
+
+ + + +
+
+

CO₂ Absorbed

+

1.2t

+
+
+
+
+ + {/* Placeholder Content */} +
+

Coming Soon

+

+ The dashboard is currently being developed. Soon you'll be able to: +

+
    +
  • + + + + View real-time charts and analytics +
  • +
  • + + + + Explore interactive maps with tree locations +
  • +
  • + + + + Export data in CSV or XLSX format +
  • +
  • + + + + Filter and search through tree data +
  • +
+
+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx new file mode 100644 index 0000000000..984009f73f --- /dev/null +++ b/frontend/src/pages/LandingPage.jsx @@ -0,0 +1,201 @@ +import { Link } from 'react-router-dom'; +import styled from 'styled-components'; +import { Navbar } from '../components/ui/Navbar'; + +const HeroSection = styled.section` + background: linear-gradient(135deg, #10b981 0%, #059669 100%); + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + position: relative; + overflow: hidden; +`; + +const HeroBackground = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); + opacity: 0.3; +`; + +export const LandingPage = () => { + return ( +
+ {/* Navigation Header */} + + + {/* Hero Section */} + + +
+
+

+ Discover, Monitor & Export + Real-Time Tree Insights +

+

+ Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights. +

+
+ + Start Your Free Trial + + + Learn More + +
+
+
+
+ + {/* Features Section */} +
+
+
+

+ Powerful Features for Tree Management +

+

+ Everything you need to monitor, analyze, and export tree data with precision and ease. +

+
+ +
+
+
+ + + +
+

Real-Time Analytics

+

+ Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics. +

+
+ +
+
+ + + + +
+

Interactive Mapping

+

+ Visualize forests and individual trees with marker clustering and detailed tree information. +

+
+ +
+
+ + + +
+

Data Export

+

+ Export filtered datasets to CSV or XLSX format for reporting and analysis. +

+
+
+
+
+ + {/* About Section */} +
+
+
+
+

+ Empowering Sustainable Forestry +

+

+ Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects. +

+

+ Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs. +

+ + Join Nanwa Today + +
+
+
+
+
10K+
+
Trees Monitored
+
+
+
95%
+
Survival Rate
+
+
+
50+
+
Forest Projects
+
+
+
24/7
+
Real-Time Data
+
+
+
+
+
+
+ + {/* Footer */} +
+
+
+
+

Nanwa

+

+ Empowering sustainable forestry through data-driven insights and real-time monitoring. +

+
+
+

Product

+ +
+
+

Company

+ +
+
+

Support

+ +
+
+
+

© 2024 Nanwa. All rights reserved.

+
+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/pages/LoginPage.jsx b/frontend/src/pages/LoginPage.jsx new file mode 100644 index 0000000000..cb1f784baf --- /dev/null +++ b/frontend/src/pages/LoginPage.jsx @@ -0,0 +1,236 @@ +import { useState } from 'react'; +import { Link, useNavigate } from 'react-router-dom'; +import { useAuth } from '../contexts/AuthContext'; +import styled from 'styled-components'; + +const LoginContainer = styled.div` + min-height: 100vh; + background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%); + display: flex; + align-items: center; + justify-content: center; + padding: 1rem; +`; + +const LoginCard = styled.div` + background: white; + border-radius: 1rem; + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + padding: 2rem; + width: 100%; + max-width: 400px; +`; + +export const LoginPage = () => { + const [formData, setFormData] = useState({ + email: '', + password: '', + }); + const [errors, setErrors] = useState({}); + const [isSubmitting, setIsSubmitting] = useState(false); + const [showPassword, setShowPassword] = useState(false); + + const { login } = useAuth(); + const navigate = useNavigate(); + + const validateForm = () => { + const newErrors = {}; + + if (!formData.email) { + newErrors.email = 'Email is required'; + } else if (!/\S+@\S+\.\S+/.test(formData.email)) { + newErrors.email = 'Email is invalid'; + } + + if (!formData.password) { + newErrors.password = 'Password is required'; + } else if (formData.password.length < 6) { + newErrors.password = 'Password must be at least 6 characters'; + } + + setErrors(newErrors); + return Object.keys(newErrors).length === 0; + }; + + const handleInputChange = (e) => { + const { name, value } = e.target; + setFormData(prev => ({ + ...prev, + [name]: value + })); + + // Clear error when user starts typing + if (errors[name]) { + setErrors(prev => ({ + ...prev, + [name]: '' + })); + } + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + + if (!validateForm()) { + return; + } + + setIsSubmitting(true); + + try { + const result = await login(formData.email, formData.password); + + if (!result.success) { + setErrors({ general: result.error }); + } + } catch (error) { + setErrors({ general: 'An unexpected error occurred. Please try again.' }); + } finally { + setIsSubmitting(false); + } + }; + + return ( + + +
+ +

Nanwa

+ +

Welcome back

+

Sign in to your account to continue

+
+ +
+ {errors.general && ( +
+ {errors.general} +
+ )} + +
+ + + {errors.email && ( +

+ {errors.email} +

+ )} +
+ +
+ +
+ + +
+ {errors.password && ( +

+ {errors.password} +

+ )} +
+ +
+
+ + +
+ +
+ + +
+ +
+

+ Don't have an account?{' '} + + Sign up + +

+
+ + {/* Demo credentials */} +
+

Demo credentials:

+
+

Admin: admin@nanwa.com / admin123

+

User: user@nanwa.com / user123

+
+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/pages/RegisterPage.jsx b/frontend/src/pages/RegisterPage.jsx new file mode 100644 index 0000000000..a241e1293c --- /dev/null +++ b/frontend/src/pages/RegisterPage.jsx @@ -0,0 +1,352 @@ +import { useState } from 'react'; +import { Link } from 'react-router-dom'; +import { useAuth } from '../contexts/AuthContext'; +import styled from 'styled-components'; + +const RegisterContainer = styled.div` + min-height: 100vh; + background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%); + display: flex; + align-items: center; + justify-content: center; + padding: 1rem; +`; + +const RegisterCard = styled.div` + background: white; + border-radius: 1rem; + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + padding: 2rem; + width: 100%; + max-width: 450px; +`; + +const PasswordStrengthBar = styled.div` + width: 100%; + height: 4px; + background-color: #e5e7eb; + border-radius: 2px; + overflow: hidden; + margin-top: 0.5rem; +`; + +const PasswordStrengthFill = styled.div` + height: 100%; + background-color: ${props => { + if (props.strength === 'weak') return '#ef4444'; + if (props.strength === 'medium') return '#f59e0b'; + if (props.strength === 'strong') return '#10b981'; + return '#e5e7eb'; + }}; + width: ${props => { + if (props.strength === 'weak') return '33%'; + if (props.strength === 'medium') return '66%'; + if (props.strength === 'strong') return '100%'; + return '0%'; + }}; + transition: all 0.3s ease; +`; + +export const RegisterPage = () => { + const [formData, setFormData] = useState({ + email: '', + password: '', + confirmPassword: '', + }); + const [errors, setErrors] = useState({}); + const [isSubmitting, setIsSubmitting] = useState(false); + const [showPassword, setShowPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = useState(false); + + const { register } = useAuth(); + + const getPasswordStrength = (password) => { + if (!password) return { strength: 'none', score: 0 }; + + let score = 0; + if (password.length >= 8) score += 1; + if (/[a-z]/.test(password)) score += 1; + if (/[A-Z]/.test(password)) score += 1; + if (/[0-9]/.test(password)) score += 1; + if (/[^A-Za-z0-9]/.test(password)) score += 1; + + if (score <= 2) return { strength: 'weak', score }; + if (score <= 3) return { strength: 'medium', score }; + return { strength: 'strong', score }; + }; + + const passwordStrength = getPasswordStrength(formData.password); + + const validateForm = () => { + const newErrors = {}; + + if (!formData.email) { + newErrors.email = 'Email is required'; + } else if (!/\S+@\S+\.\S+/.test(formData.email)) { + newErrors.email = 'Email is invalid'; + } + + if (!formData.password) { + newErrors.password = 'Password is required'; + } else if (formData.password.length < 6) { + newErrors.password = 'Password must be at least 6 characters'; + } else if (passwordStrength.strength === 'weak') { + newErrors.password = 'Password is too weak. Include uppercase, lowercase, numbers, and special characters.'; + } + + if (!formData.confirmPassword) { + newErrors.confirmPassword = 'Please confirm your password'; + } else if (formData.password !== formData.confirmPassword) { + newErrors.confirmPassword = 'Passwords do not match'; + } + + setErrors(newErrors); + return Object.keys(newErrors).length === 0; + }; + + const handleInputChange = (e) => { + const { name, value } = e.target; + setFormData(prev => ({ + ...prev, + [name]: value + })); + + // Clear error when user starts typing + if (errors[name]) { + setErrors(prev => ({ + ...prev, + [name]: '' + })); + } + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + + if (!validateForm()) { + return; + } + + setIsSubmitting(true); + + try { + const result = await register(formData.email, formData.password, formData.confirmPassword); + + if (!result.success) { + setErrors({ general: result.error }); + } + } catch (error) { + setErrors({ general: 'An unexpected error occurred. Please try again.' }); + } finally { + setIsSubmitting(false); + } + }; + + const getPasswordStrengthText = () => { + switch (passwordStrength.strength) { + case 'weak': + return 'Weak password'; + case 'medium': + return 'Medium strength password'; + case 'strong': + return 'Strong password'; + default: + return ''; + } + }; + + return ( + + +
+ +

Nanwa

+ +

Create your account

+

Join Nanwa to start monitoring your trees

+
+ +
+ {errors.general && ( +
+ {errors.general} +
+ )} + +
+ + + {errors.email && ( +

+ {errors.email} +

+ )} +
+ +
+ +
+ + +
+ + {formData.password && ( +
+ + + +

+ {getPasswordStrengthText()} +

+
+ )} + + {errors.password && ( +

+ {errors.password} +

+ )} +
+ +
+ +
+ + +
+ {errors.confirmPassword && ( +

+ {errors.confirmPassword} +

+ )} +
+ +
+ + +
+ + +
+ +
+

+ Already have an account?{' '} + + Sign in + +

+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/test/setup.js b/frontend/src/test/setup.js new file mode 100644 index 0000000000..0f9d923351 --- /dev/null +++ b/frontend/src/test/setup.js @@ -0,0 +1,32 @@ +import '@testing-library/jest-dom'; + +// Mock IntersectionObserver +global.IntersectionObserver = class IntersectionObserver { + constructor() {} + disconnect() {} + observe() {} + unobserve() {} +}; + +// Mock ResizeObserver +global.ResizeObserver = class ResizeObserver { + constructor() {} + disconnect() {} + observe() {} + unobserve() {} +}; + +// Mock matchMedia +Object.defineProperty(window, 'matchMedia', { + writable: true, + value: vi.fn().mockImplementation((query) => ({ + matches: false, + media: query, + onchange: null, + addListener: vi.fn(), // deprecated + removeListener: vi.fn(), // deprecated + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn(), + })), +}); \ No newline at end of file diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000000..dc0bb2b7f8 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,43 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,jsx,ts,tsx}", + ], + theme: { + extend: { + colors: { + primary: { + 50: '#f0f9ff', + 100: '#e0f2fe', + 500: '#0ea5e9', + 600: '#0284c7', + 700: '#0369a1', + }, + secondary: { + 50: '#f7fee7', + 100: '#ecfccb', + 500: '#84cc16', + 600: '#65a30d', + 700: '#4d7c0f', + }, + success: '#22c55e', + warning: '#f59e0b', + error: '#ef4444', + }, + spacing: { + '18': '4.5rem', + '88': '22rem', + }, + screens: { + 'xs': '320px', + }, + maxWidth: { + '8xl': '88rem', + }, + }, + }, + plugins: [], + darkMode: 'class', +} + diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 5a33944a9b..18fd82041a 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,7 +1,33 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' +import path from 'path' // https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], + css: { + postcss: './config/postcss.config.js', + }, + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + '@components': path.resolve(__dirname, './src/components'), + '@pages': path.resolve(__dirname, './src/pages'), + '@hooks': path.resolve(__dirname, './src/hooks'), + '@utils': path.resolve(__dirname, './src/utils'), + '@assets': path.resolve(__dirname, './src/assets'), + }, + }, + build: { + rollupOptions: { + output: { + manualChunks: { + vendor: ['react', 'react-dom'], + }, + }, + }, + }, + server: { + port: 3000, + }, }) diff --git a/package.json b/package.json index 680d190772..17d32c2fa7 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,14 @@ "name": "project-final-parent", "version": "1.0.0", "scripts": { - "postinstall": "npm install --prefix backend" + "postinstall": "npm install --prefix backend && npm install --prefix frontend", + "dev": "npm run dev --prefix frontend", + "dev:backend": "npm run dev --prefix backend", + "dev:frontend": "npm run dev --prefix frontend", + "dev:all": "npx concurrently \"npm run dev:backend\" \"npm run dev:frontend\" --names \"backend,frontend\" --prefix name", + "build": "npm run build --prefix frontend", + "start": "npm start --prefix backend", + "lint": "npm run lint --prefix frontend", + "test": "npm run test --prefix frontend" } } \ No newline at end of file From bf4627276d69d013fed0c4263000a980c750a7a7 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 00:15:08 +0200 Subject: [PATCH 002/111] feat: implement chart components with Recharts library - Add SurvivalRateChart with pie chart and percentage display - Add AverageHeightChart with line chart showing time series data - Add CO2AbsorptionChart with bar chart for absorption tracking - Update dashboard with responsive chart grid layout - Replace placeholder content with real chart components - Add custom tooltips and legends for better UX --- frontend/package.json | 1 + .../components/charts/AverageHeightChart.jsx | 96 +++++++++++++++ .../components/charts/CO2AbsorptionChart.jsx | 93 +++++++++++++++ .../components/charts/SurvivalRateChart.jsx | 112 ++++++++++++++++++ frontend/src/components/charts/index.js | 3 + frontend/src/pages/DashboardPage.jsx | 82 ++++++++----- 6 files changed, 358 insertions(+), 29 deletions(-) create mode 100644 frontend/src/components/charts/AverageHeightChart.jsx create mode 100644 frontend/src/components/charts/CO2AbsorptionChart.jsx create mode 100644 frontend/src/components/charts/SurvivalRateChart.jsx create mode 100644 frontend/src/components/charts/index.js diff --git a/frontend/package.json b/frontend/package.json index a54983467c..67723d0e2a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -22,6 +22,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.14.0", + "recharts": "^3.1.0", "styled-components": "^6.1.19", "tailwindcss": "^3.3.0", "zustand": "^4.4.0" diff --git a/frontend/src/components/charts/AverageHeightChart.jsx b/frontend/src/components/charts/AverageHeightChart.jsx new file mode 100644 index 0000000000..82828b2bff --- /dev/null +++ b/frontend/src/components/charts/AverageHeightChart.jsx @@ -0,0 +1,96 @@ +import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'; +import styled from 'styled-components'; + +const ChartContainer = styled.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`; + +const ChartHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`; + +const ChartTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +const CustomTooltip = styled.div` + background: white; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + padding: 0.75rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); +`; + +export const AverageHeightChart = ({ + data = [ + { month: 'Jan', height: 1.2 }, + { month: 'Feb', height: 1.4 }, + { month: 'Mar', height: 1.6 }, + { month: 'Apr', height: 1.8 }, + { month: 'May', height: 2.0 }, + { month: 'Jun', height: 2.2 }, + { month: 'Jul', height: 2.4 }, + { month: 'Aug', height: 2.6 }, + { month: 'Sep', height: 2.8 }, + { month: 'Oct', height: 3.0 }, + { month: 'Nov', height: 3.2 }, + { month: 'Dec', height: 3.4 } + ] +}) => { + const CustomTooltipContent = ({ active, payload, label }) => { + if (active && payload && payload.length) { + return ( + +

{label}

+

+ Average Height: {payload[0].value}m +

+
+ ); + } + return null; + }; + + return ( + + + Average Tree Height Over Time + + + + + + + + } /> + + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/charts/CO2AbsorptionChart.jsx b/frontend/src/components/charts/CO2AbsorptionChart.jsx new file mode 100644 index 0000000000..957d391b8d --- /dev/null +++ b/frontend/src/components/charts/CO2AbsorptionChart.jsx @@ -0,0 +1,93 @@ +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'; +import styled from 'styled-components'; + +const ChartContainer = styled.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`; + +const ChartHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`; + +const ChartTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +const CustomTooltip = styled.div` + background: white; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + padding: 0.75rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); +`; + +export const CO2AbsorptionChart = ({ + data = [ + { month: 'Jan', co2: 0.8 }, + { month: 'Feb', co2: 1.2 }, + { month: 'Mar', co2: 1.6 }, + { month: 'Apr', co2: 2.0 }, + { month: 'May', co2: 2.4 }, + { month: 'Jun', co2: 2.8 }, + { month: 'Jul', co2: 3.2 }, + { month: 'Aug', co2: 3.6 }, + { month: 'Sep', co2: 4.0 }, + { month: 'Oct', co2: 4.4 }, + { month: 'Nov', co2: 4.8 }, + { month: 'Dec', co2: 5.2 } + ] +}) => { + const CustomTooltipContent = ({ active, payload, label }) => { + if (active && payload && payload.length) { + return ( + +

{label}

+

+ CO₂ Absorption: {payload[0].value} tons +

+
+ ); + } + return null; + }; + + return ( + + + CO₂ Absorption Over Time + + + + + + + + } /> + + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/charts/SurvivalRateChart.jsx b/frontend/src/components/charts/SurvivalRateChart.jsx new file mode 100644 index 0000000000..c1f5a4861a --- /dev/null +++ b/frontend/src/components/charts/SurvivalRateChart.jsx @@ -0,0 +1,112 @@ +import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } from 'recharts'; +import styled from 'styled-components'; + +const ChartContainer = styled.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`; + +const ChartHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`; + +const ChartTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +const PercentageDisplay = styled.div` + text-align: center; + margin-bottom: 1rem; +`; + +const PercentageValue = styled.div` + font-size: 2.5rem; + font-weight: 700; + color: #10b981; + line-height: 1; +`; + +const PercentageLabel = styled.div` + font-size: 0.875rem; + color: #6b7280; + margin-top: 0.25rem; +`; + +const CustomTooltip = styled.div` + background: white; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + padding: 0.75rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); +`; + +export const SurvivalRateChart = ({ data = { survived: 95.2, lost: 4.8 } }) => { + const chartData = [ + { name: 'Survived', value: data.survived, color: '#10b981' }, + { name: 'Lost', value: data.lost, color: '#ef4444' } + ]; + + const CustomTooltipContent = ({ active, payload }) => { + if (active && payload && payload.length) { + return ( + +

{payload[0].name}

+

{payload[0].value}%

+
+ ); + } + return null; + }; + + return ( + + + Tree Survival Rate + + + + {data.survived}% + Survival Rate + + + + + + {chartData.map((entry, index) => ( + + ))} + + } /> + + + +
+
+
+ Survived ({data.survived}%) +
+
+
+ Lost ({data.lost}%) +
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/charts/index.js b/frontend/src/components/charts/index.js new file mode 100644 index 0000000000..62cfafaa1a --- /dev/null +++ b/frontend/src/components/charts/index.js @@ -0,0 +1,3 @@ +export { SurvivalRateChart } from './SurvivalRateChart'; +export { AverageHeightChart } from './AverageHeightChart'; +export { CO2AbsorptionChart } from './CO2AbsorptionChart'; \ No newline at end of file diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index b0ac2a7cfc..44ae97ca90 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -1,5 +1,6 @@ import { useAuth } from '../contexts/AuthContext'; import styled from 'styled-components'; +import { SurvivalRateChart, AverageHeightChart, CO2AbsorptionChart } from '../components/charts'; const DashboardContainer = styled.div` min-height: 100vh; @@ -185,38 +186,61 @@ export const DashboardPage = () => { - {/* Placeholder Content */} + {/* Charts Grid */} +
+
+ +
+
+ +
+
+ +
+
+ + {/* Additional Dashboard Content */}
-

Coming Soon

+

Forest Overview

- The dashboard is currently being developed. Soon you'll be able to: + Your forests are performing excellently with strong growth indicators and high survival rates.

-
    -
  • - - - - View real-time charts and analytics -
  • -
  • - - - - Explore interactive maps with tree locations -
  • -
  • - - - - Export data in CSV or XLSX format -
  • -
  • - - - - Filter and search through tree data -
  • -
+
+
+

Recent Activity

+
    +
  • +
    + New measurements recorded for Forest A +
  • +
  • +
    + Survival rate improved by 2.3% +
  • +
  • +
    + CO₂ absorption increased by 15% +
  • +
+
+
+

Next Actions

+
    +
  • +
    + Schedule maintenance for Forest B +
  • +
  • +
    + Review growth data for Q4 report +
  • +
  • +
    + Address low-performing areas in Forest C +
  • +
+
+
From 9c5a1d99e0251159efd23fbea0aed126dace545e Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 00:16:45 +0200 Subject: [PATCH 003/111] feat: implement global filters with date range and forest selection - Add DateRangePicker component with react-datepicker - Add ForestSelector component with multi-select and search - Add GlobalFilters component that combines both filters - Implement debounced filter updates (1s delay) - Add filter state management and active filter display - Update dashboard to include global filters - Add reset functionality and clear all filters --- frontend/package.json | 1 + .../components/filters/DateRangePicker.jsx | 175 +++++++++++++ .../src/components/filters/ForestSelector.jsx | 244 ++++++++++++++++++ .../src/components/filters/GlobalFilters.jsx | 187 ++++++++++++++ frontend/src/components/filters/index.js | 3 + frontend/src/pages/DashboardPage.jsx | 12 + 6 files changed, 622 insertions(+) create mode 100644 frontend/src/components/filters/DateRangePicker.jsx create mode 100644 frontend/src/components/filters/ForestSelector.jsx create mode 100644 frontend/src/components/filters/GlobalFilters.jsx create mode 100644 frontend/src/components/filters/index.js diff --git a/frontend/package.json b/frontend/package.json index 67723d0e2a..20e947695f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -20,6 +20,7 @@ "clsx": "^2.0.0", "postcss": "^8.4.24", "react": "^18.2.0", + "react-datepicker": "^8.4.0", "react-dom": "^18.2.0", "react-router-dom": "^6.14.0", "recharts": "^3.1.0", diff --git a/frontend/src/components/filters/DateRangePicker.jsx b/frontend/src/components/filters/DateRangePicker.jsx new file mode 100644 index 0000000000..f15e01f99a --- /dev/null +++ b/frontend/src/components/filters/DateRangePicker.jsx @@ -0,0 +1,175 @@ +import { useState, useEffect } from 'react'; +import DatePicker from 'react-datepicker'; +import styled from 'styled-components'; +import 'react-datepicker/dist/react-datepicker.css'; + +const FilterContainer = styled.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`; + +const FilterHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`; + +const FilterTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +const DateInputGroup = styled.div` + display: flex; + gap: 1rem; + align-items: center; + flex-wrap: wrap; +`; + +const DateInputWrapper = styled.div` + display: flex; + flex-direction: column; + min-width: 150px; +`; + +const DateLabel = styled.label` + font-size: 0.875rem; + font-weight: 500; + color: #374151; + margin-bottom: 0.5rem; +`; + +const StyledDatePicker = styled(DatePicker)` + width: 100%; + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + color: #111827; + background-color: white; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:hover { + border-color: #9ca3af; + } +`; + +const ResetButton = styled.button` + padding: 0.5rem 1rem; + background-color: #f3f4f6; + color: #374151; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #e5e7eb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +export const DateRangePicker = ({ onDateChange, initialStartDate, initialEndDate }) => { + const [startDate, setStartDate] = useState(initialStartDate || new Date(new Date().getFullYear(), 0, 1)); // Start of current year + const [endDate, setEndDate] = useState(initialEndDate || new Date()); // Today + const [isUpdating, setIsUpdating] = useState(false); + + // Debounced update effect + useEffect(() => { + const timer = setTimeout(() => { + if (onDateChange && startDate && endDate) { + onDateChange({ startDate, endDate }); + } + }, 1000); // 1 second debounce + + return () => clearTimeout(timer); + }, [startDate, endDate, onDateChange]); + + const handleStartDateChange = (date) => { + setStartDate(date); + if (date && endDate && date > endDate) { + setEndDate(date); + } + }; + + const handleEndDateChange = (date) => { + setEndDate(date); + if (date && startDate && date < startDate) { + setStartDate(date); + } + }; + + const handleReset = () => { + const defaultStartDate = new Date(new Date().getFullYear(), 0, 1); + const defaultEndDate = new Date(); + setStartDate(defaultStartDate); + setEndDate(defaultEndDate); + if (onDateChange) { + onDateChange({ startDate: defaultStartDate, endDate: defaultEndDate }); + } + }; + + return ( + + + Date Range + + Reset + + + + + + Start Date + + + +
+ to +
+ + + End Date + + +
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/filters/ForestSelector.jsx b/frontend/src/components/filters/ForestSelector.jsx new file mode 100644 index 0000000000..bfb388451e --- /dev/null +++ b/frontend/src/components/filters/ForestSelector.jsx @@ -0,0 +1,244 @@ +import { useState, useEffect, useRef } from 'react'; +import styled from 'styled-components'; + +const FilterContainer = styled.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`; + +const FilterHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`; + +const FilterTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +const SearchInput = styled.input` + width: 100%; + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + color: #111827; + background-color: white; + margin-bottom: 1rem; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:hover { + border-color: #9ca3af; + } +`; + +const ForestList = styled.div` + max-height: 200px; + overflow-y: auto; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + background-color: white; +`; + +const ForestItem = styled.label` + display: flex; + align-items: center; + padding: 0.75rem; + cursor: pointer; + border-bottom: 1px solid #f3f4f6; + transition: background-color 0.2s; + + &:last-child { + border-bottom: none; + } + + &:hover { + background-color: #f9fafb; + } + + &:focus-within { + background-color: #f0fdf4; + } +`; + +const Checkbox = styled.input` + margin-right: 0.75rem; + width: 1rem; + height: 1rem; + accent-color: #10b981; +`; + +const ForestInfo = styled.div` + flex: 1; +`; + +const ForestName = styled.div` + font-weight: 500; + color: #111827; + font-size: 0.875rem; +`; + +const ForestDetails = styled.div` + font-size: 0.75rem; + color: #6b7280; + margin-top: 0.25rem; +`; + +const SelectedCount = styled.div` + font-size: 0.75rem; + color: #6b7280; + margin-top: 0.5rem; +`; + +const ResetButton = styled.button` + padding: 0.5rem 1rem; + background-color: #f3f4f6; + color: #374151; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #e5e7eb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +export const ForestSelector = ({ + onForestChange, + forests = [ + { id: 1, name: 'Forest A', region: 'North Region', treeCount: 2500, area: '150 ha' }, + { id: 2, name: 'Forest B', region: 'South Region', treeCount: 3200, area: '200 ha' }, + { id: 3, name: 'Forest C', region: 'East Region', treeCount: 1800, area: '120 ha' }, + { id: 4, name: 'Forest D', region: 'West Region', treeCount: 2750, area: '180 ha' }, + { id: 5, name: 'Forest E', region: 'Central Region', treeCount: 4100, area: '250 ha' } + ], + initialSelected = [] +}) => { + const [selectedForests, setSelectedForests] = useState(initialSelected); + const [searchTerm, setSearchTerm] = useState(''); + const [filteredForests, setFilteredForests] = useState(forests); + + // Filter forests based on search term + useEffect(() => { + const filtered = forests.filter(forest => + forest.name.toLowerCase().includes(searchTerm.toLowerCase()) || + forest.region.toLowerCase().includes(searchTerm.toLowerCase()) + ); + setFilteredForests(filtered); + }, [searchTerm, forests]); + + // Debounced update effect + useEffect(() => { + const timer = setTimeout(() => { + if (onForestChange) { + onForestChange(selectedForests); + } + }, 1000); // 1 second debounce + + return () => clearTimeout(timer); + }, [selectedForests, onForestChange]); + + const handleForestToggle = (forestId) => { + setSelectedForests(prev => { + if (prev.includes(forestId)) { + return prev.filter(id => id !== forestId); + } else { + return [...prev, forestId]; + } + }); + }; + + const handleSelectAll = () => { + setSelectedForests(forests.map(forest => forest.id)); + }; + + const handleSelectNone = () => { + setSelectedForests([]); + }; + + const handleReset = () => { + setSelectedForests(initialSelected); + setSearchTerm(''); + }; + + return ( + + + Forest Selection + + Reset + + + + setSearchTerm(e.target.value)} + /> + +
+ + +
+ + + {filteredForests.map(forest => ( + + handleForestToggle(forest.id)} + /> + + {forest.name} + + {forest.region} • {forest.treeCount} trees • {forest.area} + + + + ))} + {filteredForests.length === 0 && ( +
+ No forests found matching your search. +
+ )} +
+ + + {selectedForests.length} of {forests.length} forests selected + +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/filters/GlobalFilters.jsx b/frontend/src/components/filters/GlobalFilters.jsx new file mode 100644 index 0000000000..1a4cb3a0cc --- /dev/null +++ b/frontend/src/components/filters/GlobalFilters.jsx @@ -0,0 +1,187 @@ +import { useState, useEffect } from 'react'; +import styled from 'styled-components'; +import { DateRangePicker } from './DateRangePicker'; +import { ForestSelector } from './ForestSelector'; + +const FiltersContainer = styled.div` + background: #f9fafb; + border-radius: 0.75rem; + padding: 1.5rem; + margin-bottom: 2rem; +`; + +const FiltersHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.5rem; +`; + +const FiltersTitle = styled.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`; + +const FiltersSubtitle = styled.p` + color: #6b7280; + margin: 0.5rem 0 0 0; + font-size: 0.875rem; +`; + +const FiltersGrid = styled.div` + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + + @media (min-width: 768px) { + grid-template-columns: 1fr 1fr; + } + + @media (min-width: 1024px) { + grid-template-columns: 1fr 1fr; + } +`; + +const ActiveFilters = styled.div` + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-top: 1rem; + padding-top: 1rem; + border-top: 1px solid #e5e7eb; +`; + +const FilterTag = styled.span` + display: inline-flex; + align-items: center; + padding: 0.25rem 0.75rem; + background-color: #10b981; + color: white; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; +`; + +const ClearAllButton = styled.button` + padding: 0.5rem 1rem; + background-color: #ef4444; + color: white; + border: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #dc2626; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); + } +`; + +export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { + const [filters, setFilters] = useState({ + dateRange: { + startDate: new Date(new Date().getFullYear(), 0, 1), + endDate: new Date() + }, + selectedForests: [], + ...initialFilters + }); + + const [activeFilters, setActiveFilters] = useState([]); + + // Update active filters display + useEffect(() => { + const active = []; + + if (filters.dateRange.startDate && filters.dateRange.endDate) { + const startDate = filters.dateRange.startDate.toLocaleDateString(); + const endDate = filters.dateRange.endDate.toLocaleDateString(); + active.push(`Date: ${startDate} - ${endDate}`); + } + + if (filters.selectedForests.length > 0) { + active.push(`${filters.selectedForests.length} forests selected`); + } + + setActiveFilters(active); + }, [filters]); + + // Notify parent component of filter changes + useEffect(() => { + if (onFiltersChange) { + onFiltersChange(filters); + } + }, [filters, onFiltersChange]); + + const handleDateChange = (dateRange) => { + setFilters(prev => ({ + ...prev, + dateRange + })); + }; + + const handleForestChange = (selectedForests) => { + setFilters(prev => ({ + ...prev, + selectedForests + })); + }; + + const handleClearAll = () => { + setFilters({ + dateRange: { + startDate: new Date(new Date().getFullYear(), 0, 1), + endDate: new Date() + }, + selectedForests: [] + }); + }; + + return ( + + +
+ Global Filters + + Filter your data by date range and forest selection + +
+ {activeFilters.length > 0 && ( + + Clear All + + )} +
+ + + + + + + {activeFilters.length > 0 && ( + + {activeFilters.map((filter, index) => ( + + {filter} + + ))} + + )} +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/filters/index.js b/frontend/src/components/filters/index.js new file mode 100644 index 0000000000..c904774420 --- /dev/null +++ b/frontend/src/components/filters/index.js @@ -0,0 +1,3 @@ +export { DateRangePicker } from './DateRangePicker'; +export { ForestSelector } from './ForestSelector'; +export { GlobalFilters } from './GlobalFilters'; \ No newline at end of file diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index 44ae97ca90..e32c628077 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -1,6 +1,8 @@ +import { useState } from 'react'; import { useAuth } from '../contexts/AuthContext'; import styled from 'styled-components'; import { SurvivalRateChart, AverageHeightChart, CO2AbsorptionChart } from '../components/charts'; +import { GlobalFilters } from '../components/filters'; const DashboardContainer = styled.div` min-height: 100vh; @@ -32,11 +34,18 @@ const MainContent = styled.main` export const DashboardPage = () => { const { user, logout, isAdmin } = useAuth(); + const [filters, setFilters] = useState({}); const handleLogout = () => { logout(); }; + const handleFiltersChange = (newFilters) => { + setFilters(newFilters); + // TODO: Update charts and data based on filters + console.log('Filters changed:', newFilters); + }; + return ( {/* Header */} @@ -127,6 +136,9 @@ export const DashboardPage = () => {

+ {/* Global Filters */} + + {/* Stats Cards */}
From 4541c9d2923585ce7e73a2158ee541b4c6ede109 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 00:18:57 +0200 Subject: [PATCH 004/111] feat: implement interactive forest map with Leaflet - Add ForestMap component with custom tree markers - Create MapPage with tree detail panel - Integrate global filters with map view - Add map controls and legend - Implement tree selection and detail display - Add map route to App.jsx - Update navigation between dashboard and map - Add custom tree icons with health status colors --- frontend/package.json | 2 + frontend/src/App.jsx | 9 + frontend/src/components/map/ForestMap.jsx | 242 ++++++++++++++++++++ frontend/src/pages/DashboardPage.jsx | 2 +- frontend/src/pages/MapPage.jsx | 260 ++++++++++++++++++++++ 5 files changed, 514 insertions(+), 1 deletion(-) create mode 100644 frontend/src/components/map/ForestMap.jsx create mode 100644 frontend/src/pages/MapPage.jsx diff --git a/frontend/package.json b/frontend/package.json index 20e947695f..61686db9c5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -18,10 +18,12 @@ "dependencies": { "autoprefixer": "^10.4.14", "clsx": "^2.0.0", + "leaflet": "^1.9.4", "postcss": "^8.4.24", "react": "^18.2.0", "react-datepicker": "^8.4.0", "react-dom": "^18.2.0", + "react-leaflet": "^5.0.0", "react-router-dom": "^6.14.0", "recharts": "^3.1.0", "styled-components": "^6.1.19", diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 0e69f49ae9..bf74567bb8 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -3,6 +3,7 @@ import { LandingPage } from './pages/LandingPage'; import { LoginPage } from './pages/LoginPage'; import { RegisterPage } from './pages/RegisterPage'; import { DashboardPage } from './pages/DashboardPage'; +import { MapPage } from './pages/MapPage'; import { ProtectedRoute } from './components/auth/ProtectedRoute'; import { AuthProvider } from './contexts/AuthContext'; @@ -27,6 +28,14 @@ export const App = () => { } /> + + + + } + /> diff --git a/frontend/src/components/map/ForestMap.jsx b/frontend/src/components/map/ForestMap.jsx new file mode 100644 index 0000000000..443930dd28 --- /dev/null +++ b/frontend/src/components/map/ForestMap.jsx @@ -0,0 +1,242 @@ +import { useState, useEffect } from 'react'; +import { MapContainer, TileLayer, Marker, Popup, useMap } from 'react-leaflet'; +import L from 'leaflet'; +import styled from 'styled-components'; +import 'leaflet/dist/leaflet.css'; + +// Fix for default markers in react-leaflet +delete L.Icon.Default.prototype._getIconUrl; +L.Icon.Default.mergeOptions({ + iconRetinaUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png', + iconUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png', + shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png', +}); + +const MapContainerStyled = styled.div` + height: 600px; + width: 100%; + border-radius: 0.75rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`; + +const MapHeader = styled.div` + background: white; + padding: 1rem 1.5rem; + border-bottom: 1px solid #e5e7eb; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const MapTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +const MapControls = styled.div` + display: flex; + gap: 0.5rem; +`; + +const ControlButton = styled.button` + padding: 0.5rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.375rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #f9fafb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +// Custom tree marker icon +const createTreeIcon = (type = 'healthy') => { + const colors = { + healthy: '#10b981', + warning: '#f59e0b', + critical: '#ef4444' + }; + + return L.divIcon({ + className: 'custom-tree-marker', + html: ` +
+ 🌳 +
+ `, + iconSize: [20, 20], + iconAnchor: [10, 10] + }); +}; + +// Map controller component +const MapController = ({ onZoomChange }) => { + const map = useMap(); + + useEffect(() => { + const handleZoomEnd = () => { + onZoomChange(map.getZoom()); + }; + + map.on('zoomend', handleZoomEnd); + return () => { + map.off('zoomend', handleZoomEnd); + }; + }, [map, onZoomChange]); + + return null; +}; + +export const ForestMap = ({ + trees = [ + { id: 1, lat: 59.3293, lng: 18.0686, name: 'Tree A-001', health: 'healthy', height: 2.4, species: 'Pine' }, + { id: 2, lat: 59.3300, lng: 18.0690, name: 'Tree A-002', health: 'healthy', height: 2.1, species: 'Oak' }, + { id: 3, lat: 59.3285, lng: 18.0675, name: 'Tree A-003', health: 'warning', height: 1.8, species: 'Birch' }, + { id: 4, lat: 59.3310, lng: 18.0700, name: 'Tree A-004', health: 'critical', height: 1.5, species: 'Spruce' }, + { id: 5, lat: 59.3275, lng: 18.0660, name: 'Tree A-005', health: 'healthy', height: 2.7, species: 'Pine' }, + { id: 6, lat: 59.3320, lng: 18.0710, name: 'Tree A-006', health: 'healthy', height: 2.3, species: 'Oak' }, + { id: 7, lat: 59.3265, lng: 18.0650, name: 'Tree A-007', health: 'warning', height: 1.9, species: 'Birch' }, + { id: 8, lat: 59.3330, lng: 18.0720, name: 'Tree A-008', health: 'healthy', height: 2.5, species: 'Spruce' } + ], + onTreeSelect, + filters = {} +}) => { + const [zoom, setZoom] = useState(13); + const [selectedTree, setSelectedTree] = useState(null); + + // Filter trees based on applied filters + const filteredTrees = trees.filter(tree => { + // TODO: Apply date and forest filters when backend is ready + return true; + }); + + const handleTreeClick = (tree) => { + setSelectedTree(tree); + if (onTreeSelect) { + onTreeSelect(tree); + } + }; + + const handleZoomChange = (newZoom) => { + setZoom(newZoom); + }; + + const centerMap = () => { + // TODO: Center map on selected forest or all trees + }; + + const fitBounds = () => { + // TODO: Fit map to show all trees + }; + + return ( +
+ + Forest Map + + + + + + + + + + + + + + + + + + + + + + {filteredTrees.map(tree => ( + handleTreeClick(tree) + }} + > + +
+

{tree.name}

+

Species: {tree.species}

+

Height: {tree.height}m

+

Health: + + {tree.health} + +

+
+
+
+ ))} +
+
+ + {/* Map Legend */} +
+

Legend

+
+
+
+ Healthy Trees +
+
+
+ Warning +
+
+
+ Critical +
+
+ Zoom level: {zoom} +
+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index e32c628077..56a7a60db6 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -92,7 +92,7 @@ export const DashboardPage = () => { Dashboard diff --git a/frontend/src/pages/MapPage.jsx b/frontend/src/pages/MapPage.jsx new file mode 100644 index 0000000000..f49ea5616b --- /dev/null +++ b/frontend/src/pages/MapPage.jsx @@ -0,0 +1,260 @@ +import { useState } from 'react'; +import { useAuth } from '../contexts/AuthContext'; +import styled from 'styled-components'; +import { ForestMap } from '../components/map/ForestMap'; +import { GlobalFilters } from '../components/filters'; + +const MapPageContainer = styled.div` + min-height: 100vh; + background-color: #f9fafb; +`; + +const Header = styled.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`; + +const Sidebar = styled.aside` + background: white; + border-right: 1px solid #e5e7eb; + width: 250px; + position: fixed; + top: 0; + left: 0; + height: 100vh; + overflow-y: auto; + z-index: 10; +`; + +const MainContent = styled.main` + margin-left: 250px; + padding: 2rem; +`; + +const TreeDetailPanel = styled.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + margin-bottom: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`; + +const TreeDetailHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`; + +const TreeDetailTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +const CloseButton = styled.button` + padding: 0.5rem; + background: #f3f4f6; + border: 1px solid #d1d5db; + border-radius: 0.375rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #e5e7eb; + } +`; + +export const MapPage = () => { + const { user, logout, isAdmin } = useAuth(); + const [filters, setFilters] = useState({}); + const [selectedTree, setSelectedTree] = useState(null); + + const handleLogout = () => { + logout(); + }; + + const handleFiltersChange = (newFilters) => { + setFilters(newFilters); + // TODO: Update map data based on filters + console.log('Map filters changed:', newFilters); + }; + + const handleTreeSelect = (tree) => { + setSelectedTree(tree); + }; + + const handleCloseTreeDetail = () => { + setSelectedTree(null); + }; + + return ( + + {/* Header */} +
+
+
+
+

Nanwa Map View

+
+
+
+ Welcome, {user?.name} + {isAdmin() && ( + + Admin + + )} +
+ +
+
+
+ + + {/* Sidebar */} + +
+ + + {/* Main Content */} + +
+ {/* Page Header */} +
+

Forest Map

+

+ Explore your forests and individual trees with interactive mapping. +

+
+ + {/* Global Filters */} + + + {/* Selected Tree Detail */} + {selectedTree && ( + + + Tree Details + + + + + + + +
+
+

Basic Information

+
+
+ Name: + {selectedTree.name} +
+
+ Species: + {selectedTree.species} +
+
+ Height: + {selectedTree.height}m +
+
+ Health: + + {selectedTree.health} + +
+
+
+ +
+

Location

+
+
+ Latitude: + {selectedTree.lat} +
+
+ Longitude: + {selectedTree.lng} +
+
+ +
+ +
+
+
+
+ )} + + {/* Map */} + +
+
+ + ); +}; \ No newline at end of file From 98377b647e8f538f72d8776cb727858902bf7a74 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 00:47:33 +0200 Subject: [PATCH 005/111] fixed infinite loop bug --- frontend/package.json | 2 +- .../components/filters/DateRangePicker.jsx | 27 +- .../src/components/filters/ForestSelector.jsx | 57 ++-- .../src/components/filters/GlobalFilters.jsx | 59 ++-- frontend/src/components/map/ForestMap.jsx | 26 +- frontend/src/pages/DashboardPage.jsx | 6 +- frontend/src/pages/LoginPage.jsx | 256 +++++++++--------- frontend/src/pages/MapPage.jsx | 6 +- 8 files changed, 239 insertions(+), 200 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 61686db9c5..01d79c0516 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -23,7 +23,7 @@ "react": "^18.2.0", "react-datepicker": "^8.4.0", "react-dom": "^18.2.0", - "react-leaflet": "^5.0.0", + "react-leaflet": "^4.2.1", "react-router-dom": "^6.14.0", "recharts": "^3.1.0", "styled-components": "^6.1.19", diff --git a/frontend/src/components/filters/DateRangePicker.jsx b/frontend/src/components/filters/DateRangePicker.jsx index f15e01f99a..6699dcc873 100644 --- a/frontend/src/components/filters/DateRangePicker.jsx +++ b/frontend/src/components/filters/DateRangePicker.jsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useRef } from 'react'; import DatePicker from 'react-datepicker'; import styled from 'styled-components'; import 'react-datepicker/dist/react-datepicker.css'; @@ -91,17 +91,30 @@ export const DateRangePicker = ({ onDateChange, initialStartDate, initialEndDate const [startDate, setStartDate] = useState(initialStartDate || new Date(new Date().getFullYear(), 0, 1)); // Start of current year const [endDate, setEndDate] = useState(initialEndDate || new Date()); // Today const [isUpdating, setIsUpdating] = useState(false); + const onDateChangeRef = useRef(onDateChange); + const hasMounted = useRef(false); - // Debounced update effect + // Keep the ref up to date useEffect(() => { + onDateChangeRef.current = onDateChange; + }, [onDateChange]); + + // Debounced update effect - FIXED: removed onDateChange from dependencies and prevent initial call + useEffect(() => { + // Don't call callback on initial mount + if (!hasMounted.current) { + hasMounted.current = true; + return; + } + const timer = setTimeout(() => { - if (onDateChange && startDate && endDate) { - onDateChange({ startDate, endDate }); + if (onDateChangeRef.current && startDate && endDate) { + onDateChangeRef.current({ startDate, endDate }); } }, 1000); // 1 second debounce return () => clearTimeout(timer); - }, [startDate, endDate, onDateChange]); + }, [startDate, endDate]); // Only depend on the date values, not the callback function const handleStartDateChange = (date) => { setStartDate(date); @@ -122,8 +135,8 @@ export const DateRangePicker = ({ onDateChange, initialStartDate, initialEndDate const defaultEndDate = new Date(); setStartDate(defaultStartDate); setEndDate(defaultEndDate); - if (onDateChange) { - onDateChange({ startDate: defaultStartDate, endDate: defaultEndDate }); + if (onDateChangeRef.current) { + onDateChangeRef.current({ startDate: defaultStartDate, endDate: defaultEndDate }); } }; diff --git a/frontend/src/components/filters/ForestSelector.jsx b/frontend/src/components/filters/ForestSelector.jsx index bfb388451e..f1d9278161 100644 --- a/frontend/src/components/filters/ForestSelector.jsx +++ b/frontend/src/components/filters/ForestSelector.jsx @@ -1,4 +1,4 @@ -import { useState, useEffect, useRef } from 'react'; +import { useState, useEffect } from 'react'; import styled from 'styled-components'; const FilterContainer = styled.div` @@ -124,18 +124,20 @@ const ResetButton = styled.button` } `; +// Default forests array moved outside component to make it stable +const DEFAULT_FORESTS = [ + { id: 1, name: 'Forest A', region: 'North Region', treeCount: 2500, area: '150 ha' }, + { id: 2, name: 'Forest B', region: 'South Region', treeCount: 3200, area: '200 ha' }, + { id: 3, name: 'Forest C', region: 'East Region', treeCount: 1800, area: '120 ha' }, + { id: 4, name: 'Forest D', region: 'West Region', treeCount: 2750, area: '180 ha' }, + { id: 5, name: 'Forest E', region: 'Central Region', treeCount: 4100, area: '250 ha' } +]; + export const ForestSelector = ({ - onForestChange, - forests = [ - { id: 1, name: 'Forest A', region: 'North Region', treeCount: 2500, area: '150 ha' }, - { id: 2, name: 'Forest B', region: 'South Region', treeCount: 3200, area: '200 ha' }, - { id: 3, name: 'Forest C', region: 'East Region', treeCount: 1800, area: '120 ha' }, - { id: 4, name: 'Forest D', region: 'West Region', treeCount: 2750, area: '180 ha' }, - { id: 5, name: 'Forest E', region: 'Central Region', treeCount: 4100, area: '250 ha' } - ], - initialSelected = [] + selectedForests = [], + onChange, + forests = DEFAULT_FORESTS }) => { - const [selectedForests, setSelectedForests] = useState(initialSelected); const [searchTerm, setSearchTerm] = useState(''); const [filteredForests, setFilteredForests] = useState(forests); @@ -148,37 +150,32 @@ export const ForestSelector = ({ setFilteredForests(filtered); }, [searchTerm, forests]); - // Debounced update effect - useEffect(() => { - const timer = setTimeout(() => { - if (onForestChange) { - onForestChange(selectedForests); - } - }, 1000); // 1 second debounce - - return () => clearTimeout(timer); - }, [selectedForests, onForestChange]); - const handleForestToggle = (forestId) => { - setSelectedForests(prev => { - if (prev.includes(forestId)) { - return prev.filter(id => id !== forestId); + if (onChange) { + if (selectedForests.includes(forestId)) { + onChange(selectedForests.filter(id => id !== forestId)); } else { - return [...prev, forestId]; + onChange([...selectedForests, forestId]); } - }); + } }; const handleSelectAll = () => { - setSelectedForests(forests.map(forest => forest.id)); + if (onChange) { + onChange(forests.map(forest => forest.id)); + } }; const handleSelectNone = () => { - setSelectedForests([]); + if (onChange) { + onChange([]); + } }; const handleReset = () => { - setSelectedForests(initialSelected); + if (onChange) { + onChange([]); + } setSearchTerm(''); }; diff --git a/frontend/src/components/filters/GlobalFilters.jsx b/frontend/src/components/filters/GlobalFilters.jsx index 1a4cb3a0cc..e14a82268f 100644 --- a/frontend/src/components/filters/GlobalFilters.jsx +++ b/frontend/src/components/filters/GlobalFilters.jsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useRef, useCallback } from 'react'; import styled from 'styled-components'; import { DateRangePicker } from './DateRangePicker'; import { ForestSelector } from './ForestSelector'; @@ -86,56 +86,79 @@ const ClearAllButton = styled.button` `; export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { - const [filters, setFilters] = useState({ + // Only use initialFilters on mount + const didInit = useRef(false); + const onFiltersChangeRef = useRef(onFiltersChange); + const hasMounted = useRef(false); + + // Keep the ref up to date + useEffect(() => { + onFiltersChangeRef.current = onFiltersChange; + }, [onFiltersChange]); + + const [filters, setFilters] = useState(() => ({ dateRange: { startDate: new Date(new Date().getFullYear(), 0, 1), endDate: new Date() }, selectedForests: [], ...initialFilters - }); + })); + + useEffect(() => { + if (!didInit.current && Object.keys(initialFilters).length > 0) { + setFilters(prev => ({ ...prev, ...initialFilters })); + didInit.current = true; + } + }, []); // Only run on mount const [activeFilters, setActiveFilters] = useState([]); // Update active filters display useEffect(() => { const active = []; - if (filters.dateRange.startDate && filters.dateRange.endDate) { const startDate = filters.dateRange.startDate.toLocaleDateString(); const endDate = filters.dateRange.endDate.toLocaleDateString(); active.push(`Date: ${startDate} - ${endDate}`); } - if (filters.selectedForests.length > 0) { active.push(`${filters.selectedForests.length} forests selected`); } - setActiveFilters(active); }, [filters]); - // Notify parent component of filter changes + // Debounced notify parent of filter changes - FIXED: removed onFiltersChange from dependencies and prevent initial call useEffect(() => { - if (onFiltersChange) { - onFiltersChange(filters); + // Don't call callback on initial mount + if (!hasMounted.current) { + hasMounted.current = true; + return; } - }, [filters, onFiltersChange]); - const handleDateChange = (dateRange) => { + const timer = setTimeout(() => { + if (onFiltersChangeRef.current) { + onFiltersChangeRef.current(filters); + } + }, 1000); // 1 second debounce + return () => clearTimeout(timer); + }, [filters]); // Only depend on filters, not the callback function + + const handleDateChange = useCallback((dateRange) => { setFilters(prev => ({ ...prev, dateRange })); - }; + }, []); - const handleForestChange = (selectedForests) => { + const handleForestChange = useCallback((selectedForests) => { setFilters(prev => ({ ...prev, selectedForests })); - }; + }, []); - const handleClearAll = () => { + const handleClearAll = useCallback(() => { setFilters({ dateRange: { startDate: new Date(new Date().getFullYear(), 0, 1), @@ -143,7 +166,7 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { }, selectedForests: [] }); - }; + }, []); return ( @@ -168,8 +191,8 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { initialEndDate={filters.dateRange.endDate} /> diff --git a/frontend/src/components/map/ForestMap.jsx b/frontend/src/components/map/ForestMap.jsx index 443930dd28..b423ba7532 100644 --- a/frontend/src/components/map/ForestMap.jsx +++ b/frontend/src/components/map/ForestMap.jsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { MapContainer, TileLayer, Marker, Popup, useMap } from 'react-leaflet'; import L from 'leaflet'; import styled from 'styled-components'; @@ -94,20 +94,22 @@ const createTreeIcon = (type = 'healthy') => { }); }; -// Map controller component +// Map controller component - FIXED: removed function dependency from useEffect const MapController = ({ onZoomChange }) => { const map = useMap(); useEffect(() => { const handleZoomEnd = () => { - onZoomChange(map.getZoom()); + if (onZoomChange) { + onZoomChange(map.getZoom()); + } }; map.on('zoomend', handleZoomEnd); return () => { map.off('zoomend', handleZoomEnd); }; - }, [map, onZoomChange]); + }, [map]); // Only depend on map, not the callback function return null; }; @@ -135,24 +137,24 @@ export const ForestMap = ({ return true; }); - const handleTreeClick = (tree) => { + const handleTreeClick = useCallback((tree) => { setSelectedTree(tree); if (onTreeSelect) { onTreeSelect(tree); } - }; + }, [onTreeSelect]); - const handleZoomChange = (newZoom) => { + const handleZoomChange = useCallback((newZoom) => { setZoom(newZoom); - }; + }, []); - const centerMap = () => { + const centerMap = useCallback(() => { // TODO: Center map on selected forest or all trees - }; + }, []); - const fitBounds = () => { + const fitBounds = useCallback(() => { // TODO: Fit map to show all trees - }; + }, []); return (
diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index 56a7a60db6..6f174d53ee 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useState, useCallback } from 'react'; import { useAuth } from '../contexts/AuthContext'; import styled from 'styled-components'; import { SurvivalRateChart, AverageHeightChart, CO2AbsorptionChart } from '../components/charts'; @@ -40,11 +40,11 @@ export const DashboardPage = () => { logout(); }; - const handleFiltersChange = (newFilters) => { + const handleFiltersChange = useCallback((newFilters) => { setFilters(newFilters); // TODO: Update charts and data based on filters console.log('Filters changed:', newFilters); - }; + }, []); return ( diff --git a/frontend/src/pages/LoginPage.jsx b/frontend/src/pages/LoginPage.jsx index cb1f784baf..370136bdc9 100644 --- a/frontend/src/pages/LoginPage.jsx +++ b/frontend/src/pages/LoginPage.jsx @@ -2,6 +2,7 @@ import { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; import styled from 'styled-components'; +import { Navbar } from '../components/ui/Navbar'; const LoginContainer = styled.div` min-height: 100vh; @@ -91,146 +92,149 @@ export const LoginPage = () => { }; return ( - - -
- -

Nanwa

- -

Welcome back

-

Sign in to your account to continue

-
- -
- {errors.general && ( -
- {errors.general} -
- )} - -
- - - {errors.email && ( -

- {errors.email} -

- )} + <> + + + +
+ +

Nanwa

+ +

Welcome back

+

Sign in to your account to continue

-
- -
+ + {errors.general && ( +
+ {errors.general} +
+ )} + +
+ - + {errors.email && ( +

+ {errors.email} +

+ )}
- {errors.password && ( -

- {errors.password} -

- )} -
-
-
- -
- - - -
-

- Don't have an account?{' '} - - Sign up - -

-
- - {/* Demo credentials */} -
-

Demo credentials:

-
-

Admin: admin@nanwa.com / admin123

-

User: user@nanwa.com / user123

+ +
+ + + + +
+

+ Don't have an account?{' '} + + Sign up + +

+
+ + {/* Demo credentials */} +
+

Demo credentials:

+
+

Admin: admin@nanwa.com / admin123

+

User: user@nanwa.com / user123

+
-
- - + + + ); }; \ No newline at end of file diff --git a/frontend/src/pages/MapPage.jsx b/frontend/src/pages/MapPage.jsx index f49ea5616b..e062b05916 100644 --- a/frontend/src/pages/MapPage.jsx +++ b/frontend/src/pages/MapPage.jsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useState, useCallback } from 'react'; import { useAuth } from '../contexts/AuthContext'; import styled from 'styled-components'; import { ForestMap } from '../components/map/ForestMap'; @@ -77,11 +77,11 @@ export const MapPage = () => { logout(); }; - const handleFiltersChange = (newFilters) => { + const handleFiltersChange = useCallback((newFilters) => { setFilters(newFilters); // TODO: Update map data based on filters console.log('Map filters changed:', newFilters); - }; + }, []); const handleTreeSelect = (tree) => { setSelectedTree(tree); From fd148293b4a140c6807e806ae9cd29d4cbd39894 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 00:55:50 +0200 Subject: [PATCH 006/111] fix --- frontend/package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 01d79c0516..fdc499d8ed 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,7 +11,6 @@ "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"", "format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,css,md}\"", "preview": "vite preview", - "prepare": "husky install", "test": "vitest --config config/vitest.config.js", "test:ui": "vitest --ui --config config/vitest.config.js" }, @@ -41,7 +40,6 @@ "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", - "husky": "^8.0.3", "jsdom": "^22.1.0", "lint-staged": "^13.2.3", "prettier": "^3.0.0", From b264182a9cb6185220056bb9bc5f1e640f9a3f47 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 01:02:49 +0200 Subject: [PATCH 007/111] added image --- frontend/index.html | 4 ++-- frontend/public/Tree Outline Art.png | Bin 0 -> 80363 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 frontend/public/Tree Outline Art.png diff --git a/frontend/index.html b/frontend/index.html index 664410b5b9..c54a2b6728 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,9 +2,9 @@ - + - Technigo React Vite Boiler Plate + ENTity app
diff --git a/frontend/public/Tree Outline Art.png b/frontend/public/Tree Outline Art.png new file mode 100644 index 0000000000000000000000000000000000000000..278908c907ca0c0e9cb01e498d3eae356c2208ae GIT binary patch literal 80363 zcmX6^1z1zx``;Lh8jS811(6sb-65bT-7QF$bTb$!tx_tf(gM;TF&F|WCEaX_bc}BH z-}m?5^XxhIZuh?TJ?HcGeNU3!GffII7BT<;K%uRrZU6uf;13A^RD}3}5`z@O4_ppf z22TNi(0c#?JQe`B#Qy}}0007D0Kk?V03e$S05JM|XxEp=|3UEliKaRZM^_~}j6Wmw z(K7eLkNB(bU#z?8DE@%hU;C*B@dhyvN&wz5A*sVt18A$O7zNMo3Znx-anb-MCRGHJ!%W5;`J6de<0|$C&~edX*%-Wk$dXgHJ)g%}(#y^()b~UrY9Z zK~6zV&c7lGojGO~-!Jk?Ny*?pqDhH%c6J%|Nx}4cM7>jcJ{ZXL0;zB~c!mYFtBbbb z2)>q&wSjN!qVt)rIaIPS8A8z2Ysg^-iv+~-!($_#A!pl8XPYL=mw==n7KN*Y^9*%iVyac}UFW|avd z^FVFnSH?#I#|y|cC&HB2CybtFL~RV}v+mhyKtIw6TJJ}F7xxJhB~$?Sm+2hbkg4^w z6d!_uU-C_c5dVAuUU}C3{y9L(w3{Ddb^o0X4Gu$Pteb)@S>aHF~PSPD7fllbAXz z;H=%=W?eEdIgab?N9x8)(q-}(mTlyur8Ufh5CUO)_1|jn5-p|JUZclA=X21=FF?i< zMAvu087^vnRfD~&v5SBWdcfzI%58gidX>1VU4|m;KYxRlT#7u23OI8- z4v5e!sd~~PRfJK34N+_f6BH1u0+dXh$B|sS&q)Aaa8j{l809T%_9JA=5~eSzJuD@9 zB_#OyGBsfJl2EalptC!sT5~D@m6s8%@*1Y&27%DC_N)$*v{;LLV;Vk<)#(D1%8P2PG)nIytfIvKuRCpA)0-u<# z4qzkrQ(PeF76*>g`|1RNs>_{v=jQyE0(8OjzG2E~Csb(S$XfV}4Auqe#i-(>;tz;* zjvhP3o(Huqu+})m;A(oKUSOQugZ+WMe9AheKKq1`oXQ0QdM`yfjHqqGK|ckFR=$o1 z*-H3S(0X(b{%S!jyHXuywr`NAD3=)rSI7=of&LxdeV~CyBlPv6!f^~j(4IN z(Xu7?y6<2&gKrlB$6x=<4{fOG zf5=n3<`6Iuz*YJmQQY#C%EuMzeaP3M=w?5KNB-*>8rq)*UW29U|Yzp;Zb7fw?8 zMWkoK-m-+GWe^K>uJbkWFR;#^QfG(MnXh8IE0KIZkNowfyX5Rc!QvNO)0Rq+b=CY!j=>GDmfIxBokj6*?-Z`7nMQ$Bf~7z#wKG-Ct3m^zrqmP}{-w>%KMB@^$gR>%s6 z5pmthMoikY)00;}14-6S6K0y*+u>kv1?WFQOy$uRr^Xv%6q2dBsw}d9>wA%jO2xmP zVs~Og`uF2StNeNAg;Vchha;GxSXCbpD`@kE44(_9MFb`LAG2*{8OU)LioA4LSaLjKon)q4JGeWzmFZ1ia|6C zx-lhwus|@AqsxD?fU5f>-Vw$S1GOvE&l|Dct@7?&{imn8P~gOLA;XyuZ*qKiyie5P zl_~KQUNUT)I{~e)>GPp;%&^Bh3&e4%#hH>K{qi}}NW4Q~j*=&~mNfqXsxKmA9TuNy z`}kwSBJPCd_#lC`toxMcgC^$xvAHFL( z&e4mMfBOq`S6rOB}eGbh~;v z$D;xHF-PA3j2Nu_ZqDbp;vnKyCE!&Mad|$_JO|atGKS%a)$GZ~^~~9#?MQa2$Og!f zQwLP9S7g2)umUe^;J!D-{qOazl*;{?5BuSpK})Ie{XdYT|LNVOTG@y-41Bp3T@>{7 zrcWk61KVE(^J82Mhl?KR3T=Q<%+~f}!Xy{aD=3XYe5{NTVm&HhpbBH4-TIQV*Xp<+ zfse-2;eWX?Nk?aP{5lJ4T826srC+yy01sJ*< zUzA1_NL$j0i~s~jkmTJ{ou1*I@fs zOUqIQ;vfknn4O5$mlH&l#$kfDSygi%g6#AST|&9yj@;~&+;RruYSF2eKIbw!Ve78I zB}pSV%}J4G;06oHKSsd2h?rt(SRF0iHfXUhHxcKFMY(IzCN+^ ze%i_Q@pp?lvTGB9${W>catnk+j9X#OrCPEs#>{JHg+60?EW)|e8y%+!`vj2)VOae2 z9Pc}l{)-(+KZ?U%RZw1WA{R&MPRSOnioS{5UvDbAH{XK?eTUxExsR)DXqdQ@MRjtt zW<;B;xPf{woG4TxHo8zX+H0%bp4Wv6iZ_W=O6}&j-=45LeAj;{gMMxAX{T;qoEC+H zonpeRVX{MwuPn%dTWM`ZftJ7C+%^G1{rl6KejzusT!L+^#U(7jCNPgj6a|m` zvj38{#MljqkA>3@Rexf=eu!#qls~Vk57miVcAi2*`_Y9aqQK0I6QYeK%8tO-FTqhT z=wapVZ3I~M6t1ntj;>m7WT!kqly)2$UabwzXwx znVHjop$X&)Q%(M|+cUCPL)-TMw1Ptz`*)P`#il{=cO`NyAlG>bs#%3adxh9Vh4Nsk zLr+lpKkXr90))q)RqHIlsU-YqVb7j7=8&9=mfec9T`c>C-bpyNy^3bEP~~!f3Lqx- zGu5q+`@BmgrJ4*HH6ZVv*mK~1b1>AaQ`Ym5Bsh|+;0f}EJ9h-W5M?Jocn*+Lj#oZ@ zK-EUsd!(Xnh(6+7RSQV;rjIeV>}gQ{Y22nlRt#wC`&NOkejbGZQ9K}nT7P|>I42hK#cqouaT)P<`bx;jO!21p_-XlHs7Rbz7770> z9f1XK?lrD8F$cY7C(S|lO`x~tolgnn;t8O7cvY-tunB8!y>8kRO|B2xM&a`#%IYYh zYo(aVi6RVtuyC)(kn^Pt*ZtO60|u+q6XQ#)1H3RpBE(LwZs<6A>^fMF1SCNoPw>>6=#sN$eCkbn1@ z2Rw}MyRzG_t@|s%woGo?j{19|{Ln>$BQlcRH>=O*^35_Sp_t0CUF#Vrcn{%`3MX$5 zGx&Qy^fEAym~tk1le72m7k1+*ea+SK&Lg1#<83k}B9%7Vq$x5MM>ag1cZx@Jq28p0 zSusgnRO0cgVNWK$pY0JfWvdMEyR_53N+ZhN+6!=Uc7MS@D^9ovL6DCk^ZsD#I6B6O z9y6k_Y1#U9f#rs7Y{#@e!u$hgX$b#Tp|Z2MF0{KO0WQai*JkvGoyiAJ9bx~;PLUJc z?|qbMButE0o$^iyqT37nN1SqNJ(hzJ{qI}Gi|oCw$=NxU26jYa?8vi!Djd1H;1#bp z%YTz6pFG$n=V*^z$PCjF`}8S>FmbB?5FQ&&Syv>#DOJ<*e61KZ7Qp7kiAwHPS#cjb zCdcB;mK@5bDIjd=7QLWZed73sG3>UL?%EdxS!lEpsVp1IDj_7g7g6L7S%LlgSHZcDNjme5+k8;ej)^XtMIV$UbN2W`9&RfTJ|9ZDUyvJf1r0ENL!3MC53^+JCh zUdIf3$eFT9n!cCOxNo@&2(@RwuBSfK=`|x81bk}FG6!kWkP;$M!Z81Cmg}C|5f$-j z@^~v&^!5o%L`Uj;zz%W?2H#H=p(0S+M-|1uzL2b5yfrIc5uQ9<$se|xZ&0R4=}`jV zle$f2-Ha2g^^5bTUs&fmXJ%4oPi|jrW6I8oaN5|YJU&HGiix8gn&ld<1v5?%zOtWw z$bZhGO-nFY-&-wN_pOQS$=3dPQfRCR-(7nz)0ovt35$SVX$}$D$dY)?3L8(gqPiOZ|vGRtkH4LoBDD^4emJ@Z0DHm;_*xqRFY{2XxJqvqr&tPJIWxBFm@~V2X&M>PLIy3B0^> zO0pl6)|1eHG@?C1dsp40Z>cqp##0;_nT5(TEaDS`ae9Ja)Xg?FKr^_JslhLUNp1qL z#VB4yeZoH|8$fq;y>f~L3P*60lzoiQqZV|0KXUmW!H`Do5@n$V$J**Ii{LL(^TI5 zkDwRTB!|f)a5EvI0Y`%6hl2K1;yML}%+7QJ7B5(MN-LDExi{of=E!iaH5L>gAw+B< z!CvnIMUkE)y;Cx}{2pThYftpyOB7^W5x;=b`me85q-Jr=WDNl@J>v6@MMhau6Z`&w zd;!rWBC>L&NzoBLMTEIG(AI&;g_$>He8YH_td>#VK2VUI$Q!=GSf!Mre`m?A<7Z>q z>pwHbG05e>eu{*lQ8ipeMw{#!Dk6m;Q{YD>_U+)}vdAWJhgw2x;%a&ebLe;+HB zcU*9fI!?{>S(*)bT?1>s@<*a<>ZX>VhMgDLGsTe_^lR?UEa3Z(x;~&=)EJ8-9-5-i z0}9By5FxlqZ~3YIKT!FEcHEpO!G{ZAbD?Pz(>LAm|2!$B^e$1zwrDl#N)7DR5|Nvuv8vOkR33iiuy$GR-04s3P^yC)6o zD?Byf4~LBmh*QS+{*kjmp(3Bg#mb!C3L%s4a_tMr{i*o(`6LdF2(J@m+p{s55!_y( zA{mF^dG1eQhFsNGDS7OY-02Bo^UotKFco#eRpc|-fh2|rZ2l(7xf|MI$)Z|s5LM!C zDokjgC;`qoX4~RcXI4pz5ZFbP&CGC3QM;GG(1hk3zU^W1-zhP(FF)_d&%EZ^G0$CL zvk4<*p@&1Kk*^1Qn(xO78J;l{nEy|e&1sdy6NDt{%>z;PW&%OWRHgUCGtHqVx_>+(KpMtVl&8Sco>o8yqI3>|>eSTJiZQ zOW%J|E^S(iG7fW6aznbDuscTXY%Q|Rsuhf4vJSSOH*#n2@|rpclHRVn#>}8w1Mnk% z#1nT+D^v#(GZqubOGR*w$}%5o;2RPkqvlIgm|RHGT$ zW?tP4Cjc>rK228pm2US~Tlx$LL-2Wyk4csa;5~n;Ul)n|2Rqvj@+&HThigVc$f#CE zNWv)9wS`<_EJX)H`$J`dRuPExzsviNIo1*8P%aPAuW~wGoq!(OgS{#?`wogq9LM+y5fRVklfBz~JfxkS2FKRJSp; zKd{#bU$XsV{FW~2lug~VQ8evRxhe|qS){!ka34;rTAqu*%eSv^>6cEg(2~onFE2GZ!xr15j!mrwh$TP|VBu zp{k#mjFv|*gin+x=a3DuQ<~Sx!BlR}R>85z?>pFCmf#l*9XUj&&y1f)S}Z&zigA0? zj|WKL9@$a6{_HHtcfQ4RH$(q!h)A4h({WN z&=;@j_83i_=~Qpf-opzYMwCad+_BYJ%6(K^0FDo_(d+iR&H`4f*W4!9kTMFRZQQXq z!~+#}?>r#zP)(v|$nkb5Ac0w-_`)O?O?npaOD(?G?xzC@z%>{7%I9xJ#LHLN2!qeo z`A2WLo!G4eKiwvB1!hQxF@-M1Gs|#YJ{@xA`BWURdM#7bWFmYsG{e3sSe@&!%(wrz z=3$)pOu>i)vH>m1Q=ml+=Zvk19aV&Xw~!AifZT3fzq(XX>E4GySzNV~-@NkKhZdX| zZrGPZZn1XwbAqEtcDGSp!!SMP1^W!K|CVX(w|#KNLYFjsSNsmM29I)1bJQt$-AfkW;?w^U+e zk4_Pz0%}-cKPDCJaJ|RHPI~mjYIlTcIbPNh7sma&;$GvkYQBp-e@_*8xQYGn3#pKt zMN-LUA;HrBFQ$Amml(mnbOOU}0a5k6N4v(YFC#TxCoMy$o2-w0Jg4_5X0nk9oIQgw zRM$*LK^tyz*^n5#3fk}85EL7GcCVm7Kc($fye&$mT{adt7JZ+ah`I|YGGU|3rG~^u zxO314-O7LpTarYA^qgW;2=*qXRlw&VY93AD{OUW!6Vdvf3hHT*f1Pf3b=_d+?t&0G zN|hiOlpr*q&VnHLh^He$BaYd<{|Apeld5$myENNT{pcC2nF>M{n~)6GVNz8l!^bGD zxpEC$-$CQ}%g1!q9ehRdgPyL^uf8zuO zwjK>F68NV22Gkf*LAjX3JP|M1(Q)fWt&yk9(IE=HkfBYo!f-%(&g*b)BrS(c^pQT5 zxYob#nazy9Gh`V3FF6)}Qkf$4Y)?d_FkYr*({;vs|Kh4}itKwAq^onBEs%4SL7nsG zci9H3dr!c5Kb6Htsm=w!WJ3MdBVw<)wt2lI5{SQ9<&$ejJMpQY?0T+XMfc^yX^(&0VIF9`gK6VK=s z&8qo5Ya(fGcNzyI3o>2x~OZcv!y zlIW<#?VQYqEdIuWW$jiRNwly(Itl4GYm=Q3Ru0Lmx+K;40$K9vX_D{D|L3lX49=Bd zTzt~gnvAx6YnIcPR5C8D#JD_6a8(Or$22e<#WsmZTX|aB0UIxvAN3lpgVZCT$x87i zw$Y#o_5!{2IIvDJiFTJlDD4Y;YWEmCz63SgkyEfOA6@Yu@P+aEpjb`^;cBouF zjQWvaf@UUHZS;Z+R)BOF)YH%ya-n0Q+~-4b$;M$4Cl`P*dDfZ--RlB!JA}ABaI249 zi6W>K-g+ncT!ukZ>y5h7gYm!)lG$5#A9Y@dget#1p63PEK^GdC zY?j8Igl3a($}Vir0Ga7Z^rTD0JaO}hM@M3~?R;%V17hkB zwSV0ANG~K4868NuQfYoe_F5W5(wrTRmd_zcNwdr^7I7HcT; z#)Ok@=lB96-w)xSc@%|LJu59!8aM6Td{mIRc4YZz(X8F`T_OmZ`ZRCfCSk!6_mc?z zK;|u}80ZXg^c!aM7W?-_@XeFKQXwf)Z6!CWxsX`m-f{$Xn}yyhINYBfA7(xx4S}59 z)`=T%xgPP#YhoVlSe!2uB6H}GEj(*In%+hXl;_HhyeZv;Z|*7kLtdVJ9zbQW`gFg( zRNDvBpKk-y<$ZkeN|1Dv`8Qm@oc?gsloWJ339%*V**{yBWejB!&i)!HG;oD)-^nGN z2v=UnJuniXBQ4b#^Cp(~MmMTZ!Tw9lE3hhRqIgF2Y*WvX-+vGKM7ReRh?4W;x>EnM zbJp@+Z^)~7w3kl~tp_L5RkM*Zlylu}5Yv+n2JYRu+kO~ipt@KfE74xfaC$q@-B(&vn}=5=@skOIs2X8q0VFL6D4hfQlJdM27VM8))ZUDP z>mgUdBX7#q?SI(fL&#vcm$fD6>F<|K+jlU*oP2Nj$U1Pb!p=Qm{3g1j*Z-tHoLk4q z=#%?|u`DjR-B@I&)}664`4e$K`aNPRY)uXbc#4qs&&9~g))djxe zV?dV5quDt+)s;q(Er%cy_nj?*Pc-3hJuC|Z#nO{7f$St*8?o#j7GxSEgeoQgmoR6k z0`djV7Q01*B^x7!uElm*P~M2)@;qaNpPt`4vI(cl%A<~XhDZ<4;y{H3{8v8ufNp!{ zG#7pI7`xqCJtua{6At|@#zOX0SshjD$mw8FaQ9V24VqoMSCWi*c&i>?mDSY4o(kp#FR4?9%bxDsoP(B5HaG9wTz)U_qNWKUT7`$tzSnKazHKk5d}pD6w3 z!ym^lr1`=KSJs!#7nP}kmXv(?0a_Vbiy}tw!FMJ#VW`5pm@&<*{a}cIWha?JT7}Yc zt%hm~(uIeGtZr+p45ao`Z$3EAqjF}0%p8cW!)er;r5R%wz}n`b`$6gHh7ZxFWNhhf#6p)U7rI8dmW%E=`zY1nytI!^fX9Q< zLDB`=q`O6W>>-(-VI4Ar9nm2dcT-QFrSl<6dhy*At>Q~*T%OkX-{>BNC2(gbiRj1? zceWrF_WMFHjm#%sb~i|p8x8gT$8F{#rLX>JSt>U#mCiqk`&*GKxjeJp2@m5Y#~4@` zRmieNaWP$s^yD^Rd-%|$(;xqm03ZJgb`d>Z0-4@^7gXM$6#7w5cDR~~)1T2rc8^HI zH3DLZ7*rQT1q9bNx1YEp?|Y^$_gKIOEqs12A1ywdiV9#l22^$w_fC{l*`6%z34yMZ zrUm}}cyWe7AEZ@@Z}MEjxdy{Y`>hdYXE7BVYnNZkIFA741b(5&f06=2V+6d+_z2;t znFlNR1=+0(5Vj9M0G(n;`rs!ofVW=bT2*bRobYT>(yG6}3#!658Ib?D}5fy5jT8M&Kg*^Ir52 zELWb!B1GkllpR)a){1_QLjTOwz)S3`yC9s>Ydt6cV<@@>;KCWgE_ooiAdV=SZAJiW z)Jz^u4C5nD@dRc@(LUgP8wHg&?Z+k3W}%B4QhG{y8aZT*V+6B_m0X(vO1iFv>t5%sQJ7y$i1N1cfNs;^=hy zrLt|6ql+Znh4?t^4#~cI3g=5{Cs0d>3G#Y=LjZ6x{v@T2BcjDcyY8w?9zOnIo*@Lx z`IU2x`RU5{&zfT6;egr=t$>cV%V$?$R}AfZwgj;&PkjY%i&-@6IV1ZqZH1XM^vAFlU|0nu%s_g0<*e<*+N+Rq7)RJ{^?eV6*< zyaCx$)sxurN9?L!%8H4on(1bu}1@#EQ07;i8RWL*!RaronwYV^MS zP*iZ1QV?Zt0mtnjCL1u1XsN(?Gref~jE`?F_8TLA+78OhdJa!D1J;X%i0@}4om){5 z&u2aUS#;SarK$2@w^7q_0ZzjZ6xN$*YLqKl{FN22nWUKsvO&_x$p$!d19@rne=WYUyED0e`?Cu5Vl28Gnqk7R5uwhP~c{ncZ z{7vdDl(I?tcvD+*_?-1Eg5|qWZkNMUAfXZbuZ7HOxhpRy?o0E5&6IwS4JftoGmMk< zuPnJcA|XHWsx~{$@PO&!#ZTfFQGUM6s-l)Z&f-urcE0Ah=JXr^1B*6>3xG|hk%kq> z`6}b!H#R@HMhBzNF_PQakGHUU5`p++X+-@Bea#h2s8b6Ta_imE3YLDy=WcWV+MYw? zvs|2zP?fbIfh`x?B2=||3HFuJQBJwqkBiHME7%{RxC!-aM*g56NVMB0#m2E_*$)Pd?eK>CgB8mOk{^CicVpw4GEhz} z81rn^2%%BSaz-U!vBsv1ys3Y-juIz?^mT8;E-5lkr_|*YeaFn_eq6NW;dXB`wfr?q zO$}IhtZu?oSJypw+MojpEgb6Drt)q0`HC9GR(+(_=XvB*+otJ$vJu31G$5+|hW=c4 zbt96VPoM%y+xAlRlSkCTd{M>g!C1h0x7d3U2^?*+hNF#KX8VBpD_vUGpl7Qlv{$cL zB*bpTT9&zJ4svJ@Id50HiC2iX5y#X%_9=!6ija2K)GJhEyugl*o!2T^Lga0I zeQwo&B8eAt3=tIUopxoXl>YmN29m+(6mfpGxS#Huq+`VeWDS4clcd0R-yMCKEdQtV z9p7~Dkrdd$?M5?{3s@q+w5~}`$3|q=JX?L_Y*t+%m1<(g+Wrx4`-{-;vFh);eSv+a zR4>_YZ}o35)z6*;lSw?;2&Z_k9!E2q{_jzne1)MBD~W@=Hy zO_(jR0+Nrv`^c;`x)VGqmVlWwgbOQ(j@_NavU%)YE%)MY0uwND+h(rhT|Mr&&xB*pWk(nR*RcERHz6F*pgTr+}u+Aq=0XQ(kFCKltV*Z76=#1ob}WTsb{x3@A(m842t9{dMnv#`J15n z989@uY=0{Ke*6P@C#zIvSt59XdSjlbzSi`>s<_4&fy*yMqbloM=zYi<&>yqpz>6Hp z!??MEoy--k#c>jYtlIIGj2Zm|pNeaxYa&HO&>Ko+b;7m0?yf@pZvtDKF;cgWdoG_+ z>Z2oRY~;ua66&_Y+D}MEp4Qz&g2W%S?2|P1C=rKSkac|n>HCS+o-I7r_`syS%fCd^ z-MpbBJz){YEJxrmfPWu(HXa6x0=$JzS~o;5q}t)iwxG_g36o*Mk&Ln{`t~M`04Zo!z) zto-GMhfc)Pc5-ajr(b$=(hHw@wej!!a4*=O-_M;Ue16a2mj6w|viIjZKl~{K8spaN zvA4=h)5KkZl&D4YjqBK!Ww`}|?-XIn9r-WQEq}bx&pC1zXwPFL_7m@Z|4j-UeHzUP zR+Ukr&(0NCA`~ONtt1isEgd9Ty&RCEs`n@3KT}{9LQlzNVjt)NRP{z>#XhW}T}{rPCXfifIRyV~-Ss(ppvnRSY#2?b7A&o4*##&Hd| zr+SVBT(>fw1N`JBygy0+Gwoy{oRsmG^I`r?g+y|LEi7(qEq7unXBxiY3(XRVRW00~ zTzQ6Yv9*lMvbKFU5ls)jKe$*pZnRx<$prsZ?_Xk^YqMQ7xtp1oHr+rwXR^9H!=t&7 zblsu(DabO@O-B9to25KTVXxs(h*~E1u2&vpN4e$1#hElyY~Dn0zi%Zd&w*#A{d zQcmz;Nwf9IEFaC(k1mPY9ESTh?!EsYpWtrFj%-c|M;!`3c#e`1z5tKAb5-I9 z8LdVu^z;eU&#kM zzskjZF;QFHA*Gj+&TO2L!yP=Jo}k-aF&>EI(f={`zUG>4(favYUIBY~qK# z&wq&9ibmLx&6zy6^gG*X?wx#x8@8tF@}Brq?}wv#omO__fppB*lQLSC$8kw1974V| zx?Nz7Q9O^6twL;8EgoiWSZrCi{kGVU zy*zPOCkwCKk}~XV*t-qb4UWI+Vr?Yhw8J=9p3u$g^(0j@UDC z-21Y`!OIKba(7}sOrsWt{Pg7GXC=nAuKp<*T}ynC-+)9E=eLojm9+Fyj`~}qEWORh zLmp0D2AP?eKjvw<^cF+PCBlgxehP?vEznxB<}sgtcLWn|Q%z{lLo7@s@hnLt(d`Qv zxTR?ou4vr8r;n1cjuD3b(&3qF=M`o%S-S7L9utv1*J!hvU&^yBut2Td^jTc#72SJ| zZU(Mx?ab~1!hPu9vu}})pRYS)#=C3W`Z6YkREMQCO!hDc91UEl z2L{mOU8W2cH`mlGo+st;kK+y}PRx!BGp#S@UWhHu$wGFQgy=3#IjL)tNrx7x4z};q zySAE)5sn)pdb6*2h{(&Ic~=ike?4`6Y4$64{&SguwKpAUp`E3LTK3(=>0eV+ZCwIH z+qMy!XQj#hQ_zuvp=&?f{rYRa2m7PoktjZc;KmbQr3Ta0K!faZBi6J^Zm~bDiJEz> z`}an4vwnD%4#I*m2k*a}(5h0mqIY#I19OEjWTG^!@{bzv`v`b5_dlvH;jel8PINDmD|HZ6nWgd=hIDKi)b3f44nBMyJh9#SDG7K^*IDVDi zx6oJgBu0TiLiR>o0jqSh`Ic;pn{X@xj%wM~>ga+Rp9%N{Hu7O`s*$$)#gFo$V!wM*;JD_DRoHMmxvp;QZb$=DgS`}35I@2 z4O86wdC3!!2UDet6U2P~d z(W3IE=Z#R>vX8xBhd3+430NjJgtM{AS~$#3@$oq|M1)jCQ4e$AF)-f&-V@Z}QaJg1 z3nMsn5so!}mkw3c5%o~}Y`8|gQSRy2uqeDm8a-tf3L?qZit$QQdxy;0JFqfZ(bx?{ zpNfv0NmhhkDY=m%+ItCxA67>ec0b~$V{8j(+|sqir?>1O1{QF`ry8$P(&XGz z8v;26>fI2pXmwdT=S@F360E4LP4RpS`mC%_m52MNq#jDifN9Rk>#j-pH=XD)eBz%! ztF~&ADaBx3+g;7Be!AQsuJYn*RCTG=1>@i5-SbG1kR+>f_3u$0>qiDMce3YZx-a+W z<_=#~`Q*U1KAk5kV4Qb(#lzf003v8qPc|MUpXow#mk%G>!;;3EQLtd84PNqY6H z=C9pQ*`;+f_jkJy1uiM4rx}t*Gi}~AZBz`NaiN#Aq;JM(mxZ8wRc5u_B{Rk9N^&&h zpli%21=A`eU(;=m#g%c$7fEm_H17Fd<7=H~HS2W!SLAYc424^0tA7aZo{uG{k_Q@BKwF7Diuc%U~d| zzWdZ}F8IL=y(zJ>-q|^)p*`WM8K(Nxza-YZ4s3AW?koC0h=>y8;wfeW7Q1NBhj7UbQ z{LS2}A0vo*ou;0M`v0Lz2#^c*AvHM$o<6@qeraQjpp1va1kMBRXnzQBG~+>b-h&*+ zt~aW=UkmP$0>g(iMRh}f;7ABm5&sI1aQ;MMpkzn(aj;s>sBtbm=HNNub?KLrcYl^! z<~X0-9Qa#J81uLC=uT`*61-AUPbjPMLZ2H%e#9yQeeZ z&6Y96E%%iDIViVF>&0j?AEKM_s|CC{*&e_5tTT>}je^Np^y5b1TDua|qgG zp#OOCTW%1&lhkCKc^5Q_i|y5WyGIn|t^=-du9;eLlnw+wQJ{{qIYz#Z4iJ^*BE|EF z8%&*($BXSAnXNmKAK8wD0pT%iYGQ87ij#9>L?*~q{y`jQ4Y;!MrwfLpbp&5i5#3ny z=4a(jeXN-zESH@0;-Zs%{;%B)s>F$4eOE{0Ntr$buDVh?mMEZ+k5EDoXe-!hHetNp z7iCC3nSmy{Q7O!`GVG?j*G)aTHTiSD;|Wq+E#IhcYbjwmVRWHql8j0mAFcil|9kZg zw;#w6Y7?L5P>j4c6r<)V;q8TVl$IV3ol{Uk)FV7}p8N|4BVyVFVc3njgsyS`eqH2G zqc>-YmX+zf(xdGyRI=_jRz>`luZ`Y^T>WwMPq80lFcSL0Nm7ie>ztk(s-5M8btA9=0nN;{5MaP()e00B$U)!G#JH%gm-MhTeR}N#mg?nu^(gt&L z6brnX1$upt+;~V*lQpn-A@?V7?GqJ6Y17yU1;O&)O_d4IAaG(iI^Vf~ z(A$hyO3Ff4Y+rFOZ|qcs^-%rcMj(L9%~JU(!%TEkP%ktgT1I#4MBldc1M+u|#*wOx zraM3ts6-+HxT6%W{hP`faD=WEDl7+zqXkmh32g~(X<_71lwxncNpcEDzPPdII?C8L zW!+kWs^a2B(t1}=#;q?Fh6o8&YusV~%w0q+;|4MmiKD&*kM?#d?I!=Vg%YIP1$@JA z)n>g268NxSr%5=at$0Nx+x?~YLnl=B4my60qX-!85o5CiuT2z350n^f0J>$WA&Vlt83iv|!Ef_rxzL@|~1I=|7 zJNPSmkL(BG+cGflGsaN9A$F z8Th?~`TxhxLgYj1xBCo)@`vLopS^?uJ`nj5jB5a2O@PP(me|{nQ3i+?roxbZaCK#RmrGUqDqI#k^Vt~305Ajqn+Sgi{u;o0wy&BF0;Ia<2(5KK+696m+3SC~Krm3*Vr_%`d5K3uVB9q&` zqQK1!+WSJL7p+_uz!!p6z^LwU(~7~&1Lp< zgQ1borv#XW^Te<SxL;QF zkbtpex1H#t;B(;Qko6Z|h+ziqhqvNpq{8~cSkHGUstZE&! zx;r}y0{`J@!#Z`nbTkA^BI$$!-Vj|GCS`>$&q3H@tZtL5G7aV(gy%FZowK&bskU+S zEIf{9uqkjBvJbZsPraw5Au!=Zi1Fg-gT$0z*tRW<=m0*SVb%_0FjwJ$J7MoS`{LyK z1xhY+b8jE32#powPSmxvIsZy&rB0|&Kz z@Fr452#5x+%jUIe&j~zzT3te@yqCHG{*JU^P(n!K?NGh13bUL=Th>jm_3P!zfT?&A z^Pvs?f53M&VMHki%Yk|Dx7a3E?L5pM2GunI-I;siO~4*Fup2mK{W-;2f?qQ$@qq0` zVMsX$Y=*hL>WxrU|59}(eDyVCRqn$R+&1h1(NPffKZwc+k$*wdvu2G+^j%<{#r}_pWw}Uo2Tc4gve&i|?WMdnzmdqCMf^YjATATwM-V z8^Mh;a5oD)ehz}&A>sf;*Mpeb;IOuJ4FN?70i6Wl*+ zU(^~eg5NAx7a$Gd>f;F00>5MtaSyfcXv(o=U7hO;j5-GRN>Py(KkD9#d&2Lm{4|lB z`gCGaCcC39+JCgPM`w|h&N%*6mHA>lk(pSg(Rx*hk_%`L=)uAjRIeNxl_8E(GH>;zd&wnWL;vb3ETji-DCqEK7@rB6h zogyQ9inQ?;soY&8cWDvtaU$fkzpa#gB(ia7%G6JC3F;!!aA^F;W?TDtMv45Ujbtg* z4$=#T0AK@)wu_jS+xO9pKjrFNXK>Wn>enlays`G_0VKX(nGzz~=IPQ&!a4CaqdKc& z?jrf#vafw*{Z(ZD1Ls!Z!1MMGHXu^oL*(WpJ0GSE{;!IB(@ey#g_Xfy{lC;bkzI3~ zTlVq@Yx>@ka3XgA}T( zq~Hlr6=A_U5O@%~tkcThf&52ozu({qh5%p-&jDHOi(<0#Ad3_y81RF@Kv@4Wta=@; ze4=F@*ZIqLB$}Uqt}xXfx~~OJW43O$<{T#49DcqnyptE!=TzZtIL~2FG`JszH#&gV z0&EsGa&Lhwk8QixZd9*OwE(CGK7yAuYwr|Z&%WCq4m3*mp4Am$Wp-FH4B8Kbt-W-0nvk#(j^okQjc0wxbSvfR z$}ZHdj%`I@jb@c*htQqpu^sKrAP$BAU;`deU@Bl=oaj-m&UGUA!-G}Orz^DX4(;|s zvo$dL4+w3E>-^UJaA-4Lg}dM|oYR4DzFh)0_`=QH@a6&NUJOoX?uSjJj4u$&`cUmq#I9_pq> zKlzb>FFg1Lz6Kt(#%|Azzn6poOJUVwI5`#`oPg+*_VAfTF?IpifKO3yD`a2)A2AQ; z=jxm%%>GueG#5lD&u=GyJ{w@q85r3F3TcNQrDn@vTTrLNWw{CyUIw3Nn7RR?n-JHR zyoNeB=IR&F>ofDgB<(U|9;~Bq%2$)CCA{(r9DE&{2HRYN!J~ZQ_azzi&g+Fhmes0b zwgJz}P<*WVBcV1E1O!0nYcM(!d@~m!c3^h$qiLT!Fnh(z2cP}}?`Zz;o%9Y8V`n1> zES}LYMz2oU=?}Z8<^x?Nbc$l!bC{!%KUh>6=hFC%8=~_9*34fnZ*as|eHH zh0T3{-?8tEj;wHdC49RQrv3prRzSgDp=1P9$OV<3g$g&I;3e?hZV@*F9IBKkt~NqQ z3#@x6;%%p4%8>r9&UNCfd_lycoG#zqPyYWx8<7Kgllb&tT^nfrC-{cQklZ4kgH?I` z;(3pm%>U*xi7fILk$+V>;SSE1s@q+gMY1fmt$lsmC1tAY!5xuWE9}?-FjVC5P21kX zWWEO3<1CfPFxVlQ{TRZ_PU=)l)I~Qo-qHl7b!M9;m)VnDv?dSbdgeHXJRjE z5Q-Qn@>QgWpEmdeBrF7EDkCy!o=D{Axal~OuP)lwzQ&bIx$0UpSj4TlZTWiff=JL# zD~agZ&E@w*-uPG-&&whmrID$;L*#Tr6)7;~${PnYGo1NQgv}{4v-ka5q~IBm=LU#$ zjTRZZOXSxXB8P%SZmtvw-{hjYa1=@iKQ~R}`2nij?oO^(EB%{Sevt}8MFtiX*_mG? zRIeFGrP>llV+a5?a7{!?*(v?k{#@kIX;wr0*p!G6pu&9vL`Hrj5;jVuP zM55MOB%qsB9jPNyPcKYZ`ejgqf4&wXn}brWj0q93P2`P1@|1?m5wrUMcaf3>MVh=K z@?k-d8P`Pq{7vNCP?5*EMPm9Tkg>EVj4S6=*RzN;YmhPmmDQicd(09e(sGW-FB3!_ z{jAGxn5!$yxflX~4Frx9sdL-D23B~G$b}BB&UpeT#~DZcM2eh_JK)Fpso7ZtFOh>< zXOvz(3RRBin<6v57s(P5cgFwJPYq6e%1}X7rwvtEOA+ zMJm|XS-lp;TiXM5KcX;@5T`CXA9y)8>R)d&~@ zfDJ@17U|f@zJ}$yR%G+qorMK75BVJne@6y&TR>F z`brou-4gk9r$|(071@;@-jv`mYqp4~K+gg{sRbOwk%z9KDWiEMKhiN3DN5G^hjMjcH?-vnV3ZXKayOZ(!4wt&Nf zT%GeoP=dy*A#g2F$;2LR4yY2;>HYg7*dZG7Ms693id{p!<7u9vHa{ zA}V3tvu)2Ywy71*C*^2g1!i4@LZgZQEcOUu2c}<#LHAK`x}C1hlG?GW_?7lU{znPl z`tW}sDd_B^K#*|4WDLVy4Wejh%q3_lD2 zzU7IJgw%-UmC+mS_lAjI!E1|Q&0&a{ih0ryob=>V6|Po6q!o6Z5Xm&mK9y4O{UR4r zi6K*hDD~X=0FmcbCr~D3u;q18WbzGN{M4itv$jv%);+#Db@PTzA|)!>uIjD6KxE(U zBs|j!VR=NF7E1WpEr*Fjrr=i7@8{Uo<~;*MYQ8U0v7Csz{(z(S)_K)ZONqQ9``W38 zIbnB2Qu!v64dqtb*W5l4X_ZN2|8k2&GUy(2&CoXFp2)y&MBM&*TGgKFf4XlxbC}4d zcSP>#-)Cy-`;vg60kDw*UXY`^eQ~b*0RL=Jf21Z=mn8u}1QZX1>DAzw8YP^C%{>4StBt&>>BRGzNf}7!@SN=PJbwiWjS^3Xb*IU zH`~LX+Om%uNuJ?&--K$3oF#Fmk=cu0N|Ch!nCc~RlNUq=!M+)A{1imb=ZVKYYxVB~ z1VOe&@O3Mwq51gtB~=hq0{+)f{SjYJnF$DnfGP0#tFZ7rsIHx#5S>We^h^ZiGag#N z*vBw=2gKCn$&y=ILF>2u;IR*kT>;%Q!>J-FJf++`JBf_gG?PU3K9H}R9TD6hau)pA z4fu=HU(?F}c9lXfqZO1Yi}^#fTnATfa__c*Pm00m$|~GO6|vKZ27KT`JLqr|UTFi( zykN~Xb=_7WMJFu0G#Gwd3RO?5YeKyK)^UT=SKzJl@M|U&=0TFz3#&d49trqFzfl(M z7fhkL1$^>@+qa3_WUZ|62|@0d-TcmjVO`<%iz+-dtc$A-{ZMZ>7#KG!4t_u&WSI&R zm%?Wuka+@6)Wfc{UvMSrP_3AE;JZ68VFpC~hIvURt*)PkVE&#zfVIKUz8(DejJoDV z+7fDXr1oJc)euk|^4GB=g6c4~&4(L1Qy_zmkU~}G`}{DNQ2>hkj=ACcTimBQxa0mX zWEnjCidZdz%Wwx-0#ow9Up^3794<_T&)dSao_40C^Rr�xWzT>b$S3BWqtx4B!V> zR>OPQVeaz~a|W|um4ri;%1nf831|>*zX|69ZBH+`c+~ZCUWCYO#GYtp4+T0x!ENzh57`Ju z4m!V1HDow&DA~!V#LWM^QVd3v2cKM+HA|k!Nz}32ei=6OSASR&O4PUf-dyNa8W>Id z$4qBHc2$I-H6Tb^0=3w+VhV@M=b_Y0Xq+GV<%Ahy;kWFtr4DSX1e=b)AHT!O4X~sj z{Co%&XN46HU~OgCCB$C741(kYKfbfitiAkX^cvS%rkH!u#s!|4X z&%7#fa-#k9;&jxvv8tGeS9}LEDPIuJ%@w(RM8!+&YzPZuv8dG|QBhAnH@$FZpGbu; z5#LfG*}IFB2o`yvph%Y@B411q`Ki9h-+e@`xr>A@bL_Jp|0!~;qsY8_B3&Md6mKHp zw%+Lk**gGl+8MDlzk z;{Tk8`zM#S67c?G$`L|(})@;xGF`-()rV}Bhk{X!&X zskn{avO_O9U*ynT6~RS2A13CpUjJ2=i`-4F_d@09=XN2HH&2O}@~ZUXImAXg+0Ok3 zkv^S79%}V&hu6RnbrWt^RXs)SrqJnlOEQU=zDs6@sp=$e8<9=tQzqX@A$qw;_j^xU zf$Im3fXgCly;X$7+LrG6r9mR!E)i+dRis^Cku{}6V*YV;iJil_??txU7df;{)%6RCDoB-1+AZ6_IC*SW_m#C>brf$gcE z_Aa7C-fSmwJCjPsMgeK*ED^WJ_}f(0r6T)YNtwExbvK#cfD)X&KNgvOSeI}r+(vb7 zhDgywv>n~LiA0RBAu*-hi2Pk-@l}yZ7H*ykg^HY*>gp0Zn8e;`O1*Q7J}vA`kzHXT zeRGKv%14Vv+L*)JCBIRBd@!VqNg{7qLY4xl! zUx-}1r84P+hB5Z+(*tsRfBUo&dH!pWZ!3%ZJ6A+n>JqY4Uug%q^bz^Khlro17WJ`G zpFSdka_g2mQh5LKhaX#i2X2o=mh4V``XUnBp$CVE3_Bv?Js@r;@YGMYOz?UZk*k^z zV8e03`-4TY?o7CSP1jryJGrwNKRo&00EqMs6bbLF5>0KhB-LJL_Yg6)jlUeZdyDML ztKuZ2fl=@HepZn|uZj5UPd!uuk;i6{wE?a!cm_b<7nK(|Hcw>G=OX#ve_BJ8q@U7^ z<{2rn&dJNYjwJ000J?!H=8njzMk3>05UKsKh>zuLB{le)9xgIztMjVkT49mqWpvN; ziYFfyr>_;gEYj}{kv*eC!td)6)DI|12#A^^GJ2VaXJadAssH;e6IqzYHBF*V_4w=m z({2uYkeb0qG!hwqS;T)#+)g0A*)NDREh}<l!fC`O8j%!POsoW7<+7keD1AmmS$e!gQeFlgW z+MWsreTxQFC0OLf=PL7#oUy6KcI`iruHGVUt8I{IEe|aDR-|1fku?=W9!;=FKU!i{ z`k_CI^l=v<|I@QOt#d0{L1f>@Dy{<$$w`bp-^O3w)*VG6-5mHZHGoAwBQo7fB#UMs znkn)6eyOj>i95Qq;%N(^yG0sTOt@`TYAkZ=nse(lW|7F7r<2(BRU0fiL1e#H=2YA% z9(hwF_u=@LRf0uBZ z3h)=%R@J%n8g@~n$$})bdG#&&{30^HsdMw_D84zIa9O%k6N#)APh{OY{5!iymD2Hi zXG$n4P)B6<-zq{18FLy~psV*AK_Z{{h-3=Yy)%24i`D(6Rw5%yi^yxPE?~l>4FN!B zPYf!LRIGPG)_%J6 zYPU)vWxYj)6cjnsLnNwI+(#XZ5Ggt!;dJ|Yh(vg(2q|C>Fzn|9W^T`P<@p{uKki$!*J*QI5}$N1E8iMOrM&p5YU@4qEd?Zc$E{rB8O!k1bpV=5zP zj7Y*0H9Ny-1$ai{L3OmCE*!tYX7;F5}95mh3f32$k;6+ zgTC9QPX(Q6Dp~!}LB9Hn$NqOGM=NjUryF6BZ^K?-2=c;$HfT3q^|Tx3jIQS#FgZ zA{Xs2d~^wF@ZR%@NY)?XZ_h8kAriPd{`evyTPli_+?{ye^!|2{@GL4)YBPq+sOYo- zhx3ax(D!fl9$=)}e}ji2_x7qpQ=#yidOZOKWA?r53!6_vn-Cas3@&P3xsrSIsw?n- zn15kz0Nm0JdvSFBwZm7!AZIxkS|8R%!&^%r^A4VPs!GUXndY%j)$y%g;Kx7V^;yuo z0F3_u_N)Q-%3x|6Pkdhp+XP?sgB`t9xRYIFW=X))V$}cO>^Ubr*!@YJwcZ1>|Aiv0 zFnb2{Ng$pVocjrS6oKFJ>(bKs6)$iGGJP0NeARZ2^@58Z;56(Su$A#`{M0nZWlo0TW=w_bvG8^XEgvF;U9d7`W5 z4xa^q*F$qXW!N(VQX9H=R{0t%tPGt>fXM^l=T5x-SrsEKaO%orJ%!p-8b&HfUXxmLT_!A`7#Kh>uD@ z&6Y2{C{i>gk@mDkWZnl)zjH^i_K=9@Z}zwIcV7~T_)8^{%J)P++As2gc6_mZ=C1x< z?uy9OHWra|W!lzOq~y{BzA5e4<6jo(#ao!vR=R9nHbM1H+1 z(loD#&&edHxJ=f|li06IU6H_hPv^&xtoIS|S`&XBUV23&XtI;*S|0nA`v&9q;dBbkxGRV7tA`16^Z)8IYpY$$o}?Se6q;N^(p}uIEAtq_3iBp z70G-f{&IbM)p|S;k)1U~N@q`CfKUQpmUl%~6mxZf4Qxg;tR5%Qx37rlzI}b(Q|)J{ zs|)lrsYd|N4GRAoE>cdv@7Uh;7khrT*buZ4aVsd|QC!4xh=}KI5szCU?x#get3@ba z|8q^hiA;Mgh3iu2{#-27VUQLIg#=k6X>V3_P;^-N3yGnEry86%gGMBAY_+ zNO({MZrp{7cauG=~_=BU?@8=SwSC@F%pN0y+DoP(6FAe+8*!UAX?qHEuN#-+S056EX2;cOA63;^C&Y0K31cx5~nl(T8g~6l0tzW;l1#XRm zf|s3AyHD4f3F`U7+{@6jG@L%0K%5}J55h*l_!@A2Bz#c~GJ8PCJfM5RkG#AI_C-Sx ztSR!B@k_`Gx9Z&Z$u=Zf7}_7qi3Sp&;1>dB0WS}y(coZy~rQ`h@3ep^59jG z$Vy2sPE;L{d#{Kbx+$`-n@I0hL~0cj$$mw|^jh3JRB9k{rLGI>UZ-^ln;^2~JCSaA zMRFBRxbBklQ`_PS{wuOIt8Bur7V=IdIERQ=_IOJ!cmMeHvr1NBvpWhNW-&G`{vV+Q!zzcm?K;&RWkp+WA zKA9oX{Zo+v%S86>6T41_a~gW@itZx&ON;dP6e&8`qArtbfT;}LDoz(Ud|N%xfnKr# zCyLbhHsL&cKR$))R_`39mq^7>+dGUnKO2mX%I*@m>fobDuUr)=@rMn0R&Ar^4w2ib ztdmQOuk*)Wu9CS#E^6!cY7n^4Ql#z|iM%g0fhn_40x*9icsql#)TGH$1cPxrWkM6!Rn4%0JSq;^q}iSLP=E-Vr?CV5%6nfN-u zt~TD6(&z`{wIXLri;TY^Qe&%#S4)ffO{V{a=ROrVJx@K$L2F`Bz9O#=j^~*wze85L zpk8(FcfY?#$$+e({O zTCZL`L}GN`#Wi1%X8jZS4%Eyr=lddS)6l^%1~zg_WW;wO*m{J#u07RWDsumAR~O(3 zu34Rn0X#u2!wg{LHxRY}@WZ@!Iyq>2H6y^cFf_Rbi(10(U17jXD02ziKjn!HfHR42 zeS4w$R}#4|rO_-xqJid6>I{667uKzSpWlWy`5?zpi@e+0f>c@ejD?>2;LQ6x*#|9l zre%S92;^TB&qbB?)rTNorbunZEwg%l^&prR4pnYGT_?%H4I+PpHUB{LKR9e}`IR;h zv@VgG)Uzu4LMyF(q?R_F2p7)6q1EaSefx_6pRUltPwfK-ZZCm;Ibq$mx-wd}Sx+Do zyl2A~&7k>|yF>xG;r$cvytbC_Z9_a|3vlFJ_&Ypqm`h1ay0>ffH-1G-sL?Oh^=3+Wz` z%$ei(tO-B6!6cCoR~^2htIvNPi&VMecr8G|on|eUwfC2lyiOcz4RGAyFc^a*pq8#zToUnp z(f)q#{c|GnsjCZNCgn8%YG$zM5q#ngkG{ujX&Ic1^xS|bFy)5Yvtj;5_@yqi_6Pq1 z#PvXzMrJ0d0)1UYf>&jzF&e)43^opiv2Q`ekzo3OCmI!7_Laz!wEwOHU0TCm4b?R_ zlC|rj@GIcfApYyOmqO4{+tYI>y85h^3FcmcD%Y%EPbybmfIl<~^W>zb;+|h*+wCRR zLhFm_kF+q`b%W>;@aGbcGg#GRy>uON7lQlKV8AF?d{qTt%0kCTjD+pod@e1!_@bn=3H zLcsB<@a8#Kwi|PcRBF_uP@o9-c8UM`y$SH3v#Tr9OtoiWZg!}m3BSo5IMvs@vM4+p zk^KCH4}kb*>VgN>mk(8Y zuQLWFd;wWM#N4l?rY&Cvjw1qm2g7^CAfPRFOkQCxei&*Vgf9Ek-rm0=1y`Gw}OxnEoPE{RXJZ zQ|Ad-MQi+iaQQOyY624@Ap8{IOOgb`Jar&*#rUrW9)mk0TwRGzsOAH6Z$Onx4oFN5 zV*liZ?a!*Ps3fPxqq%V9kHnwpHW=zo1ygBK#moY)Ijdt1NeUKO?%g?699GH>7% zv3?GoBEVekQt!ccZ$pvsnESf`SC`PhX{bqMy#mnSjtaAJyb1po{wl8iaIvtQG6Fyh z-~*AJV9YbH;pb!)-UI|gwr^nM=kU`&sNP0hi^fp7r34m-G3C4tJr~0No`*4iK#})! z*Atrsg#ZEYFbF>F4ujp{{xxDdR(r_t9^@Jk|Mk#~aPt>eS6*DIm4LYqpvrY!U{b#g zcL-Yoi&sEoYm)UX+;W542NJ(8??O#2pC`Kq(ohGKF0c>;@;?Wk`oaHlLyvI~@CWAE5G4F=f&gEL_!%Zo zgdTswxh1+dHm;ck{0#YP$A3L~4P4vh>Ppk0>aAL3n41l%`o;~n8znGpnga(n#SOEU zOH<&{oW$=dzY2>9uDzX-PGESU9W1#6Ek6LXwSK>p zsxkwsXboR=lodz9j8|aspHQbVPz&=rPiV_bDCQaKY*^h5I(`W|w2s&fn~oFqt_y|p zCVbEJPOh#jEA@t24)BDk4wyaO_ko|PfFxr};J+_Jqz!7#T1COPTME>b1GzH|PPSBk zBxS&M$Gil22?mBhkKHOf3YV*O4N{gIBca7O^@ojZ>Fz-|{EK~YoPl!%fM~!E9yNo{ zJHy4dFn93w8hGh^_cvb!3+qF*SJgGaSnE$sXe}xNJS#zqZ{XJwFrq8uo(^a;#rWQt zt^+-A20G7#pWcQTZ_E<64K^di<|cgo`f-phiKpWVsy>1r`aN_0WD6CR z1TDbX=Muli^LwcAQ%cuT^7;1zxOOOskxj(bXZN)*q&;{P#N4)x<;RSL8oZm7hOA3% zj~4SQ?A8PT7YdBd6#&%CW7c=DZn6rq*C0+6%;?! zzJ@vTp;A)YwyM8tSz*z96=tUvAT$vEJ(l==IR(mo<)Vs83Q9wD@OcRSB#CLL`fb(- z#tQhK!7P~C;t<9leWAY5^1ngF&+Uu4Z$3QuLH&^oW8LK7JOMz>^7pNR$sHhO3HHy_ z-H09h+dqWw10nAkjO{gP2_MXjyBxf*9+sYlFULYoZ=Tp~#McT#0e=XZ2V-hM&pzr z^1!M}>JJZWTH62Grh00h|C@wu8iYvJg6 z^@ly{uK_?5l)MGg{)N&TF$+~jf0VINZRpv4;MUT{INlI81_ob)x!oWpGd3@AIuhpy z0IFkOF$jLwq#Aow9I8@Z-UU-yLhcPfAjZd*mhr{h4!T04`LKKwblC##Q!%ff#y5+K zB(|mQe-AosgxO~yvLU|K zNcbMN@=)S=S67rBXa`X}3&HkuuxhV=rn~TULwMz76>eFYiPrbsfh47u)Am6x=9datKxkMzPJxv zbExoW8{?-GwhAN3J#E$CX_ReEOmUEDcE$|`yddTaSk@lemVgb~)@Ki#{=OV50H}&M zJqPCXQDOF|$V@;Oc)7u_hR{HBLSjhT=@VtqZ~6e*Y=k9ipw1(8Er$5da0nr`U2Xjl z+O~l?b0NIGIn2E#WJ#!H?}h7+U0rw^(b>W@4}@x4{Eozz>kCsjDl`4fHz#ri+-3wOpXI9N3I*hMYV#@v}-+)kh?0eC|4htXy9~o$JSn2F4DhyCW`3fbT zZiyTsmmj*iVr)bm|NC=!5qDdT9#_X(n@WoGy)P2dPNfs->ViBW>Zr(_%p(7|iTpH9 z6N_fra0%l~L=#A-{=S zC@HeOjmWrQk@jaqp2;PWZLx@3^#sbJ+KK5kk%j)QehcZ7c|}DSm%NFu<)j8gYV8u) zFOKNIcEiB!P_~E)^R*+sLE1;ze`E@RFZaRJJ&>;x zPqxOyx8@o~>|)lj4bbZlY`&N9qi)TI(0;Biu$_1S;o$x|e6k-pf2qQ4IVVAFm)xEQ z=4+n&EWdvBy`G6S9|fEknXiNQ5m#4=?c7`dyQar2>r?2rAK!xsuR@l>n3r6fX@{hL zhpL^2?0~bL@ar8I`Wm!+1oaj|>tA7rKP)Q)NAJLcP7ssOl8y4NDXZYjM^3Kf3`*!0 zV2Fbf3n%v5+*=1ao`Z#rA*LU(=TA5ahdQpj{TBR^U;W{R%?G&P1w=rjkDy~=pgnQU zi#NzX_+uXAcEa00;g!(;KRCVzbDM~-U1?z+5cQk-zbEnfp14;V0xPD$jV0cgjVA?0 zpMY~0VE0_i!c$lxaXmn)!jucpuntt+g}F1)1~&D*o%-IktoSVhkB>3GsMJgh;06a5 zz=gzYKQyDuk6`jW$W;onwYH-hie>-i22nTQ`c^nL2KL;6zh8t?zrgJ~5Vaauoy_L} zz84)_4okv#+DV(fjipoS_(HJ`@SisM)fw<63Ei%zt4pExuW+RU3|I}mmvNXs9LHz? zl=0tRf5C}U76q_{2*`8*K70W(t-#!fjKM$S;!SLudif1l5)BPCgV2PG10n9#nFJh9 zJsJcLSGl^NNyHxrgF+Qxd?e)WY5qIW?Y3$rc%?Xu9t1&CFn7#44}l>y;mjs%!tXzD zAMNVOumRP}ZG0QTM-qSEq6VqTpTOkdP_Ptc?USPhfBk@<@({cU4(EXHPeJD@(BN-) zeKU-?1AqPs*IPqWg=9WgZLRel4^`_rv}WTH0r)`Zc=-Jlm|p~L_a$~4WqPJ^UYI!# zD(X-3bcDBB%^T|L@Wn$IGzuPe!#wy0CO>({2mtO7eE`;Ug~(Odr&myov-xePugxS3 zH@^nD(;qADg@yUy&9A_%H|CBenKO!@f^cW7s|%S7)Hm|Nk1%vNcs9YTI35c>kAhc}#Oe#$46K zjY-M_t;c&1AhKnV$fqSlYX2mX>3G7%hYtI_B~tn~k#Bm4JbYPY#*xO1y0Y%AAyT8? z(|MTZw3nNT(A7goYmvD%M9O|--LNmoKizlP!C&M~FZIB{B;{B{9I*>P75t|V5w}1) z3#6=5-#8@_UeR^$&L9n-gn-CfA~Sc3~nV*(~x~ZIw`j z>)x9|8bG&q{Wo`!;+>M$k@kDX)dg}ai+&LCIctA?H0vdD<1KRx)~edp_6J-Rh^h-7f4RC~$wZaCZF$(-AAZ!r5<}J3x|z^>JiL~{p=ELyPhYUYz3Pizy?n^ z903n~tlVoy+l+&L=Zi`s%MmDb3~Ek=I`g2~?@;(v@Y|+~x5-L6jzU@XA1?;)SAsKZ zG24=82Bm5TPWkVl>J0}zH!Yyq;Y5O4Ff;_Jhrp6-@Lg*-vl{dJOsZGLXuuQX516tI zO1ug0{Y28dQ#wN6`8!4=%aNo>GvADNwYX-G=FmylN4JR7em7}tulfOz2d7E>Rb)!zD7|=q*^poxN_u*hy7dmmm$BVqC*(P~dFNeonk)Jg!q&3yQm6?7} zZ;^c$MaJzFY52KFc5C&PRQ0}?cMedJrQKhP7gv)D1>J^B; z9PZgfzVGd#JfiM(3ioCy9B;Z#EXam$TUjFeSJC;5DEL(7h05GqY2siC7K;9oj zj<;5cq~gOo?tUXF!}JX=e(D;o{iK%{UrkqbY#x*(2c#&HpkPm?j=*w`U`^vKmE zO#szC4ptD!^?AbOc;<7Fo1?AA*AqBUWba{-ud0aDzb=wJw*v=#D|H?)OQho9yN8>MRilB_NAHN{dX-z!kRyHX0tBc&%gv5;Azw62$`IpGA*F~zFe7eq( zDg@LI5V?I^dw}iPa)?ss#LqxpY~Q=D?yFG`N-ncdn;00_g08((^n&kqL&>?Aw>;Un zb?ZR^xN+Cj1#uusJ>1C~Ue>&l*`m(2R88CH!^7JAa-rTPqqy}V5Z8XPok^lgJ07*naR5d#{3(Rd1NuQoQ zb*qmT18%LMz!0eM5E`C@I<28pF!;F<*YjU$=p)r2_KO>QHy>h@KtP1<9#ysuWueJ> zU=#^E?#gI*VXh;AVsF6r6`BW7OcBR8U7U) z=>Il&?8ht|7y>|COzIa3zGY!R3>0Yy1D=7)6R>IW5{D?j3vRy+6Q6}ebHTTVZBdim ztR5bOyCv<9SHu8NK(D_CN@h=fT^bl*!u%2Bg!dmqyU$d(4W0DAb0FqlR~Nv+M1tFW zc)u1DUZldDFo47?cXdJI!2^OO!=f$_Z6eWW&Uc;QrTNfhFwA-#jy(&Z#jV_!R6!~l zygEYJRq#%8`1t|+*%f{ag*OjC$s6EVoj5L;fz+cm7r+O?dcc@1a9VS>9c*!5B)I(w z{Z>J_c`D2p{Nu+LbH7y{-dGRwRzt}im45&-5067#op}eNw$oPl61r=%SbNUqun|d( z0)XlWw~T>ZYgAZN0{44E=s>vR4$(D}`D}~c)N25g%M0&~f@N9Y&vP()B(z%%MJ9uL z0CC?-QnqoW1WFKDc@9=Ai5nJ+8n7D1K)2sjm=oHZ!$>W8^LUb%hG${++feLX%xnAh z+5~t(XcL%u2ZDmJXPdsK52!^ z?r?pvt26Ed)NJyt-=SPS73SapMt)0v8jj5n-~~ai!iJ#%)U5Q^xv)huP>e`&YVl(+=zGkDG9BT)C9pgYHW!2GA3>{ikbfNT z8)<9M*Q46eoQ`m$p9-@)c3PF~?Xpm>lnQh8fo|Hj>#7)(onY#Qo1C2rK03OgjP9RtoomPTF2a2eysKZ(LnKg#g|VbsN694M)CJ;f|R7 z>)TBf_DAJA)&l)dMe2%kl2g1Q)Hw^g|>S|j8?bKG> z=>&g#q5ep~m^9fx-umHZh?UZVfD|jtSh|R7dnK%zF*W0ZrEf2 zn%>EM78+kveEn&@(_yLQDF|UE)Nd?`Oeh^d{Um3TVdWs6_(td zO;fw7`pYv9-VB3Z#=!3bq5mN$vk2TLP20+ z3FJQrste(@Q?MMtfIkGEhjC-!t!Lq+CX|>k_lZG}X&_Wj&CWl(fl$c36h_Q~oP9Cd zE7;n$)O%Wg8XhO|ttY#=hW=rH9FGsd`&oOr8+q1{+_8_M>3AFVM&w z{?uAsMnct3qqX3dE#X^lR)u4capR>MR0mL6pktKB#%zFo3@q;Y;E#f$9rmq=rnLt7ydYtZ>v)ic$M4yAX zqp7y1nwX1e8CcPXk zJh7w~V%tQgX;8O|lj|?JsPC%YVCZpPh1uGsRec;=3nwNdc5gBnJl6j8i9)MH{wwb4 z#g??o?ANT+tMY-Lb+*Xl`63aw)y=7Ott*AN^_NJc(8Sy1(5|k|sS{D_iaVbZ$?Cv0 z@g_fsgw=OpxzxcYcQ%PMz3;g7eYaL3Rkn&u93XOWoy9Zl@Uxy|bZgjmvx_X6B=S}d zk+wb}|C^Hn&sSyK`%om;vk9MZFlvK}GFfCpPLZZtMSQ-Fdr$M@A`z9HlvmvmxQBO( zH0Yyywzuy8${wWldm@+0s0g+m`|K*zd${m}NZFU-vB5~>_w~qxACYX?HEOT@aZE>m zxsDK%GA5-W>6wAp6!q$U0Z& z)=4OJcC|O*xs7qdl0#5+h;o$^r6|A$A~V65O0ZsYDrWC2)8k2cZqGxFg)rR<)`h}= ziBP1ex*lV3zq8QRu(QMOv!Qh+=w1Zo&xI9X@NogS)GygjNwiL6BrGfhcm7dfRx}Ro zeIeg6`1=m@Y!B@o!}|IV_KB(|wG$xk^WfnOO;H%J?f8$r&>=HynWklqC)@l2fCwmd z7bZ1>!l%uDr>b25)=+J&SP$r?*(}()lSh3Ad*(yLj`(j&wg4bW@B$ds6QZj)teR4u zgx1$nzyPmGet1?>?dTh^+BX{Z6O8Q#pI(Qc+L%9pj3@*Ma2x7e0aFM5&)!*wNm+ey z{Ii|F(%oGOhyoT8f(00WqS&;eA}XjT76yv?69q&OF%Sz-N*WYt=|;Lcw)6Y@WA4Dq zurV_`voni)pXYsM_lNq@h z7y_2y*|9OsmR9PgFybgYassy44blTR-@Xgj-Yt1M{O@IGW)EPLUpy3=_SflCsNzZ+ zG~aD}1P)fp`n6m)>%cj#f0Oz;B){#kBFcM&K>BmAU>=Mr50gj0-e>FuVt&0P2xLH^ zr=j~&2#vrdulQ`f+SRK&-C|E{|c#r9mesa&z{t9vud2>~(jk z*#W@03A5$*P`ePBWm9Js@wEF7@|j@}NZ z%UQ}QiE{yMBHn<(9idsog|u@G6FKip0eJay=-&;F{lJC${a~B?W1;A?@X|vWLvZOTo9q+QU_cy85G&kEwlueB?FEoHONaDXgn&^$}Q68dfW7(z%w&BHnQQ zo1|ahWM_}aM|qDxNE-^@B*Tdfwp*!7V0#F>Qy6aB3BwM;@z*%7X7aQ*vLuN59bSop z%A2rBv{4T4q+nAUJ_}zjfWE8X*wdVoivLT9`2gzJH2~S!0ZfK7&3w(R7a<4^fL3dO zBjkD|ln@579rKWXqxRkNE05=CgQ*Vu(raep>30qfOc+V-A=z!4+;jLTX`M)9f z8IzCP+MJ|uu5MP8hx@z1PxCU##_h^W|nR^3o5+e z+NT+NVAEAOl6D`_y3D)4BW@mSZ{l#%l;po}!t?LL-3MUm6iA!Ec|pKa zswcD0)?g&Oeg>jyan5+?0;FiJn<+TsmXs!2oMCk3-yxE|DP4MHHYnsea)~J zVFu7^4neWqxhI$WBb<6Vk9ar1QBLiF=bnK@_GoiC^(nj2UMiHE1s^npAMbz`b4{1E z+w=IsX-@_a3K^y0{o*j{I^Ye?h1IHr%KqYhEgow`1 zC@~l6x)Hv7$M4xZ%&m6ftI_VM5?^WJYrTs5NC=Z!zLkZV&T^cnz++PHmD0Z-T0Tzn z5EDi%ly0!<{f?yl|nwvxm}L19|!b>DmagD zdau;vNbZjT1`d~gT$2Y3o2|5@Po-xfB}Qb^)~%OaE!;zD+e2Dzb=B)fZnM9gEk(ba zwb~z~fWFe(i@nH%IeIubT?)U~g?3;WTk5WoX4Sd4-f{&qMkV)^KK@NAV&C=*ap1!; z2UYJN&D>+5kssCmS>VM!u5Zm$ACNV@Tnhk`cS^yBT^~H|-65q{^L25$k5Q+k;PTm= z%?!76jLy>c)1>52Ed)FH$FAGq;X>wKIv1;#Ea5OW{si3?!4v<$j)LZS0J#rG83x2b!K+~CmvD2H3wgW% z>F4>G{4(_Z4G!Fn&2l#0nZ)upN+m+c>{OAa%>IdnBc+`pnLi<571U|t8FI(G84_5W zQ$v5V4&G`7DfXjg*;)LXEv_O@!H1v2+jm0I-kfjezV^|d3Pi%OIC!}%>{*Fzo6xZz z1_Mb@;zM}#7bwyW*Q3KZ%MY;h513pMV?$uMpf)U_W^wA7nhu-jt< z!S*D0ygz@HKFPJ38wKEgS77ZzOQQ!qxfP79_89MvDw%F#jlPzr+=P+dkNqTd?I+RoLTUY?E5f1;m>~T)PD+cskXEi>tcbS^ zm73%vxm(nxw=b9WzUDzb{20ldrQ06Kxm||8F3s5FYi_-diSwl3*K)4`c%qf}d7Zvc zDpfa&)n67X|6&o+cQ;#zcxvm-Lr9+`z1SsZRc=6S>CLs?=O^_&>7kWQZmpO)D1h|V zNGYMSArj{SMl9O5Kkt^V8emB`ICDNij!C`4rK9$3<-G9L=p)Q3D}{%-*iW-LHIi!q z;KXXFp&KDa1FJ~i3^qjaqngGXr#n?r>f1&N`6wGTo`YIGI#_!4W$DOZ3%%Tyfl-&O zswvfLda;TwD;AJpO$a7mQyWT!?Avyk3GHUl&?;Rz5n;adhU(w&vuK=D z9Ni-%2~Im0x~b3q6?&tzLye@7#f%Omgbz< zQus>O`)O9lwE&R%v~*W{7a1~@*{h4BBe~_khcJyTah>!*d#Ugn*)&-DWjU|fGF4hp z(L&Edd(VHSOI4QUFlbtYfHr?gyKe9-5B`YH?sTqQ-n3YXdoB0r`7?HvkSaJ4BO#}& z)wfdOQV%m{`qlQfQWLxOEGNyDY3GIRlfHUZ=l$vX)8uc2l6~(>SNFVlJaAm;mbgY* zXrEZUD4eH;OApx%D}%D{8z9yEM4B0ValYJ!MX)*EMSA`-DRR_>6Mbe^?d{Tx(@v(b zNXkf)G8Rc0J0&?|yW)q2z|)3Hp_5#nYqLVG4@Lxk40X!DBv(F??PqCoI6fbW-RtR{ zk~~5*kO<-Rp?@q?dkF@1ge`SU9)q~paJ1F8i=SOz3#wJ&Je<;M5m z-yh&gUo-4Q6kH5N%EI1U(mA~p65F2l0Gn&X0nu<|E<8OMmf5|?Ww$3C0mMV(3K-HC z9{mFthW{P?3Wf9%@WC~(Vw$;^kjZ;#5KtES2EdK>BW~XCrEiYt{k0r^f7;y3%tf>r zCjgpMgU<%TRd&A2QAW368EgLj3|{*J<_rg3VPsq3m0wzGnQHX2~F?U0$>QJE@lD?aJ=C2k=v<6g18C)kD-3(%eD*D{VOq%PM1i8R^!mEcwhvg0&xIiF#cc z@TPQPiiM`T@lns2>$j4ffWboaN}Xjv>8f!4Q3TdiK@ax-RI@^om1^xE4}$xRn) zL9)AoBt^EBA__?%m88Ih5>6cT&Fl*PNs4)1su3==*&{ulApN{j+Sx@)d(XnRuQa4) z9D4U<*Yj4WYSv^uA^>chDwQhcUcnE1z()n@X;?bLv8Sb{*Gb{mElJ7t-<@7-3|8OR4d| zY*hbdK~Ul@X`y}c_m=A4@bvSuQpA;6l&_`i+kYeN9cI3DS0Hf^rq4Vgecx4TQduJA zLV?a%)wVaU;2u(?C#0?~O20=)@pjuFAGNQHLgFrZp^ zYf@5L+ulMeKWk^KMe@9K*Bj2Y%c{Rhd)ntdO@BtWhjTwj7Mvt4ZJ0|&Oj}L+NqXy5 zDdd?8C&cUoHIRBFNO3P2T7GKCntoV%-U$ag0gp&;Jt^;MFid$LDK0g8Ko@8pG8+%> zJ|Z3b$9(GnW4{9fq_MwCEs~|sr!p5fe118M)#0qd8lpD@SDAurj+JHC}q=8R>wPraKMJ ze3NjG)Z<3icxV_PEt_Vcb%_W8FE|0ODcSQHWQuE&b0}bPV6?{dc%Ox-j*jx zgTImJn|=M>ajSIj7xRsq7WV1YrTwo;Q%*}yt(NM%Dh1tdNyph$zppNfAlhc0bn5QB zYCIR#*`jo*-~`wCf23g6q;oF-80O}*mLk7&kvSv9KlX@}J~4M}_#G_5%;txr)^(jM z6N_rFSs7{i04dG78gO+oG7|gY;Zp0-7q6bO8(eGGloq_1d7kns#*~wAQdsS?+1K29 z7lSigA50vtzz?J!-gc7#OIw~WSt@+e(9P+%pSfCYl=clV1pM*%ml1AG1W7lY%|@^> z6HKY@(jxmx+Z&n;iwb^9C#lFzlYVgKV?g7lq!jpLQ3pe^_8EII}tZC-nPm(?6dQYgGcHzAoVJu5$ zFM@5?p0`@OBw(=^tu+qbxeAILbK*OTr>`Xkp-U}zrZ;R31)aq8Xl0Q=Jd}JA-rEJ0 zyJIW&tgQU)x5A@IFm=8qPpRZhjE1i3H(KT@N9$$0pJw$mRs$9l%aMB%b zfZ|+Rp4k)ncZ5?#$k{Wc@#ffIISl^_%DrUXkH-ICM%S@hVc|-1FS8&%sSp?m&(wnJ z8ku{ZwEDOAX~WO_Q_!z5oUDTF#8KMC?*~_hXZJ%@yLZtn$~WUmI1>QdiolFsF!WF8 z`Yp7+9@^G`C+~&v17TYfB>(F0aXR?}ru>RO3s0ONe2ZC#I%Fys$2>caWghFo|&2&Tt5Cl`-fb}KKJr~NdVr{7PMApweBLJAm?~Yqw zL~}Sjz=dzk8PlKI!=pby$(EiiKd&IO$vyz+3b7^N@CNwzeOUV)EdLr-mV|vpfdSZ7 zFwVvRNaS4S*>eKM*0bFXDhlCI5cMe(cp3_ChQcvWY%dgxf+9ac(bG`)ZYcCA6j%?D zQ4kpp;nzX>r@-ZE)xxcr1VQRa*s%xx=mtMt4=bV|{UvfdW1ln_o=S(3 zjUb>nB)m=|N85#Wxj zfzQW7dH}W=JEu4eaBg00^cs}BGn@B3xkr&OO1jM+CfAv0QkE-dob>fbL&zWZnlm{M zp0HNhSwot2ll0Ln>9K{Hyz3aQ6Y>7dn%mOs{2c9&5F2c>8q;H^O%Z)R)GL&YrgC1OU?z$K5Rj4ReuMBP_K3ON#C9 z>*CG^^=wC2rtX(sYAoGcM5=IF3jf#-I*qq4iw}Vtwo89?v6PFyIbF#CpO=tm;at8$ z$4HaxN6hk@u#*GEHk1O~^xt8*qv*#;|SsebV*LIy5l`tARI4FQ!PTjSVe- za`Br9lE0N6xZ=V*WR|ZEEu}N-%ty|&uS|@9(_^FqL!_C5rNKz8mP;kpNi5GiO~1Vy zP6I@YkSf=bZkjB0Z!LW=P?|VdTK<}}=X&W(GbzPg15|&9G2UKMSSoY%h4ZAdSE+xc zjlX7}jOPRZgTvQI4PJGx!9^CArrD1a`Fc{Z9OXN`T$<5A>NQNN^|ur@$aTr}lDI4y zj8gTbA@54Z>R8Im2WMm5!LnXbp)}_wpGWFR>79Jdwde8maw(uk?%PGHfl|WU91=4} z^mc8LT3LgcWY=db&$`x@&Q3S9{4BEH1u%VJ<{7EL$Sm?`gz1VuORHL#@3K2zpUEo! zYz=8uXKCaj>HY;$&COCoSk`Sgzg(fEq~?!GZ^cWqw@bSxO7Wjc+L}YTUrI-HORgk$i{RJge-gnZ{|&Rj$| zq&yB2BH_z0SlJB{+vV_$e9W`AVK+_;gTw1#&`g;A06cRVZcT@%qLy;-$9-9Ys)wQS zVbeylgK59>(%|1xP$M7Y%@wFFurc>^Vw*wg0Ek$T#S13B#r^>3{Wr|L&fL$*ILti1 zaWTB}6%@FY+{Mbs3xq;qYZ$p4Vq>}3<|n}Rf5<2p_$xG=XYM=h`&*4p18sB;kB2pX z!~BZycWc;k98UBB)@5F9=jh}k6gmh4`opb}Ks9qYgG;1Ok^)3RQX;(ZD$HGK?z?jO zDh-1BL&v%hx|r+@m^~`F7%6Of0jY9*_g2Nl%1A3B4Lu+4@%_?Eia4D43iv;NS=3SC z+oapuN|WD`&eZU2ojHZ(Quo(fYoEjB`4H==U`U^suc3M8}p7Cmm3$5j=q?4lAaX+ z>^LPoThILl@WK{f*MtqP-sr&FrLN+4=d$eEh5sqtuv_{dMOrmUiuF$G${oyL`%NV& zu$mM3GlOe0q?2L3X5O)w4Q=gRjJSEkBObT(*ef1@A8C7@KROzu+ z()N*-g7LQ)51xd{TgDyI@a|HS-F17o>tz@aD*f+S=aTh&u*?h~2D-F>Z{y(DZWq2a zs;jA^;OX^HW{$_Xa|xZg!p3T_U=^HLW8>{I9FSsuLm=r!_zT-rtQOQ-1`Xea`kz9T z`A~W%6lw+q?uM{>5WEM1+;Jk48yHpCRUM$jY&e|L`$mQOPji_49(1=-f8s5$?pm0(3Z@6b#{H0F-BQV^+%6TQ0^yK+2YdxA zs|SOc!#!Ogq&t^psB&|pI(-q0_y}Hp1>&b*+vh+77!PuSvnt2zV- z0zZb};}E(YqP~WxkD$PdP^bnJu%AmU50NDxyaj{}fY94)6Jf|J5I7Km218(R;8)04 zX^RW4AV`}4>2E;Va7ce2(msZ?4UilONv$EdJtVyh$ps)e9Fm@dgj0|Z3<>ig@i$2P z7!v-1l&c~6en|ZgbRe5DaL0j1W_29~5%)lW)ljHB6rKe!v!GygC>R0-jzeTYh@1_P zvmoL*h*%BbcR|Dh5cv{BheG55i2NI(Z-vOWA#4_eg+V}8PE)dJ{0SxDj*rN57xC&6zUA>w67yB~IRhk4!L_i$MD2%LJs^0GfW&~XLs z2GIm2o4@gghw0V${21(J76axtp;A{e% z*$gLU!jU;}s3YvZ9`+7|1GmD_0+6)K5OlL4<{HHz@HGf}4}xk!upqQAM0BzV0)>8u zA|FGkR#2`hRO}2@hC+q8Q1U@2^enK%v2eIRAb7DoygS8tmLi^qA1Xix`|2*AYXROB zyyyYpI`Vt?qaWOG1lyz+2K#P@J_}%~-Pw%k*Vz*S65xtE;MX}&Es^};b<#L&`Jo0p zQUX%`&id8+i$ed!@Xv!Vdk`#H0{g20k6T{K!-+p|C4@JG0>40XXNYMHF)2{+S%@wH z(S;!D4G3vsbFvd$5&|M1Jq%L2L*i=?*Avd{hEucQWH~r_Kb)=uv9lp9GY3(wrcnZE^#B2^ed&a{iGf7(v1Dm3nQh9yZvBK(1k1fs8l*ZYVxJ@ zcopf>3~5PdEqZCRiC6#iOt}XSmnJScPj^SC)YjVX zoiS1~#!H39O1~ZVb;-DnQxVdQdoOG&nO$LLrNYIf07rWwPZ{!MVW$+-SSoTvs(n~$ zd!y7lNqT>#^us}E;aq9cSJHtx(#h#k;xkfOYbm3LlbPQsr8kk1o{>(4N_*x?D;G+W zBc%85kRE+VYWj>+a+nm<$9bMJE1O~~qz^NsMEm*wv%ao*H(;@4Sg}KD)5VfkH}?GP zwk4&SOMizN!cHEQ^{N1n5-#0wje89_=#=#1JVPj-548CaaiyhRRee9H=k_WzP-@go z>J=;fR9f1(LrOJ*<+`a-(I;G^7xJDocC4>!$1`~DwCBqCv(q-3E6YmPrn)(?)sS91 zA*I_R&*g`HZ=CmhT~G?1oJ0N`jRHMoRGdi}M|PE}$4VWFN`tCPKSoKb@01R2mXez1 zaT#49oq1N;c)v7ZqV#mU)U>}8lUXR@?8?MMN)35Ldg3SPgx#~>8DBR7Ct;cRPuG+F zH%6+^?_wd?ow^VDOZwm&*IDwa0Fc&A>gcS;uS^=jvrF^3hW=x49AICTb}y8^Tqd>d zD}|@{eggO8N+`IuRJovZ-y~^le`)khQo%hg&@==16+@*x#Z8&{la|Uw^zx7f0Hk&w zO7EYMsvOR~4l=zWY`-mb*uuz4^1UN4XJGozv9(gOk|r-ca^la04*StEgby}DP($#03-!#< z93H$Hz8mHtdhGzaJ%zIYOW>S=Wr;80=iA`M(&W3n-O*K`_j<_ic1U6eJBsjWP~&sB z@j+;v&q-?ocJE(N-_6{vFCTc(+vNF6rsD(u@Yuk+*zZ5T3=UhSDGRO1+Lr zRez8Ia&Ws|Xs@&?$k$vOIIQ;LzL6HENP|{MS6wTGHoI7xnA@wto6@>JO@i?*bL<5_ z00}@eoSp%1bb|x;xKApjGo<oKjI zEVlDAa-;Lg03sna6kaU{b&5lc`>~yr@b(JOgGikOvE@BP%-!-d7T&EQq1Om=&mP0x z-(mXI_gBLzdz^Mx+_mNe`zqIzZOQr2@@2TQ5nTT*l(_;}ZF%2U$E7_5Ggif{g0?{0 z(y%)YX1xx-b%vEw;n*vn7cK8Ehq})}v2T3MJQu9I4~&MXhv1i8uyPKZw(@5*UT&}Y zEt<@Fb6|8=sBb@h>xS0MvjRYpjftc%7`zaE>3A{IuApE%L{#=DhyM-OCw?0LcOoyu4~|~Q&9I&2)3T@ zc8nL0pJCk=$N&yOC7=iJP#f4b3D$OnJ>4Ox6hy>BrAOd~o>2aNAMx8r!#O-Q0%soB&`vIHlbJ?+$|z3qc8-mv~%(=>)Zo zLG%jXHji<6>BHhQ<;Vc|bqI{jfYsw5eM}bLc+Cpr5{Bu}6Q@GepW&_hA>J*vBtl*x@7r(Xb~R`b~o0%0Nb};mvBhklQiV zVvE)4Cir9-)ERG~?PlIRBLJiWA)tQnso=eekk%gCYADG?TE-P<*kNdYI|QuET?YR% zu&Yi(;N%hb^+ovnHdu8ORKdLCsa48l*xFwFUESQvjhkM}#2?lHnje7frQzn1P$&klyUMnYf%&0~ zJPBun9AC~2;Sm2iywCt9*%zwzMX#r}QH^7u;4k5!(eP#!C^OnK`Om!!nZY@U`0I)= z_+LnBk8MA~)yW^uNlNXGL7V-#&)|OsK|n*8(;4oLhTccupH85%oF6nUPyU`oDiCRN zz5Lo77-!$E3dZkkDB{*Y{Ea?HH~>h3sL?R+ODJ`K{4@CjghI+O_+L#pxXIjeXY#k( zIix`Fc4+x3d^;C@c?~)yL7_bkbT5yAev1{|VOlfuPavMN1+mw8JQN)a?^J|OPePe7 zxb7)13*=q^Fcc;|4lmS(vpcaFLnXLD%NSAB{uEx@2$6?zPl))B;*aa0>n2zj4e8T4 zuZqs=iN6B`7J!fsAbbZz-2(*{L!k{2a~ulKfg%+lCKU?31ktM?`~?V(0uDNvhQADm z#_09TFYsI~_;I+o?~LnPAL7*OkTg2?bX0-LBqcA`DZY(G<1rE0=IMCK`fr5*ma0MvT5{h(#!b73Z0x0wb6nq?_%R9(0M*KA;3>pwT~Dm#YdrC&6RGE$Upm{YXBKG4WqR$&C>4w8s|Z=lA=sgAPeBv;owxN5xFTqdqd+ zADWEi5Z_b9JU7T&g35j#6qFrFfO&4Bro)7(L*dy0FJ%~PcDVj`tZOPKvVoOaM1B#kajAM z6Ezx<9%JE(m(9KWF!{qdmHn5Au;_E34$e>hb{l~t2s;jU-3rg&0*&ee_Q~Jalw3ys zL-l4*?g(u41Ti!D2W^6$hvCh;phzO;7d#$bOt|L>&`9kkj>BWu!SCC0!GVbY7S#&g z`w5;Xk4==yFXw^%2s5_AJ=-9$Jx(9JjOqy`xfC??3xo8yTq+rpiXz=8X5-k{bJ&93faFt8(Zd!5VoPiix%{}&RKa^Vfk_yCW% zPWs>)DJ{;Vksthk`ympalAbCnh2MK|SqHr;6}VlhG+Jt2TI#(_8o66qSX|n3mz2=Q z*WBkGNv}!UAC$(YNsn)kYEF}a4`%Mk&#PAf+i&zv>HUsUN@c@fT&}X`QS>^U_Z}F7 z>Pnvv^>xl&gcv1QJ`~-tjUc8HardgA2m*bs@M8`Dahi-(Xgl302{*_hI8L z5c>)QwSbt9pyW4D?p7%C6cj53QFmlP=Mvd=(M&k_2K>Dcem@2ao`C~DSzhq=kw{|; z6V?-+O@WtVA?j!R!ee0C%h35CO!_*H5;SGqtPo5o0!4R{@7me$WayUw=|#v{yJmS_ zeklyz3tg{)u!`n+KFj-MA`^EVObI%p;KMh zZD-I`i+^Jb6Iu^mz7bw503q*kdGgOK@>viSufbt}O@9iujf3Amg`exg+KG_%rg`Xr zU>sS(2)ThP;PEB!_QO!DAU?0BxL|0r43;#`JuPPuC>WIh-6P3As(({Yt6qV-2EpEN za&9k{!T*{N_^23MYd_iIFWW$u;T61hD-8T2cQo1+fr()d?Cfc%T*CQom<~k1sW;)3 zLuT?1#`VcR6i9;LmGJyx7&y&L{z+V({Bw)TlfMnt)m0hu~#t!)EK4{en z!fxdJVD1eAtVAFbGOmU%o`Rn3VQ*W`*OQMY@K4YE?s^DuECJX{$z+Jl3*86zXNIME(XZONm=%!JsbJd~`I_jz?2rX7sB z9j4hG{wRm{jqz8T2U&f|E$S*#?FC+iLsuf6u0;{1@5=^WFqjy6? z`;oYGJb!LKjdMM1!RPQ$0{nA>g|9po0uC01*gSMnROt=4v!40KpZqsu1vB0)SPUP& z02$-4jdxk`9>}=?|GsK4;w~uD8rx|mKlA}{8D4-9bRW7Nu4riPxpDM&_fXjJZQil% zv<*P~4tO9Heyhy|feD;Tg>#+fzQZuGBE%%&7Y0$6@gIgIaL>W3Ve~-w{AM^@$UOJ7 zeSoDO)Gq|1?}Dad&9gi-4ErJsdU(t3A(Q;}J^&-?VT+UC?=W^q2d6^k1@QMUE;!1U zRUQHE83Q9~L5XWQ=NBU1BP&N%`6TF-FEHkQ==CI|UFY8SAEraUK=Ncv$XNqmR9I6J z;E%7(Jy#}wIM+dL?gqn#U!MFg!%tvY)s>An5FJX|n65hGhO#YDdNdFjH-*I&wxYS|VLgyuLv;D-8D_h%UvY&SYB=;mw z76ds90Kstfe)zmRB)^C2Y7OJFxZZB~=yoXc7Bk;6t^W;NJ;&VhcZWBI z=LscY%x))mHlt_LS7CSwD077TKemZ;+hF1zwVX7UU9>zL8$Gw*dNj#^?l=~ zA>Y6_d`PV=9SW1qG_gF3_ce3>AtaptbIEm5t8$k19O+@_IHrG8epi~+$-+ar_p*0v zuXM$!ymS8Z$`)T&sFN`LZ}oDiY9A-+JKFYJqpP%HpP`Z89hh18-(OgI;hUhlf!Z-%eP8$NUN1emm1y1T@M1C~qPze-3$TUrQa_@+YKLUK0G zJedz8Xzh-Wx|fxzHEYO|9f><~;->_@=)r z{k~UfyvLH?kc+)s_VgpKmVO5#NUhx>mD^^@%~=nmrrq7KNJ@Iw`>bZY1z^+>YhQ!~ z&zpO$7!H}Og4>>io^P3ZX)dTke2oNK9?o6|D?WxLpTUl|A@Mfz+@23lsBD8FehTzE z3tt?7?F(V?UGUT@cyJ1AsA5U;@|J-2Veb_QP@)J7JqVu+h0+H&@Atw}?KlaDfIZcq z=S?vEUJDOi*bdlMA5M+&UeQ@mbtKg7ZT|7selKjk8a{y!Tfp>ta(F)on+MaPF!&p| zeV2t!euTY^MZmF&@X{)HunDZRdo2v&{1MpzAQl4tga)_znsGmdF^;^VCOq8K+;g@s z+qVI(g6+k;&uZ2Jfa$QmABL09J4ww-H3dq{gcnaj!DiS7&ir&FCK8U8hDUoqtJctF zKC~DI9p=NZov_nxNEJx-MnX>F*jQL$A1nib5XkrprrrjziZ>qvO+Y1yUgjyRdK}Wbc)8rn*wOG?C>HDGv^>P? zq!KW^FwmR}VzFNYQy-5XfgV#V_xx4B$qtE}Yr{*9zeKMt zd1zxney~3Dz78hdY3_R{obmn)*wirhbeuutXsBn`jQOJ%yi_0x&fW{Jl!MLd&HeZ+ z-VXzkpj;DpXE~Ir$GO-j`3m-S6b1*X!qZQ|)7#-d6z8q_9mi`^e|0*;h&oVXhIuE- z3;fx)nS($ZU`Gk~;zoF^6}+?&j->(x$scoy-3w+fDEG4K->nFNf7f`I#caFgoSl&9 z>VBbN{{CZ7W3RcFpH%-A)NBbcc6F)ao_`2rtb$p+p;JltcqSwi#yvmpf{=Rf(EAYe z2ey4-Yt1ABp|GPY^xg@p?DzA^pZjH;um5-`R}n_`gvUETz-!p*!40opnZo$TI5Z9V zd<;LoXYL2#{-9^t;+k@B_~X1Ou3}}OqQAQL7B-oxI%{@<#>Gp{~6jI)UMJM6O z_0W0>^xO?&1@F{@clJR>s29@r2Fw^fmGMhOKBnXn3r?;HjRi?#bq_YKlT~XO% z>OE3n`xa+N&UxzcnG~OBKF)9Bno;>DekFanOe+26#VY5lwjb-Zmi}&Rq2+}WP?D6~ zMw*S(dAAhvYv$u@xnk1ReeNfh=P+9t3(86bK5(HAney-ah?Kg_d+cQ?0Q|j1DtgSl z&fj~ilySn>C7(-}qd{v|Ni{z;dCN)|2s{7xmBG@q2PM64=s0_Z-*nJjBc-eC`;gfj z*ShV0(&5+5x0jFP|IbGG(O8d%q zkFP8RfRDyYfwNri_>nE7nO_OYD*Ty!!?fNj@|X1P1S!@&V5G~rj$_Je z#ywKeAVV)a>vSHwNs7D9e4FI!Qu+_V2wri8r6+nw0ewx~c+xP?2mwWYl)k=N(ibLe zXPwTNHZ^^d6n@spG;)s(&qOq^gK2BC!YUv$42Sdy;8AM3lAY#^HsKuwCM?77p#jg^T3Di zxZeLGnn|^zov{H40@}mWFCeL) z6YmFet{qjK4?Q=*$W!pqP`KtP^Nw;RQ+khw^6yEQe)IV>_;Itjmz^=KG48xI5+1M{ z-#U?ZpTo{$BqWrFk0wKxqOfe2xgUsaTyaDckPJcJ!6S`f+*YXd9OuWC+!`L+$G>oh z?*v~phISj^!wPUbg!B9Qj_o?!@HH8p_!DaRt8GbEFk?ZBwNT7OyRF0}u-==lrL&R@ z>eh5`#nSbRlu^VL8N|OMac$5@_^-G^?M5UQSyAM!lObMe1ffvgNqy zGJ9fC_eo=;d|gQYahUCZlabQBRa{#syQ&E&G*KxB~^aL`LqHK zN!_|iJFb@W-Fb2wI!aYmIYDEJG^V@!3r20f;4!IWzl-~6R$7o^3DRGG8XAdir=EAP zcrV@BTIzC23Lb3o6qS8mK`OFWdbgJpx5NBGmQgerzePU>4DBphllwdtNsdE3v8-z?3ucd&feF)j%hAz=SI(#>uP z&pBSkFtEUJ>61lL+ANcH4inRm-&{+lj-&%0SO^$FB5jOxrxQX=a1m+ZKfbOI3yhF- zu#0qEQVznq!}WYYDPz8`GvFl57?Ad^^h*P&Ztct$B^O+la%j9#`r~0qT?{=>#2~Q< zB!?vpj+aW#bAm5RJBxWndT+Os6zV~~e1rjR7~DkTo^4nJ860O1qd7@+1#Uw89$ z5ql9v8cumz`tE;H&3#TZWHU(z?~)!~C+)Ht)THK|*5>-sRdy#OneB}k1ExklOWQ}A zZ!ez=@D1#B_Kno=r3>rF(?USxR_VRFrIZgZO#2+nz`MPjRQ+TQt1O4B>j)|1%Zsy@ z-d?)b2>~E%i!`T#uPejA2=A%aN>9yovW$%lN39#A9rpcZe-^B*L3}ny{c1@CN?7uf z!vZC2yVQM)w5OScW^VIqSu~{$k*1!MuB$3xH@wX5#Eiv0q3-X}q$5(sR6{JkPX4Am zeq131J?vVaulK%m>^ASPm8Ad>^q%X3Q*a&Ww^qI`X)nXF+S=Sfx_`11^5=yE$3>S# zIJj!6H1kGDc0nLJi(<3#TCzf_X0MOvtjqtN+oaQh=G)6gfj-58u2R|E7YczMy9~Xs zAEiMtQv7t2s9o^0uh<`#p4{p>{lQmeo~N|?q`RCr%2c4X^!Gwv*T9ANzNHlTjo~pU z=R5?wDSdRv*IefS%OsoLMVek&YVzd8i-YXOqbkd#F<(kab^+28f{ta3+&Nq7`;b)7 zdh9T(and57hW$@^_-ARG)c`KPM_ZJ%>P4x@J+Ae~vIC{<4||87ECqnT(XJ01;Q`XD zAYT`89>CJ^5}Hb*qNIvH<{)uf8h6o|((Ct1#|K(y=FqsOy(^Wp?=L&5FHL#@w@5Fx zm(r@6k1ml@82Jj8wlOYAiY}AGpy%#o+Cb2Bsds(pSSDL<<6BD6-CSG!6C;hz!h%1g zm2}I&oM{y9Bdz?~*A=02T9Nger0S=0m=x`o(Xw4#PC7j8;yU#kSSHy$PfGpnlM1c1 zAO6%%oPSY(|?4=T)m%d#l)h~8&o6Tv}U*~P<>%LN=bxicfI&cFA zqoo?(yVlnWwUk!;=pBBt766`fjY+WWi_iVt*F~I%u&mx!q)5#dJHL8kuhgoIG{26N zagT+jV?($6Kk`*6?Ds5$3^Q;=j*-SR%ZA=%cpvr^_$led3KH|OsI%N&mX+M?d!)7V z&$BQ+LMlJW$w|+0g(OK+r(~Y3glDA|4RWSY?6|aUgpcdMOde;eNOxcDTDb<_E{z%Q zWBzl9)CG!;i7a=Y1R}M z7{3h9!|cJI43O?<@8O9*i?&pylQiIM>6zJ5$^I9%31_dE7o-(GWS*t7&q>$DSv zduh}A&KH%(VfuZ>0_m-2DR7FD0+=bw>sv`DZ#1<0MS!+Uu&GhfykDd{i%X$a=T4bT zvKG6c$V1X2wWSRQEp&4`!CJN&kNr=2_b;iu)%Y+ge*+c`MettfmKUX2=~9|iDDjuF z_aKrcNp0?StxtwsAx&TG9e%R(s2tD%_}IlGh0Q?^0W-XKZqXT}V>|O32#FnF?=7%* zHyj)XM=HX}4iNhhBs>hMiy)&t1h;_5#ZY)T6deae_e0_DASM`MeuDzPK;!|49B=d6 zAN&FYUIFZZ)Q4c-e)w_)oL%k&e|Del;cy}rKKKHr4~O0@;NGvGcx7v$n!F@I=nm*V z4dxYuU1u|)8xKUmp%d`Tukig?Xz;5^FF*LszLXFO#6#f>csm5P)PsLFVDq`|f$-7i zkjA+X(K~;J_kOlKi^djPzy-t%gW^N8Na_(tE(JW7J&nK<5afpMbB{orJ9qtaEqMQT z$Y_bJK2mb{HVuNh!J~mt_;Y;QZ^VV??n5ByTUZtWU#)`QJHY8)ks(s>5r>? zEn}U>>|dl?k4mN6OW`+3eC$Ggs!PGOq{uI&!ULtUUrIHnOIN)kHUCSx?KA1F+oU@; zN-YaZ<^RZhRhHvrk=g?vm#&#Fjoc|69F}#y9_#2F?PkA7+uk%ET>=I)`59vmNZ~D< zT#5Sdy5>gdbQW#z*!5EV5;@Z-Q$pHa+Xsbg(fG}sC{^ffc#3vD|5ucjj{4D2=A@d^ zw!YHXaZ>w|QXy+zGCLJy)dD;rU2%gne1UX4(n>TJ3|Wi>)AmY>dPw)aAw>?(Vf+iY zu-#Wll-|Bw+HYO){|5}0lRuPh-QrrG3|}J6_JD>uGh`{>1}%3z*j!q9h#%|)Da8%U zN`yy};7|$6%>^zH*lt?@q;<1J_&t@?d(+MDE#@~6*P^!BrS@RR7z4}4z{;L5qAj$4 z656hSnsp&M22TG2i~GZ>+kjuPp=nlxOFBZ&Y4AlusJhxbb6i}@ZdkT(!3w!>BO#!faI&4@32UkJH5yPZ?6`k1t zZN`%tQP6!Ubg2(zn`6@sT2}2Y!>$bphKvaK=NtHP9{idHCtfx0gkxLrJC1+$`#{N` zpzEj5qbAg_dW)2seC0Ew-4F3oUHc|@Ekv#H4nF~sG98WzN5N?~V%vZIJ@mLApH4KY z4-a;L?}u>Cjif&hx)&gr3p!ANrcfc;Rv$;dfZanOdh~2AqVw>v2x)Z-u2#1$+bn84$1p0$KtOKtKZs2nDL!-VI0v zIs#Wg;FSl6cWoq zd@YENhJ-6X*EsNJSL^41yPkyiL!s(0%T0I2;|wlvX`S>PEWZlAtpmTEhGQ}2fy0<} z0Zcm&8xQxq56=vN#?2rgCi660##YGK4rxsxy(OeS3mIpC^$;8g;YA?u-CWT3Fpl?z zmR(`}_0E4&Y%?rq1$7U2o}Vl=0Fk}m^oOn!+1ESGZ#p1a!hS`Q$T+TOUI5X-L=!aUCJH z8^n%=xQ8G%6yldc@@tS5Yl|5k*ad?7K-irSkpj_wLDZX2a0(PmfasPGl?dUlLO@m% zg(n1AUa&UgB9$e5Wk z4W&cIJ)Yw!OW50RFdVK5AN>R)(;;>+ww1rD3m8kEQa{U@;TOQF(b#JF`&Y}~lgyQ! z_Twt^`=|M}ub!tk!Jm`$Ty6{mcZB2$5VqIcbf*mmg8qd41z^EJ__;3p`InJJV=Q#D z(|9IB*uU`3Xm~0Hf^NMyjdR)i6Ve}o-y#HT`V$_m4}Ho*-`!C1dGn4%b?Prj?h0r3!m*RE|3}!@0(S3$y~p7|Q8@7x zoPHPLKZE37Ao)c|>jD{NKn;KahR{S{5Cn9Gz)29a8$#}Yh@KF!4+`G^Mel?%E1_Z_ zRJ{c%zXjzVhLZ6%?F-{Qlqq|=91W9OoAKU-ReXm*FnA~&YXLLk;Img?>94>hE>N-N z1|e@iB|Du=CXBS1ke&|I%OR_$Aj5?fj?1v9vXe@|veCbpTg;HA$A4CjfA+ukQfF@O(1y~ zq%MW@BcT0;@MMRC=9=G?oEOZt0A(PoDU^N|u6zMnTnR1vL+wKlY}c~b4adEVoz>xF zN8l&tzbXD06nfJ;{A9TWaNipEv7ze(D=vU}BcRHU-eK4&SSnL5!uD{OvlnLG0;{iw z!{s2=-!%cAhGkH^wm3ZhG29vkVfK|;UT+J035mnu)B|w%RoJ~Ab{vNt$6)tgu)i%F z`v%U=fuv)&W>?`ZdO+k)Q22hR&=G2HhX(VYQ3zDOABvTPKu7C#S2P4>D`4I-xaU1M zJ;{02o{oZ#Ei2R`^QOu;_dEY&^_(0TS)%ZVzij@*Of$$CrSx15n^0DBKZ>ghPqmP$CG54uS$j zfH&dHDL60=c6|f8)8W`;NVgh4xl^{TY;}19maR}LN;QKvy`c9bX!WwJQNyX94A0UXX@ zHBuxLX8#F|ns}h_;evjg^alKO8pbq$KZd}WZRQo4GHne{cj{V~TH8a7q8vsAu2;sMRhiOkC zH3edCfaCAM$tG}e5uBL~vA;pw{g7A!lJ-FAtu_Obj5r_^0^Wh($077X2-^jb&qCBG zC~!N(JOnYNpioOF^cY00hltY<-UirV5`F;EzJ=rmAmMp9`y3oA3kUYYj>52I0Q_4N z_6>n!>mYtrR<(zFoztQ+E>r_rrbFjIxFH?N+ynt*+%MC#Z{hT0IPeE-kA#iGVAE#U z-WCo_fKx>v^_^@8_|t%s880iK_-{~WAl%RsZkhpCY=+_`9Nx=H7%-Ff;`^XoGMt?3 z94lr2hIubS4SQVrL?8mvAA=FaVbE7__Bc=gh;=W!H{A)-Izi<9nLpn&9a{bmj?BuQ zPQfUcc?C3GoQtw|D8JbEVZkf#)xR(&9pWmP2VOFUyo~<6o^> zb{e!92Sro(fxg!}^}E0od6Ujyws;js}|UOq>>tK=5#=x&xXOh3h)Qm3Kmg?GV!r!qR}> zE#FOm)FY5k5Ki6?hdzTHQLtq%Y?%k!m%zauaJoIDxAS#jdJvhEapZkaV-qxg0NOT! ztItBQyK^R$`Yk;415B8KQ>xX#QZQyQJW`qSmea-vPOre2ZSX=fIMolgg@8wXg0aJZ zERF$g>aiJ=EzKsndGDHRBFe}y`CdWos*oCLfv)eUDN#>M0Pd!^(rbs4TA8~2y- z*GfC?mZlw--nd`7W1Lj6x)i)E8)qOcx|0Qo`)?!Q!3m`yZv^x0`QV5CQ_8s}IeMS>cd~6eO#GX>NUsD)HJ*{EW1;EkXo{DwOY#c5RSF50A}dHSL!}b?qzZ$j z+7+b6&r3JmB;DCS>d``a>$LRyMCn)yFOJqgM03Q z8Rc=!0@Um=Uwacw+yN!`a(OGj+xQy}uY$#oz~rl7&VD%L=yTqm_SgSID18)KjfH!g z!;Pn);4SB$^*#=xiaSRqXf%8i0rz+1Vh1V~gWDhLLf=_%tQ<}o1{UZ9GnYZLJz2lA z_HSra8BUbVncl1a!0Xw?1F-TR2OImrxF_JJXJF4l%X|NItN#Bef*L^ZAP6}P;i(W& z10r97=x8YLD-@gxg$hAT7by596np>*hC`vUP~a34s0~pyAgU2Wra<^-5cVO2m4%QW zA$Xiag5EG#7Z3nv?uNVD!n|I%v~?9e873`)Ti!oU%hSj@%NY>yG<5C(vx-CdF&C&B z1GB{o;Nxpx$Xc7Htjlg_y@U+lIw*A=+zoVS0Gn=xDcxb_b+91~PNs12ymH2Vb}dJk?s31xRf#b2DKmEHsX=m7V<1%X=}o(FTzTK?XRKm+JI8jkhA zDVu;Ie?jT$Iq*;hDB>KuyY_)rKtNB22lg?*O#WL=!`H=NdX-5m;rK;a&?AXG(uh9a9F=6Q%|3F|JAD=G}rP;p^RSmm59>F2fBt9DR(P30o_}@-DFW3t00q>}m}O zb_1;#;Iyxq{tv*?cY?l#>g%EA2eA2R*!GF@WGe52xh0`;R_B#1^*`ZJ=-U~N-$sr? zK$CGW>klZHje*~~cF-yjj?X1WTs_3LaER${xoJ6Py}v7by%oMX47>JQ-no>7(lrpW z20|J__)-Xe3PMvM^bCZ30iksuv@-;!K+sVL3WlI+5U?KtH$vdQKu1VF0~x8dQ%I?W zAvqS3PeSrzkhl&KUx$QxkW>Ov8|Q8Dg_MG#cSDi75R(ouWuWL+Q1l5XdJ>Avfx@Gp za8a{TzXhT{fQXMEvI&I7K=A7j)YjLPi&1Z2QEYnbO$*K z008f=g%=vQLEX6Htd$BsO@#WLITy0_GQ5mTv@IF0!?9DaVIa&b2H!M-BkSFwei`l} zGZml<=l6r^z_^|8Kq6UtFSFeLZY4ZD6HX2yTOpv+X80ipg0j&9teXa{Hp1}%A4-pc60h1O z!@@T~bOuCT2jMqE*xL~FIRsw^fvapMJc0^Azz7Ja1ObA81mm81Jm?tcH0U^__ky(B zA^jFe3xlLzAbvcYy%tW6gTr6Jfx58!W!SwA_Pzi|lHlxFkQXM|UXMcmWl*Rlg!hE- zkq~@61h{hozuc3Q07+=eE5(TTllxyI|@5z0H=}hWq+%yZkww@H#K&miR zYC2WA?`vsLxHM**G`qUAVYqbYPAP7Klzz9bJNtPg)|U=ek(M`-zWH8y_D`whn^KvR zQg9U)@}JFhHgzusIU4qbyXJLC*LF0-ko_ zJ=5pE`4__LLeY4bxd@gngA{w8w>$9hr#*h73yt~>N*#r2pF{0ipw1eo(HANNLD9+( z{VW99%kLrcYxkJyrWa9fAbcH^#&%r|JP0Ht!Tw^fb~Y>>2TO~=mg#VE%lZ5R&TYj6 z!`e1*?_B8C2%boT3dPJb~;Ck>8i+b<&pWu^yP~}No1cW?kvwRP{1Be41gp3uC zz7Nu_gOvG@JQortLi})un+KH`0eVJ@C1ilDG z$3W%Aa777d6bg0kg(|I~c%X5Dbtxc=G2`qg*ggstE`V9r!15k8SLNB2*#)o&lUF3e zvs0jB0z^G%p8MJzybrLfEj)M&Y=0Kl+;f}0(d0&$+7*g*ck;X3z$ra}Q78UVPKqq& zrn<=D{GiEK(%+LT^b_+&J9DWaafEcZxwJM;ni?w&FCjhss&q$jss3$JiEt_OHs7gK zgStyaic7U`l-hhH^;j#tn;`udCjGTX+O|zPUS3LiP0|F^9i*H8kg6S*3N)1%<_BtLS1;3#9-1hnzwBh8B-?&cx=I7jNP%N6R5zAA zA#HcUY1gL5q>^*|pbT=O)_+$jnl3dfB0c$>^xZYm+9T4bSV`UUybJpdnfMk-=q@ek zB|X1Rs@5#)@jJV*J+z&4XDMk>8!6*Z_UT=USclZ`B~u=5IIRl$M*3o7-tp^{5uhC@ zw?nUgVeB?%zi@zMwN?HW81xQ2lm_8;_lx;W8<4|FJl8k?3WBsVaC!$EoC3Qh!1hA$ zZ$q2)^!^*+*eW<%1X8lI7|nx~ZuHGiW*Jo50ax~c27yq0ACy^Vvkng1n)@_zi=vA`YbrsN-B56LCg0|_G002Uc^~|= z7QX%nwpyb)X4fAqs_x<~;ISF-L_a7$!aTnew*@TiWo>Kd{x7W9;|3k0Rln&|n3w{E z`{Dih1t(7d0Ou-i>r%M07;LG|IV*pcVH!$U8R+yg416EzPO?1DgN(b4OjKHFT_K?| z#BYH3JVIcFI4@(rq&Og?`sa7N9=Og ze*>)D27kW>%R0lhXgG7D!;5|-3W014}Qi34uIY=)784rVcK*j`eu-x)rgnj}gQlVNWXwV)SErt45K*bn{ zc`Or$FZlsk4F0Ff!It{4pbN|`25atv!e@hA{5BRS0LRzEhrM9? zQFx~gRQrt_C&L}%;iiXRzdsr7Ijr`JPJ|YL(5VvK*aAwOba>z2#uR^rLt9wi9)@p( zpMW!Vty6aP9F{&3HWcpc1_P3yVQKT+M6=AdFblzq#qi6IFz{E{bs%>nd%pvp%!T0D zxufF}T-q=&`#7n|((`Xg)N=p$h~sww^`xt+N}tt{_8rJ1?R1wo^*j=6KReGzPmGkx zb(I23`@tTk7p}m`QsEO){iagqFlk6ZY3h~I_V1o%O%SHm{a@dw?==UJ28WGQ)wx#xr(&hExig{OSqK0zYXGIkV_YWys{aJ962 zpp?AVfpK4t9r+oS!fSnc@&n@ z3n540n(v@X8MxzWs944F-ha^g+^evtq)(rO@9%*BeGJ>1nCIDT3)nRYg22YmHUM5d z2ux~u zdqKL|Zt>`92-?gp2PZ?(jiiPnq@IhU?|MpG`bjAzEqtW7#l2g|7$Wt*)=8^aKfOZk zkV;gR8h#>mt}G2sl73t$tqPTnbeB@5!Hd(xynOc1itvNEHtGRwMBKk-RI0 zgCnJCQ+&VT59=wlo+FJvBc0smz~trCzIS2K6m1@o5S71OVw=2-4-j zQmrd5?xeZ8G8sezzmm!ZN%wS-ChV0?{hE0tc?;X`l*(_+Ka+pZ7^zsSbX7I!fj^~p znn;t+NE_-%Cw|H#uKZ;<2TSN(os~AFNG}FU6?)}zKyb5<+?^n$*3X-)AKot2TAjyj z+0xg7&PvT=qzUoT*#!>F{YQ?O`2{Rxoq9x?)>yh>s}xYf(l)abgv~q=e2die8);^gQ+ zGh~L;Vz4wLT*@eKuO;sm)b`QR6;r)4hhmIJCD72c@T9mWmIt)JwScC&(ICNc$(|O_q<1mg>*X!^uD5{NHseNTW7NCs$Y) z^1*<485USp?Z?_l@BAQ@8|!5Iw@jW*M@q{&Tj=^qi{p@P(iv&-ozmm0rJ~<@VB&We zyKlQwI%L=2#rY=7Zk+-+zkk5F{hftvpyy=RY7g||ts_$wdx4n!@Xj>oH5>TZ%X=k% z!M2ew`zZX|7S6s7$yY&&Agv>09084o^evz?2q*|dgBn8mRNyg4yC0H@!=4?m|0Tc` zt5JtN=78ByDh96T3C$jcYvw`i%}_cB!ZvxiEH2|bEP;2_6_!2^A8m&zA3)MF^Ntto z10v_a)I?};TkdJ)gwti==F_m!ouj|5z+%}Svl$+L7oLoPN*|l&m-qMm3zq%y)!pI! z12CyDB-tZNW)(%&(l4r=g3lg?Houu?dAS$v5L9dL5}4H)es2kXw}q1rm&bF|OB+{vSxm}IEp@w; z{+E>YjFdV~O06rU?2=NtODXlFlq;o_Mp8DZY{Fs#Vij)*Bece_HTJB^%t=^={ zO67J+_k~DbHIp`NloGG@a^5e)Iasy^5{^jUSCOuGJM-17r>~C&A6Qorw|8jGbst6hU9?0PITn!PV=8g3HKLyP~+kb42Zp)fbcOSjC(n}N@Mjkv+L zh3E>>=1G0JIFT=l@D%c_bZsZ;;~%6gd!*FNqHkRu82tklBdJ}FNWD^|h?$uPbDp@& zpz?50DdQdQXDy+Lbkh>=PyP{mrKb|5gTpL|drRH#iGFjr@12LG{qK#J25gs#z37A> zVCug77HRHlUgptKUx)TcUp^t-{Et*{W!7VGt}Y9m8y}W7H!_L)fx&9-wg4_tC)m^+ zN56$Pr@)u1A?e?X)gK;%q1kgijH;J68k5}O#~Y#B5{OI7rcCTdN-D!OtD$cLxcy2f zJlXQjWrrsI3(MA6>MQU=D;OLIyPKQm9^MkT<`tMFDD?hZV&vCnvxt^Ydw{0Y=N&bedf-oPJ?VNe>Z zZVVaLU}2t|t1Rx3Z%={Y1)y>g{xg1iT%<6@49WeZuUbe|7FZ;q+!#+}bKPE1N~z;( zSt{o;S>If$+2~?b=LMJ1m_#j-URWs|`pSXU<<&<1fn_zcY?O3eSud; zJ89oY_gv>a4M3fDq&W*M33^IBn#oG*Y-?%V9nyFINd2#o+5|{7ACQWFBSqgXg%*^8 zs!D-vrNFXM;6qZ-L@E3wsqkv4dIRa!TGHSN(qC(&Wcx^Z*8BC4Z(!LLJCh)djFf7O zcWyp-;6*9%P4BU`?|P|TkBheYzDNw^GuPawc&<3V!E#0l*=H>#vX=XeNbk z_g-ON+e(UU)DI#9rx+`Z=p}K`QrzG;WZTw%*W4)8&ajzrr&4?7CBG_mQQ} zJ#=Cw>?LW&Ht%O8V~O;zr%%F|tHF2D3agqwx2Jj>zE2O7_SBIk4Uqc%BVC&$75`QW zyfgQ_7eabuiL}=q(K6oqb&;=NnGd%0m!AAWiW!;3wtyK2qdG``oc10|-;b067kNpT zwT$I4KS}S@l;ZC;3CH@nGA@L71OVwmqmUn@A3u|tHj@IZAy_@M3TiN1I__r$E9u;% zo%WqH@MVcf7dH^c4$$~6Y2jfD4S#izky|*s|8=PdK4uU+xK`>A>-j72rOCvf%3aR(M|k zu*1?x_k1J0eL$)?KI=ks<*MdgqNxegw^pAA&`%OJ7XwpIVM^zGkLQaww8eyk13I{`qts33L?kcNCD)tsI?jXA#q7{ZLKh5t#Z(d_o#@N{Skh`AXLD3T`NsNR_T0E8QO` zz51>+?pA4bytJ;Wv~Qhs`k0iGM=M}Y;=Q}201v6u8x@vL4$D1HIbozH1OOzuOM||b zGVDUHD}$tE;!nF@TE19%>UOE3V;bJ{Lz2z)^fyx4J$453s4?Y7IMjLE3)0Ser2`Wr zJ!5WqVKKDy8L8m?9;j=J5o5{C(tt#1_h*)b{K(iZE99*JV26Whd)H`b$Xco9d@0}t z*DIoO2WejgUl--Y_-MKmc-&!vvuFX@){<7uw0v->?)O{p;j>b({an18J|Y6jOW`x5 zVkM=j-KA@yr8|mC-QJg8yGi=0wlwP>~I{b(s>a2RyGMT20mzD%dj~$STJ8q-+DprR{H|hmx?E1|4 zz6=-OrE>denH1D97xipuZw0za4{nl{e=f=DkH(Kz{Z{x!0I>qtfab)#)~`!WK4$pmR)M+@Ko0pZ^7VcOAq z-?&+~R_APgOSjx4&A3rYDPc(?pKagz))j$0b>kGJYC2s1vcoeckh~NUO8GP==MiLU zB40cSyF<)9i(`ozSHKrv!n*-b>_cp^uCb*AmD%80l>ML@98UYm!-XZ)s79+$HZx?0!P3;^0;?YL4{qlhVddEHC~SjD(Ct zyzEY?m_3%fKdjUouBaMPcHJbY2g`_=hR zBPnKD?)ZH2gcAu_w1e@n(%0`vSM>426@OM&0n@GqOV4eV4mY>t&6nB$Kea~BDHhbDf5ElSnt!rt z2ML_h0IuE$kF19tbzz;oj|b)Oy+0rph=Tan;e*<6_X3#m9;EE$yu09Z_sM6M_mtLf zY&vZH2UeDVrQgEV?vR`Ugz%r%M4SkP-P>IJC>{z=g^>qfNLwhq7hCyX0%N$}DJ&`g zl|$gT3*YEISX>$&`UiO1*ExWibK#qEaNrK869x6ELijr15zhOzzLZt|cBBF!@J|3t z?1L?2v$w)TyNfJ%$#~q>29M8y<-n+TDE24R-VfK7hU@QuE3bnxlOb@j&)0v`yJ1jD=&1V0S!hZ4F!Afvxw#-fnQBAH)xa zj5i_r3urqWULOP%6MbDUzQc}t;ZQ3VJ}`Z<)k5gB8~BrR{Db8YN{^Y;lM-%E@xAq3L?fKj#JXbW@CpC*525eVuE$FN<0 zo`JC4P;ojmIR&kO>%V|X`ylWQ%Xjt(EeF(G1XKog<&Mo`Qz4@U1QzvPQH0+Ekq6xW zzHmt>F&nto;elmP-TElJwg-NB3ew)d)|bV(pejCryTX}WSP6%?(eOPmbtznbBissH zvl}WbfP%*%EDQqsW=0!+SHrF$aI77~{|cl5@0gEXIRAaz zO)w7F*&IHLf%>P-11H<)rGgd5Aa1b>ADBA7sSO0R##Wz~$m9=xC;-q4nly(m)&LEh z|7?3%_<1fo2fmH66yoCjOBIPg1k7Ipzb-fT{B8B`EHY8?C(nUx*sky2f(p&yrqAHc zo8g8IP~;@%2i6?40u>5E*msb8UGCUC-V9QYLYOxNfMAHc51U%V4aBU6=#pG00K@}P zps(P!WO%tfY`Pnm&jr!c@)Ci!L0BZDkAsvbZ0$Cb^TuAT!mf4?fHU{OG+NPy(bChqIgDNP9T25)L(o6FVW%t|I*lxY3ym0U7YuLU?EZ zeEt+%^9kqsFb>QM`0$s)4#&K-C@=#d^V7K9S)&=!=8gHAB2we;ja2nZ7guL zd6-6~BKMls(5eueoR~XSn!W)uD?z~ry_em@Sh%A-%v<2z_stiH-A)jQfVjWl z)ZRn zrPv1zp?u(p=~BiA-%EjC_<==sUR@5J=PDPKo-HE%b4W_BZz&iDOY9vZr1DSYKK;7M z($R_Dt<#hvQilWX^Vs$iDapYKe&5&9gRxTJrVFjEy;(N_)uoavq}HRPSKCO_`$@Z} zOG)!G&-ap*(ha4vrk5YD+U2E1cUUrcDf=RkG|1IB7Uq;mr~9R}Jn*sM3;53|01FDX zg&Wqp_>qxbe@=mS1*yw{aBM4#%g8$zRp;Liz_3P;(VhR!_J@7H*Yv7gC*Z@Aa9dC4 zc^@o#4pQuv*kIfD1|pw_@Cmt3KK>U-TH)O+2Csku+jCJwj{p`8#Xno%fn)G(0m!I> zP0b$fA!e;B+H?qL0p&BG(|Q=40duFo@2|k?GvU?`q2jF&*1~~?sne!c!FP4w?k$%4 z`MF&O!sdPOcp&^~*H8uE7pJH^3e(5_Z3hz;S@P)&jJBj<6$qN^>x_5_zLr2Pf{{XJ z_mm=sx+t+37mZ>2rMKEk$%72d{N!KXSt;Bf-HV!#%=?n0>+Qb&!efT!u!?S`y=;xY;;sQ^SzWYQu^szsoHOr z=bm!m>##a6QdznqTKZhlw)dpeL78MKr+#OGI2|i0J<>)But#%r)19?nT&B-e?J3Q? z%aYf8=FKikm^w|LEA?yQUKxcikY*P4bw<1g{}TWVPM(mOzU0QhU|eyAPM7+JNGG4S z5cS9Kx>@j)xK7%?N?O)Snp9W%K1G@xBkidvrEj;q=r1ltjgWQbOR4KH_c~i(38~RW zsqGa~LrJCnmcs7!gMre+fsa-$m*P+s>Q_|5!Qq8WpPba3MwBk$eSM`8v-RH4T zMQL<5>G^$9fsL6@*twn1Kw_FyW3u$ZwbIi4QsSo$nQ%wlZ3Nsi-$~Dvk;2|HX?bJI zBCjs9Xew7l`l-L9<0h|{(DvzX3#3Am+?Y#{s=qGnTj1*)cn^Ln07%kMcSAPXrSf#? zj_J~>?=3{r<=efkOw!KypLF6z>7O)d+zIKKFQqmkrRpQ3LN`mnJ*2=prSKP}s-H>S zPD%6smQo5>i1<=!Hv?mQOX;aErGP(N>}+P>zOAivaH5nFB%O$tHh(P5XefPrx7266 zbn6FF{UE929x3uADew_L7(m?|aKSc#G+QM-HcN^rlY80`-J}K8ykFgK9dwgN6EZh+ zhUK0oCQr-6A9%HN)os$prKH`n9T@jSA2Dq`d7kuH1F7T$3m^H_F2K}5k*?D4Fe$~Z z4aiTLQ%4v(n{_Wrbq<+)M!HZYX6(9ewv=|guQTI4_~j`8yG81bH=%7S*l``MTiym^ zv$_T`8%B9YAezCR?Z-v}*=^ z=fX7=fUoi}PgbM=p>Xzkc%>M8Rus~|!nQw}>cscv1V`DsVNz+h`qONZDi3E1!SQrB zay=aC1xFr%!@!ZwaI_X2y&g_e&vS_6d~66e5YiWZ?F;Ry zdzba$Z^2Wqcz{rDt?4b_2Q-0(De(CB(D5oLVJ$~b`vpnDW?ux%{|jDT4ojXh&vIFZ zK0^T@7Q*77&s2DM02JMAp83+RN-ps41b8eC{_5`D_W@I3%y;nU59Iy0npg0(1dyrz~HsHJ@7qCxiI#n7oS2}Vi@ADB?NZL4B`nHzTbA!~ls#N%PiPpJW@s#{l8ki#O z{=kx0UTk$(R#SVvl6 zG?Y3vlp1f5%2boW*80J!%L`Xv3+cN(-mm(vp7YSkJvWynnq>9n(g)8=ha4kdrCSrUE2DP^hamuqsh`^KTA!zN+r^ypr^AaV_y%-E?y(fc&GfV__2W$RN6;* zwDje|t)yrEk+#=&U@$MY_)IXEv~|+djneh|qyX!p#Z!ijJ}BRc&q<#}OJ_f}BWb8ei};O$)WV^e26pOi9g_jSg+3;z`WEckM$6tc$y9m+u}FA*u--cI@`Mp{-t zI^I!Ad&xE4(tefBR+DzkmloEOMs1XOPm-=1CY4$z1#R+jhqaVP;CiX)Khl?dr6bcE z8O>!SIA|4imy-s}k%~6V-C!5IL>e>8M-8jFboy^;!)9s1C(^U8N;jlQ#b1&F9Id6Q%*>sjeL+lyVl_`sl}br>;+P~)$f6?jC?JIxW_t6!*)nDCphr#i}vI0 zSZP^Y1V1H6pFMg2063yaL_t*D7AMWQTS|G%l4pN8DPR#u&i*KU^r}?qkYz6^bCg|BZg_j9{6!AkV()7B@l#;@eX#jCkktdEmu*jizk;+wz{{NLXKumby|d7LaC<>` zbQ4_L2_m1eyypuW0gG47^wse9E%5#hm=OT!(LfZr@+a}g9{8dW1iKQIE+4|b1pqkb z(s$opc(4X6^t3zKoI2xP2)q_}AG8Xz75LrPg^~>%jLXWOhSr}!hZWFtHzD!=InS zu7Z%U(DIU>#W(0a2}a-P-87c9gw}6ET(jKM$`KY}tJb^l&g0PGH3;~Wb8dwF3J#Ou z{*Ca*M=-HBtY{0zPh|3qn{6oYIVju~b-iU&lu_F@JORuA!wei7WIW$AfH+X-~bHDG8cP-Z92YX-p%;P*a*S?N@ z1s-E5TKJ4#XLl z?vw#$#~EYi9h2%0b_{Tm&)n)(qi(SS(r|YmBMl|7M3Oax$x7JCNF@4C`L`R;qgyyB z>6i}fgsj0+-nvbf4~XaZNnvnCRoFKsm&2$GA`cz3lim}z<%@grs7*)^DTMIH2J)GBar$*QhY z$$B5ghy>yNUk7r-$+2%j@jVJsF046U@}K=Mst}UNC%c9Tt{f!NQy-@~*X%|C?6E(e z<5#4{e*PHES>RW^X^a--ITnK2z_l*ZnlgeQs5zc_wJsL&j|!UFRtCOi!pr9PtDobT z80=fEMWoq?+`XKU=(jo*$B3hM8aKH>Dkm1x``ZVapEpS-mvpUPQS%8Y+nEz)h7pz_ z0R1Lb!{HBQ;JI0>0yX3M$syXX%ZQmN zYIbALLDMa6H!`+H;BJl9toM`vEkw7CRQ=~6KKr+zUe9JliC!^Gh_-V<+iqR5WGL1S zbLS53E3F8gnweTCgZAfb9ygA+PhxQHybtIj%c6J!?hSX`(>m_Ky9oz6Big6qmLpMO zw0I6i39`E?T1D?otL4)~slE$qRz5Sub3yZ=yaQT;($FKitDDhZ?kAtpwRg6DRQFl2 z9J>UydOtzdj||2RZSkJD89L_C*BE6Dzoyn`fqhL+CUyuaq#(%vb(*9P8U+pWh(mC7MV z4ywqo9v_B>yUeyJW4fvBChk#XD@56}1o47NY=aFzTM=@}4K&_4hvB9~8#zk@n+>Ji z*C=3ZTik2Bt?Q;(cqL47&v= z=SNRSS@8?Xx7BIPrgPbfFe9VOlX&Z3J*+dHZSM{g4AW%w6|H^u0}0&?q9g({``5C^ z%-3U#$d8>oqOHH^U;i^@_e{?A%3+=$F^EM<=>3Z?RVnNQspWA7op;SDZ)4kj?y+Sp zZx7zNy?@yjH^2njS1oHh~*m-XKQ9pst&w+>MzNYpdK!XHGA z9amadWZ<8v3d$)?e@LS$3&qW-^UvQ zDzqLGb3+Ty=3xaq_du=D=z@Graat@tp?Rwy^p=x~me0pNRwW+fIN$*VLp%j8ketPi zt(gVH?hk0{RUx#i^VG5EmPD;c(3(?#;5s*`+HE1eNX?FCJw0LT@g1unZ)Yh2HQ<(V z(gUYcb2E1;j^xIg7^lxDI-Z8VO<(9&dcp7kNqu^Yr8|B({M?sL%)EcbD5}^t=8kCL z7`K!kSa#LqJ=38}dAR&Fhj9;tl)G^h*(T~d6qlgUn}ZD6IfUPAxOqg~QGzObVNVp; z6;tS3*#V0kfZvse*VeY`6!S_!XHIyx>2_L3ZylT+$B9a($|P3i7`eja$AdezwpK1K z4rEME0MEr^ZtNEvaGEx-nVr#hZ=za@cpMqYY!TNXv${58=U_2WN+f9mZkhZ=X<2rM zgQ-wp-LtNoz3~s*rxLjVBDnLB1j>2mW){^dfu{tU zEBDO!co8teD!dw}yzQqtvq#mIY!Od>xnKtjo@5%%FsV5l*#X7LG_>!g|%kR1vDd!nX*qRFUQ*24H9?MPmO@B6pF*NE1n0bQBg4+?@dO#QNBb^<@P4o{u06?FP!rm!c4j$?DY;lMul!=mlgoMG8D20_!LV;Bjt+o< z#o>0^pu*E9BEb~?8l+RinE_&d^_s|1^P@(t{iuQeiovLb&em#gRx^bOhuFfnj$5f0 zgIPDRh5Z3W5i_l`%Mum!FoCkKjcbzr`dN5-deA)ybeUY?ytYViLlCaQr#_yT4Zwk9 z8Gqi;S!L}~1OQWcSDr#8$gtdi@%x&~``x3wO<%n5TLKnRuqDRmyAwD~PJ?f4X96I; z0zA(L8#YV1=m|^Ar6S%ruO7n;;jm?gc>MV^Jhy1po>juSDUkkt>Et@Nc!=Jn<Cr{6A34k$x(2aElyqX@ONb89iB$z47qFP6ft2T$I2F`0;eO0B~O%%KF^dila?(t zS=QTo>wrlq7G>|~k-w(BtDlY^v-dD&kfRJ~;JFIo6bIa>gnMnDK2@AcjO~+i5U3oJ zbbeknm;q5iqIFEgp}DZ3rUF-(*$VtCSNOACT(_HPsUYK*XmrzL<>Lgzdn^jVJD=uF z2y9_etyNk++!K7VK{Y?M=Vtmv==7X;u&JW@{1I{fDA@gv5bxfVSVtgvyQrgnxucfH z*#0MrG7Hz|FTam(Hlp-zy^Bk$ra9^sPb?a!Zhnl6CE9dr^yw zv1gwH2>IcMJuIPXh#uwn!#jacm?GpMyl^P*{?L-;(W%i&%}Y+A*FcOG827Gv-a5{A z#2-tl`x6&WsPGRAM;9_;MfO~=OG;;hj-Y@&Yd|Q$8ge9r|^Q255gM#+vkB>9P z*K_eycqIH)kf|?6njNK;M0iz->4AV*GxWED<_fFNO~4^*GC^u#9nri!xZvYj#qwA| zv!8U6R=t%TB%~(|5c@W6R%fwuJ=rB zq2t7R7AsBgCG-Uvw>c<;2g63-=apP;mNOaeeT@#gb_;BBMt7SS<`Lp83>?$bM+Lv& zaT)OQnmZt#pJVYYB!YNNY>U{zVoYy>&*pN)z{8@FW|?Bz2X=7b2DEhhK1Rgb?X+;? zSaJQ9Uk19l_ZnL+$sDpntER4QZSMX7e<29ts6$K5nPd2B$3la;(=2WvzDlu~rm?4Q zv~a?Q_nMtddyA zy}g>tiL|!aqHswS*ifa5yKsPP$~OgBmEmU^O6BNUqrK%bChQ<9?kKi&fLV$Qx0_Tu z+n(L|wu6xU(1e450+_?Cxh$OeWnNc+_Xa@sXC$d1GQ{=Pm-SYy7-m1R#!GNm`xOj8 zuJEowS%#P`WlcOdrxj;{QuZaju)7e|8B*FW18J}G_Yo_m^`p5t4q3TDgQrCMBiXJ$ z)MFqCyS-9m@rdfK2AY*Hy{PHEyYKf<^H*DH!dpn2uv6;nmBn!RNKv+{Y zJC{eVJ@FY1L*EfXa(%QZim!rFa-RZKspmL=J`tnt&CRg_`FbP~W4A(m#FI|S8a?X< zfSujSQHh)(iKzkVil<9!E@lxE(JCCe?doh7W*C=5FH^gR)+GXk1Qm?8zT@iT6OY+3 zXDtgI0({#;P?Q1Nk6wsL^jCH37=YSK_Tm$FpAB+gwX`Rw^XLCDMv-|^i}aX*n_)TA zCzw~9`ZqJeokDiz>FIVa!h^1yd2+^Lt?j8Z)m$%V^!n18N*Q^gVVE@^X$MGBaITrg zTElAH>H5z6o_YA%iXxjeyu{$Yf3^kmD+-Y~0E>c21C%jO8wtlL{g}puPC>pUH~Int zHs4TC89hmWqzeJgFrit5<3cp8k{rP|E;i_&rioBR+lrAG;k-fuSr8&g{qb1IpjfO$ zP#rpU%$Og*_xAy>;=E#Y;`b>9f&+=@vG?ZgzK(h<2jr%4mg95ssL#_4Ih!n2|*1BI%yM1lC|SxBVxZ#0MudxG>i}ZlA9(&&M;cEjpF|l z`4@kIl#$1lYi&-IO{`^yn8O^x@oyK+imU$};7S>}Y`Mlie?nR#2dY$?S#B39Lxwc@ zA1P(&vw;rOhdnCC;Q=>y=AV2apV21?N`*z5{jbAP29szL1*WIRFE!2%x38|bG<*46 zHnU64uG4Mj5CrhK2`EywzKg33;DSv*A8yYMzQZwb7aC>+V!ST;Ps)`rs8yg_Vl{K% zXt9v_OiS-5jYQ09;m0^b-QHUuo|k%{J3K6%U-#>+)v&MMjBYMLW$(VJ12mJRbr_{V-g4+lET)3}C$_~|!-$$G< z`#sfhDs&_cx08ZHyFgtD9k1eJ@#Urrno$Nr-hi`>Qe$~J5>&Hw;3WVN!>po(dQO$2gg{^V9 zqteq?Rnb8A&g za+-h}88?v$cOQ3~=<0VNQ-12a{5TD9>Ly|OnERoM2yN4ca-mqy*{EmC!q}np4j8CGlHL!{2 zyRDIMQ6q7#BFLYX+~3-6vsX(d@}7MX`*71CoR5!&RNh_+oeFCaf<}(NK z`*yDg^}odnSN(%WMEOQ8QjOv6or2X+(kjXd6@xT|PKC#DD+9VEogAZ3%w#TuF7*)0foqf&#p^mtues#Y_1BcR^KRF{Mg^KnKI^w0 zr{tpcVBvMSowfbIvuo|jYET2x=+X$&&+QW~)(B}kG8P~Qe!}#_DHAAPOC)jPknQDR z$X=A@ccC@r3E3SUz7e;J1w68VbkvZp-X7itr+D%X4`Niuil!?xQYCYXypzK^FnYO6bw9ES4+{9*7r_%*oTu)D8-q@0Cp+^>zb zxJW!B#ul;WAKvt)1<{`i_Pi zI)5vV9%HNq)`Dt#BNIBHIv>b&#e~@9R8MrO6@?Bi>oEHUnSXFcYj&HKwfhEN*^yLF@25dmMm z)t~=zNbPBU`oduD0x!{5G}4l8Ha5vHWcNRB604&cQLo+is}qcbOfUy)X>^4QSx+T% z%a1*we)As((4?spJaU@bP%G9-wO@C>yI4_Z{+OUH)_;%Wz2 zfI;9@(mPcTw}ySc1!(Ni#tXGhh!I70c}o~AnaX%=7~S>w3m7wHL}9i_6F!D>n5cy! z5zbDvVTl}6bg!o=pvl|pvP4qBO>oh6wz_Dll>X`5C(84aQ~=b4AKdG(t>J~;O)1Ua z-~!?sDaD(w+97|zL{!F`_g@$|{%17YePg#dvgDZ;coGjk8Xdk;N5(hh0aItN{GQUt zhzRc^*7%ujO^QRI#rk^J%$3i5-UI+AzinCKk)iY?m z9U`T!+k@HP6|(~Fp|UD4Rp#H9W%VwNaGDo~C=?VoO$@F+@yS}RUNyI9$ZuL>PC5F< zt^!EO%_X{ttUoACVj2ZVZ+=IJNAExVbt;b(sqWa%0%?}pYK&1o@Y31U$1-=$N8Jl~uyuS*AdD2AZ1>%i z7%vHrDT4OUOamRZ)(7eyr*+1&thl-n(kjX{JBJE(NP;@8hl4kakDi;PbVA7o)--hz z2AO!f`afBB{w}ONgsc(wTSB#UWB`Gr%QJS3me$I5bjC{$I(YcDN!9OXm;7r*r;kPWMo3WM_Q0J&`>Dg+Mzw<0 zxlv_CX&&&>QwgBrF?wDmxE6ax`-R)SIc!MQ;vK16B-|inf|K;-FS}4W-R7H(>@&s5 z_XgfJzhdAC8LV+mjKC=MpZATw`x7!nB`kKoWh0C>W%xEpE(_9~RExf6G z`fFt?4WU`Pem;3l#HIBeS;d&lk`TzLxu2VM21u7JiWGr*3rLu`f5nLY?gY>0<%2~m zx5M4ejh@_l=!X2WiJ#|py25^hoXz-0VN_4%Y3ck(K_&a9YRbOvwtMIoR}kxNtz>y1 z*T`g3=(jaXA3+DQg8hwT?#_)U!(vSOy^SQDf6dR&Sb6bi8uya@p;cv{b^}1oIwd>z zc=P1GT%DK@XQk{E*s?=9%eODM;=t&?%gBWmj?I1cwX$PqX!Ma{gw#j|+(XGw4$KWS z(fu)zvTF$x6l)$jSNuOeO0sc zF4EQns^MOh5Ic6^8GcHmm}}ojDEkMJ&B+lwzRG|)8QYXs@#d=gGu|lOp{$%lF+jzz zpAb2Fcu?V7+E*DHd-)0Q~n%gL_kS^0wR!Mk5;7MdN;Xxga*>Nyp|e zJX@yB6{X5pgSHEwz9g8SG)TB!dWh;}k=g3mLif3Jc%_E2DRv6EyuPZhvpkc45aQle zS-uao2;r!TZI`^h4CMQn+(nQ&yu%Z-g1(Anp8FCC$+EAZtMMuxJiY#ocJsyGxW|-Imd@m9jA=T9V*|EibHQuet z1+V;hi80Ck23YzOpxRx+D01FilrQe0pLXmq#MLT|oVY!uSZHQ(LL){bmaIo&wxtB!*IekXtDk+0d;8qChB$9hF|Tk?$@!p7k$?yh|i^)GYqZsVuu}GCK3D{hN0bC z5ebK#Uh_?yJ8+Zp_cdde>N^RV1v3q8r*a(->I}XAWZC5}+g6$T)%#%_Et<>N%8Xa* zlu_a&TdqQt+zra4>TFT!a+Iha5kY_7NxfSVyv8J?|2$Ud!Vg$QXul`;MTXUugbQf> z*n#AS>6p0&(%f8-QeSFgX-Dmit*6NWEkEQtfXJ(+$Nn$p8R#@g3HOKvQYVRsdQP<1 zD)Xd!vdS7f-aTIsVzBP~&4zbvci3ac_H|*;=7leQ<`A)yLKEq629GZqw3IoQ*`Ce> z1XE01zy?rUsMGeKvxqiC{Gdu`muJ3o*u(qRJg$Ii`|EfWRQ>*=0d@M6=nMPQWLHlV z;@5U3(gm+*Kqj#)pDp3LYeA|~n!nU>_tWb=)w_XtK|&KO+hJF^srH}Sr@X!Be?2fzg;k|q`N&bCu{b|MLvF`=4l_fzc;Eiv~)c2wfFjLO$?@z zHgN``x*;7P?`=JDR7EaUay?U))l}dz2>}FBA>l5qN96^__dHaJa!+9K3@|WdHwH4R0I%}nRUTc>nmGmF>Ie&?dSsPDcZ#`T#^{2!|twK+wxkg4ftaFD|x=nrL z7<-Mj!=#!W;EGi6OxLumZ?HKu?pfehnzS;=yePjG|X;&3Ulz>pp|6Gu|7pi-vssaahr%? zM4Sib4$p3do<(KK(cS<`qO-G7L)BD{EbmM*Er7gH=ud2{8%gi=C6HGHb6dp@XOS3< zm-E`GppO%O$(Z6;z#oM1$8R)4z2{PT!1t3>+@scdLn5eH&x?hAD7yB2qw3&vN_&SL zZ|MQs7$;WWD(Rt&Gv<>$Ru%@8?##I^M|~2+>*|k%nD6=NWGLyjtCCFQzoY3Yt*Qnw zA8kBPpy@vkmBf~HwvTrm`Dd!p*m6+zxPX-e{F%J=exJcth{?Ae3Q1obk(&<=oNDm2 z<8w?nPt#p@oOB{S4G#Rg^t92<=KwLd>gdWnu#cPvMuZ0cDG>KQGZ3g7|V7!^xoiB&It?Zgfp$E{Z=%U0#X24uweUT|FVK@7o^OwC=-k6;Vnd9IP94~Vo(HwCHnaD5X6#4EA z^W--uQ_|IL_SvBhJ|r{A?Ip1QR?h(N1I8JKNhc2zf8d#l{R^aDY z<7DcpHiy0NlY$BNju^%MZ2s50x0mTUK66F5xv+85hn8yrtf_I`af3_jMZLWWDZUlN zr?it{tY%_lRfA69*XZApX|_|%qm<7L0~Z5|ddpfqm8@tq6=SMJarslYJfDwA>0MlSm)_A)DBeV1TY;U8(y-jwXLeIBYg~!E#fgR9OX|*a&dXD}S zG8rrx^5qSBgE@ub0-$x}lEL2xFnz4}i5o?eW$r&aum?N-K4u%Wr%JKszs!`AD!RX!JQo~fD>IPo=1?!~t)JWQmQVAVa)P;7eXm$RUTEB!}e?jOG`i(+RAtO>Y zW|z4WcCNgTj$3~~QmI{3cTemKbTgQAO5$PK#8ak6u#~NUtJaldfms{nelB{%zZMjm z^7{d=0?79srCWqFa}6GEDo1rFbhN7!p3=UUa1#)4QJIa*j-k#9?a;ixmmej;@`ous zK=$Bz*7ro-@0R%YwfVeXO|kJy_jy*>ei?E zTNS~@?X6v>%uk;6ADO1AvScVUpFkf<%68M|!d3vEFad0nW0aQVJj#_rz16@+-({O< zU{=&?NMMMjTljYDKb0~s%?`9=QqHvYEt+oABqxL(p0bZ(5$t5(m{Ch_wUH+3Lcx8> ztxAgQ+*i07Q1H_vP8~ORqY@S0yg|rSo>QflL(6wqRw+7Zd$)QlTapkUDM#ek0{P=x z^gNE?q+FKaI}PekT4ZH8xa7g1xffsE+Ocn@vn1#9Tcm5oU@yK7U3fC%B^~ymxF79@ zW!+K%JlY@K5bCmEYUn1D?0xMOQt?g|l-DW|NH( zg6RnCq#Uo}cc_6Y*uf%3+p5^(`j2XNv#Wj2PBOi5N42%$FW&V+{M@5wo#N>i_9Jbb zN}|5#OMht=KB)TLh9gYV5&(A)0-rLdKcK?7aR>f`5}HpKd44@O864S9+5q2!MgGp9 zcgYS3A^PBJvO+PAxELI7ch{oy$m=_zDK6B8NL2>SVMGLu|PbGI?T!r znZfB-&{H|m`bdT0p!tJ&yvNC|`!)Ps=Az#2b1C=;WD}xb1I;tib=iM?7EQIYY=BW| zz+6MLhG&P)YnIb8#c7dBdgzt7y!+9(+))S9V2eGGq3XvCWrR^F_$oNUXTeSHe(2$M zcF4?+>Vk^kvz|jWaQ1!`lX=I>6|Han@yPS_s8%|u_bMeS9Bcf19q&*tGO&bidiPZ! zo3zNVA|o%*vO3wXX}NTzA$GEBtEM0x`WM_?;j1>dp;`RarHVPLH!h#T+-u2VuE^|`wKl=Psb z0qD^jw_qej4eD%NY|u`kv>N43mEMus_c$ti$jH|LR9_BQ*{|Qm&h1jxZ;*4Ek5&(| z_#>4-hYxjpMr%ifE}Bdl)**UU~P|FYBf74^Ry;s_mqJ8ZAXr`!ANk@9x9zb z&ek$km=fh$l}_`jwsl^(l{LcQ=Wp8coYEqyY#tF6X+c1h-)AK}JCc&x95YC44H9lU zOnoG7*fChi@FB7h>|jRm#aer>;QmbLe#hYPUa|d-a#6`nP`nCi{w zwQNjPs{4kd5p7y-8a-fK>35DZI}(W8i&E*2J}+-ejWXTgv-0LQ909hj9M0*_)@565 zusvh+qA=S>7gHDR-u_kJ8PYRDQuVRyQu)#ED9{`UXezi%xxup7q`zVQ5x%HNp z7w3czetB!s-@V{Wa~3sHf7IYv>Pzf zN9^W6w2|HDC!7F5rTv>kR(r^#VTHz1Nk>`Gxm=sp#U32DDj7cLO zbl|P2Zg+lDC~%CY!xJ~;;-)tFDQ5V_+{IYofUEltls7XC6J3QR)Gt?>x^?<`Q04|jiP zJ&Hyq>?=03a*E=X&QRrSAGpaTX+0?TPq0q&{*BLp#(^id@bJpZ59a|#4%94l@Y9ER z$M@C%6JIY)$}<=@Fslx*^ysu7!h!t0P;M%d=1ZIoB5p6f3KSUUOoDRlBAu48*OxKC zTFvSRr!DG~7O)^-r;`#QA_v`?D2j^WY#+);Ttg}?iTC{zA5 zRtu7XPejd_w13Q3d{ZfT+WLI4Vo$;%Ouhs#(oDrpUGP>Wl6b#3LQi!i6`ZDXcr(x) zzWxoeZ#Pi(iZNb;w#)+<#Z8y1GKiTZ+ls+&ejS|YpGD4>)UN6)`Z9(1I_GS-OHcwh zU$;dGw-O*a89k2W#adq_Ufm3#(6gpM4#x|Or9d(MMOv)X_RPY2u5ieb=D^2_6ZBve z~FkM%voGjl!4G26A2D3g6i$z333h2EAr#jh=UC3$X~MDDecXaYxfEYu6bH#}8wmyQA888T)>?dHN^!qc|x&&c;3*`kuqe zwqDSb%(P|O?4`T-;SHa|L(@I-_cOjNCnA|4j896Ic{K}7cnxnc^3U}ZlxfHJ_Fgs;Z^KM7}Ok|MzGt6>3Ns(vj;YBl1ZF$jZcIYK<)SA$) zO&L4L=~y>kgO(*Rlppw14o}Q0$sC#eOC&{rv~>ZL{=c=F}kz1i9FZ5&Ml$>>-GwNzE)UIc{CG|oLl~r^eylcfT}Oz!KTjH z=o#8hJtjB_UAxO`8vZvz1LeZOq0aeilRPLFGsJyLjJm4fL7=-)tTRq9m1pTjMt-U^ zRbx7J#}e7exS~l1*pK1i#Bf|2ZP?rX8;ur7ZteJpkLAKoR5|LKU?+*Fren=w!-B=y zWDSlg4T?hz?Dp)z)ZGL0Yc;$pP*+H3JHypcg>5beF&&ImfnRM#=cw=oi!C(62wYwH zaKaidl20}ZV5Fxx{h*5o*y#t_(Jh#1_nUQbz*rSf0g8e7z)@e^AP0F|1U)L(K!Em4 z8xfCsq+u2Yd}X3Der`&SriYLyG@s|8<`9K}(v04bj@%wWtliu(JBy~%h)+ve`<5S` zQG+;njzl6iQC*LE9L~izkerQ&tWQ3;2=JQ%kf-2|gvbo_sKq2UYPPy5Zxw%zOm-bL z$gR<&sIW2{}cjQGE*^;P$+FPn)ux`WJ zP_fGJ>~eMm!mE&g83i0W;+sr?Td)WVg%LM8+@$dDuVkdcg0trIZM+exgqr8Xz6**z zQTNG5B;M@d?Y2v!N431U5<7_~yhWRdIHx@thznh7wxsvX0s~^~aj$Zg$BQ}e8ooEBg(Iw-_epinA(UXR}#4BCiZ~_rR z=+sW_;cX#bSk##g=?Y~CQPA=a?%JffPXungO5Rou{DXG79sf#Rs!H&$KBXqxpT|mK zw&b5pB8=c7+uGllucT`cltqw`?hc*rA5HzW_LM#U-ZveBUHPNA$brwN#>zkI4XW>= z)~wd{$pxX+3g>J^?7(+jv;wc^b|(ZChp+GDRAY0&dDFNvUgby0L67z*(i($#w)8}f zz?S)d4b;^8*6Gp$Kk~p$?SUId)VDy%67ju+Wno;l>d{B~ZcD8S=E0AZ5e$a@PxL;? zgc3+x1~KU~Z7GMX`@4m~eZd@aL4&EXB-C*e7-N^H2idmNRr1r(#m#6Hx2c>J^f`~5 zyj=LzgZkOE3bEH4?MT$t6_Boe);jE!z!{bK?k}6$TheLss$eI5UcQ%^cyXz%K-_#s zqHeD#C|U2Zf_A^C>F^jjHnzPdv$6iV{;L+44ak7MAq^u~T`+I$`V(ALg$*TFJV6%; zOO;geGtzz3XQ|R_Z7yY3p_MjF1^kNIeqW6#t~h10@DpWhh6wT(c-+`?3%<+sA&mM{ ze#Ghsj>r+-se?0v=D@LrJav4>!_9-%(7xzFj`@~+UPWf@78YVCb>VN?dSGj<&WZ$d z23%;x6GEnYmFK6}F`g$e22Wwnsaq!JW%ZgeC4*NL5qK$+rZ5O2Vowuk$op7eC^%*k zBMT)`q_D@Smp4fu@IsNynhU;;Ei%*8s?@XjJUc?jX2yr?S(rXrTi8vvb-Pa%>EQmy zZ`vG%@}uiG6%?7#MU+dnoTMXO+c*#Mb)9vqtD@L#7R3fYXl!VPzMKz#T|Kz7a{p`F zR|47)^Nm}vKjD@zXd%K+M)5}c(Pxwj<{Lusn7%3E0|$pNYMzEaT}sgsEkk{DxjyHH zk1C`euIXK5tE5;?(Fq>f=s;Lglr^CpaMp-KIUEbLpNMi&QnUlOQ2T5#o&D-xL6C1a zWbpc|@cXph?7HtYK?J_kB_ba2*fmPhrXB$R0Kq5MES@}Yc;c+=^w^p73vgBHs;sz_ zg1D5lnY6639O*||R7y%&N(y=4$@70r@brG*_Au!GJpumtcMfTS$p5bJ#Ld&$?}>w_ i&;K Date: Sun, 13 Jul 2025 01:04:02 +0200 Subject: [PATCH 008/111] fix --- frontend/index.html | 2 +- frontend/public/{Tree Outline Art.png => tree.png} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename frontend/public/{Tree Outline Art.png => tree.png} (100%) diff --git a/frontend/index.html b/frontend/index.html index c54a2b6728..c62f2a4894 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,7 +2,7 @@ - + ENTity app diff --git a/frontend/public/Tree Outline Art.png b/frontend/public/tree.png similarity index 100% rename from frontend/public/Tree Outline Art.png rename to frontend/public/tree.png From 8b24a171c7ebc11228f68569e3ccff0b10cf8a55 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 10:54:12 +0200 Subject: [PATCH 009/111] added global filters --- .../src/components/filters/GlobalFilters.jsx | 162 ++++++++++++++++-- 1 file changed, 146 insertions(+), 16 deletions(-) diff --git a/frontend/src/components/filters/GlobalFilters.jsx b/frontend/src/components/filters/GlobalFilters.jsx index e14a82268f..e1b6b15e78 100644 --- a/frontend/src/components/filters/GlobalFilters.jsx +++ b/frontend/src/components/filters/GlobalFilters.jsx @@ -1,4 +1,5 @@ import { useState, useEffect, useRef, useCallback } from 'react'; +import { useSearchParams } from 'react-router-dom'; import styled from 'styled-components'; import { DateRangePicker } from './DateRangePicker'; import { ForestSelector } from './ForestSelector'; @@ -86,7 +87,7 @@ const ClearAllButton = styled.button` `; export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { - // Only use initialFilters on mount + const [searchParams, setSearchParams] = useSearchParams(); const didInit = useRef(false); const onFiltersChangeRef = useRef(onFiltersChange); const hasMounted = useRef(false); @@ -96,14 +97,111 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { onFiltersChangeRef.current = onFiltersChange; }, [onFiltersChange]); - const [filters, setFilters] = useState(() => ({ - dateRange: { - startDate: new Date(new Date().getFullYear(), 0, 1), - endDate: new Date() - }, - selectedForests: [], - ...initialFilters - })); + // Parse filters from URL on initial load + const getFiltersFromURL = useCallback(() => { + const startDateParam = searchParams.get('startDate'); + const endDateParam = searchParams.get('endDate'); + const forestsParam = searchParams.get('forests'); + + const urlFilters = {}; + + // Parse date range from URL + if (startDateParam && endDateParam) { + try { + const startDate = new Date(startDateParam); + const endDate = new Date(endDateParam); + + // Validate dates + if (!isNaN(startDate.getTime()) && !isNaN(endDate.getTime()) && startDate <= endDate) { + urlFilters.dateRange = { startDate, endDate }; + } + } catch (error) { + console.warn('Invalid date parameters in URL:', error); + } + } + + // Parse selected forests from URL + if (forestsParam) { + try { + const forestIds = forestsParam.split(',').map(id => parseInt(id, 10)).filter(id => !isNaN(id)); + if (forestIds.length > 0) { + urlFilters.selectedForests = forestIds; + } + } catch (error) { + console.warn('Invalid forest parameters in URL:', error); + } + } + + return urlFilters; + }, [searchParams]); + + const [filters, setFilters] = useState(() => { + const urlFilters = getFiltersFromURL(); + return { + dateRange: { + startDate: new Date(new Date().getFullYear(), 0, 1), + endDate: new Date() + }, + selectedForests: [], + ...initialFilters, + ...urlFilters // URL parameters take precedence + }; + }); + + const [filterErrors, setFilterErrors] = useState({}); + + // Validate filters + const validateFilters = useCallback((filtersToValidate) => { + const errors = {}; + + // Validate date range + if (filtersToValidate.dateRange) { + const { startDate, endDate } = filtersToValidate.dateRange; + + if (startDate && endDate) { + if (startDate > endDate) { + errors.dateRange = 'Start date must be before or equal to end date'; + } + + if (endDate > new Date()) { + errors.dateRange = 'End date cannot be in the future'; + } + + // Check if date range is too large (more than 5 years) + const diffYears = (endDate - startDate) / (1000 * 60 * 60 * 24 * 365); + if (diffYears > 5) { + errors.dateRange = 'Date range cannot exceed 5 years'; + } + } + } + + // Validate selected forests (optional - could check against available forests) + if (filtersToValidate.selectedForests && filtersToValidate.selectedForests.length > 10) { + errors.selectedForests = 'Cannot select more than 10 forests at once'; + } + + setFilterErrors(errors); + return Object.keys(errors).length === 0; + }, []); + + // Update URL parameters when filters change + const updateURLParams = useCallback((newFilters) => { + const params = new URLSearchParams(); + + // Add date range to URL + if (newFilters.dateRange?.startDate && newFilters.dateRange?.endDate) { + params.set('startDate', newFilters.dateRange.startDate.toISOString().split('T')[0]); + params.set('endDate', newFilters.dateRange.endDate.toISOString().split('T')[0]); + } + + // Add selected forests to URL + if (newFilters.selectedForests && newFilters.selectedForests.length > 0) { + params.set('forests', newFilters.selectedForests.join(',')); + } + + // Update URL without triggering navigation + setSearchParams(params, { replace: true }); + }, [setSearchParams]); useEffect(() => { if (!didInit.current && Object.keys(initialFilters).length > 0) { @@ -128,7 +226,7 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { setActiveFilters(active); }, [filters]); - // Debounced notify parent of filter changes - FIXED: removed onFiltersChange from dependencies and prevent initial call + // Debounced notify parent of filter changes with validation and URL persistence useEffect(() => { // Don't call callback on initial mount if (!hasMounted.current) { @@ -137,12 +235,22 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { } const timer = setTimeout(() => { - if (onFiltersChangeRef.current) { - onFiltersChangeRef.current(filters); + // Validate filters before applying + const isValid = validateFilters(filters); + + if (isValid) { + // Update URL parameters + updateURLParams(filters); + + // Notify parent component + if (onFiltersChangeRef.current) { + onFiltersChangeRef.current(filters); + } } }, 1000); // 1 second debounce + return () => clearTimeout(timer); - }, [filters]); // Only depend on filters, not the callback function + }, [filters, validateFilters, updateURLParams]); const handleDateChange = useCallback((dateRange) => { setFilters(prev => ({ @@ -159,14 +267,19 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { }, []); const handleClearAll = useCallback(() => { - setFilters({ + const clearedFilters = { dateRange: { startDate: new Date(new Date().getFullYear(), 0, 1), endDate: new Date() }, selectedForests: [] - }); - }, []); + }; + setFilters(clearedFilters); + setFilterErrors({}); + + // Clear URL parameters + setSearchParams({}, { replace: true }); + }, [setSearchParams]); return ( @@ -184,6 +297,23 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { )} + {/* Display filter errors */} + {Object.keys(filterErrors).length > 0 && ( +
+
+ + + + Filter Validation Errors +
+
    + {Object.entries(filterErrors).map(([field, error]) => ( +
  • • {error}
  • + ))} +
+
+ )} + Date: Sun, 13 Jul 2025 10:57:24 +0200 Subject: [PATCH 010/111] initial setup of the backend, with models, seeding data and middleware. --- backend/controllers/authController.js | 203 +++++++++++++ backend/controllers/forestController.js | 373 +++++++++++++++++++++++ backend/controllers/treeController.js | 389 ++++++++++++++++++++++++ backend/middleware/auth.js | 74 +++++ backend/middleware/validation.js | 155 ++++++++++ backend/models/Forest.js | 114 +++++++ backend/models/Tree.js | 214 +++++++++++++ backend/models/User.js | 92 ++++++ backend/models/index.js | 9 + backend/package.json | 9 +- backend/routes/auth.js | 27 ++ backend/routes/forests.js | 25 ++ backend/routes/trees.js | 36 +++ backend/server.js | 104 ++++++- backend/utils/jwt.js | 35 +++ backend/utils/seeder.js | 230 ++++++++++++++ 16 files changed, 2082 insertions(+), 7 deletions(-) create mode 100644 backend/controllers/authController.js create mode 100644 backend/controllers/forestController.js create mode 100644 backend/controllers/treeController.js create mode 100644 backend/middleware/auth.js create mode 100644 backend/middleware/validation.js create mode 100644 backend/models/Forest.js create mode 100644 backend/models/Tree.js create mode 100644 backend/models/User.js create mode 100644 backend/models/index.js create mode 100644 backend/routes/auth.js create mode 100644 backend/routes/forests.js create mode 100644 backend/routes/trees.js create mode 100644 backend/utils/jwt.js create mode 100644 backend/utils/seeder.js diff --git a/backend/controllers/authController.js b/backend/controllers/authController.js new file mode 100644 index 0000000000..8d4bf2d517 --- /dev/null +++ b/backend/controllers/authController.js @@ -0,0 +1,203 @@ +import { validationResult } from 'express-validator'; +import { User } from '../models/index.js'; +import { generateToken } from '../utils/jwt.js'; + +// Register new user +export const register = async (req, res) => { + try { + // Check for validation errors + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + } + + const { email, password, firstName, lastName } = req.body; + + // Check if user already exists + const existingUser = await User.findByEmail(email); + if (existingUser) { + return res.status(409).json({ + success: false, + message: 'User with this email already exists' + }); + } + + // Create new user + const user = new User({ + email, + password, + firstName, + lastName + }); + + await user.save(); + + // Generate JWT token + const token = generateToken(user._id); + + // Update last login + user.lastLogin = new Date(); + await user.save(); + + res.status(201).json({ + success: true, + message: 'User registered successfully', + data: { + token, + user: user.toJSON() + } + }); + } catch (error) { + console.error('Registration error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Login user +export const login = async (req, res) => { + try { + // Check for validation errors + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + } + + const { email, password } = req.body; + + // Find user by email + const user = await User.findByEmail(email); + if (!user) { + return res.status(401).json({ + success: false, + message: 'Invalid email or password' + }); + } + + // Check if account is active + if (!user.isActive) { + return res.status(401).json({ + success: false, + message: 'Account is deactivated' + }); + } + + // Check password + const isPasswordValid = await user.comparePassword(password); + if (!isPasswordValid) { + return res.status(401).json({ + success: false, + message: 'Invalid email or password' + }); + } + + // Generate JWT token + const token = generateToken(user._id); + + // Update last login + user.lastLogin = new Date(); + await user.save(); + + res.json({ + success: true, + message: 'Login successful', + data: { + token, + user: user.toJSON() + } + }); + } catch (error) { + console.error('Login error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get current user profile +export const getProfile = async (req, res) => { + try { + res.json({ + success: true, + data: { + user: req.user.toJSON() + } + }); + } catch (error) { + console.error('Get profile error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Update user profile +export const updateProfile = async (req, res) => { + try { + // Check for validation errors + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + } + + const { firstName, lastName } = req.body; + const user = req.user; + + // Update allowed fields + if (firstName !== undefined) user.firstName = firstName; + if (lastName !== undefined) user.lastName = lastName; + + await user.save(); + + res.json({ + success: true, + message: 'Profile updated successfully', + data: { + user: user.toJSON() + } + }); + } catch (error) { + console.error('Update profile error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Logout (client-side token removal, server can implement token blacklisting if needed) +export const logout = async (req, res) => { + try { + res.json({ + success: true, + message: 'Logout successful' + }); + } catch (error) { + console.error('Logout error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; \ No newline at end of file diff --git a/backend/controllers/forestController.js b/backend/controllers/forestController.js new file mode 100644 index 0000000000..d71a7e53f1 --- /dev/null +++ b/backend/controllers/forestController.js @@ -0,0 +1,373 @@ +import { validationResult } from 'express-validator'; +import { Forest, Tree } from '../models/index.js'; + +// Get all forests with optional filtering +export const getForests = async (req, res) => { + try { + const { + region, + startDate, + endDate, + page = 1, + limit = 10, + sortBy = 'name', + sortOrder = 'asc' + } = req.query; + + // Build query conditions + const queryConditions = { isActive: true }; + + if (region) { + queryConditions.region = new RegExp(region, 'i'); + } + + if (startDate || endDate) { + queryConditions.establishedDate = {}; + if (startDate) queryConditions.establishedDate.$gte = new Date(startDate); + if (endDate) queryConditions.establishedDate.$lte = new Date(endDate); + } + + // Calculate pagination + const skip = (page - 1) * limit; + const sortDirection = sortOrder === 'desc' ? -1 : 1; + + // Execute query with pagination + const forests = await Forest.find(queryConditions) + .sort({ [sortBy]: sortDirection }) + .skip(skip) + .limit(parseInt(limit)) + .populate('treeCount'); + + // Get total count for pagination + const totalCount = await Forest.countDocuments(queryConditions); + + res.json({ + success: true, + data: { + forests, + pagination: { + currentPage: parseInt(page), + totalPages: Math.ceil(totalCount / limit), + totalCount, + hasNextPage: page * limit < totalCount, + hasPrevPage: page > 1 + } + } + }); + } catch (error) { + console.error('Get forests error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get single forest by ID +export const getForestById = async (req, res) => { + try { + const { id } = req.params; + + const forest = await Forest.findById(id).populate('treeCount'); + if (!forest || !forest.isActive) { + return res.status(404).json({ + success: false, + message: 'Forest not found' + }); + } + + // Get forest statistics + const totalTrees = await Tree.countDocuments({ forestId: id }); + const aliveTrees = await Tree.countDocuments({ forestId: id, isAlive: true }); + const survivalRate = totalTrees > 0 ? (aliveTrees / totalTrees) * 100 : 0; + + // Get average height from latest measurements + const avgHeightResult = await Tree.aggregate([ + { $match: { forestId: forest._id, isAlive: true } }, + { $unwind: '$measurements' }, + { $sort: { 'measurements.measuredAt': -1 } }, + { $group: { + _id: '$_id', + latestHeight: { $first: '$measurements.height' } + }}, + { $group: { + _id: null, + avgHeight: { $avg: '$latestHeight' } + }} + ]); + + const avgHeight = avgHeightResult.length > 0 ? avgHeightResult[0].avgHeight : 0; + + // Get total CO2 absorption + const co2Result = await Tree.aggregate([ + { $match: { forestId: forest._id, isAlive: true } }, + { $unwind: '$measurements' }, + { $group: { + _id: null, + totalCO2: { $sum: '$measurements.co2Absorption' } + }} + ]); + + const totalCO2 = co2Result.length > 0 ? co2Result[0].totalCO2 : 0; + + res.json({ + success: true, + data: { + forest, + statistics: { + totalTrees, + aliveTrees, + survivalRate: Math.round(survivalRate * 100) / 100, + averageHeight: Math.round(avgHeight * 100) / 100, + totalCO2Absorption: Math.round(totalCO2 * 100) / 100 + } + } + }); + } catch (error) { + console.error('Get forest by ID error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Create new forest (admin only) +export const createForest = async (req, res) => { + try { + // Check for validation errors + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + } + + const forest = new Forest(req.body); + await forest.save(); + + res.status(201).json({ + success: true, + message: 'Forest created successfully', + data: { forest } + }); + } catch (error) { + console.error('Create forest error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Update forest (admin only) +export const updateForest = async (req, res) => { + try { + // Check for validation errors + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + } + + const { id } = req.params; + const forest = await Forest.findByIdAndUpdate( + id, + { ...req.body, updatedAt: Date.now() }, + { new: true, runValidators: true } + ); + + if (!forest) { + return res.status(404).json({ + success: false, + message: 'Forest not found' + }); + } + + res.json({ + success: true, + message: 'Forest updated successfully', + data: { forest } + }); + } catch (error) { + console.error('Update forest error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Delete forest (admin only) +export const deleteForest = async (req, res) => { + try { + const { id } = req.params; + + // Soft delete by setting isActive to false + const forest = await Forest.findByIdAndUpdate( + id, + { isActive: false, updatedAt: Date.now() }, + { new: true } + ); + + if (!forest) { + return res.status(404).json({ + success: false, + message: 'Forest not found' + }); + } + + res.json({ + success: true, + message: 'Forest deleted successfully' + }); + } catch (error) { + console.error('Delete forest error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get forest analytics +export const getForestAnalytics = async (req, res) => { + try { + const { id } = req.params; + const { startDate, endDate } = req.query; + + // Validate forest exists + const forest = await Forest.findById(id); + if (!forest || !forest.isActive) { + return res.status(404).json({ + success: false, + message: 'Forest not found' + }); + } + + // Build date filter + const dateFilter = {}; + if (startDate || endDate) { + dateFilter['measurements.measuredAt'] = {}; + if (startDate) dateFilter['measurements.measuredAt'].$gte = new Date(startDate); + if (endDate) dateFilter['measurements.measuredAt'].$lte = new Date(endDate); + } + + // Get survival rate over time + const survivalRateData = await Tree.aggregate([ + { $match: { forestId: forest._id } }, + { + $group: { + _id: { + year: { $year: '$plantedDate' }, + month: { $month: '$plantedDate' } + }, + totalPlanted: { $sum: 1 }, + surviving: { $sum: { $cond: ['$isAlive', 1, 0] } } + } + }, + { + $project: { + date: { + $dateFromParts: { + year: '$_id.year', + month: '$_id.month', + day: 1 + } + }, + totalPlanted: 1, + surviving: 1, + survivalRate: { + $multiply: [{ $divide: ['$surviving', '$totalPlanted'] }, 100] + } + } + }, + { $sort: { date: 1 } } + ]); + + // Get average height over time + const heightData = await Tree.aggregate([ + { $match: { forestId: forest._id, isAlive: true, ...dateFilter } }, + { $unwind: '$measurements' }, + { + $group: { + _id: { + year: { $year: '$measurements.measuredAt' }, + month: { $month: '$measurements.measuredAt' } + }, + avgHeight: { $avg: '$measurements.height' } + } + }, + { + $project: { + date: { + $dateFromParts: { + year: '$_id.year', + month: '$_id.month', + day: 1 + } + }, + avgHeight: { $round: ['$avgHeight', 2] } + } + }, + { $sort: { date: 1 } } + ]); + + // Get CO2 absorption over time + const co2Data = await Tree.aggregate([ + { $match: { forestId: forest._id, isAlive: true, ...dateFilter } }, + { $unwind: '$measurements' }, + { + $group: { + _id: { + year: { $year: '$measurements.measuredAt' }, + month: { $month: '$measurements.measuredAt' } + }, + totalCO2: { $sum: '$measurements.co2Absorption' } + } + }, + { + $project: { + date: { + $dateFromParts: { + year: '$_id.year', + month: '$_id.month', + day: 1 + } + }, + totalCO2: { $round: ['$totalCO2', 2] } + } + }, + { $sort: { date: 1 } } + ]); + + res.json({ + success: true, + data: { + forest, + analytics: { + survivalRate: survivalRateData, + averageHeight: heightData, + co2Absorption: co2Data + } + } + }); + } catch (error) { + console.error('Get forest analytics error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; \ No newline at end of file diff --git a/backend/controllers/treeController.js b/backend/controllers/treeController.js new file mode 100644 index 0000000000..4afd4e41da --- /dev/null +++ b/backend/controllers/treeController.js @@ -0,0 +1,389 @@ +import { validationResult } from 'express-validator'; +import { Tree, Forest } from '../models/index.js'; + +// Get all trees with optional filtering +export const getTrees = async (req, res) => { + try { + const { + forestId, + species, + isAlive, + startDate, + endDate, + page = 1, + limit = 20, + sortBy = 'plantedDate', + sortOrder = 'desc' + } = req.query; + + // Build query conditions + const queryConditions = {}; + + if (forestId) queryConditions.forestId = forestId; + if (species) queryConditions.species = new RegExp(species, 'i'); + if (isAlive !== undefined) queryConditions.isAlive = isAlive === 'true'; + + if (startDate || endDate) { + queryConditions.plantedDate = {}; + if (startDate) queryConditions.plantedDate.$gte = new Date(startDate); + if (endDate) queryConditions.plantedDate.$lte = new Date(endDate); + } + + // Calculate pagination + const skip = (page - 1) * limit; + const sortDirection = sortOrder === 'desc' ? -1 : 1; + + // Execute query with pagination + const trees = await Tree.find(queryConditions) + .populate('forestId', 'name region') + .sort({ [sortBy]: sortDirection }) + .skip(skip) + .limit(parseInt(limit)); + + // Get total count for pagination + const totalCount = await Tree.countDocuments(queryConditions); + + res.json({ + success: true, + data: { + trees, + pagination: { + currentPage: parseInt(page), + totalPages: Math.ceil(totalCount / limit), + totalCount, + hasNextPage: page * limit < totalCount, + hasPrevPage: page > 1 + } + } + }); + } catch (error) { + console.error('Get trees error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get single tree by ID +export const getTreeById = async (req, res) => { + try { + const { id } = req.params; + + const tree = await Tree.findById(id) + .populate('forestId', 'name region') + .populate('measurements.measuredBy', 'firstName lastName'); + + if (!tree) { + return res.status(404).json({ + success: false, + message: 'Tree not found' + }); + } + + res.json({ + success: true, + data: { tree } + }); + } catch (error) { + console.error('Get tree by ID error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Create new tree (admin only) +export const createTree = async (req, res) => { + try { + // Check for validation errors + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + } + + // Verify forest exists + const forest = await Forest.findById(req.body.forestId); + if (!forest || !forest.isActive) { + return res.status(404).json({ + success: false, + message: 'Forest not found' + }); + } + + // Check if tree ID already exists + const existingTree = await Tree.findOne({ treeId: req.body.treeId }); + if (existingTree) { + return res.status(409).json({ + success: false, + message: 'Tree with this ID already exists' + }); + } + + const tree = new Tree(req.body); + await tree.save(); + + // Populate forest information + await tree.populate('forestId', 'name region'); + + res.status(201).json({ + success: true, + message: 'Tree created successfully', + data: { tree } + }); + } catch (error) { + console.error('Create tree error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Update tree (admin only) +export const updateTree = async (req, res) => { + try { + const { id } = req.params; + + const tree = await Tree.findByIdAndUpdate( + id, + { ...req.body, updatedAt: Date.now() }, + { new: true, runValidators: true } + ).populate('forestId', 'name region'); + + if (!tree) { + return res.status(404).json({ + success: false, + message: 'Tree not found' + }); + } + + res.json({ + success: true, + message: 'Tree updated successfully', + data: { tree } + }); + } catch (error) { + console.error('Update tree error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Delete tree (admin only) +export const deleteTree = async (req, res) => { + try { + const { id } = req.params; + + const tree = await Tree.findByIdAndDelete(id); + if (!tree) { + return res.status(404).json({ + success: false, + message: 'Tree not found' + }); + } + + res.json({ + success: true, + message: 'Tree deleted successfully' + }); + } catch (error) { + console.error('Delete tree error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Add measurement to tree +export const addMeasurement = async (req, res) => { + try { + // Check for validation errors + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + } + + const { id } = req.params; + const measurementData = { + ...req.body, + measuredBy: req.user._id, + measuredAt: new Date() + }; + + const tree = await Tree.findById(id); + if (!tree) { + return res.status(404).json({ + success: false, + message: 'Tree not found' + }); + } + + tree.measurements.push(measurementData); + await tree.save(); + + // Populate the new measurement + await tree.populate('measurements.measuredBy', 'firstName lastName'); + + res.status(201).json({ + success: true, + message: 'Measurement added successfully', + data: { + tree, + latestMeasurement: tree.measurements[tree.measurements.length - 1] + } + }); + } catch (error) { + console.error('Add measurement error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get tree measurements history +export const getTreeMeasurements = async (req, res) => { + try { + const { id } = req.params; + const { limit = 10 } = req.query; + + const tree = await Tree.findById(id) + .populate('measurements.measuredBy', 'firstName lastName'); + + if (!tree) { + return res.status(404).json({ + success: false, + message: 'Tree not found' + }); + } + + // Get latest measurements + const measurements = tree.getLatestMeasurements(parseInt(limit)); + + res.json({ + success: true, + data: { + treeId: tree.treeId, + measurements + } + }); + } catch (error) { + console.error('Get tree measurements error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get trees by forest with location data for mapping +export const getTreesByForest = async (req, res) => { + try { + const { forestId } = req.params; + const { isAlive = true } = req.query; + + // Verify forest exists + const forest = await Forest.findById(forestId); + if (!forest || !forest.isActive) { + return res.status(404).json({ + success: false, + message: 'Forest not found' + }); + } + + const trees = await Tree.find({ + forestId, + isAlive: isAlive === 'true' + }).select('treeId location species measurements'); + + // Transform data for mapping + const treeMarkers = trees.map(tree => ({ + id: tree._id, + treeId: tree.treeId, + coordinates: tree.location.coordinates, + species: tree.species, + currentHeight: tree.currentHeight, + currentHealthStatus: tree.currentHealthStatus, + measurementCount: tree.measurements.length + })); + + res.json({ + success: true, + data: { + forest: { + id: forest._id, + name: forest.name, + region: forest.region + }, + trees: treeMarkers, + totalCount: trees.length + } + }); + } catch (error) { + console.error('Get trees by forest error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Mark tree as dead +export const markTreeDead = async (req, res) => { + try { + const { id } = req.params; + const { deathCause, deathDate } = req.body; + + const tree = await Tree.findByIdAndUpdate( + id, + { + isAlive: false, + deathDate: deathDate || new Date(), + deathCause, + updatedAt: Date.now() + }, + { new: true } + ).populate('forestId', 'name region'); + + if (!tree) { + return res.status(404).json({ + success: false, + message: 'Tree not found' + }); + } + + res.json({ + success: true, + message: 'Tree marked as dead', + data: { tree } + }); + } catch (error) { + console.error('Mark tree dead error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; \ No newline at end of file diff --git a/backend/middleware/auth.js b/backend/middleware/auth.js new file mode 100644 index 0000000000..9d6f9d936e --- /dev/null +++ b/backend/middleware/auth.js @@ -0,0 +1,74 @@ +import { User } from '../models/index.js'; +import { verifyToken, extractTokenFromHeader } from '../utils/jwt.js'; + +// Middleware to verify JWT token and authenticate user +export const authenticateToken = async (req, res, next) => { + try { + const token = extractTokenFromHeader(req.headers.authorization); + const decoded = verifyToken(token); + + // Find the user and attach to request + const user = await User.findById(decoded.userId); + if (!user) { + return res.status(401).json({ + success: false, + message: 'User not found' + }); + } + + if (!user.isActive) { + return res.status(401).json({ + success: false, + message: 'Account is deactivated' + }); + } + + // Attach user to request object + req.user = user; + next(); + } catch (error) { + return res.status(401).json({ + success: false, + message: error.message + }); + } +}; + +// Middleware to check if user is admin +export const requireAdmin = (req, res, next) => { + if (!req.user) { + return res.status(401).json({ + success: false, + message: 'Authentication required' + }); + } + + if (req.user.role !== 'admin') { + return res.status(403).json({ + success: false, + message: 'Admin access required' + }); + } + + next(); +}; + +// Optional authentication - doesn't fail if no token provided +export const optionalAuth = async (req, res, next) => { + try { + if (req.headers.authorization) { + const token = extractTokenFromHeader(req.headers.authorization); + const decoded = verifyToken(token); + + const user = await User.findById(decoded.userId); + if (user && user.isActive) { + req.user = user; + } + } + } catch (error) { + // Continue without authentication if token is invalid + console.log('Optional auth failed:', error.message); + } + + next(); +}; \ No newline at end of file diff --git a/backend/middleware/validation.js b/backend/middleware/validation.js new file mode 100644 index 0000000000..32068e3648 --- /dev/null +++ b/backend/middleware/validation.js @@ -0,0 +1,155 @@ +import { body } from 'express-validator'; + +// Validation rules for user registration +export const validateRegister = [ + body('email') + .isEmail() + .normalizeEmail() + .withMessage('Please provide a valid email address'), + + body('password') + .isLength({ min: 6 }) + .withMessage('Password must be at least 6 characters long') + .matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/) + .withMessage('Password must contain at least one lowercase letter, one uppercase letter, and one number'), + + body('firstName') + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('First name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('First name can only contain letters and spaces'), + + body('lastName') + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('Last name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('Last name can only contain letters and spaces') +]; + +// Validation rules for user login +export const validateLogin = [ + body('email') + .isEmail() + .normalizeEmail() + .withMessage('Please provide a valid email address'), + + body('password') + .notEmpty() + .withMessage('Password is required') +]; + +// Validation rules for profile update +export const validateProfileUpdate = [ + body('firstName') + .optional() + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('First name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('First name can only contain letters and spaces'), + + body('lastName') + .optional() + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('Last name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('Last name can only contain letters and spaces') +]; + +// Validation rules for forest creation +export const validateForestCreate = [ + body('name') + .trim() + .isLength({ min: 1, max: 100 }) + .withMessage('Forest name must be between 1 and 100 characters'), + + body('region') + .trim() + .isLength({ min: 1, max: 100 }) + .withMessage('Region must be between 1 and 100 characters'), + + body('location.coordinates') + .isArray({ min: 2, max: 2 }) + .withMessage('Coordinates must be an array of [longitude, latitude]'), + + body('location.coordinates.*') + .isFloat({ min: -180, max: 180 }) + .withMessage('Coordinates must be valid numbers'), + + body('area') + .isFloat({ min: 0 }) + .withMessage('Area must be a positive number'), + + body('areaUnit') + .optional() + .isIn(['hectares', 'acres', 'sq_km', 'sq_miles']) + .withMessage('Area unit must be one of: hectares, acres, sq_km, sq_miles'), + + body('establishedDate') + .isISO8601() + .withMessage('Established date must be a valid date'), + + body('description') + .optional() + .isLength({ max: 500 }) + .withMessage('Description cannot exceed 500 characters') +]; + +// Validation rules for tree creation +export const validateTreeCreate = [ + body('treeId') + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('Tree ID must be between 1 and 50 characters'), + + body('forestId') + .isMongoId() + .withMessage('Forest ID must be a valid MongoDB ObjectId'), + + body('species') + .trim() + .isLength({ min: 1, max: 100 }) + .withMessage('Species must be between 1 and 100 characters'), + + body('location.coordinates') + .isArray({ min: 2, max: 2 }) + .withMessage('Coordinates must be an array of [longitude, latitude]'), + + body('location.coordinates.*') + .isFloat({ min: -180, max: 180 }) + .withMessage('Coordinates must be valid numbers'), + + body('plantedDate') + .isISO8601() + .withMessage('Planted date must be a valid date') +]; + +// Validation rules for tree measurement +export const validateMeasurement = [ + body('height') + .isFloat({ min: 0 }) + .withMessage('Height must be a positive number'), + + body('diameter') + .optional() + .isFloat({ min: 0 }) + .withMessage('Diameter must be a positive number'), + + body('co2Absorption') + .optional() + .isFloat({ min: 0 }) + .withMessage('CO₂ absorption must be a positive number'), + + body('healthStatus') + .optional() + .isIn(['excellent', 'good', 'fair', 'poor', 'critical']) + .withMessage('Health status must be one of: excellent, good, fair, poor, critical'), + + body('notes') + .optional() + .isLength({ max: 500 }) + .withMessage('Notes cannot exceed 500 characters') +]; \ No newline at end of file diff --git a/backend/models/Forest.js b/backend/models/Forest.js new file mode 100644 index 0000000000..84286c9848 --- /dev/null +++ b/backend/models/Forest.js @@ -0,0 +1,114 @@ +import mongoose from 'mongoose'; + +const forestSchema = new mongoose.Schema({ + name: { + type: String, + required: [true, 'Forest name is required'], + trim: true, + maxlength: [100, 'Forest name cannot exceed 100 characters'] + }, + region: { + type: String, + required: [true, 'Region is required'], + trim: true, + maxlength: [100, 'Region name cannot exceed 100 characters'] + }, + location: { + type: { + type: String, + enum: ['Point'], + required: true + }, + coordinates: { + type: [Number], + required: true, + validate: { + validator: function(v) { + return v.length === 2; + }, + message: 'Coordinates must be an array of [longitude, latitude]' + } + } + }, + area: { + type: Number, + required: [true, 'Forest area is required'], + min: [0, 'Area must be positive'] + }, + areaUnit: { + type: String, + enum: ['hectares', 'acres', 'sq_km', 'sq_miles'], + default: 'hectares' + }, + establishedDate: { + type: Date, + required: [true, 'Established date is required'] + }, + description: { + type: String, + maxlength: [500, 'Description cannot exceed 500 characters'] + }, + isActive: { + type: Boolean, + default: true + }, + metadata: { + soilType: String, + climate: String, + elevation: Number, + avgRainfall: Number, + avgTemperature: Number + }, + createdAt: { + type: Date, + default: Date.now + }, + updatedAt: { + type: Date, + default: Date.now + } +}); + +// Create geospatial index for location-based queries +forestSchema.index({ location: '2dsphere' }); + +// Index for common query patterns +forestSchema.index({ region: 1, isActive: 1 }); +forestSchema.index({ establishedDate: 1 }); + +// Update the updatedAt field before saving +forestSchema.pre('save', function(next) { + this.updatedAt = Date.now(); + next(); +}); + +// Virtual for tree count +forestSchema.virtual('treeCount', { + ref: 'Tree', + localField: '_id', + foreignField: 'forestId', + count: true +}); + +// Static method to find forests by region +forestSchema.statics.findByRegion = function(region) { + return this.find({ + region: new RegExp(region, 'i'), + isActive: true + }); +}; + +// Static method to find forests within a date range +forestSchema.statics.findByDateRange = function(startDate, endDate) { + return this.find({ + establishedDate: { + $gte: startDate, + $lte: endDate + }, + isActive: true + }); +}; + +const Forest = mongoose.model('Forest', forestSchema); + +export default Forest; \ No newline at end of file diff --git a/backend/models/Tree.js b/backend/models/Tree.js new file mode 100644 index 0000000000..24979b27ea --- /dev/null +++ b/backend/models/Tree.js @@ -0,0 +1,214 @@ +import mongoose from 'mongoose'; + +const measurementSchema = new mongoose.Schema({ + height: { + type: Number, + required: [true, 'Height measurement is required'], + min: [0, 'Height must be positive'] + }, + diameter: { + type: Number, + min: [0, 'Diameter must be positive'] + }, + co2Absorption: { + type: Number, + min: [0, 'CO₂ absorption must be positive'] + }, + healthStatus: { + type: String, + enum: ['excellent', 'good', 'fair', 'poor', 'critical'], + default: 'good' + }, + notes: { + type: String, + maxlength: [500, 'Notes cannot exceed 500 characters'] + }, + measuredBy: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User' + }, + measuredAt: { + type: Date, + default: Date.now + } +}); + +const treeSchema = new mongoose.Schema({ + treeId: { + type: String, + required: [true, 'Tree ID is required'], + unique: true, + trim: true + }, + forestId: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Forest', + required: [true, 'Forest ID is required'] + }, + species: { + type: String, + required: [true, 'Tree species is required'], + trim: true, + maxlength: [100, 'Species name cannot exceed 100 characters'] + }, + location: { + type: { + type: String, + enum: ['Point'], + required: true + }, + coordinates: { + type: [Number], + required: true, + validate: { + validator: function(v) { + return v.length === 2; + }, + message: 'Coordinates must be an array of [longitude, latitude]' + } + } + }, + plantedDate: { + type: Date, + required: [true, 'Planted date is required'] + }, + isAlive: { + type: Boolean, + default: true + }, + deathDate: { + type: Date + }, + deathCause: { + type: String, + maxlength: [200, 'Death cause cannot exceed 200 characters'] + }, + measurements: [measurementSchema], + images: [{ + url: String, + caption: String, + uploadedAt: { + type: Date, + default: Date.now + } + }], + metadata: { + soilCondition: String, + sunlightExposure: { + type: String, + enum: ['full_sun', 'partial_sun', 'partial_shade', 'full_shade'] + }, + waterAccess: { + type: String, + enum: ['excellent', 'good', 'moderate', 'poor'] + } + }, + createdAt: { + type: Date, + default: Date.now + }, + updatedAt: { + type: Date, + default: Date.now + } +}); + +// Create geospatial index for location-based queries +treeSchema.index({ location: '2dsphere' }); + +// Index for common query patterns +treeSchema.index({ forestId: 1, isAlive: 1 }); +treeSchema.index({ species: 1 }); +treeSchema.index({ plantedDate: 1 }); +treeSchema.index({ treeId: 1 }); +treeSchema.index({ 'measurements.measuredAt': -1 }); + +// Update the updatedAt field before saving +treeSchema.pre('save', function(next) { + this.updatedAt = Date.now(); + next(); +}); + +// Virtual for current height (latest measurement) +treeSchema.virtual('currentHeight').get(function() { + if (this.measurements && this.measurements.length > 0) { + const latestMeasurement = this.measurements + .sort((a, b) => b.measuredAt - a.measuredAt)[0]; + return latestMeasurement.height; + } + return null; +}); + +// Virtual for current health status +treeSchema.virtual('currentHealthStatus').get(function() { + if (this.measurements && this.measurements.length > 0) { + const latestMeasurement = this.measurements + .sort((a, b) => b.measuredAt - a.measuredAt)[0]; + return latestMeasurement.healthStatus; + } + return 'unknown'; +}); + +// Virtual for age in days +treeSchema.virtual('ageInDays').get(function() { + const now = new Date(); + const planted = new Date(this.plantedDate); + return Math.floor((now - planted) / (1000 * 60 * 60 * 24)); +}); + +// Virtual for total CO₂ absorption +treeSchema.virtual('totalCO2Absorption').get(function() { + if (this.measurements && this.measurements.length > 0) { + return this.measurements.reduce((total, measurement) => { + return total + (measurement.co2Absorption || 0); + }, 0); + } + return 0; +}); + +// Method to add a new measurement +treeSchema.methods.addMeasurement = function(measurementData) { + this.measurements.push(measurementData); + return this.save(); +}; + +// Method to get latest measurements (default: 10) +treeSchema.methods.getLatestMeasurements = function(limit = 10) { + return this.measurements + .sort((a, b) => b.measuredAt - a.measuredAt) + .slice(0, limit); +}; + +// Static method to find trees by forest +treeSchema.statics.findByForest = function(forestId) { + return this.find({ forestId, isAlive: true }); +}; + +// Static method to find trees by species +treeSchema.statics.findBySpecies = function(species) { + return this.find({ + species: new RegExp(species, 'i'), + isAlive: true + }); +}; + +// Static method to calculate survival rate for a forest +treeSchema.statics.calculateSurvivalRate = async function(forestId, dateRange = null) { + const matchCondition = { forestId }; + + if (dateRange) { + matchCondition.plantedDate = { + $gte: dateRange.start, + $lte: dateRange.end + }; + } + + const totalTrees = await this.countDocuments(matchCondition); + const aliveTrees = await this.countDocuments({ ...matchCondition, isAlive: true }); + + return totalTrees > 0 ? (aliveTrees / totalTrees) * 100 : 0; +}; + +const Tree = mongoose.model('Tree', treeSchema); + +export default Tree; \ No newline at end of file diff --git a/backend/models/User.js b/backend/models/User.js new file mode 100644 index 0000000000..8ccf097672 --- /dev/null +++ b/backend/models/User.js @@ -0,0 +1,92 @@ +import mongoose from 'mongoose'; +import bcrypt from 'bcryptjs'; + +const userSchema = new mongoose.Schema({ + email: { + type: String, + required: [true, 'Email is required'], + unique: true, + lowercase: true, + trim: true, + match: [/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/, 'Please enter a valid email'] + }, + password: { + type: String, + required: [true, 'Password is required'], + minlength: [6, 'Password must be at least 6 characters'] + }, + firstName: { + type: String, + required: [true, 'First name is required'], + trim: true, + maxlength: [50, 'First name cannot exceed 50 characters'] + }, + lastName: { + type: String, + required: [true, 'Last name is required'], + trim: true, + maxlength: [50, 'Last name cannot exceed 50 characters'] + }, + role: { + type: String, + enum: ['user', 'admin'], + default: 'user' + }, + isActive: { + type: Boolean, + default: true + }, + lastLogin: { + type: Date + }, + createdAt: { + type: Date, + default: Date.now + }, + updatedAt: { + type: Date, + default: Date.now + } +}); + +// Hash password before saving +userSchema.pre('save', async function(next) { + // Only hash the password if it has been modified (or is new) + if (!this.isModified('password')) return next(); + + try { + // Hash password with cost of 12 + const salt = await bcrypt.genSalt(12); + this.password = await bcrypt.hash(this.password, salt); + next(); + } catch (error) { + next(error); + } +}); + +// Update the updatedAt field before saving +userSchema.pre('save', function(next) { + this.updatedAt = Date.now(); + next(); +}); + +// Instance method to check password +userSchema.methods.comparePassword = async function(candidatePassword) { + return bcrypt.compare(candidatePassword, this.password); +}; + +// Instance method to get user info without password +userSchema.methods.toJSON = function() { + const userObject = this.toObject(); + delete userObject.password; + return userObject; +}; + +// Static method to find user by email +userSchema.statics.findByEmail = function(email) { + return this.findOne({ email: email.toLowerCase() }); +}; + +const User = mongoose.model('User', userSchema); + +export default User; \ No newline at end of file diff --git a/backend/models/index.js b/backend/models/index.js new file mode 100644 index 0000000000..9596f774e0 --- /dev/null +++ b/backend/models/index.js @@ -0,0 +1,9 @@ +import User from './User.js'; +import Forest from './Forest.js'; +import Tree from './Tree.js'; + +export { + User, + Forest, + Tree +}; \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index 08f29f2448..989e6d7933 100644 --- a/backend/package.json +++ b/backend/package.json @@ -4,7 +4,8 @@ "description": "Server part of final project", "scripts": { "start": "babel-node server.js", - "dev": "nodemon server.js --exec babel-node" + "dev": "nodemon server.js --exec babel-node", + "seed": "babel-node utils/seeder.js" }, "author": "", "license": "ISC", @@ -12,9 +13,13 @@ "@babel/core": "^7.17.9", "@babel/node": "^7.16.8", "@babel/preset-env": "^7.16.11", + "bcryptjs": "^3.0.2", "cors": "^2.8.5", + "dotenv": "^17.2.0", "express": "^4.17.3", + "express-validator": "^7.2.1", + "jsonwebtoken": "^9.0.2", "mongoose": "^8.4.0", "nodemon": "^3.0.1" } -} \ No newline at end of file +} diff --git a/backend/routes/auth.js b/backend/routes/auth.js new file mode 100644 index 0000000000..0c92815c0f --- /dev/null +++ b/backend/routes/auth.js @@ -0,0 +1,27 @@ +import express from 'express'; +import { + register, + login, + getProfile, + updateProfile, + logout +} from '../controllers/authController.js'; +import { + validateRegister, + validateLogin, + validateProfileUpdate +} from '../middleware/validation.js'; +import { authenticateToken } from '../middleware/auth.js'; + +const router = express.Router(); + +// Public routes +router.post('/register', validateRegister, register); +router.post('/login', validateLogin, login); +router.post('/logout', logout); + +// Protected routes +router.get('/profile', authenticateToken, getProfile); +router.put('/profile', authenticateToken, validateProfileUpdate, updateProfile); + +export default router; \ No newline at end of file diff --git a/backend/routes/forests.js b/backend/routes/forests.js new file mode 100644 index 0000000000..27b63872aa --- /dev/null +++ b/backend/routes/forests.js @@ -0,0 +1,25 @@ +import express from 'express'; +import { + getForests, + getForestById, + createForest, + updateForest, + deleteForest, + getForestAnalytics +} from '../controllers/forestController.js'; +import { validateForestCreate } from '../middleware/validation.js'; +import { authenticateToken, requireAdmin } from '../middleware/auth.js'; + +const router = express.Router(); + +// Public routes (with optional authentication) +router.get('/', getForests); +router.get('/:id', getForestById); +router.get('/:id/analytics', getForestAnalytics); + +// Protected routes (admin only) +router.post('/', authenticateToken, requireAdmin, validateForestCreate, createForest); +router.put('/:id', authenticateToken, requireAdmin, validateForestCreate, updateForest); +router.delete('/:id', authenticateToken, requireAdmin, deleteForest); + +export default router; \ No newline at end of file diff --git a/backend/routes/trees.js b/backend/routes/trees.js new file mode 100644 index 0000000000..ae92826f66 --- /dev/null +++ b/backend/routes/trees.js @@ -0,0 +1,36 @@ +import express from 'express'; +import { + getTrees, + getTreeById, + createTree, + updateTree, + deleteTree, + addMeasurement, + getTreeMeasurements, + getTreesByForest, + markTreeDead +} from '../controllers/treeController.js'; +import { + validateTreeCreate, + validateMeasurement +} from '../middleware/validation.js'; +import { authenticateToken, requireAdmin } from '../middleware/auth.js'; + +const router = express.Router(); + +// Public routes +router.get('/', getTrees); +router.get('/:id', getTreeById); +router.get('/:id/measurements', getTreeMeasurements); +router.get('/forest/:forestId', getTreesByForest); + +// Protected routes (authenticated users) +router.post('/:id/measurements', authenticateToken, validateMeasurement, addMeasurement); + +// Admin only routes +router.post('/', authenticateToken, requireAdmin, validateTreeCreate, createTree); +router.put('/:id', authenticateToken, requireAdmin, updateTree); +router.delete('/:id', authenticateToken, requireAdmin, deleteTree); +router.patch('/:id/mark-dead', authenticateToken, requireAdmin, markTreeDead); + +export default router; \ No newline at end of file diff --git a/backend/server.js b/backend/server.js index 070c875189..9778db56a1 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1,22 +1,116 @@ import express from "express"; import cors from "cors"; import mongoose from "mongoose"; +import dotenv from "dotenv"; -const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/final-project"; +// Import routes +import authRoutes from "./routes/auth.js"; +import forestRoutes from "./routes/forests.js"; +import treeRoutes from "./routes/trees.js"; + +// Load environment variables +dotenv.config(); + +// MongoDB connection +const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/nanwa-forestry"; mongoose.connect(mongoUrl); mongoose.Promise = Promise; +// MongoDB connection events +mongoose.connection.on('connected', () => { + console.log('✅ Connected to MongoDB'); +}); + +mongoose.connection.on('error', (err) => { + console.error('❌ MongoDB connection error:', err); +}); + +mongoose.connection.on('disconnected', () => { + console.log('📴 Disconnected from MongoDB'); +}); + const port = process.env.PORT || 8080; const app = express(); -app.use(cors()); -app.use(express.json()); +// Middleware +app.use(cors({ + origin: process.env.FRONTEND_URL || "http://localhost:3000", + credentials: true +})); +app.use(express.json({ limit: '10mb' })); +app.use(express.urlencoded({ extended: true, limit: '10mb' })); +// Request logging middleware +app.use((req, res, next) => { + console.log(`${new Date().toISOString()} - ${req.method} ${req.path}`); + next(); +}); + +// Health check endpoint app.get("/", (req, res) => { - res.send("Hello Technigo!"); + res.json({ + success: true, + message: "Nanwa Forestry API is running", + version: "1.0.0", + timestamp: new Date().toISOString() + }); +}); + +app.get("/health", (req, res) => { + res.json({ + success: true, + status: "healthy", + database: mongoose.connection.readyState === 1 ? "connected" : "disconnected", + uptime: process.uptime(), + timestamp: new Date().toISOString() + }); +}); + +// API Routes +app.use("/api/auth", authRoutes); +app.use("/api/forests", forestRoutes); +app.use("/api/trees", treeRoutes); + +// 404 handler +app.use("*", (req, res) => { + res.status(404).json({ + success: false, + message: "Endpoint not found", + path: req.originalUrl + }); +}); + +// Global error handler +app.use((error, req, res, next) => { + console.error('Global error handler:', error); + + res.status(error.status || 500).json({ + success: false, + message: error.message || "Internal server error", + error: process.env.NODE_ENV === 'development' ? error.stack : undefined + }); +}); + +// Graceful shutdown +process.on('SIGTERM', () => { + console.log('👋 SIGTERM received, shutting down gracefully'); + mongoose.connection.close(() => { + console.log('📴 MongoDB connection closed'); + process.exit(0); + }); +}); + +process.on('SIGINT', () => { + console.log('👋 SIGINT received, shutting down gracefully'); + mongoose.connection.close(() => { + console.log('📴 MongoDB connection closed'); + process.exit(0); + }); }); // Start the server app.listen(port, () => { - console.log(`Server running on http://localhost:${port}`); + console.log(`🚀 Server running on http://localhost:${port}`); + console.log(`📊 Environment: ${process.env.NODE_ENV || 'development'}`); + console.log(`🌐 API Documentation available at http://localhost:${port}/`); }); diff --git a/backend/utils/jwt.js b/backend/utils/jwt.js new file mode 100644 index 0000000000..c19df4d95e --- /dev/null +++ b/backend/utils/jwt.js @@ -0,0 +1,35 @@ +import jwt from 'jsonwebtoken'; + +const JWT_SECRET = process.env.JWT_SECRET || 'your-super-secret-jwt-key-change-in-production'; +const JWT_EXPIRES_IN = process.env.JWT_EXPIRES_IN || '7d'; + +// Generate JWT token +export const generateToken = (userId) => { + return jwt.sign( + { userId }, + JWT_SECRET, + { expiresIn: JWT_EXPIRES_IN } + ); +}; + +// Verify JWT token +export const verifyToken = (token) => { + try { + return jwt.verify(token, JWT_SECRET); + } catch (error) { + throw new Error('Invalid or expired token'); + } +}; + +// Extract token from request headers +export const extractTokenFromHeader = (authHeader) => { + if (!authHeader) { + throw new Error('Authorization header is missing'); + } + + if (!authHeader.startsWith('Bearer ')) { + throw new Error('Authorization header must start with Bearer'); + } + + return authHeader.substring(7); +}; \ No newline at end of file diff --git a/backend/utils/seeder.js b/backend/utils/seeder.js new file mode 100644 index 0000000000..c46820c6ee --- /dev/null +++ b/backend/utils/seeder.js @@ -0,0 +1,230 @@ +import mongoose from 'mongoose'; +import dotenv from 'dotenv'; +import { User, Forest, Tree } from '../models/index.js'; + +dotenv.config(); + +const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/nanwa-forestry"; + +const sampleUsers = [ + { + email: 'admin@nanwa.com', + password: 'Admin123!', + firstName: 'Admin', + lastName: 'User', + role: 'admin' + }, + { + email: 'john@example.com', + password: 'User123!', + firstName: 'John', + lastName: 'Doe', + role: 'user' + }, + { + email: 'jane@example.com', + password: 'User123!', + firstName: 'Jane', + lastName: 'Smith', + role: 'user' + } +]; + +const sampleForests = [ + { + name: 'Greenwood Forest', + region: 'Northern Sweden', + location: { + type: 'Point', + coordinates: [18.0686, 59.3293] // Stockholm coordinates + }, + area: 150.5, + areaUnit: 'hectares', + establishedDate: new Date('2020-03-15'), + description: 'A sustainable pine forest focused on carbon absorption and biodiversity.', + metadata: { + soilType: 'Clay-loam', + climate: 'Temperate', + elevation: 120, + avgRainfall: 580, + avgTemperature: 8.5 + } + }, + { + name: 'Birchwood Reserve', + region: 'Central Sweden', + location: { + type: 'Point', + coordinates: [15.2134, 58.5877] // Linköping coordinates + }, + area: 89.2, + areaUnit: 'hectares', + establishedDate: new Date('2019-05-20'), + description: 'Mixed birch and spruce forest for ecological research.', + metadata: { + soilType: 'Sandy-loam', + climate: 'Continental', + elevation: 95, + avgRainfall: 640, + avgTemperature: 7.2 + } + }, + { + name: 'Oakwood Valley', + region: 'Southern Sweden', + location: { + type: 'Point', + coordinates: [13.1913, 55.7047] // Malmö coordinates + }, + area: 234.7, + areaUnit: 'hectares', + establishedDate: new Date('2018-09-10'), + description: 'Ancient oak forest preservation area with native species.', + metadata: { + soilType: 'Loam', + climate: 'Oceanic', + elevation: 65, + avgRainfall: 720, + avgTemperature: 9.8 + } + } +]; + +const generateTreesForForest = (forestId, forestName, count = 50) => { + const trees = []; + const species = ['Pine', 'Spruce', 'Birch', 'Oak', 'Fir']; + + for (let i = 1; i <= count; i++) { + const plantedDate = new Date(Date.now() - Math.random() * 365 * 24 * 60 * 60 * 1000 * 4); // Random date within last 4 years + const isAlive = Math.random() > 0.05; // 95% survival rate + + const tree = { + treeId: `${forestName.toUpperCase().replace(/\s+/g, '')}-${String(i).padStart(4, '0')}`, + forestId, + species: species[Math.floor(Math.random() * species.length)], + location: { + type: 'Point', + coordinates: [ + 18.0686 + (Math.random() - 0.5) * 0.01, // Random coordinates near Stockholm + 59.3293 + (Math.random() - 0.5) * 0.01 + ] + }, + plantedDate, + isAlive, + measurements: generateMeasurements(plantedDate, isAlive), + metadata: { + soilCondition: ['excellent', 'good', 'moderate'][Math.floor(Math.random() * 3)], + sunlightExposure: ['full_sun', 'partial_sun', 'partial_shade'][Math.floor(Math.random() * 3)], + waterAccess: ['excellent', 'good', 'moderate'][Math.floor(Math.random() * 3)] + } + }; + + if (!isAlive) { + tree.deathDate = new Date(plantedDate.getTime() + Math.random() * (Date.now() - plantedDate.getTime())); + tree.deathCause = ['disease', 'drought', 'pest', 'storm damage'][Math.floor(Math.random() * 4)]; + } + + trees.push(tree); + } + + return trees; +}; + +const generateMeasurements = (plantedDate, isAlive) => { + const measurements = []; + const currentDate = new Date(); + const monthsPlanted = Math.floor((currentDate - plantedDate) / (1000 * 60 * 60 * 24 * 30)); + + // Generate measurements every 3-6 months + for (let month = 3; month <= monthsPlanted; month += Math.floor(Math.random() * 4) + 3) { + const measurementDate = new Date(plantedDate.getTime() + month * 30 * 24 * 60 * 60 * 1000); + + if (!isAlive && measurementDate > currentDate) break; + + const height = Math.max(0.1, (month / 12) * (1.5 + Math.random() * 2)); // Growth over time + const diameter = height * (0.1 + Math.random() * 0.05); // Proportional to height + const co2Absorption = height * (0.5 + Math.random() * 0.3); // Proportional to size + + measurements.push({ + height: Math.round(height * 100) / 100, + diameter: Math.round(diameter * 100) / 100, + co2Absorption: Math.round(co2Absorption * 100) / 100, + healthStatus: ['excellent', 'good', 'fair'][Math.floor(Math.random() * 3)], + notes: Math.random() > 0.7 ? 'Regular growth observed' : undefined, + measuredAt: measurementDate + }); + } + + return measurements; +}; + +const seedDatabase = async () => { + try { + console.log('🌱 Starting database seeding...'); + + // Connect to MongoDB + await mongoose.connect(mongoUrl); + console.log('✅ Connected to MongoDB'); + + // Clear existing data + console.log('🧹 Clearing existing data...'); + await User.deleteMany({}); + await Forest.deleteMany({}); + await Tree.deleteMany({}); + + // Create users + console.log('👥 Creating users...'); + const users = await User.create(sampleUsers); + console.log(`✅ Created ${users.length} users`); + + // Create forests + console.log('🌲 Creating forests...'); + const forests = await Forest.create(sampleForests); + console.log(`✅ Created ${forests.length} forests`); + + // Create trees for each forest + console.log('🌳 Creating trees...'); + let totalTrees = 0; + + for (const forest of forests) { + const trees = generateTreesForForest(forest._id, forest.name, 30); + + // Add measuredBy to measurements (use first user) + trees.forEach(tree => { + tree.measurements.forEach(measurement => { + measurement.measuredBy = users[1]._id; // Use regular user + }); + }); + + await Tree.create(trees); + totalTrees += trees.length; + console.log(`✅ Created ${trees.length} trees for ${forest.name}`); + } + + console.log(`🎉 Database seeding completed successfully!`); + console.log(`📊 Summary:`); + console.log(` - Users: ${users.length}`); + console.log(` - Forests: ${forests.length}`); + console.log(` - Trees: ${totalTrees}`); + console.log(`\n🔐 Admin credentials:`); + console.log(` Email: admin@nanwa.com`); + console.log(` Password: Admin123!`); + console.log(`\n👤 User credentials:`); + console.log(` Email: john@example.com`); + console.log(` Password: User123!`); + + } catch (error) { + console.error('❌ Error seeding database:', error); + } finally { + await mongoose.connection.close(); + console.log('📴 Database connection closed'); + process.exit(0); + } +}; + +// Run seeder if called directly +if (import.meta.url === `file://${process.argv[1]}`) { + seedDatabase(); +} + +export default seedDatabase; \ No newline at end of file From c9601acf7f87b27c1ac16cd1cce5deb86ce8f6a0 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 11:09:04 +0200 Subject: [PATCH 011/111] worked on map implementation and ttree detail view --- frontend/.env.example | 17 + frontend/.eslintrc.json | 30 ++ frontend/package.json | 1 + frontend/src/components/map/ForestMap.jsx | 346 +++++++++++++-- .../src/components/ui/TreeDetailModal.jsx | 417 ++++++++++++++++++ frontend/src/pages/MapPage.jsx | 107 +---- 6 files changed, 787 insertions(+), 131 deletions(-) create mode 100644 frontend/.env.example create mode 100644 frontend/.eslintrc.json create mode 100644 frontend/src/components/ui/TreeDetailModal.jsx diff --git a/frontend/.env.example b/frontend/.env.example new file mode 100644 index 0000000000..2cccd27378 --- /dev/null +++ b/frontend/.env.example @@ -0,0 +1,17 @@ +# API Configuration +VITE_API_URL=http://localhost:5000/api +VITE_API_TIMEOUT=10000 + +# Map Configuration +VITE_MAP_API_KEY=your_map_api_key_here +VITE_MAP_TILE_URL=https://tile.openstreetmap.org/{z}/{x}/{y}.png + +# Environment +VITE_ENV=development + +# Feature Flags +VITE_ENABLE_DARK_MODE=true +VITE_ENABLE_ANALYTICS=false + +# Error Tracking +VITE_SENTRY_DSN=your_sentry_dsn_here diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json new file mode 100644 index 0000000000..8fda746b04 --- /dev/null +++ b/frontend/.eslintrc.json @@ -0,0 +1,30 @@ +{ + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended" + ], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "settings": { + "react": { + "version": "detect" + } + }, + "rules": { + "react/react-in-jsx-scope": "off", + "react/prop-types": "off", + "no-unused-vars": "warn" + }, + "ignorePatterns": [ + "dist/**/*", + "node_modules/**/*" + ] +} diff --git a/frontend/package.json b/frontend/package.json index fdc499d8ed..fc5f806099 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -18,6 +18,7 @@ "autoprefixer": "^10.4.14", "clsx": "^2.0.0", "leaflet": "^1.9.4", + "leaflet.markercluster": "^1.5.3", "postcss": "^8.4.24", "react": "^18.2.0", "react-datepicker": "^8.4.0", diff --git a/frontend/src/components/map/ForestMap.jsx b/frontend/src/components/map/ForestMap.jsx index b423ba7532..e761114ecc 100644 --- a/frontend/src/components/map/ForestMap.jsx +++ b/frontend/src/components/map/ForestMap.jsx @@ -1,6 +1,9 @@ import { useState, useEffect, useCallback } from 'react'; import { MapContainer, TileLayer, Marker, Popup, useMap } from 'react-leaflet'; import L from 'leaflet'; +import 'leaflet.markercluster/dist/MarkerCluster.css'; +import 'leaflet.markercluster/dist/MarkerCluster.Default.css'; +import 'leaflet.markercluster'; import styled from 'styled-components'; import 'leaflet/dist/leaflet.css'; @@ -19,6 +22,7 @@ const MapContainerStyled = styled.div` overflow: hidden; box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); border: 1px solid #e5e7eb; + position: relative; `; const MapHeader = styled.div` @@ -61,6 +65,54 @@ const ControlButton = styled.button` } `; +const LoadingOverlay = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`; + +const ErrorOverlay = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.95); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`; + +const ErrorContent = styled.div` + text-align: center; + padding: 2rem; + max-width: 300px; +`; + +const LoadingSpinner = styled.div` + width: 40px; + height: 40px; + border: 4px solid #f3f4f6; + border-top: 4px solid #10b981; + border-radius: 50%; + animation: spin 1s linear infinite; + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } +`; + // Custom tree marker icon const createTreeIcon = (type = 'healthy') => { const colors = { @@ -94,6 +146,156 @@ const createTreeIcon = (type = 'healthy') => { }); }; +// Custom MarkerCluster component +const MarkerCluster = ({ trees, onTreeClick, zoom }) => { + const map = useMap(); + + useEffect(() => { + if (!map || !trees.length) return; + + // Remove existing cluster layer if it exists + map.eachLayer(layer => { + if (layer instanceof L.MarkerClusterGroup) { + map.removeLayer(layer); + } + }); + + // Only use clustering for zoom levels < 12 + if (zoom < 12) { + // Create cluster group + const clusterGroup = L.markerClusterGroup({ + chunkedLoading: true, + spiderfyOnMaxZoom: true, + showCoverageOnHover: false, + zoomToBoundsOnClick: true, + maxClusterRadius: 50, + iconCreateFunction: (cluster) => { + const count = cluster.getChildCount(); + let size = 'small'; + if (count > 10) size = 'medium'; + if (count > 50) size = 'large'; + + return L.divIcon({ + html: `
${count}
`, + className: 'custom-cluster-icon', + iconSize: [30, 30] + }); + } + }); + + // Add markers to cluster group + trees.forEach(tree => { + const marker = L.marker([tree.lat, tree.lng], { + icon: createTreeIcon(tree.health) + }); + + marker.bindPopup(` +
+

${tree.name}

+

Species: ${tree.species}

+

Height: ${tree.height}m

+

Health: + ${tree.health} +

+
+ `); + + marker.on('click', () => onTreeClick(tree)); + clusterGroup.addLayer(marker); + }); + + map.addLayer(clusterGroup); + } else { + // For zoom >= 12, show individual markers without clustering + trees.forEach(tree => { + const marker = L.marker([tree.lat, tree.lng], { + icon: createTreeIcon(tree.health) + }); + + marker.bindPopup(` +
+

${tree.name}

+

Species: ${tree.species}

+

Height: ${tree.height}m

+

Health: + ${tree.health} +

+
+ `); + + marker.on('click', () => onTreeClick(tree)); + marker.addTo(map); + }); + } + + // Cleanup function + return () => { + map.eachLayer(layer => { + if (layer instanceof L.MarkerClusterGroup) { + map.removeLayer(layer); + } + }); + }; + }, [map, trees, onTreeClick, zoom]); + + return null; +}; + +// Map loading handler component +const MapLoadingHandler = ({ onMapReady, onMapError }) => { + const map = useMap(); + + useEffect(() => { + const handleMapReady = () => { + if (onMapReady) { + onMapReady(); + } + }; + + const handleMapError = (error) => { + console.error('Map error:', error); + if (onMapError) { + onMapError(error); + } + }; + + // Map is ready when tiles are loaded + map.whenReady(() => { + handleMapReady(); + }); + + // Handle tile errors + map.on('tileerror', handleMapError); + + return () => { + map.off('tileerror', handleMapError); + }; + }, [map, onMapReady, onMapError]); + + return null; +}; + // Map controller component - FIXED: removed function dependency from useEffect const MapController = ({ onZoomChange }) => { const map = useMap(); @@ -126,14 +328,37 @@ export const ForestMap = ({ { id: 8, lat: 59.3330, lng: 18.0720, name: 'Tree A-008', health: 'healthy', height: 2.5, species: 'Spruce' } ], onTreeSelect, - filters = {} + filters = {}, + loading = false, + error = null }) => { const [zoom, setZoom] = useState(13); const [selectedTree, setSelectedTree] = useState(null); + const [mapLoading, setMapLoading] = useState(true); + const [mapError, setMapError] = useState(null); // Filter trees based on applied filters const filteredTrees = trees.filter(tree => { - // TODO: Apply date and forest filters when backend is ready + // Apply forest filters if selected forests exist + if (filters.selectedForests && filters.selectedForests.length > 0) { + // For now, assume tree has a forestId property (will be updated when backend is ready) + // Currently using a mock forestId based on tree position + const mockForestId = tree.id <= 4 ? 1 : 2; // Mock forest assignment + if (!filters.selectedForests.includes(mockForestId)) { + return false; + } + } + + // Apply date range filters if specified + if (filters.dateRange) { + // For now, assume tree has a plantedDate property (will be updated when backend is ready) + // Currently using a mock date based on tree ID + const mockPlantedDate = new Date(2023, tree.id % 12, tree.id % 28 + 1); // Mock planting date + if (mockPlantedDate < filters.dateRange.startDate || mockPlantedDate > filters.dateRange.endDate) { + return false; + } + } + return true; }); @@ -148,14 +373,60 @@ export const ForestMap = ({ setZoom(newZoom); }, []); - const centerMap = useCallback(() => { - // TODO: Center map on selected forest or all trees + const handleMapReady = useCallback(() => { + setMapLoading(false); + setMapError(null); }, []); - const fitBounds = useCallback(() => { - // TODO: Fit map to show all trees + const handleMapError = useCallback((error) => { + setMapLoading(false); + setMapError(error?.message || 'Failed to load map'); }, []); + const retryMap = useCallback(() => { + setMapLoading(true); + setMapError(null); + // In a real implementation, this would reload the map + setTimeout(() => { + setMapLoading(false); + }, 1000); + }, []); + + const centerMap = useCallback(() => { + if (filteredTrees.length === 0) return; + + // Calculate center point of all filtered trees + const totalLat = filteredTrees.reduce((sum, tree) => sum + tree.lat, 0); + const totalLng = filteredTrees.reduce((sum, tree) => sum + tree.lng, 0); + const centerLat = totalLat / filteredTrees.length; + const centerLng = totalLng / filteredTrees.length; + + // This would need to be implemented with a map ref in a real implementation + console.log('Center map at:', centerLat, centerLng); + }, [filteredTrees]); + + const fitBounds = useCallback(() => { + if (filteredTrees.length === 0) return; + + // Calculate bounds of all filtered trees + const bounds = filteredTrees.reduce((acc, tree) => { + return { + minLat: Math.min(acc.minLat, tree.lat), + maxLat: Math.max(acc.maxLat, tree.lat), + minLng: Math.min(acc.minLng, tree.lng), + maxLng: Math.max(acc.maxLng, tree.lng) + }; + }, { + minLat: filteredTrees[0].lat, + maxLat: filteredTrees[0].lat, + minLng: filteredTrees[0].lng, + maxLng: filteredTrees[0].lng + }); + + // This would need to be implemented with a map ref in a real implementation + console.log('Fit bounds:', bounds); + }, [filteredTrees]); + return (
@@ -186,36 +457,39 @@ export const ForestMap = ({ attribution='© OpenStreetMap contributors' /> + - - {filteredTrees.map(tree => ( - handleTreeClick(tree) - }} - > - -
-

{tree.name}

-

Species: {tree.species}

-

Height: {tree.height}m

-

Health: - - {tree.health} - -

-
-
-
- ))} + + + {/* Loading overlay */} + {(mapLoading || loading) && ( + +
+ +

Loading map...

+
+
+ )} + + {/* Error overlay */} + {(mapError || error) && ( + + + + + +

Map Error

+

{mapError || error}

+ +
+
+ )} {/* Map Legend */} @@ -234,8 +508,12 @@ export const ForestMap = ({
Critical
+
+ Showing {filteredTrees.length} of {trees.length} trees +
Zoom level: {zoom} + {zoom < 12 && (Clustering enabled)}
diff --git a/frontend/src/components/ui/TreeDetailModal.jsx b/frontend/src/components/ui/TreeDetailModal.jsx new file mode 100644 index 0000000000..f0f8e1080f --- /dev/null +++ b/frontend/src/components/ui/TreeDetailModal.jsx @@ -0,0 +1,417 @@ +import { useState, useEffect } from 'react'; +import styled from 'styled-components'; + +const ModalOverlay = styled.div` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + padding: 1rem; +`; + +const ModalContent = styled.div` + background: white; + border-radius: 0.75rem; + max-width: 800px; + width: 100%; + max-height: 90vh; + overflow-y: auto; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + position: relative; +`; + +const ModalHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 1.5rem; + border-bottom: 1px solid #e5e7eb; + background: #f9fafb; + border-radius: 0.75rem 0.75rem 0 0; +`; + +const ModalTitle = styled.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`; + +const CloseButton = styled.button` + padding: 0.5rem; + background: transparent; + border: none; + border-radius: 0.375rem; + cursor: pointer; + color: #6b7280; + transition: all 0.2s; + + &:hover { + background: #f3f4f6; + color: #111827; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +const ModalBody = styled.div` + padding: 1.5rem; +`; + +const InfoGrid = styled.div` + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + margin-bottom: 2rem; + + @media (min-width: 768px) { + grid-template-columns: 1fr 1fr; + } +`; + +const InfoCard = styled.div` + background: #f9fafb; + border-radius: 0.75rem; + padding: 1.5rem; + border: 1px solid #e5e7eb; +`; + +const InfoTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`; + +const InfoItem = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.5rem 0; + border-bottom: 1px solid #e5e7eb; + + &:last-child { + border-bottom: none; + } +`; + +const InfoLabel = styled.span` + color: #6b7280; + font-size: 0.875rem; +`; + +const InfoValue = styled.span` + font-weight: 500; + color: #111827; + font-size: 0.875rem; +`; + +const HealthBadge = styled.span` + padding: 0.25rem 0.75rem; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + ${props => { + switch (props.health) { + case 'healthy': + return 'background: #d1fae5; color: #065f46;'; + case 'warning': + return 'background: #fef3c7; color: #92400e;'; + case 'critical': + return 'background: #fee2e2; color: #991b1b;'; + default: + return 'background: #f3f4f6; color: #374151;'; + } + }} +`; + +const Section = styled.div` + margin-bottom: 2rem; +`; + +const SectionTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`; + +const MeasurementTable = styled.table` + width: 100%; + border-collapse: collapse; + background: white; + border-radius: 0.5rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +`; + +const TableHeader = styled.thead` + background: #f3f4f6; +`; + +const TableRow = styled.tr` + border-bottom: 1px solid #e5e7eb; + + &:last-child { + border-bottom: none; + } +`; + +const TableCell = styled.td` + padding: 0.75rem; + text-align: left; + font-size: 0.875rem; + color: #111827; +`; + +const TableHeaderCell = styled.th` + padding: 0.75rem; + text-align: left; + font-size: 0.875rem; + font-weight: 600; + color: #374151; +`; + +const ImageGallery = styled.div` + display: grid; + grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + gap: 1rem; + margin-top: 1rem; +`; + +const ImageCard = styled.div` + background: #f9fafb; + border-radius: 0.5rem; + padding: 1rem; + text-align: center; + border: 1px solid #e5e7eb; +`; + +const ImagePlaceholder = styled.div` + width: 100%; + height: 100px; + background: #e5e7eb; + border-radius: 0.5rem; + display: flex; + align-items: center; + justify-content: center; + color: #6b7280; + font-size: 0.875rem; + margin-bottom: 0.5rem; +`; + +const ShareButton = styled.button` + padding: 0.75rem 1.5rem; + background: #10b981; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #059669; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +// Mock data for demonstration +const mockMeasurementHistory = [ + { date: '2024-01-15', height: 2.4, diameter: 8.2, health: 'healthy' }, + { date: '2024-02-15', height: 2.3, diameter: 8.1, health: 'healthy' }, + { date: '2024-03-15', height: 2.2, diameter: 8.0, health: 'healthy' }, + { date: '2024-04-15', height: 2.1, diameter: 7.9, health: 'warning' }, + { date: '2024-05-15', height: 2.0, diameter: 7.8, health: 'warning' }, + { date: '2024-06-15', height: 1.9, diameter: 7.7, health: 'warning' }, + { date: '2024-07-15', height: 1.8, diameter: 7.6, health: 'critical' }, + { date: '2024-08-15', height: 1.7, diameter: 7.5, health: 'critical' }, + { date: '2024-09-15', height: 1.6, diameter: 7.4, health: 'critical' }, + { date: '2024-10-15', height: 1.5, diameter: 7.3, health: 'critical' }, +]; + +export const TreeDetailModal = ({ tree, isOpen, onClose }) => { + const [measurementHistory, setMeasurementHistory] = useState([]); + + useEffect(() => { + if (tree && isOpen) { + // In a real application, this would fetch from an API + setMeasurementHistory(mockMeasurementHistory); + } + }, [tree, isOpen]); + + const handleOverlayClick = (e) => { + if (e.target === e.currentTarget) { + onClose(); + } + }; + + const handleShare = () => { + if (navigator.share) { + navigator.share({ + title: `Tree Details - ${tree.name}`, + text: `Check out this tree: ${tree.name} (${tree.species})`, + url: window.location.href + }); + } else { + // Fallback: copy to clipboard + navigator.clipboard.writeText(window.location.href); + alert('Tree URL copied to clipboard!'); + } + }; + + if (!isOpen || !tree) return null; + + return ( + + + + {tree.name} + + + + + + + + + {/* Basic Information */} + + + Basic Information + + Tree ID: + {tree.name} + + + Species: + {tree.species} + + + Current Height: + {tree.height}m + + + Health Status: + {tree.health} + + + Planted Date: + March 15, 2023 + + + + + Location & Contract + + Latitude: + {tree.lat.toFixed(6)} + + + Longitude: + {tree.lng.toFixed(6)} + + + Forest: + Forest {tree.id <= 4 ? 'A' : 'B'} + + + Contract Status: + + + Active + + + + + Last Inspection: + Jan 15, 2024 + + + + + {/* Measurement History */} +
+ Measurement History (Last 10 Entries) + + + + Date + Height (m) + Diameter (cm) + Health + + + + {measurementHistory.slice(0, 10).map((measurement, index) => ( + + {new Date(measurement.date).toLocaleDateString()} + {measurement.height} + {measurement.diameter} + + {measurement.health} + + + ))} + + +
+ + {/* Tree Images */} +
+ Tree Images + + + + + + + +
Latest Photo
+
+ + + + + + +
Growth Progress
+
+ + + + + + +
Planting Day
+
+
+
+ + {/* Action Buttons */} +
+ + + + + Share Tree + +
+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/pages/MapPage.jsx b/frontend/src/pages/MapPage.jsx index e062b05916..8292f7868f 100644 --- a/frontend/src/pages/MapPage.jsx +++ b/frontend/src/pages/MapPage.jsx @@ -3,6 +3,7 @@ import { useAuth } from '../contexts/AuthContext'; import styled from 'styled-components'; import { ForestMap } from '../components/map/ForestMap'; import { GlobalFilters } from '../components/filters'; +import { TreeDetailModal } from '../components/ui/TreeDetailModal'; const MapPageContainer = styled.div` min-height: 100vh; @@ -32,46 +33,13 @@ const MainContent = styled.main` padding: 2rem; `; -const TreeDetailPanel = styled.div` - background: white; - border-radius: 0.75rem; - padding: 1.5rem; - margin-bottom: 1.5rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; -`; -const TreeDetailHeader = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; -`; - -const TreeDetailTitle = styled.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`; - -const CloseButton = styled.button` - padding: 0.5rem; - background: #f3f4f6; - border: 1px solid #d1d5db; - border-radius: 0.375rem; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background: #e5e7eb; - } -`; export const MapPage = () => { const { user, logout, isAdmin } = useAuth(); const [filters, setFilters] = useState({}); const [selectedTree, setSelectedTree] = useState(null); + const [isModalOpen, setIsModalOpen] = useState(false); const handleLogout = () => { logout(); @@ -85,10 +53,12 @@ export const MapPage = () => { const handleTreeSelect = (tree) => { setSelectedTree(tree); + setIsModalOpen(true); }; const handleCloseTreeDetail = () => { setSelectedTree(null); + setIsModalOpen(false); }; return ( @@ -184,69 +154,12 @@ export const MapPage = () => { {/* Global Filters */} - {/* Selected Tree Detail */} - {selectedTree && ( - - - Tree Details - - - - - - - -
-
-

Basic Information

-
-
- Name: - {selectedTree.name} -
-
- Species: - {selectedTree.species} -
-
- Height: - {selectedTree.height}m -
-
- Health: - - {selectedTree.health} - -
-
-
- -
-

Location

-
-
- Latitude: - {selectedTree.lat} -
-
- Longitude: - {selectedTree.lng} -
-
- -
- -
-
-
-
- )} + {/* Tree Detail Modal */} + {/* Map */} Date: Sun, 13 Jul 2025 12:20:24 +0200 Subject: [PATCH 012/111] data export and admin updates --- frontend/package.json | 2 + frontend/src/App.jsx | 18 + .../src/components/admin/AuditLogTable.jsx | 478 ++++++++++++++++ frontend/src/components/ui/ExportButton.jsx | 328 +++++++++++ .../src/components/ui/TreeDetailModal.jsx | 30 ++ frontend/src/pages/AdminPage.jsx | 225 ++++++++ frontend/src/pages/DashboardPage.jsx | 47 +- frontend/src/pages/MapPage.jsx | 47 +- frontend/src/pages/TreeDetailPage.jsx | 509 ++++++++++++++++++ 9 files changed, 1676 insertions(+), 8 deletions(-) create mode 100644 frontend/src/components/admin/AuditLogTable.jsx create mode 100644 frontend/src/components/ui/ExportButton.jsx create mode 100644 frontend/src/pages/AdminPage.jsx create mode 100644 frontend/src/pages/TreeDetailPage.jsx diff --git a/frontend/package.json b/frontend/package.json index fc5f806099..0981aff029 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,6 +19,7 @@ "clsx": "^2.0.0", "leaflet": "^1.9.4", "leaflet.markercluster": "^1.5.3", + "papaparse": "^5.5.3", "postcss": "^8.4.24", "react": "^18.2.0", "react-datepicker": "^8.4.0", @@ -28,6 +29,7 @@ "recharts": "^3.1.0", "styled-components": "^6.1.19", "tailwindcss": "^3.3.0", + "xlsx": "^0.18.5", "zustand": "^4.4.0" }, "devDependencies": { diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index bf74567bb8..be11e528e9 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -4,6 +4,8 @@ import { LoginPage } from './pages/LoginPage'; import { RegisterPage } from './pages/RegisterPage'; import { DashboardPage } from './pages/DashboardPage'; import { MapPage } from './pages/MapPage'; +import { TreeDetailPage } from './pages/TreeDetailPage'; +import { AdminPage } from './pages/AdminPage'; import { ProtectedRoute } from './components/auth/ProtectedRoute'; import { AuthProvider } from './contexts/AuthContext'; @@ -36,6 +38,22 @@ export const App = () => { } /> + + + + } + /> + + + + } + /> diff --git a/frontend/src/components/admin/AuditLogTable.jsx b/frontend/src/components/admin/AuditLogTable.jsx new file mode 100644 index 0000000000..a1da3ca2fa --- /dev/null +++ b/frontend/src/components/admin/AuditLogTable.jsx @@ -0,0 +1,478 @@ +import { useState, useEffect } from 'react'; +import styled from 'styled-components'; + +const TableContainer = styled.div` + background: white; + border-radius: 0.75rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; + overflow: hidden; +`; + +const TableHeader = styled.div` + background: #f9fafb; + padding: 1.5rem; + border-bottom: 1px solid #e5e7eb; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const TableTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +const FilterSection = styled.div` + display: flex; + gap: 1rem; + align-items: center; +`; + +const SearchInput = styled.input` + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + min-width: 200px; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +const FilterSelect = styled.select` + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +const Table = styled.table` + width: 100%; + border-collapse: collapse; +`; + +const TableHead = styled.thead` + background: #f9fafb; + border-bottom: 1px solid #e5e7eb; +`; + +const TableRow = styled.tr` + border-bottom: 1px solid #f3f4f6; + + &:hover { + background: #f9fafb; + } + + &:last-child { + border-bottom: none; + } +`; + +const TableHeaderCell = styled.th` + padding: 0.75rem 1rem; + text-align: left; + font-size: 0.875rem; + font-weight: 600; + color: #374151; + cursor: pointer; + user-select: none; + + &:hover { + background: #f3f4f6; + } +`; + +const TableCell = styled.td` + padding: 0.75rem 1rem; + font-size: 0.875rem; + color: #111827; + vertical-align: top; +`; + +const ActionBadge = styled.span` + padding: 0.25rem 0.75rem; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + + ${props => { + switch (props.action) { + case 'CREATE': + return 'background: #d1fae5; color: #065f46;'; + case 'UPDATE': + return 'background: #dbeafe; color: #1e40af;'; + case 'DELETE': + return 'background: #fee2e2; color: #991b1b;'; + case 'LOGIN': + return 'background: #fef3c7; color: #92400e;'; + case 'LOGOUT': + return 'background: #f3f4f6; color: #374151;'; + default: + return 'background: #f3f4f6; color: #374151;'; + } + }} +`; + +const PaginationContainer = styled.div` + padding: 1rem 1.5rem; + background: #f9fafb; + border-top: 1px solid #e5e7eb; + display: flex; + justify-content: between; + align-items: center; +`; + +const PaginationInfo = styled.div` + font-size: 0.875rem; + color: #6b7280; +`; + +const PaginationControls = styled.div` + display: flex; + gap: 0.5rem; + align-items: center; + margin-left: auto; +`; + +const PaginationButton = styled.button` + padding: 0.5rem 0.75rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + cursor: pointer; + transition: all 0.2s; + + &:hover:not(:disabled) { + background: #f9fafb; + border-color: #9ca3af; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + &.active { + background: #10b981; + color: white; + border-color: #10b981; + } +`; + +const LoadingSpinner = styled.div` + display: flex; + justify-content: center; + align-items: center; + padding: 3rem; + + .spinner { + width: 40px; + height: 40px; + border: 4px solid #f3f4f6; + border-top: 4px solid #10b981; + border-radius: 50%; + animation: spin 1s linear infinite; + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } +`; + +const EmptyState = styled.div` + text-align: center; + padding: 3rem; + color: #6b7280; +`; + +const SortIcon = styled.span` + margin-left: 0.5rem; + font-size: 0.75rem; + color: #9ca3af; +`; + +// Mock audit log data +const mockAuditLogs = [ + { + id: 1, + timestamp: '2024-01-15T10:30:00Z', + user: 'admin@nanwa.com', + action: 'CREATE', + resource: 'Tree', + resourceId: 'tree_001', + details: 'Created new tree record for Forest A', + ipAddress: '192.168.1.100', + userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' + }, + { + id: 2, + timestamp: '2024-01-15T10:25:00Z', + user: 'user@nanwa.com', + action: 'UPDATE', + resource: 'Tree', + resourceId: 'tree_002', + details: 'Updated height measurement from 2.3m to 2.4m', + ipAddress: '192.168.1.101', + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' + }, + { + id: 3, + timestamp: '2024-01-15T10:20:00Z', + user: 'admin@nanwa.com', + action: 'DELETE', + resource: 'Forest', + resourceId: 'forest_003', + details: 'Deleted forest record due to data cleanup', + ipAddress: '192.168.1.100', + userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' + }, + { + id: 4, + timestamp: '2024-01-15T10:15:00Z', + user: 'user@nanwa.com', + action: 'LOGIN', + resource: 'Authentication', + resourceId: 'auth_session_001', + details: 'User logged in successfully', + ipAddress: '192.168.1.101', + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' + }, + { + id: 5, + timestamp: '2024-01-15T10:10:00Z', + user: 'admin@nanwa.com', + action: 'UPDATE', + resource: 'User', + resourceId: 'user_001', + details: 'Updated user permissions to admin level', + ipAddress: '192.168.1.100', + userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' + }, + { + id: 6, + timestamp: '2024-01-15T10:05:00Z', + user: 'system', + action: 'CREATE', + resource: 'Measurement', + resourceId: 'measurement_001', + details: 'Automated measurement recorded for tree batch', + ipAddress: '127.0.0.1', + userAgent: 'System/1.0' + }, + { + id: 7, + timestamp: '2024-01-15T10:00:00Z', + user: 'user@nanwa.com', + action: 'LOGOUT', + resource: 'Authentication', + resourceId: 'auth_session_002', + details: 'User logged out', + ipAddress: '192.168.1.101', + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' + } +]; + +export const AuditLogTable = () => { + const [auditLogs, setAuditLogs] = useState([]); + const [loading, setLoading] = useState(false); + const [searchTerm, setSearchTerm] = useState(''); + const [actionFilter, setActionFilter] = useState(''); + const [sortField, setSortField] = useState('timestamp'); + const [sortDirection, setSortDirection] = useState('desc'); + const [currentPage, setCurrentPage] = useState(1); + const [pageSize] = useState(10); + + useEffect(() => { + fetchAuditLogs(); + }, []); + + const fetchAuditLogs = async () => { + setLoading(true); + try { + // Simulate API call + await new Promise(resolve => setTimeout(resolve, 500)); + setAuditLogs(mockAuditLogs); + } catch (error) { + console.error('Failed to fetch audit logs:', error); + } finally { + setLoading(false); + } + }; + + const handleSort = (field) => { + if (sortField === field) { + setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc'); + } else { + setSortField(field); + setSortDirection('desc'); + } + }; + + const filteredAndSortedLogs = auditLogs + .filter(log => { + const matchesSearch = searchTerm === '' || + log.user.toLowerCase().includes(searchTerm.toLowerCase()) || + log.details.toLowerCase().includes(searchTerm.toLowerCase()) || + log.resource.toLowerCase().includes(searchTerm.toLowerCase()); + + const matchesAction = actionFilter === '' || log.action === actionFilter; + + return matchesSearch && matchesAction; + }) + .sort((a, b) => { + const aValue = a[sortField]; + const bValue = b[sortField]; + + if (sortDirection === 'asc') { + return aValue > bValue ? 1 : -1; + } else { + return aValue < bValue ? 1 : -1; + } + }); + + const totalPages = Math.ceil(filteredAndSortedLogs.length / pageSize); + const startIndex = (currentPage - 1) * pageSize; + const paginatedLogs = filteredAndSortedLogs.slice(startIndex, startIndex + pageSize); + + const formatTimestamp = (timestamp) => { + return new Date(timestamp).toLocaleString(); + }; + + const getSortIcon = (field) => { + if (sortField !== field) return '⇅'; + return sortDirection === 'asc' ? '↑' : '↓'; + }; + + return ( + + + Audit Log + + setSearchTerm(e.target.value)} + /> + setActionFilter(e.target.value)} + > + + + + + + + + + + + {loading ? ( + +
+
+ ) : paginatedLogs.length === 0 ? ( + +

No audit logs found matching your criteria.

+
+ ) : ( + + + + handleSort('timestamp')}> + Timestamp {getSortIcon('timestamp')} + + handleSort('user')}> + User {getSortIcon('user')} + + handleSort('action')}> + Action {getSortIcon('action')} + + handleSort('resource')}> + Resource {getSortIcon('resource')} + + Details + IP Address + + + + {paginatedLogs.map(log => ( + + {formatTimestamp(log.timestamp)} + {log.user} + + {log.action} + + {log.resource} + {log.details} + {log.ipAddress} + + ))} + +
+ )} + + + + Showing {startIndex + 1} to {Math.min(startIndex + pageSize, filteredAndSortedLogs.length)} of {filteredAndSortedLogs.length} entries + + + setCurrentPage(1)} + disabled={currentPage === 1} + > + First + + setCurrentPage(currentPage - 1)} + disabled={currentPage === 1} + > + Previous + + {Array.from({ length: Math.min(5, totalPages) }, (_, i) => { + const pageNumber = currentPage - 2 + i; + if (pageNumber > 0 && pageNumber <= totalPages) { + return ( + setCurrentPage(pageNumber)} + className={currentPage === pageNumber ? 'active' : ''} + > + {pageNumber} + + ); + } + return null; + })} + setCurrentPage(currentPage + 1)} + disabled={currentPage === totalPages} + > + Next + + setCurrentPage(totalPages)} + disabled={currentPage === totalPages} + > + Last + + + +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ExportButton.jsx b/frontend/src/components/ui/ExportButton.jsx new file mode 100644 index 0000000000..a3446fc1fc --- /dev/null +++ b/frontend/src/components/ui/ExportButton.jsx @@ -0,0 +1,328 @@ +import { useState } from 'react'; +import Papa from 'papaparse'; +import * as XLSX from 'xlsx'; +import styled from 'styled-components'; + +const ExportContainer = styled.div` + position: relative; + display: inline-block; +`; + +const ExportButton = styled.button` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1.5rem; + background: #10b981; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #059669; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:disabled { + opacity: 0.6; + cursor: not-allowed; + } +`; + +const DropdownMenu = styled.div` + position: absolute; + top: 100%; + left: 0; + right: 0; + background: white; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + z-index: 50; + margin-top: 0.5rem; + overflow: hidden; +`; + +const DropdownItem = styled.button` + width: 100%; + padding: 0.75rem 1rem; + text-align: left; + background: none; + border: none; + cursor: pointer; + transition: background-color 0.2s; + display: flex; + align-items: center; + gap: 0.5rem; + + &:hover { + background: #f9fafb; + } + + &:focus { + outline: none; + background: #f0fdf4; + } +`; + +const ProgressOverlay = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + display: flex; + align-items: center; + justify-content: center; + border-radius: 0.5rem; +`; + +const ProgressSpinner = styled.div` + width: 20px; + height: 20px; + border: 2px solid #f3f4f6; + border-top: 2px solid #10b981; + border-radius: 50%; + animation: spin 1s linear infinite; + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } +`; + +const StatusMessage = styled.div` + position: absolute; + top: 100%; + left: 0; + right: 0; + padding: 0.5rem; + margin-top: 0.5rem; + border-radius: 0.5rem; + font-size: 0.875rem; + z-index: 50; + + ${props => props.type === 'success' && ` + background: #d1fae5; + color: #065f46; + border: 1px solid #a7f3d0; + `} + + ${props => props.type === 'error' && ` + background: #fee2e2; + color: #991b1b; + border: 1px solid #fecaca; + `} +`; + +export const ExportButtonComponent = ({ + data = [], + fileName = 'export', + filters = {}, + onExportStart, + onExportComplete, + onExportError +}) => { + const [isOpen, setIsOpen] = useState(false); + const [isExporting, setIsExporting] = useState(false); + const [statusMessage, setStatusMessage] = useState(null); + + const filteredData = data.filter(item => { + // Apply filters here - for now using basic filtering + if (filters.selectedForests && filters.selectedForests.length > 0) { + const mockForestId = item.id <= 4 ? 1 : 2; + if (!filters.selectedForests.includes(mockForestId)) { + return false; + } + } + + if (filters.dateRange) { + const mockDate = new Date(2023, item.id % 12, item.id % 28 + 1); + if (mockDate < filters.dateRange.startDate || mockDate > filters.dateRange.endDate) { + return false; + } + } + + return true; + }); + + const showStatus = (message, type) => { + setStatusMessage({ message, type }); + setTimeout(() => setStatusMessage(null), 3000); + }; + + const handleExportCSV = async () => { + setIsOpen(false); + setIsExporting(true); + + try { + if (onExportStart) onExportStart(); + + // Simulate processing delay for large datasets + await new Promise(resolve => setTimeout(resolve, 500)); + + // Prepare data for CSV export + const csvData = filteredData.map(item => ({ + 'Tree ID': item.name, + 'Species': item.species, + 'Height (m)': item.height, + 'Health': item.health, + 'Latitude': item.lat, + 'Longitude': item.lng, + 'Forest': item.id <= 4 ? 'Forest A' : 'Forest B', + 'Export Date': new Date().toISOString().split('T')[0] + })); + + // Generate CSV + const csv = Papa.unparse(csvData); + + // Create and trigger download + const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); + const link = document.createElement('a'); + const url = URL.createObjectURL(blob); + link.setAttribute('href', url); + link.setAttribute('download', `${fileName}_${new Date().toISOString().split('T')[0]}.csv`); + link.style.visibility = 'hidden'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + + showStatus(`CSV exported successfully (${filteredData.length} records)`, 'success'); + if (onExportComplete) onExportComplete('csv', filteredData.length); + + } catch (error) { + console.error('CSV export error:', error); + showStatus('CSV export failed', 'error'); + if (onExportError) onExportError(error); + } finally { + setIsExporting(false); + } + }; + + const handleExportXLSX = async () => { + setIsOpen(false); + setIsExporting(true); + + try { + if (onExportStart) onExportStart(); + + // Simulate processing delay for large datasets + await new Promise(resolve => setTimeout(resolve, 500)); + + // Prepare data for XLSX export + const xlsxData = filteredData.map(item => ({ + 'Tree ID': item.name, + 'Species': item.species, + 'Height (m)': item.height, + 'Health': item.health, + 'Latitude': item.lat, + 'Longitude': item.lng, + 'Forest': item.id <= 4 ? 'Forest A' : 'Forest B', + 'Export Date': new Date().toISOString().split('T')[0] + })); + + // Create workbook and worksheet + const wb = XLSX.utils.book_new(); + const ws = XLSX.utils.json_to_sheet(xlsxData); + + // Add worksheet to workbook + XLSX.utils.book_append_sheet(wb, ws, 'Tree Data'); + + // Generate and trigger download + XLSX.writeFile(wb, `${fileName}_${new Date().toISOString().split('T')[0]}.xlsx`); + + showStatus(`XLSX exported successfully (${filteredData.length} records)`, 'success'); + if (onExportComplete) onExportComplete('xlsx', filteredData.length); + + } catch (error) { + console.error('XLSX export error:', error); + showStatus('XLSX export failed', 'error'); + if (onExportError) onExportError(error); + } finally { + setIsExporting(false); + } + }; + + const handleToggleDropdown = () => { + if (!isExporting) { + setIsOpen(!isOpen); + } + }; + + const handleClickOutside = (e) => { + if (!e.target.closest('.export-container')) { + setIsOpen(false); + } + }; + + // Close dropdown when clicking outside + if (isOpen) { + document.addEventListener('click', handleClickOutside); + } else { + document.removeEventListener('click', handleClickOutside); + } + + return ( + + + {isExporting ? ( + <> + + Exporting... + + ) : ( + <> + + + + Export Data + + + + + )} + + + {isOpen && ( + + + + + +
+
Export as CSV
+
+ {filteredData.length} records • Comma-separated values +
+
+
+ + + + +
+
Export as XLSX
+
+ {filteredData.length} records • Excel spreadsheet +
+
+
+
+ )} + + {statusMessage && ( + + {statusMessage.message} + + )} +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/TreeDetailModal.jsx b/frontend/src/components/ui/TreeDetailModal.jsx index f0f8e1080f..be58907c63 100644 --- a/frontend/src/components/ui/TreeDetailModal.jsx +++ b/frontend/src/components/ui/TreeDetailModal.jsx @@ -1,4 +1,5 @@ import { useState, useEffect } from 'react'; +import { Link } from 'react-router-dom'; import styled from 'styled-components'; const ModalOverlay = styled.div` @@ -229,6 +230,29 @@ const ShareButton = styled.button` } `; +const ViewPageButton = styled(Link)` + padding: 0.75rem 1.5rem; + background: #3b82f6; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + text-decoration: none; + display: inline-flex; + align-items: center; + gap: 0.5rem; + transition: all 0.2s; + + &:hover { + background: #2563eb; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); + } +`; + // Mock data for demonstration const mockMeasurementHistory = [ { date: '2024-01-15', height: 2.4, diameter: 8.2, health: 'healthy' }, @@ -403,6 +427,12 @@ export const TreeDetailModal = ({ tree, isOpen, onClose }) => { {/* Action Buttons */}
+ + + + + View Full Page + diff --git a/frontend/src/pages/AdminPage.jsx b/frontend/src/pages/AdminPage.jsx new file mode 100644 index 0000000000..d4b80406d6 --- /dev/null +++ b/frontend/src/pages/AdminPage.jsx @@ -0,0 +1,225 @@ +import { useAuth } from '../contexts/AuthContext'; +import { Navigate } from 'react-router-dom'; +import styled from 'styled-components'; +import { AuditLogTable } from '../components/admin/AuditLogTable'; + +const AdminContainer = styled.div` + min-height: 100vh; + background-color: #f9fafb; +`; + +const Header = styled.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`; + +const HeaderContent = styled.div` + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const BackLink = styled.a` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #10b981; + color: white; + text-decoration: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + transition: all 0.2s; + + &:hover { + background: #059669; + } +`; + +const AdminBadge = styled.span` + padding: 0.5rem 1rem; + background: #fee2e2; + color: #991b1b; + border-radius: 9999px; + font-size: 0.875rem; + font-weight: 500; +`; + +const MainContent = styled.main` + max-width: 1200px; + margin: 0 auto; + padding: 2rem 1rem; +`; + +const PageHeader = styled.div` + margin-bottom: 2rem; +`; + +const PageTitle = styled.h1` + font-size: 2.5rem; + font-weight: 700; + color: #111827; + margin: 0 0 1rem 0; +`; + +const PageDescription = styled.p` + color: #6b7280; + font-size: 1.125rem; + margin: 0; +`; + +const StatsGrid = styled.div` + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 1.5rem; + margin-bottom: 2rem; +`; + +const StatCard = styled.div` + background: white; + padding: 1.5rem; + border-radius: 0.75rem; + border: 1px solid #e5e7eb; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +`; + +const StatValue = styled.div` + font-size: 2rem; + font-weight: 700; + color: #111827; + margin-bottom: 0.5rem; +`; + +const StatLabel = styled.div` + font-size: 0.875rem; + color: #6b7280; + font-weight: 500; +`; + +const StatIcon = styled.div` + display: inline-flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + border-radius: 0.75rem; + margin-bottom: 1rem; + + ${props => { + switch (props.type) { + case 'users': + return 'background: #dbeafe; color: #1e40af;'; + case 'actions': + return 'background: #d1fae5; color: #065f46;'; + case 'errors': + return 'background: #fee2e2; color: #991b1b;'; + case 'activity': + return 'background: #fef3c7; color: #92400e;'; + default: + return 'background: #f3f4f6; color: #374151;'; + } + }} +`; + +export const AdminPage = () => { + const { user, logout, isAdmin } = useAuth(); + + // Redirect non-admin users + if (!isAdmin()) { + return ; + } + + const handleLogout = () => { + logout(); + }; + + return ( + +
+ + + + + + Back to Dashboard + + +
+ Admin Panel + + Welcome, {user?.name} + + +
+ + + + + + System Administration + + Monitor system activity and user actions with comprehensive audit logging. + + + + {/* Admin Stats */} + + + + + + + + 42 + Active Users + + + + + + + + + 1,247 + Total Actions Today + + + + + + + + + 3 + Failed Actions + + + + + + + + + 98.5% + System Uptime + + + + {/* Audit Log Table */} + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index 6f174d53ee..62ee48bfd8 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -3,6 +3,7 @@ import { useAuth } from '../contexts/AuthContext'; import styled from 'styled-components'; import { SurvivalRateChart, AverageHeightChart, CO2AbsorptionChart } from '../components/charts'; import { GlobalFilters } from '../components/filters'; +import { ExportButtonComponent } from '../components/ui/ExportButton'; const DashboardContainer = styled.div` min-height: 100vh; @@ -32,6 +33,18 @@ const MainContent = styled.main` padding: 2rem; `; +// Mock data for export +const mockTreeData = [ + { id: 1, name: 'Tree A-001', species: 'Pine', height: 2.4, health: 'healthy', lat: 59.3293, lng: 18.0686 }, + { id: 2, name: 'Tree A-002', species: 'Oak', height: 2.1, health: 'healthy', lat: 59.3300, lng: 18.0690 }, + { id: 3, name: 'Tree A-003', species: 'Birch', height: 1.8, health: 'warning', lat: 59.3285, lng: 18.0675 }, + { id: 4, name: 'Tree A-004', species: 'Spruce', height: 1.5, health: 'critical', lat: 59.3310, lng: 18.0700 }, + { id: 5, name: 'Tree A-005', species: 'Pine', height: 2.7, health: 'healthy', lat: 59.3275, lng: 18.0660 }, + { id: 6, name: 'Tree A-006', species: 'Oak', height: 2.3, health: 'healthy', lat: 59.3320, lng: 18.0710 }, + { id: 7, name: 'Tree A-007', species: 'Birch', height: 1.9, health: 'warning', lat: 59.3265, lng: 18.0650 }, + { id: 8, name: 'Tree A-008', species: 'Spruce', height: 2.5, health: 'healthy', lat: 59.3330, lng: 18.0720 }, +]; + export const DashboardPage = () => { const { user, logout, isAdmin } = useAuth(); const [filters, setFilters] = useState({}); @@ -46,6 +59,18 @@ export const DashboardPage = () => { console.log('Filters changed:', newFilters); }, []); + const handleExportStart = () => { + console.log('Export started'); + }; + + const handleExportComplete = (format, recordCount) => { + console.log(`Export completed: ${format} with ${recordCount} records`); + }; + + const handleExportError = (error) => { + console.error('Export error:', error); + }; + return ( {/* Header */} @@ -130,10 +155,24 @@ export const DashboardPage = () => {
{/* Welcome Section */}
-

Welcome to Nanwa

-

- Monitor your forests and track tree growth with real-time insights. -

+
+
+

Welcome to Nanwa

+

+ Monitor your forests and track tree growth with real-time insights. +

+
+
+ +
+
{/* Global Filters */} diff --git a/frontend/src/pages/MapPage.jsx b/frontend/src/pages/MapPage.jsx index 8292f7868f..f58c6b3c39 100644 --- a/frontend/src/pages/MapPage.jsx +++ b/frontend/src/pages/MapPage.jsx @@ -4,6 +4,7 @@ import styled from 'styled-components'; import { ForestMap } from '../components/map/ForestMap'; import { GlobalFilters } from '../components/filters'; import { TreeDetailModal } from '../components/ui/TreeDetailModal'; +import { ExportButtonComponent } from '../components/ui/ExportButton'; const MapPageContainer = styled.div` min-height: 100vh; @@ -33,6 +34,18 @@ const MainContent = styled.main` padding: 2rem; `; +// Mock data for export +const mockTreeData = [ + { id: 1, name: 'Tree A-001', species: 'Pine', height: 2.4, health: 'healthy', lat: 59.3293, lng: 18.0686 }, + { id: 2, name: 'Tree A-002', species: 'Oak', height: 2.1, health: 'healthy', lat: 59.3300, lng: 18.0690 }, + { id: 3, name: 'Tree A-003', species: 'Birch', height: 1.8, health: 'warning', lat: 59.3285, lng: 18.0675 }, + { id: 4, name: 'Tree A-004', species: 'Spruce', height: 1.5, health: 'critical', lat: 59.3310, lng: 18.0700 }, + { id: 5, name: 'Tree A-005', species: 'Pine', height: 2.7, health: 'healthy', lat: 59.3275, lng: 18.0660 }, + { id: 6, name: 'Tree A-006', species: 'Oak', height: 2.3, health: 'healthy', lat: 59.3320, lng: 18.0710 }, + { id: 7, name: 'Tree A-007', species: 'Birch', height: 1.9, health: 'warning', lat: 59.3265, lng: 18.0650 }, + { id: 8, name: 'Tree A-008', species: 'Spruce', height: 2.5, health: 'healthy', lat: 59.3330, lng: 18.0720 }, +]; + export const MapPage = () => { @@ -61,6 +74,18 @@ export const MapPage = () => { setIsModalOpen(false); }; + const handleExportStart = () => { + console.log('Export started'); + }; + + const handleExportComplete = (format, recordCount) => { + console.log(`Export completed: ${format} with ${recordCount} records`); + }; + + const handleExportError = (error) => { + console.error('Export error:', error); + }; + return ( {/* Header */} @@ -145,10 +170,24 @@ export const MapPage = () => {
{/* Page Header */}
-

Forest Map

-

- Explore your forests and individual trees with interactive mapping. -

+
+
+

Forest Map

+

+ Explore your forests and individual trees with interactive mapping. +

+
+
+ +
+
{/* Global Filters */} diff --git a/frontend/src/pages/TreeDetailPage.jsx b/frontend/src/pages/TreeDetailPage.jsx new file mode 100644 index 0000000000..17b5a96f55 --- /dev/null +++ b/frontend/src/pages/TreeDetailPage.jsx @@ -0,0 +1,509 @@ +import { useState, useEffect } from 'react'; +import { useParams, useNavigate, Link } from 'react-router-dom'; +import { useAuth } from '../contexts/AuthContext'; +import styled from 'styled-components'; + +const PageContainer = styled.div` + min-height: 100vh; + background-color: #f9fafb; +`; + +const Header = styled.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`; + +const HeaderContent = styled.div` + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const Navigation = styled.nav` + display: flex; + align-items: center; + gap: 1rem; +`; + +const NavButton = styled.button` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #f3f4f6; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + color: #374151; + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #e5e7eb; + border-color: #9ca3af; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +`; + +const BackLink = styled(Link)` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #10b981; + color: white; + text-decoration: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + transition: all 0.2s; + + &:hover { + background: #059669; + } +`; + +const MainContent = styled.main` + max-width: 1200px; + margin: 0 auto; + padding: 2rem 1rem; +`; + +const TreeHeader = styled.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + margin-bottom: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`; + +const TreeTitle = styled.h1` + font-size: 2.5rem; + font-weight: 700; + color: #111827; + margin: 0 0 1rem 0; +`; + +const TreeSubtitle = styled.p` + color: #6b7280; + font-size: 1.125rem; + margin: 0; +`; + +const ContentGrid = styled.div` + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + + @media (min-width: 1024px) { + grid-template-columns: 2fr 1fr; + } +`; + +const MainSection = styled.div` + display: flex; + flex-direction: column; + gap: 2rem; +`; + +const SideSection = styled.div` + display: flex; + flex-direction: column; + gap: 2rem; +`; + +const InfoCard = styled.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`; + +const CardTitle = styled.h2` + font-size: 1.5rem; + font-weight: 600; + color: #111827; + margin: 0 0 1.5rem 0; +`; + +const InfoGrid = styled.div` + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + margin-bottom: 1.5rem; +`; + +const InfoItem = styled.div` + padding: 1rem; + background: #f9fafb; + border-radius: 0.5rem; + border: 1px solid #e5e7eb; +`; + +const InfoLabel = styled.div` + font-size: 0.875rem; + color: #6b7280; + margin-bottom: 0.5rem; +`; + +const InfoValue = styled.div` + font-size: 1.125rem; + font-weight: 600; + color: #111827; +`; + +const HealthBadge = styled.span` + padding: 0.5rem 1rem; + border-radius: 9999px; + font-size: 0.875rem; + font-weight: 500; + ${props => { + switch (props.health) { + case 'healthy': + return 'background: #d1fae5; color: #065f46;'; + case 'warning': + return 'background: #fef3c7; color: #92400e;'; + case 'critical': + return 'background: #fee2e2; color: #991b1b;'; + default: + return 'background: #f3f4f6; color: #374151;'; + } + }} +`; + +const MeasurementTable = styled.table` + width: 100%; + border-collapse: collapse; + margin-top: 1rem; +`; + +const TableHeader = styled.thead` + background: #f9fafb; +`; + +const TableRow = styled.tr` + border-bottom: 1px solid #e5e7eb; + + &:last-child { + border-bottom: none; + } +`; + +const TableCell = styled.td` + padding: 0.75rem; + text-align: left; + font-size: 0.875rem; + color: #111827; +`; + +const TableHeaderCell = styled.th` + padding: 0.75rem; + text-align: left; + font-size: 0.875rem; + font-weight: 600; + color: #374151; +`; + +const LoadingSpinner = styled.div` + display: flex; + justify-content: center; + align-items: center; + height: 200px; + + .spinner { + width: 40px; + height: 40px; + border: 4px solid #f3f4f6; + border-top: 4px solid #10b981; + border-radius: 50%; + animation: spin 1s linear infinite; + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } +`; + +const ErrorMessage = styled.div` + background: #fee2e2; + color: #991b1b; + padding: 1rem; + border-radius: 0.5rem; + border: 1px solid #fecaca; + text-align: center; +`; + +// Mock data - in real app this would come from API +const mockTrees = [ + { id: 1, name: 'Tree A-001', species: 'Pine', height: 2.4, health: 'healthy', lat: 59.3293, lng: 18.0686 }, + { id: 2, name: 'Tree A-002', species: 'Oak', height: 2.1, health: 'healthy', lat: 59.3300, lng: 18.0690 }, + { id: 3, name: 'Tree A-003', species: 'Birch', height: 1.8, health: 'warning', lat: 59.3285, lng: 18.0675 }, + { id: 4, name: 'Tree A-004', species: 'Spruce', height: 1.5, health: 'critical', lat: 59.3310, lng: 18.0700 }, + { id: 5, name: 'Tree A-005', species: 'Pine', height: 2.7, health: 'healthy', lat: 59.3275, lng: 18.0660 }, + { id: 6, name: 'Tree A-006', species: 'Oak', height: 2.3, health: 'healthy', lat: 59.3320, lng: 18.0710 }, + { id: 7, name: 'Tree A-007', species: 'Birch', height: 1.9, health: 'warning', lat: 59.3265, lng: 18.0650 }, + { id: 8, name: 'Tree A-008', species: 'Spruce', height: 2.5, health: 'healthy', lat: 59.3330, lng: 18.0720 }, +]; + +const mockMeasurementHistory = [ + { date: '2024-01-15', height: 2.4, diameter: 8.2, health: 'healthy' }, + { date: '2024-02-15', height: 2.3, diameter: 8.1, health: 'healthy' }, + { date: '2024-03-15', height: 2.2, diameter: 8.0, health: 'healthy' }, + { date: '2024-04-15', height: 2.1, diameter: 7.9, health: 'warning' }, + { date: '2024-05-15', height: 2.0, diameter: 7.8, health: 'warning' }, + { date: '2024-06-15', height: 1.9, diameter: 7.7, health: 'warning' }, + { date: '2024-07-15', height: 1.8, diameter: 7.6, health: 'critical' }, + { date: '2024-08-15', height: 1.7, diameter: 7.5, health: 'critical' }, + { date: '2024-09-15', height: 1.6, diameter: 7.4, health: 'critical' }, + { date: '2024-10-15', height: 1.5, diameter: 7.3, health: 'critical' }, +]; + +export const TreeDetailPage = () => { + const { id } = useParams(); + const navigate = useNavigate(); + const { user, logout } = useAuth(); + const [tree, setTree] = useState(null); + const [measurements, setMeasurements] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const fetchTreeData = async () => { + try { + setLoading(true); + // Simulate API call + await new Promise(resolve => setTimeout(resolve, 500)); + + const treeData = mockTrees.find(t => t.id === parseInt(id)); + if (!treeData) { + setError('Tree not found'); + return; + } + + setTree(treeData); + setMeasurements(mockMeasurementHistory); + } catch (err) { + setError('Failed to load tree data'); + } finally { + setLoading(false); + } + }; + + fetchTreeData(); + }, [id]); + + const handlePreviousTree = () => { + const currentIndex = mockTrees.findIndex(t => t.id === parseInt(id)); + if (currentIndex > 0) { + navigate(`/tree/${mockTrees[currentIndex - 1].id}`); + } + }; + + const handleNextTree = () => { + const currentIndex = mockTrees.findIndex(t => t.id === parseInt(id)); + if (currentIndex < mockTrees.length - 1) { + navigate(`/tree/${mockTrees[currentIndex + 1].id}`); + } + }; + + const handleShare = () => { + if (navigator.share) { + navigator.share({ + title: `Tree Details - ${tree.name}`, + text: `Check out this tree: ${tree.name} (${tree.species})`, + url: window.location.href + }); + } else { + navigator.clipboard.writeText(window.location.href); + alert('Tree URL copied to clipboard!'); + } + }; + + if (loading) { + return ( + +
+ + ← Back to Map + +
+ + +
+
+
+
+ ); + } + + if (error || !tree) { + return ( + +
+ + ← Back to Map + +
+ + + {error || 'Tree not found'} + + +
+ ); + } + + const currentIndex = mockTrees.findIndex(t => t.id === parseInt(id)); + const hasPrevious = currentIndex > 0; + const hasNext = currentIndex < mockTrees.length - 1; + + return ( + +
+ + + + + + Back to Map + + + + + + + + Previous + + + + Next + + + + + + + + + + Share + + + +
+ + + + {tree.name} + {tree.species} • Forest {tree.id <= 4 ? 'A' : 'B'} + + + + + {/* Basic Information */} + + Tree Information + + + Current Height + {tree.height}m + + + Health Status + + {tree.health} + + + + Species + {tree.species} + + + Planted Date + Mar 15, 2023 + + + + + {/* Measurement History */} + + Measurement History + + + + Date + Height (m) + Diameter (cm) + Health + + + + {measurements.slice(0, 10).map((measurement, index) => ( + + {new Date(measurement.date).toLocaleDateString()} + {measurement.height} + {measurement.diameter} + + {measurement.health} + + + ))} + + + + + + + {/* Location */} + + Location + + + Latitude + {tree.lat.toFixed(6)} + + + Longitude + {tree.lng.toFixed(6)} + + + + + {/* Contract Status */} + + Contract Details + + + Status + + + Active + + + + + Last Inspection + Jan 15, 2024 + + + + + + +
+ ); +}; \ No newline at end of file From 287a5123b6440c51c5703219c9c09ce7516bc1f3 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 14:11:24 +0200 Subject: [PATCH 013/111] further work on backend auth, export and tree tracking. --- backend/.dockerignore | 14 + backend/.env.example | 27 ++ backend/Dockerfile | 32 +++ backend/controllers/auditController.js | 317 +++++++++++++++++++++ backend/controllers/authController.js | 117 +++++++- backend/controllers/exportController.js | 358 ++++++++++++++++++++++++ backend/controllers/userController.js | 332 ++++++++++++++++++++++ backend/healthcheck.js | 28 ++ backend/middleware/auditLog.js | 229 +++++++++++++++ backend/middleware/rateLimiter.js | 90 ++++++ backend/middleware/validation.js | 62 ++++ backend/models/AuditLog.js | 156 +++++++++++ backend/models/RefreshToken.js | 91 ++++++ backend/models/index.js | 6 +- backend/package.json | 5 +- backend/render.yaml | 31 ++ backend/routes/audit.js | 33 +++ backend/routes/auth.js | 13 +- backend/routes/exports.js | 21 ++ backend/routes/users.js | 36 +++ backend/server.js | 12 + 21 files changed, 2002 insertions(+), 8 deletions(-) create mode 100644 backend/.dockerignore create mode 100644 backend/.env.example create mode 100644 backend/Dockerfile create mode 100644 backend/controllers/auditController.js create mode 100644 backend/controllers/exportController.js create mode 100644 backend/controllers/userController.js create mode 100644 backend/healthcheck.js create mode 100644 backend/middleware/auditLog.js create mode 100644 backend/middleware/rateLimiter.js create mode 100644 backend/models/AuditLog.js create mode 100644 backend/models/RefreshToken.js create mode 100644 backend/render.yaml create mode 100644 backend/routes/audit.js create mode 100644 backend/routes/exports.js create mode 100644 backend/routes/users.js diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000000..eeb29cd144 --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,14 @@ +node_modules +npm-debug.log +.git +.gitignore +README.md +.env +.env.local +.env.development +.env.production +coverage +.nyc_output +.DS_Store +*.log +logs \ No newline at end of file diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000000..0ff4cc7806 --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,27 @@ +# Environment Configuration for Nanwa Forestry Backend + +# Node Environment +NODE_ENV=development + +# Server Configuration +PORT=8080 +FRONTEND_URL=http://localhost:3000 + +# Database Configuration +MONGO_URL=mongodb://localhost/nanwa-forestry + +# JWT Configuration +JWT_SECRET=your-super-secret-jwt-key-change-in-production-minimum-32-characters +JWT_EXPIRES_IN=7d + +# Rate Limiting +RATE_LIMIT=100 +DATA_RATE_LIMIT=30 + +# Production Configuration +# NODE_ENV=production +# MONGO_URL=mongodb+srv://username:password@cluster.mongodb.net/nanwa-forestry +# JWT_SECRET=your-production-jwt-secret-key-at-least-32-characters-long +# FRONTEND_URL=https://your-frontend-domain.com +# RATE_LIMIT=100 +# DATA_RATE_LIMIT=30 \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000000..a66c745103 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,32 @@ +# Use the official Node.js LTS image +FROM node:18-alpine + +# Set working directory +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm ci --only=production + +# Copy source code +COPY . . + +# Create non-root user +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nanwa -u 1001 + +# Change ownership of the app directory +RUN chown -R nanwa:nodejs /app +USER nanwa + +# Expose port +EXPOSE 8080 + +# Health check +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD node healthcheck.js + +# Start the application +CMD ["npm", "start"] \ No newline at end of file diff --git a/backend/controllers/auditController.js b/backend/controllers/auditController.js new file mode 100644 index 0000000000..6afb5862ad --- /dev/null +++ b/backend/controllers/auditController.js @@ -0,0 +1,317 @@ +import { validationResult } from 'express-validator'; +import { AuditLog } from '../models/index.js'; + +// Get audit logs with filtering and pagination (admin only) +export const getAuditLogs = async (req, res) => { + try { + const { + page = 1, + limit = 50, + userId, + resource, + action, + startDate, + endDate, + sortBy = 'timestamp', + sortOrder = 'desc' + } = req.query; + + // Build query conditions + const queryConditions = {}; + + if (userId) queryConditions.userId = userId; + if (resource) queryConditions.resource = resource; + if (action) queryConditions.action = action; + + if (startDate || endDate) { + queryConditions.timestamp = {}; + if (startDate) queryConditions.timestamp.$gte = new Date(startDate); + if (endDate) queryConditions.timestamp.$lte = new Date(endDate); + } + + // Calculate pagination + const skip = (page - 1) * limit; + const sortDirection = sortOrder === 'desc' ? -1 : 1; + + // Execute query with pagination + const logs = await AuditLog.find(queryConditions) + .populate('userId', 'firstName lastName email') + .sort({ [sortBy]: sortDirection }) + .skip(skip) + .limit(parseInt(limit)); + + // Get total count for pagination + const totalCount = await AuditLog.countDocuments(queryConditions); + + res.json({ + success: true, + data: { + logs, + pagination: { + currentPage: parseInt(page), + totalPages: Math.ceil(totalCount / limit), + totalCount, + hasNextPage: page * limit < totalCount, + hasPrevPage: page > 1 + } + } + }); + } catch (error) { + console.error('Get audit logs error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get audit log by ID (admin only) +export const getAuditLogById = async (req, res) => { + try { + const { id } = req.params; + + const log = await AuditLog.findById(id) + .populate('userId', 'firstName lastName email role'); + + if (!log) { + return res.status(404).json({ + success: false, + message: 'Audit log not found' + }); + } + + res.json({ + success: true, + data: { log } + }); + } catch (error) { + console.error('Get audit log by ID error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get audit logs for a specific resource (admin only) +export const getResourceAuditLogs = async (req, res) => { + try { + const { resource, resourceId } = req.params; + const { limit = 50 } = req.query; + + const logs = await AuditLog.getResourceLogs(resource, resourceId, parseInt(limit)); + + res.json({ + success: true, + data: { + resource, + resourceId, + logs, + totalCount: logs.length + } + }); + } catch (error) { + console.error('Get resource audit logs error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get user activity logs (admin only, or user can see their own) +export const getUserActivity = async (req, res) => { + try { + const { userId } = req.params; + const { limit = 100 } = req.query; + + // Check if user is trying to access their own logs or if they're admin + if (req.user.role !== 'admin' && req.user._id.toString() !== userId) { + return res.status(403).json({ + success: false, + message: 'Access denied' + }); + } + + const logs = await AuditLog.getUserActivity(userId, parseInt(limit)); + + res.json({ + success: true, + data: { + userId, + logs, + totalCount: logs.length + } + }); + } catch (error) { + console.error('Get user activity error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get audit statistics (admin only) +export const getAuditStatistics = async (req, res) => { + try { + const { days = 30 } = req.query; + + const statistics = await AuditLog.getAuditStatistics(parseInt(days)); + + // Get recent activity breakdown + const recentActivity = await AuditLog.aggregate([ + { + $match: { + timestamp: { + $gte: new Date(Date.now() - parseInt(days) * 24 * 60 * 60 * 1000) + } + } + }, + { + $group: { + _id: { + $dateToString: { + format: '%Y-%m-%d', + date: '$timestamp' + } + }, + count: { $sum: 1 } + } + }, + { $sort: { _id: 1 } }, + { $limit: parseInt(days) } + ]); + + // Get top active users + const topUsers = await AuditLog.aggregate([ + { + $match: { + timestamp: { + $gte: new Date(Date.now() - parseInt(days) * 24 * 60 * 60 * 1000) + } + } + }, + { + $group: { + _id: '$userId', + count: { $sum: 1 }, + userEmail: { $first: '$userEmail' }, + userRole: { $first: '$userRole' } + } + }, + { $sort: { count: -1 } }, + { $limit: 10 } + ]); + + res.json({ + success: true, + data: { + ...statistics, + recentActivity, + topUsers + } + }); + } catch (error) { + console.error('Get audit statistics error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Export audit logs (admin only) +export const exportAuditLogs = async (req, res) => { + try { + const { + startDate, + endDate, + userId, + resource, + action, + format = 'csv' + } = req.query; + + const queryConditions = {}; + + if (userId) queryConditions.userId = userId; + if (resource) queryConditions.resource = resource; + if (action) queryConditions.action = action; + + if (startDate || endDate) { + queryConditions.timestamp = {}; + if (startDate) queryConditions.timestamp.$gte = new Date(startDate); + if (endDate) queryConditions.timestamp.$lte = new Date(endDate); + } + + const logs = await AuditLog.find(queryConditions) + .populate('userId', 'firstName lastName email') + .sort({ timestamp: -1 }) + .limit(10000) // Reasonable limit for exports + .lean(); + + if (logs.length === 0) { + return res.status(404).json({ + success: false, + message: 'No audit logs found matching the criteria' + }); + } + + // Prepare export data + const exportData = logs.map(log => ({ + 'Timestamp': log.timestamp.toISOString(), + 'Action': log.action, + 'Resource': log.resource, + 'Resource ID': log.resourceId || '', + 'User': log.userId ? `${log.userId.firstName} ${log.userId.lastName}` : 'Unknown', + 'User Email': log.userEmail, + 'User Role': log.userRole, + 'IP Address': log.metadata?.ipAddress || '', + 'Endpoint': log.metadata?.endpoint || '', + 'Method': log.metadata?.method || '', + 'Status Code': log.metadata?.statusCode || '', + 'Error Message': log.metadata?.errorMessage || '', + 'Has Changes': log.changes ? 'Yes' : 'No' + })); + + if (format === 'csv') { + // Export as CSV + const csvHeaders = Object.keys(exportData[0]); + const csvRows = exportData.map(row => + csvHeaders.map(header => { + const value = row[header]; + return typeof value === 'string' && value.includes(',') ? `"${value}"` : value; + }).join(',') + ); + const csvContent = [csvHeaders.join(','), ...csvRows].join('\n'); + + const filename = `nanwa_audit_logs_${new Date().toISOString().split('T')[0]}.csv`; + res.setHeader('Content-Type', 'text/csv'); + res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); + res.send(csvContent); + } else { + // Return JSON for other formats + res.json({ + success: true, + data: { + logs: exportData, + totalCount: exportData.length, + exportedAt: new Date().toISOString() + } + }); + } + } catch (error) { + console.error('Export audit logs error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; \ No newline at end of file diff --git a/backend/controllers/authController.js b/backend/controllers/authController.js index 8d4bf2d517..d9076f6fdd 100644 --- a/backend/controllers/authController.js +++ b/backend/controllers/authController.js @@ -1,5 +1,5 @@ import { validationResult } from 'express-validator'; -import { User } from '../models/index.js'; +import { User, RefreshToken } from '../models/index.js'; import { generateToken } from '../utils/jwt.js'; // Register new user @@ -39,6 +39,14 @@ export const register = async (req, res) => { // Generate JWT token const token = generateToken(user._id); + // Generate refresh token + const refreshToken = RefreshToken.generateToken( + user._id, + req.headers['user-agent'], + req.ip || req.connection.remoteAddress + ); + await refreshToken.save(); + // Update last login user.lastLogin = new Date(); await user.save(); @@ -48,6 +56,7 @@ export const register = async (req, res) => { message: 'User registered successfully', data: { token, + refreshToken: refreshToken.token, user: user.toJSON() } }); @@ -105,6 +114,14 @@ export const login = async (req, res) => { // Generate JWT token const token = generateToken(user._id); + // Generate refresh token + const refreshToken = RefreshToken.generateToken( + user._id, + req.headers['user-agent'], + req.ip || req.connection.remoteAddress + ); + await refreshToken.save(); + // Update last login user.lastLogin = new Date(); await user.save(); @@ -114,6 +131,7 @@ export const login = async (req, res) => { message: 'Login successful', data: { token, + refreshToken: refreshToken.token, user: user.toJSON() } }); @@ -185,9 +203,82 @@ export const updateProfile = async (req, res) => { } }; -// Logout (client-side token removal, server can implement token blacklisting if needed) +// Refresh JWT token using refresh token +export const refreshToken = async (req, res) => { + try { + const { refreshToken: tokenValue } = req.body; + + if (!tokenValue) { + return res.status(400).json({ + success: false, + message: 'Refresh token is required' + }); + } + + // Find and validate refresh token + const storedToken = await RefreshToken.findValidToken(tokenValue); + if (!storedToken) { + return res.status(401).json({ + success: false, + message: 'Invalid or expired refresh token' + }); + } + + // Check if user is still active + if (!storedToken.userId.isActive) { + await storedToken.revoke(); + return res.status(401).json({ + success: false, + message: 'Account is deactivated' + }); + } + + // Generate new JWT token + const newAccessToken = generateToken(storedToken.userId._id); + + // Generate new refresh token and revoke the old one + const newRefreshToken = RefreshToken.generateToken( + storedToken.userId._id, + req.headers['user-agent'], + req.ip || req.connection.remoteAddress + ); + + await Promise.all([ + newRefreshToken.save(), + storedToken.revoke() + ]); + + res.json({ + success: true, + message: 'Token refreshed successfully', + data: { + token: newAccessToken, + refreshToken: newRefreshToken.token + } + }); + } catch (error) { + console.error('Refresh token error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Logout with refresh token revocation export const logout = async (req, res) => { try { + const { refreshToken: tokenValue } = req.body; + + if (tokenValue) { + // Find and revoke the refresh token + const storedToken = await RefreshToken.findValidToken(tokenValue); + if (storedToken) { + await storedToken.revoke(); + } + } + res.json({ success: true, message: 'Logout successful' @@ -200,4 +291,26 @@ export const logout = async (req, res) => { error: process.env.NODE_ENV === 'development' ? error.message : undefined }); } +}; + +// Logout from all devices +export const logoutAll = async (req, res) => { + try { + const userId = req.user._id; + + // Revoke all refresh tokens for the user + await RefreshToken.revokeAllForUser(userId); + + res.json({ + success: true, + message: 'Logged out from all devices successfully' + }); + } catch (error) { + console.error('Logout all error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } }; \ No newline at end of file diff --git a/backend/controllers/exportController.js b/backend/controllers/exportController.js new file mode 100644 index 0000000000..4a02895852 --- /dev/null +++ b/backend/controllers/exportController.js @@ -0,0 +1,358 @@ +import { validationResult } from 'express-validator'; +import { Tree, Forest } from '../models/index.js'; +import XLSX from 'xlsx'; +import path from 'path'; +import fs from 'fs'; + +// Export trees data to CSV +export const exportTreesCSV = async (req, res) => { + try { + const { + forestId, + species, + isAlive, + startDate, + endDate, + includeHealthStatus = true, + includeMeasurements = false + } = req.query; + + // Build query conditions + const queryConditions = {}; + if (forestId) queryConditions.forestId = forestId; + if (species) queryConditions.species = new RegExp(species, 'i'); + if (isAlive !== undefined) queryConditions.isAlive = isAlive === 'true'; + + if (startDate || endDate) { + queryConditions.plantedDate = {}; + if (startDate) queryConditions.plantedDate.$gte = new Date(startDate); + if (endDate) queryConditions.plantedDate.$lte = new Date(endDate); + } + + // Get trees with forest information + const trees = await Tree.find(queryConditions) + .populate('forestId', 'name region') + .lean(); + + if (trees.length === 0) { + return res.status(404).json({ + success: false, + message: 'No trees found matching the criteria' + }); + } + + // Prepare CSV data + const csvData = []; + + trees.forEach(tree => { + const baseRow = { + 'Tree ID': tree.treeId, + 'Forest Name': tree.forestId?.name || 'Unknown', + 'Region': tree.forestId?.region || 'Unknown', + 'Species': tree.species, + 'Planted Date': tree.plantedDate.toISOString().split('T')[0], + 'Is Alive': tree.isAlive ? 'Yes' : 'No', + 'Longitude': tree.location.coordinates[0], + 'Latitude': tree.location.coordinates[1], + 'Age (Days)': Math.floor((new Date() - tree.plantedDate) / (1000 * 60 * 60 * 24)) + }; + + if (!tree.isAlive) { + baseRow['Death Date'] = tree.deathDate ? tree.deathDate.toISOString().split('T')[0] : ''; + baseRow['Death Cause'] = tree.deathCause || ''; + } + + if (includeHealthStatus === 'true' && tree.measurements.length > 0) { + const latestMeasurement = tree.measurements + .sort((a, b) => new Date(b.measuredAt) - new Date(a.measuredAt))[0]; + + baseRow['Current Height (m)'] = latestMeasurement.height || ''; + baseRow['Current Health Status'] = latestMeasurement.healthStatus || ''; + baseRow['Latest Measurement Date'] = latestMeasurement.measuredAt.toISOString().split('T')[0]; + } + + if (includeMeasurements === 'true') { + if (tree.measurements.length === 0) { + csvData.push(baseRow); + } else { + tree.measurements.forEach((measurement, index) => { + const row = { ...baseRow }; + row['Measurement #'] = index + 1; + row['Height (m)'] = measurement.height; + row['Diameter (cm)'] = measurement.diameter || ''; + row['CO2 Absorption (kg)'] = measurement.co2Absorption || ''; + row['Health Status'] = measurement.healthStatus; + row['Measurement Date'] = measurement.measuredAt.toISOString().split('T')[0]; + row['Notes'] = measurement.notes || ''; + csvData.push(row); + }); + } + } else { + csvData.push(baseRow); + } + }); + + // Convert to CSV format + const csvHeaders = Object.keys(csvData[0]); + const csvRows = csvData.map(row => + csvHeaders.map(header => { + const value = row[header]; + return typeof value === 'string' && value.includes(',') ? `"${value}"` : value; + }).join(',') + ); + const csvContent = [csvHeaders.join(','), ...csvRows].join('\n'); + + // Set response headers + const filename = `nanwa_trees_export_${new Date().toISOString().split('T')[0]}.csv`; + res.setHeader('Content-Type', 'text/csv'); + res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); + res.setHeader('Content-Length', Buffer.byteLength(csvContent)); + + res.send(csvContent); + } catch (error) { + console.error('Export trees CSV error:', error); + res.status(500).json({ + success: false, + message: 'Failed to export data', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Export trees data to XLSX +export const exportTreesXLSX = async (req, res) => { + try { + const { + forestId, + species, + isAlive, + startDate, + endDate, + includeHealthStatus = true, + includeMeasurements = false + } = req.query; + + // Build query conditions (same as CSV) + const queryConditions = {}; + if (forestId) queryConditions.forestId = forestId; + if (species) queryConditions.species = new RegExp(species, 'i'); + if (isAlive !== undefined) queryConditions.isAlive = isAlive === 'true'; + + if (startDate || endDate) { + queryConditions.plantedDate = {}; + if (startDate) queryConditions.plantedDate.$gte = new Date(startDate); + if (endDate) queryConditions.plantedDate.$lte = new Date(endDate); + } + + // Get trees with forest information + const trees = await Tree.find(queryConditions) + .populate('forestId', 'name region') + .lean(); + + if (trees.length === 0) { + return res.status(404).json({ + success: false, + message: 'No trees found matching the criteria' + }); + } + + // Create workbook + const workbook = XLSX.utils.book_new(); + + // Prepare trees summary data + const treesData = trees.map(tree => { + const row = { + 'Tree ID': tree.treeId, + 'Forest Name': tree.forestId?.name || 'Unknown', + 'Region': tree.forestId?.region || 'Unknown', + 'Species': tree.species, + 'Planted Date': tree.plantedDate.toISOString().split('T')[0], + 'Is Alive': tree.isAlive ? 'Yes' : 'No', + 'Longitude': tree.location.coordinates[0], + 'Latitude': tree.location.coordinates[1], + 'Age (Days)': Math.floor((new Date() - tree.plantedDate) / (1000 * 60 * 60 * 24)) + }; + + if (!tree.isAlive) { + row['Death Date'] = tree.deathDate ? tree.deathDate.toISOString().split('T')[0] : ''; + row['Death Cause'] = tree.deathCause || ''; + } + + if (includeHealthStatus === 'true' && tree.measurements.length > 0) { + const latestMeasurement = tree.measurements + .sort((a, b) => new Date(b.measuredAt) - new Date(a.measuredAt))[0]; + + row['Current Height (m)'] = latestMeasurement.height || ''; + row['Current Health Status'] = latestMeasurement.healthStatus || ''; + row['Latest Measurement Date'] = latestMeasurement.measuredAt.toISOString().split('T')[0]; + } + + return row; + }); + + // Add trees summary sheet + const treesWorksheet = XLSX.utils.json_to_sheet(treesData); + XLSX.utils.book_append_sheet(workbook, treesWorksheet, 'Trees Summary'); + + // Add measurements sheet if requested + if (includeMeasurements === 'true') { + const measurementsData = []; + + trees.forEach(tree => { + tree.measurements.forEach((measurement, index) => { + measurementsData.push({ + 'Tree ID': tree.treeId, + 'Forest Name': tree.forestId?.name || 'Unknown', + 'Species': tree.species, + 'Measurement #': index + 1, + 'Height (m)': measurement.height, + 'Diameter (cm)': measurement.diameter || '', + 'CO2 Absorption (kg)': measurement.co2Absorption || '', + 'Health Status': measurement.healthStatus, + 'Measurement Date': measurement.measuredAt.toISOString().split('T')[0], + 'Notes': measurement.notes || '' + }); + }); + }); + + if (measurementsData.length > 0) { + const measurementsWorksheet = XLSX.utils.json_to_sheet(measurementsData); + XLSX.utils.book_append_sheet(workbook, measurementsWorksheet, 'Measurements'); + } + } + + // Add statistics sheet + const statistics = { + 'Total Trees': trees.length, + 'Alive Trees': trees.filter(t => t.isAlive).length, + 'Dead Trees': trees.filter(t => !t.isAlive).length, + 'Survival Rate (%)': ((trees.filter(t => t.isAlive).length / trees.length) * 100).toFixed(2), + 'Export Date': new Date().toISOString().split('T')[0], + 'Unique Forests': [...new Set(trees.map(t => t.forestId?.name).filter(Boolean))].length, + 'Unique Species': [...new Set(trees.map(t => t.species))].length + }; + + const statsData = Object.entries(statistics).map(([key, value]) => ({ + 'Metric': key, + 'Value': value + })); + + const statsWorksheet = XLSX.utils.json_to_sheet(statsData); + XLSX.utils.book_append_sheet(workbook, statsWorksheet, 'Statistics'); + + // Convert workbook to buffer + const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' }); + + // Set response headers + const filename = `nanwa_trees_export_${new Date().toISOString().split('T')[0]}.xlsx`; + res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); + res.setHeader('Content-Length', buffer.length); + + res.send(buffer); + } catch (error) { + console.error('Export trees XLSX error:', error); + res.status(500).json({ + success: false, + message: 'Failed to export data', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Export forest analytics data +export const exportForestAnalytics = async (req, res) => { + try { + const { format = 'xlsx' } = req.query; + + // Get all forests with their tree statistics + const forests = await Forest.find({ isActive: true }).lean(); + + const forestAnalytics = await Promise.all( + forests.map(async (forest) => { + const totalTrees = await Tree.countDocuments({ forestId: forest._id }); + const aliveTrees = await Tree.countDocuments({ forestId: forest._id, isAlive: true }); + const survivalRate = totalTrees > 0 ? (aliveTrees / totalTrees) * 100 : 0; + + // Get average height from latest measurements + const avgHeightResult = await Tree.aggregate([ + { $match: { forestId: forest._id, isAlive: true } }, + { $unwind: '$measurements' }, + { $sort: { 'measurements.measuredAt': -1 } }, + { $group: { + _id: '$_id', + latestHeight: { $first: '$measurements.height' } + }}, + { $group: { + _id: null, + avgHeight: { $avg: '$latestHeight' } + }} + ]); + + const avgHeight = avgHeightResult.length > 0 ? avgHeightResult[0].avgHeight : 0; + + // Get total CO2 absorption + const co2Result = await Tree.aggregate([ + { $match: { forestId: forest._id, isAlive: true } }, + { $unwind: '$measurements' }, + { $group: { + _id: null, + totalCO2: { $sum: '$measurements.co2Absorption' } + }} + ]); + + const totalCO2 = co2Result.length > 0 ? co2Result[0].totalCO2 : 0; + + return { + 'Forest Name': forest.name, + 'Region': forest.region, + 'Area (hectares)': forest.area, + 'Established Date': forest.establishedDate.toISOString().split('T')[0], + 'Total Trees': totalTrees, + 'Alive Trees': aliveTrees, + 'Dead Trees': totalTrees - aliveTrees, + 'Survival Rate (%)': Math.round(survivalRate * 100) / 100, + 'Average Height (m)': Math.round(avgHeight * 100) / 100, + 'Total CO2 Absorption (kg)': Math.round(totalCO2 * 100) / 100, + 'Trees per Hectare': totalTrees > 0 ? Math.round((totalTrees / forest.area) * 100) / 100 : 0 + }; + }) + ); + + if (format === 'csv') { + // Export as CSV + const csvHeaders = Object.keys(forestAnalytics[0]); + const csvRows = forestAnalytics.map(row => + csvHeaders.map(header => { + const value = row[header]; + return typeof value === 'string' && value.includes(',') ? `"${value}"` : value; + }).join(',') + ); + const csvContent = [csvHeaders.join(','), ...csvRows].join('\n'); + + const filename = `nanwa_forest_analytics_${new Date().toISOString().split('T')[0]}.csv`; + res.setHeader('Content-Type', 'text/csv'); + res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); + res.send(csvContent); + } else { + // Export as XLSX + const workbook = XLSX.utils.book_new(); + const worksheet = XLSX.utils.json_to_sheet(forestAnalytics); + XLSX.utils.book_append_sheet(workbook, worksheet, 'Forest Analytics'); + + const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' }); + const filename = `nanwa_forest_analytics_${new Date().toISOString().split('T')[0]}.xlsx`; + + res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); + res.send(buffer); + } + } catch (error) { + console.error('Export forest analytics error:', error); + res.status(500).json({ + success: false, + message: 'Failed to export forest analytics', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; \ No newline at end of file diff --git a/backend/controllers/userController.js b/backend/controllers/userController.js new file mode 100644 index 0000000000..04764623b8 --- /dev/null +++ b/backend/controllers/userController.js @@ -0,0 +1,332 @@ +import { validationResult } from 'express-validator'; +import { User, RefreshToken } from '../models/index.js'; + +// Get all users (admin only) +export const getAllUsers = async (req, res) => { + try { + const { + page = 1, + limit = 20, + search, + role, + isActive, + sortBy = 'createdAt', + sortOrder = 'desc' + } = req.query; + + // Build query conditions + const queryConditions = {}; + + if (search) { + queryConditions.$or = [ + { firstName: new RegExp(search, 'i') }, + { lastName: new RegExp(search, 'i') }, + { email: new RegExp(search, 'i') } + ]; + } + + if (role) queryConditions.role = role; + if (isActive !== undefined) queryConditions.isActive = isActive === 'true'; + + // Calculate pagination + const skip = (page - 1) * limit; + const sortDirection = sortOrder === 'desc' ? -1 : 1; + + // Execute query with pagination + const users = await User.find(queryConditions) + .select('-password') // Exclude password field + .sort({ [sortBy]: sortDirection }) + .skip(skip) + .limit(parseInt(limit)); + + // Get total count for pagination + const totalCount = await User.countDocuments(queryConditions); + + res.json({ + success: true, + data: { + users, + pagination: { + currentPage: parseInt(page), + totalPages: Math.ceil(totalCount / limit), + totalCount, + hasNextPage: page * limit < totalCount, + hasPrevPage: page > 1 + } + } + }); + } catch (error) { + console.error('Get all users error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get user by ID (admin only) +export const getUserById = async (req, res) => { + try { + const { id } = req.params; + + const user = await User.findById(id).select('-password'); + if (!user) { + return res.status(404).json({ + success: false, + message: 'User not found' + }); + } + + // Get additional user statistics + const refreshTokenCount = await RefreshToken.countDocuments({ + userId: id, + isActive: true + }); + + res.json({ + success: true, + data: { + user, + statistics: { + activeTokens: refreshTokenCount + } + } + }); + } catch (error) { + console.error('Get user by ID error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Create new user (admin only) +export const createUser = async (req, res) => { + try { + // Check for validation errors + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + } + + const { email, password, firstName, lastName, role = 'user' } = req.body; + + // Check if user already exists + const existingUser = await User.findByEmail(email); + if (existingUser) { + return res.status(409).json({ + success: false, + message: 'User with this email already exists' + }); + } + + // Create new user + const user = new User({ + email, + password, + firstName, + lastName, + role + }); + + await user.save(); + + res.status(201).json({ + success: true, + message: 'User created successfully', + data: { + user: user.toJSON() + } + }); + } catch (error) { + console.error('Create user error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Update user (admin only) +export const updateUser = async (req, res) => { + try { + // Check for validation errors + const errors = validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + } + + const { id } = req.params; + const { firstName, lastName, role, isActive } = req.body; + + // Prevent admin from deactivating themselves + if (req.user._id.toString() === id && isActive === false) { + return res.status(400).json({ + success: false, + message: 'You cannot deactivate your own account' + }); + } + + // Find and update user + const user = await User.findById(id); + if (!user) { + return res.status(404).json({ + success: false, + message: 'User not found' + }); + } + + // Update allowed fields + if (firstName !== undefined) user.firstName = firstName; + if (lastName !== undefined) user.lastName = lastName; + if (role !== undefined) user.role = role; + if (isActive !== undefined) user.isActive = isActive; + + await user.save(); + + // If user is being deactivated, revoke all their refresh tokens + if (isActive === false) { + await RefreshToken.revokeAllForUser(id); + } + + res.json({ + success: true, + message: 'User updated successfully', + data: { + user: user.toJSON() + } + }); + } catch (error) { + console.error('Update user error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Delete user (admin only) +export const deleteUser = async (req, res) => { + try { + const { id } = req.params; + + // Prevent admin from deleting themselves + if (req.user._id.toString() === id) { + return res.status(400).json({ + success: false, + message: 'You cannot delete your own account' + }); + } + + const user = await User.findById(id); + if (!user) { + return res.status(404).json({ + success: false, + message: 'User not found' + }); + } + + // Revoke all refresh tokens for the user + await RefreshToken.revokeAllForUser(id); + + // Delete the user + await User.findByIdAndDelete(id); + + res.json({ + success: true, + message: 'User deleted successfully' + }); + } catch (error) { + console.error('Delete user error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Revoke all refresh tokens for a user (admin only) +export const revokeUserTokens = async (req, res) => { + try { + const { id } = req.params; + + const user = await User.findById(id); + if (!user) { + return res.status(404).json({ + success: false, + message: 'User not found' + }); + } + + const result = await RefreshToken.revokeAllForUser(id); + + res.json({ + success: true, + message: 'All refresh tokens revoked successfully', + data: { + revokedCount: result.modifiedCount + } + }); + } catch (error) { + console.error('Revoke user tokens error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; + +// Get user statistics (admin only) +export const getUserStatistics = async (req, res) => { + try { + const totalUsers = await User.countDocuments(); + const activeUsers = await User.countDocuments({ isActive: true }); + const adminUsers = await User.countDocuments({ role: 'admin', isActive: true }); + const regularUsers = await User.countDocuments({ role: 'user', isActive: true }); + + // Users registered in the last 30 days + const thirtyDaysAgo = new Date(); + thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); + const recentUsers = await User.countDocuments({ + createdAt: { $gte: thirtyDaysAgo } + }); + + // Active refresh tokens + const activeTokens = await RefreshToken.countDocuments({ isActive: true }); + + res.json({ + success: true, + data: { + totalUsers, + activeUsers, + inactiveUsers: totalUsers - activeUsers, + adminUsers, + regularUsers, + recentUsers, + activeTokens + } + }); + } catch (error) { + console.error('Get user statistics error:', error); + res.status(500).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); + } +}; \ No newline at end of file diff --git a/backend/healthcheck.js b/backend/healthcheck.js new file mode 100644 index 0000000000..18930f7587 --- /dev/null +++ b/backend/healthcheck.js @@ -0,0 +1,28 @@ +import http from 'http'; + +const options = { + hostname: 'localhost', + port: process.env.PORT || 8080, + path: '/health', + method: 'GET', + timeout: 2000 +}; + +const req = http.request(options, (res) => { + if (res.statusCode === 200) { + process.exit(0); + } else { + process.exit(1); + } +}); + +req.on('error', () => { + process.exit(1); +}); + +req.on('timeout', () => { + req.destroy(); + process.exit(1); +}); + +req.end(); \ No newline at end of file diff --git a/backend/middleware/auditLog.js b/backend/middleware/auditLog.js new file mode 100644 index 0000000000..18462beeca --- /dev/null +++ b/backend/middleware/auditLog.js @@ -0,0 +1,229 @@ +import { AuditLog } from '../models/index.js'; + +// Middleware to capture the original document before modification +export const captureOriginalDoc = (model) => { + return async (req, res, next) => { + if (req.method === 'PUT' || req.method === 'PATCH' || req.method === 'DELETE') { + try { + const { id } = req.params; + if (id) { + const originalDoc = await model.findById(id).lean(); + req.originalDoc = originalDoc; + } + } catch (error) { + console.error('Error capturing original document:', error); + } + } + next(); + }; +}; + +// Main audit logging middleware +export const auditLog = (options = {}) => { + const { + resource, + skipActions = [], + captureBody = false, + customExtractor = null + } = options; + + return async (req, res, next) => { + // Skip if user is not authenticated or action should be skipped + if (!req.user || skipActions.includes(req.method)) { + return next(); + } + + // Store original res.json to capture response + const originalJson = res.json; + let responseData = null; + let statusCode = null; + + res.json = function(data) { + responseData = data; + statusCode = res.statusCode; + return originalJson.call(this, data); + }; + + // Continue with request processing + next(); + + // After response is sent, log the audit trail + res.on('finish', async () => { + try { + await logAuditTrail({ + req, + res, + resource, + responseData, + statusCode, + captureBody, + customExtractor + }); + } catch (error) { + console.error('Audit logging error:', error); + } + }); + }; +}; + +// Function to determine action based on HTTP method and response +const getActionFromRequest = (method, statusCode, path) => { + switch (method) { + case 'POST': + if (path.includes('/login')) return 'LOGIN'; + if (path.includes('/register')) return 'REGISTER'; + if (path.includes('/logout')) return 'LOGOUT'; + if (path.includes('/export')) return 'EXPORT'; + return 'CREATE'; + case 'PUT': + case 'PATCH': + return 'UPDATE'; + case 'DELETE': + return 'DELETE'; + default: + return null; // Don't log GET requests by default + } +}; + +// Function to extract resource ID from request +const getResourceId = (req, responseData) => { + // Try to get ID from URL params + if (req.params.id) { + return req.params.id; + } + + // Try to get ID from response data + if (responseData?.data?.id) { + return responseData.data.id; + } + + if (responseData?.data?._id) { + return responseData.data._id; + } + + // For custom IDs like treeId + if (responseData?.data?.treeId) { + return responseData.data.treeId; + } + + return null; +}; + +// Main audit trail logging function +const logAuditTrail = async ({ + req, + res, + resource, + responseData, + statusCode, + captureBody, + customExtractor +}) => { + const action = getActionFromRequest(req.method, statusCode, req.path); + + // Skip logging if no action determined or if it's a failed request + if (!action || statusCode >= 400) { + return; + } + + const resourceId = customExtractor ? + customExtractor(req, responseData) : + getResourceId(req, responseData); + + const logData = { + action, + resource, + resourceId, + userId: req.user._id, + userEmail: req.user.email, + userRole: req.user.role, + metadata: { + ipAddress: req.ip || req.connection.remoteAddress, + userAgent: req.headers['user-agent'], + endpoint: req.originalUrl, + method: req.method, + statusCode + } + }; + + // Capture changes for UPDATE actions + if (action === 'UPDATE' && req.originalDoc) { + logData.changes = { + before: req.originalDoc, + after: responseData?.data + }; + } + + // Capture request body if specified + if (captureBody && req.body) { + logData.metadata.requestBody = req.body; + } + + // Handle specific actions + switch (action) { + case 'LOGIN': + logData.metadata.additionalInfo = { + loginMethod: 'password', + success: statusCode < 400 + }; + break; + + case 'REGISTER': + logData.metadata.additionalInfo = { + newUserEmail: req.body.email, + newUserRole: req.body.role || 'user' + }; + break; + + case 'EXPORT': + logData.metadata.additionalInfo = { + exportType: req.path.includes('csv') ? 'CSV' : 'XLSX', + filters: req.query + }; + break; + } + + // Add error information for failed requests + if (statusCode >= 400) { + logData.metadata.errorMessage = responseData?.message || 'Unknown error'; + } + + await AuditLog.createLog(logData); +}; + +// Specific audit middleware for authentication events +export const auditAuth = async (req, res, next) => { + const originalJson = res.json; + + res.json = function(data) { + // Log authentication events + if (req.user) { + const action = req.path.includes('/login') ? 'LOGIN' : + req.path.includes('/register') ? 'REGISTER' : + req.path.includes('/logout') ? 'LOGOUT' : null; + + if (action) { + AuditLog.createLog({ + action, + resource: 'User', + resourceId: req.user._id, + userId: req.user._id, + userEmail: req.user.email, + userRole: req.user.role, + metadata: { + ipAddress: req.ip || req.connection.remoteAddress, + userAgent: req.headers['user-agent'], + endpoint: req.originalUrl, + method: req.method, + statusCode: res.statusCode, + additionalInfo: action === 'LOGIN' ? { loginMethod: 'password' } : {} + } + }).catch(err => console.error('Auth audit log error:', err)); + } + } + + return originalJson.call(this, data); + }; + + next(); +}; \ No newline at end of file diff --git a/backend/middleware/rateLimiter.js b/backend/middleware/rateLimiter.js new file mode 100644 index 0000000000..8a3dfe0b4a --- /dev/null +++ b/backend/middleware/rateLimiter.js @@ -0,0 +1,90 @@ +import rateLimit from 'express-rate-limit'; + +// General API rate limiter +export const generalLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15 minutes + max: parseInt(process.env.RATE_LIMIT) || 100, // Default to 100 requests per window + message: { + success: false, + message: 'Too many requests from this IP, please try again later.', + retryAfter: '15 minutes' + }, + standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers + legacyHeaders: false, // Disable the `X-RateLimit-*` headers + handler: (req, res) => { + res.status(429).json({ + success: false, + message: 'Too many requests from this IP, please try again later.', + retryAfter: Math.ceil(req.rateLimit.resetTime / 1000), + limit: req.rateLimit.limit, + remaining: req.rateLimit.remaining + }); + } +}); + +// Stricter rate limiter for authentication endpoints +export const authLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15 minutes + max: 5, // Limit each IP to 5 requests per windowMs + message: { + success: false, + message: 'Too many authentication attempts from this IP, please try again later.', + retryAfter: '15 minutes' + }, + standardHeaders: true, + legacyHeaders: false, + skipSuccessfulRequests: true, // Don't count successful requests + handler: (req, res) => { + res.status(429).json({ + success: false, + message: 'Too many authentication attempts from this IP, please try again later.', + retryAfter: Math.ceil(req.rateLimit.resetTime / 1000), + limit: req.rateLimit.limit, + remaining: req.rateLimit.remaining + }); + } +}); + +// More lenient rate limiter for data retrieval endpoints +export const dataLimiter = rateLimit({ + windowMs: 1 * 60 * 1000, // 1 minute + max: parseInt(process.env.DATA_RATE_LIMIT) || 30, // Default to 30 requests per minute + message: { + success: false, + message: 'Too many data requests from this IP, please try again later.', + retryAfter: '1 minute' + }, + standardHeaders: true, + legacyHeaders: false, + handler: (req, res) => { + res.status(429).json({ + success: false, + message: 'Too many data requests from this IP, please try again later.', + retryAfter: Math.ceil(req.rateLimit.resetTime / 1000), + limit: req.rateLimit.limit, + remaining: req.rateLimit.remaining + }); + } +}); + +// Very strict rate limiter for admin operations +export const adminLimiter = rateLimit({ + windowMs: 5 * 60 * 1000, // 5 minutes + max: 10, // Limit each IP to 10 admin operations per 5 minutes + message: { + success: false, + message: 'Too many admin operations from this IP, please try again later.', + retryAfter: '5 minutes' + }, + standardHeaders: true, + legacyHeaders: false, + handler: (req, res) => { + res.status(429).json({ + success: false, + message: 'Too many admin operations from this IP, please try again later.', + retryAfter: Math.ceil(req.rateLimit.resetTime / 1000), + limit: req.rateLimit.limit, + remaining: req.rateLimit.remaining + }); + } +}); \ No newline at end of file diff --git a/backend/middleware/validation.js b/backend/middleware/validation.js index 32068e3648..c2df490156 100644 --- a/backend/middleware/validation.js +++ b/backend/middleware/validation.js @@ -152,4 +152,66 @@ export const validateMeasurement = [ .optional() .isLength({ max: 500 }) .withMessage('Notes cannot exceed 500 characters') +]; + +// Validation rules for admin user creation +export const validateUserCreate = [ + body('email') + .isEmail() + .normalizeEmail() + .withMessage('Please provide a valid email address'), + + body('password') + .isLength({ min: 6 }) + .withMessage('Password must be at least 6 characters long') + .matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/) + .withMessage('Password must contain at least one lowercase letter, one uppercase letter, and one number'), + + body('firstName') + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('First name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('First name can only contain letters and spaces'), + + body('lastName') + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('Last name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('Last name can only contain letters and spaces'), + + body('role') + .optional() + .isIn(['user', 'admin']) + .withMessage('Role must be either user or admin') +]; + +// Validation rules for admin user update +export const validateUserUpdate = [ + body('firstName') + .optional() + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('First name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('First name can only contain letters and spaces'), + + body('lastName') + .optional() + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('Last name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('Last name can only contain letters and spaces'), + + body('role') + .optional() + .isIn(['user', 'admin']) + .withMessage('Role must be either user or admin'), + + body('isActive') + .optional() + .isBoolean() + .withMessage('isActive must be a boolean value') ]; \ No newline at end of file diff --git a/backend/models/AuditLog.js b/backend/models/AuditLog.js new file mode 100644 index 0000000000..55087e7d62 --- /dev/null +++ b/backend/models/AuditLog.js @@ -0,0 +1,156 @@ +import mongoose from 'mongoose'; + +const auditLogSchema = new mongoose.Schema({ + action: { + type: String, + required: [true, 'Action is required'], + enum: [ + 'CREATE', 'UPDATE', 'DELETE', 'LOGIN', 'LOGOUT', + 'REGISTER', 'PASSWORD_CHANGE', 'ROLE_CHANGE', + 'EXPORT', 'BULK_UPDATE', 'BULK_DELETE' + ] + }, + resource: { + type: String, + required: [true, 'Resource is required'], + enum: ['User', 'Forest', 'Tree', 'Measurement', 'RefreshToken', 'Export'] + }, + resourceId: { + type: String, // Can be ObjectId or custom ID like treeId + required: function() { + return !['LOGIN', 'LOGOUT', 'REGISTER', 'EXPORT'].includes(this.action); + } + }, + userId: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + required: true + }, + userEmail: { + type: String, + required: true + }, + userRole: { + type: String, + enum: ['user', 'admin'], + required: true + }, + changes: { + before: mongoose.Schema.Types.Mixed, // Previous state of the document + after: mongoose.Schema.Types.Mixed // New state of the document + }, + metadata: { + ipAddress: String, + userAgent: String, + endpoint: String, + method: String, + statusCode: Number, + errorMessage: String, + additionalInfo: mongoose.Schema.Types.Mixed + }, + timestamp: { + type: Date, + default: Date.now, + required: true + } +}); + +// Indexes for efficient querying +auditLogSchema.index({ userId: 1, timestamp: -1 }); +auditLogSchema.index({ resource: 1, timestamp: -1 }); +auditLogSchema.index({ action: 1, timestamp: -1 }); +auditLogSchema.index({ timestamp: -1 }); +auditLogSchema.index({ resourceId: 1 }); + +// TTL index to automatically remove old audit logs (1 year retention) +auditLogSchema.index({ timestamp: 1 }, { expireAfterSeconds: 365 * 24 * 60 * 60 }); + +// Static method to create audit log +auditLogSchema.statics.createLog = function(logData) { + return new this(logData).save(); +}; + +// Static method to get logs for a specific resource +auditLogSchema.statics.getResourceLogs = function(resource, resourceId, limit = 50) { + return this.find({ resource, resourceId }) + .populate('userId', 'firstName lastName email') + .sort({ timestamp: -1 }) + .limit(limit); +}; + +// Static method to get user activity logs +auditLogSchema.statics.getUserActivity = function(userId, limit = 100) { + return this.find({ userId }) + .sort({ timestamp: -1 }) + .limit(limit); +}; + +// Static method to get logs within date range +auditLogSchema.statics.getLogsByDateRange = function(startDate, endDate, options = {}) { + const query = { + timestamp: { + $gte: startDate, + $lte: endDate + } + }; + + if (options.userId) query.userId = options.userId; + if (options.resource) query.resource = options.resource; + if (options.action) query.action = options.action; + + return this.find(query) + .populate('userId', 'firstName lastName email') + .sort({ timestamp: -1 }) + .limit(options.limit || 1000); +}; + +// Static method to get audit statistics +auditLogSchema.statics.getAuditStatistics = async function(days = 30) { + const startDate = new Date(); + startDate.setDate(startDate.getDate() - days); + + const stats = await this.aggregate([ + { $match: { timestamp: { $gte: startDate } } }, + { + $group: { + _id: { + action: '$action', + resource: '$resource' + }, + count: { $sum: 1 } + } + }, + { + $group: { + _id: '$_id.resource', + actions: { + $push: { + action: '$_id.action', + count: '$count' + } + }, + totalCount: { $sum: '$count' } + } + }, + { $sort: { totalCount: -1 } } + ]); + + const totalLogs = await this.countDocuments({ + timestamp: { $gte: startDate } + }); + + const uniqueUsers = await this.distinct('userId', { + timestamp: { $gte: startDate } + }); + + return { + totalLogs, + uniqueUsers: uniqueUsers.length, + resourceStats: stats, + periodDays: days + }; +}; + +const AuditLog = mongoose.model('AuditLog', auditLogSchema); + +export default AuditLog; \ No newline at end of file diff --git a/backend/models/RefreshToken.js b/backend/models/RefreshToken.js new file mode 100644 index 0000000000..614d44bbb7 --- /dev/null +++ b/backend/models/RefreshToken.js @@ -0,0 +1,91 @@ +import mongoose from 'mongoose'; +import crypto from 'crypto'; + +const refreshTokenSchema = new mongoose.Schema({ + token: { + type: String, + required: true, + unique: true + }, + userId: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + required: true + }, + isActive: { + type: Boolean, + default: true + }, + userAgent: { + type: String, + maxlength: 500 + }, + ipAddress: { + type: String, + maxlength: 45 // IPv6 addresses can be up to 45 characters + }, + createdAt: { + type: Date, + default: Date.now + }, + expiresAt: { + type: Date, + required: true + } +}); + +// Create TTL index for automatic document deletion +refreshTokenSchema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 }); + +// Index for efficient token lookups +refreshTokenSchema.index({ token: 1, isActive: 1 }); +refreshTokenSchema.index({ userId: 1, isActive: 1 }); + +// Static method to generate a new refresh token +refreshTokenSchema.statics.generateToken = function(userId, userAgent = null, ipAddress = null) { + const token = crypto.randomBytes(64).toString('hex'); + const expiresAt = new Date(); + expiresAt.setDate(expiresAt.getDate() + 30); // 30 days from now + + return new this({ + token, + userId, + userAgent, + ipAddress, + expiresAt + }); +}; + +// Static method to find valid token +refreshTokenSchema.statics.findValidToken = function(token) { + return this.findOne({ + token, + isActive: true, + expiresAt: { $gt: new Date() } + }).populate('userId'); +}; + +// Instance method to revoke token +refreshTokenSchema.methods.revoke = function() { + this.isActive = false; + return this.save(); +}; + +// Static method to revoke all tokens for a user +refreshTokenSchema.statics.revokeAllForUser = function(userId) { + return this.updateMany( + { userId, isActive: true }, + { isActive: false } + ); +}; + +// Static method to cleanup expired tokens (optional, since TTL index handles this) +refreshTokenSchema.statics.cleanupExpired = function() { + return this.deleteMany({ + expiresAt: { $lte: new Date() } + }); +}; + +const RefreshToken = mongoose.model('RefreshToken', refreshTokenSchema); + +export default RefreshToken; \ No newline at end of file diff --git a/backend/models/index.js b/backend/models/index.js index 9596f774e0..245e77d952 100644 --- a/backend/models/index.js +++ b/backend/models/index.js @@ -1,9 +1,13 @@ import User from './User.js'; import Forest from './Forest.js'; import Tree from './Tree.js'; +import RefreshToken from './RefreshToken.js'; +import AuditLog from './AuditLog.js'; export { User, Forest, - Tree + Tree, + RefreshToken, + AuditLog }; \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index 989e6d7933..85db235800 100644 --- a/backend/package.json +++ b/backend/package.json @@ -15,11 +15,14 @@ "@babel/preset-env": "^7.16.11", "bcryptjs": "^3.0.2", "cors": "^2.8.5", + "csv-writer": "^1.6.0", "dotenv": "^17.2.0", "express": "^4.17.3", + "express-rate-limit": "^7.5.1", "express-validator": "^7.2.1", "jsonwebtoken": "^9.0.2", "mongoose": "^8.4.0", - "nodemon": "^3.0.1" + "nodemon": "^3.0.1", + "xlsx": "^0.18.5" } } diff --git a/backend/render.yaml b/backend/render.yaml new file mode 100644 index 0000000000..d419268374 --- /dev/null +++ b/backend/render.yaml @@ -0,0 +1,31 @@ +services: + - type: web + name: nanwa-backend + env: node + region: oregon + plan: free + buildCommand: npm install + startCommand: npm start + healthCheckPath: /health + autoDeploy: false + envVars: + - key: NODE_ENV + value: production + - key: PORT + value: 8080 + - key: MONGODB_URI + fromDatabase: + name: nanwa-db + property: connectionString + - key: JWT_SECRET + generateValue: true + - key: RATE_LIMIT + value: 100 + - key: FRONTEND_URL + value: https://nanwa-frontend.onrender.com + +databases: + - name: nanwa-db + databaseName: nanwa + region: oregon + plan: free \ No newline at end of file diff --git a/backend/routes/audit.js b/backend/routes/audit.js new file mode 100644 index 0000000000..d4af9dd752 --- /dev/null +++ b/backend/routes/audit.js @@ -0,0 +1,33 @@ +import express from 'express'; +import { + getAuditLogs, + getAuditLogById, + getResourceAuditLogs, + getUserActivity, + getAuditStatistics, + exportAuditLogs +} from '../controllers/auditController.js'; +import { authenticateToken, requireAdmin } from '../middleware/auth.js'; + +const router = express.Router(); + +// All routes require authentication +router.use(authenticateToken); + +// Statistics (admin only) +router.get('/statistics', requireAdmin, getAuditStatistics); + +// Export audit logs (admin only) +router.get('/export', requireAdmin, exportAuditLogs); + +// General audit log routes (admin only) +router.get('/', requireAdmin, getAuditLogs); +router.get('/:id', requireAdmin, getAuditLogById); + +// Resource-specific audit logs (admin only) +router.get('/resource/:resource/:resourceId', requireAdmin, getResourceAuditLogs); + +// User activity logs (admin can see all, users can see their own) +router.get('/user/:userId', getUserActivity); + +export default router; \ No newline at end of file diff --git a/backend/routes/auth.js b/backend/routes/auth.js index 0c92815c0f..7b0140d6f6 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -4,7 +4,9 @@ import { login, getProfile, updateProfile, - logout + logout, + refreshToken, + logoutAll } from '../controllers/authController.js'; import { validateRegister, @@ -12,16 +14,19 @@ import { validateProfileUpdate } from '../middleware/validation.js'; import { authenticateToken } from '../middleware/auth.js'; +import { authLimiter } from '../middleware/rateLimiter.js'; const router = express.Router(); -// Public routes -router.post('/register', validateRegister, register); -router.post('/login', validateLogin, login); +// Public routes (with stricter rate limiting for auth) +router.post('/register', authLimiter, validateRegister, register); +router.post('/login', authLimiter, validateLogin, login); router.post('/logout', logout); +router.post('/refresh', authLimiter, refreshToken); // Protected routes router.get('/profile', authenticateToken, getProfile); router.put('/profile', authenticateToken, validateProfileUpdate, updateProfile); +router.post('/logout-all', authenticateToken, logoutAll); export default router; \ No newline at end of file diff --git a/backend/routes/exports.js b/backend/routes/exports.js new file mode 100644 index 0000000000..609bf62da6 --- /dev/null +++ b/backend/routes/exports.js @@ -0,0 +1,21 @@ +import express from 'express'; +import { + exportTreesCSV, + exportTreesXLSX, + exportForestAnalytics +} from '../controllers/exportController.js'; +import { authenticateToken } from '../middleware/auth.js'; + +const router = express.Router(); + +// All export routes require authentication +router.use(authenticateToken); + +// Trees export endpoints +router.get('/trees/csv', exportTreesCSV); +router.get('/trees/xlsx', exportTreesXLSX); + +// Forest analytics export +router.get('/forest-analytics', exportForestAnalytics); + +export default router; \ No newline at end of file diff --git a/backend/routes/users.js b/backend/routes/users.js new file mode 100644 index 0000000000..224ee563ea --- /dev/null +++ b/backend/routes/users.js @@ -0,0 +1,36 @@ +import express from 'express'; +import { + getAllUsers, + getUserById, + createUser, + updateUser, + deleteUser, + revokeUserTokens, + getUserStatistics +} from '../controllers/userController.js'; +import { + validateUserCreate, + validateUserUpdate +} from '../middleware/validation.js'; +import { authenticateToken, requireAdmin } from '../middleware/auth.js'; +import { adminLimiter } from '../middleware/rateLimiter.js'; + +const router = express.Router(); + +// All routes require authentication and admin role +router.use(authenticateToken, requireAdmin); + +// User statistics +router.get('/statistics', getUserStatistics); + +// User CRUD operations +router.get('/', getAllUsers); +router.get('/:id', getUserById); +router.post('/', adminLimiter, validateUserCreate, createUser); +router.put('/:id', adminLimiter, validateUserUpdate, updateUser); +router.delete('/:id', adminLimiter, deleteUser); + +// User token management +router.post('/:id/revoke-tokens', adminLimiter, revokeUserTokens); + +export default router; \ No newline at end of file diff --git a/backend/server.js b/backend/server.js index 9778db56a1..82c35b4036 100644 --- a/backend/server.js +++ b/backend/server.js @@ -7,6 +7,12 @@ import dotenv from "dotenv"; import authRoutes from "./routes/auth.js"; import forestRoutes from "./routes/forests.js"; import treeRoutes from "./routes/trees.js"; +import userRoutes from "./routes/users.js"; +import exportRoutes from "./routes/exports.js"; +import auditRoutes from "./routes/audit.js"; + +// Import middleware +import { generalLimiter } from "./middleware/rateLimiter.js"; // Load environment variables dotenv.config(); @@ -40,6 +46,9 @@ app.use(cors({ app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); +// Rate limiting middleware +app.use('/api/', generalLimiter); + // Request logging middleware app.use((req, res, next) => { console.log(`${new Date().toISOString()} - ${req.method} ${req.path}`); @@ -70,6 +79,9 @@ app.get("/health", (req, res) => { app.use("/api/auth", authRoutes); app.use("/api/forests", forestRoutes); app.use("/api/trees", treeRoutes); +app.use("/api/users", userRoutes); +app.use("/api/exports", exportRoutes); +app.use("/api/audit", auditRoutes); // 404 handler app.use("*", (req, res) => { From 8915bfd7a4244231d59c898ec0b9a22a10d8e562 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Sun, 13 Jul 2025 14:49:05 +0200 Subject: [PATCH 014/111] accessibility and polish to the frontend --- frontend/src/App.jsx | 122 +++--- frontend/src/components/ui/ErrorBoundary.jsx | 209 ++++++++++ frontend/src/components/ui/LoadingSpinner.jsx | 66 ++++ frontend/src/components/ui/Navbar.jsx | 37 +- frontend/src/components/ui/Toast.jsx | 272 +++++++++++++ .../src/components/ui/TreeDetailModal.jsx | 13 +- frontend/src/contexts/ToastContext.jsx | 91 +++++ frontend/src/hooks/useKeyboardNavigation.js | 356 ++++++++++++++++++ frontend/src/pages/DashboardPage.jsx | 180 +++++++-- frontend/src/pages/ErrorPages.jsx | 246 ++++++++++++ frontend/src/utils/performance.js | 352 +++++++++++++++++ frontend/src/utils/responsive.js | 264 +++++++++++++ 12 files changed, 2120 insertions(+), 88 deletions(-) create mode 100644 frontend/src/components/ui/ErrorBoundary.jsx create mode 100644 frontend/src/components/ui/LoadingSpinner.jsx create mode 100644 frontend/src/components/ui/Toast.jsx create mode 100644 frontend/src/contexts/ToastContext.jsx create mode 100644 frontend/src/hooks/useKeyboardNavigation.js create mode 100644 frontend/src/pages/ErrorPages.jsx create mode 100644 frontend/src/utils/performance.js create mode 100644 frontend/src/utils/responsive.js diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index be11e528e9..5a4bce8d6f 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,61 +1,77 @@ import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; -import { LandingPage } from './pages/LandingPage'; -import { LoginPage } from './pages/LoginPage'; -import { RegisterPage } from './pages/RegisterPage'; -import { DashboardPage } from './pages/DashboardPage'; -import { MapPage } from './pages/MapPage'; -import { TreeDetailPage } from './pages/TreeDetailPage'; -import { AdminPage } from './pages/AdminPage'; +import { Suspense, lazy } from 'react'; import { ProtectedRoute } from './components/auth/ProtectedRoute'; import { AuthProvider } from './contexts/AuthContext'; +import { ToastProvider } from './contexts/ToastContext'; +import { ToastNotifications } from './components/ui/Toast'; +import ErrorBoundary from './components/ui/ErrorBoundary'; +import LoadingSpinner from './components/ui/LoadingSpinner'; + +// Lazy load components +const LandingPage = lazy(() => import('./pages/LandingPage').then(module => ({ default: module.LandingPage }))); +const LoginPage = lazy(() => import('./pages/LoginPage').then(module => ({ default: module.LoginPage }))); +const RegisterPage = lazy(() => import('./pages/RegisterPage').then(module => ({ default: module.RegisterPage }))); +const DashboardPage = lazy(() => import('./pages/DashboardPage').then(module => ({ default: module.DashboardPage }))); +const MapPage = lazy(() => import('./pages/MapPage').then(module => ({ default: module.MapPage }))); +const TreeDetailPage = lazy(() => import('./pages/TreeDetailPage').then(module => ({ default: module.TreeDetailPage }))); +const AdminPage = lazy(() => import('./pages/AdminPage').then(module => ({ default: module.AdminPage }))); +const NotFoundPage = lazy(() => import('./pages/ErrorPages').then(module => ({ default: module.NotFoundPage }))); export const App = () => { return ( - - - - } /> - } /> - } /> - - - - } - /> - - - - } - /> - - - - } - /> - - - - } - /> - - - + + + + + }> + + } /> + } /> + } /> + + + + } + /> + + + + } + /> + + + + } + /> + + + + } + /> + } /> + + + + + + + ); }; diff --git a/frontend/src/components/ui/ErrorBoundary.jsx b/frontend/src/components/ui/ErrorBoundary.jsx new file mode 100644 index 0000000000..4ba3a19236 --- /dev/null +++ b/frontend/src/components/ui/ErrorBoundary.jsx @@ -0,0 +1,209 @@ +import React from 'react'; +import styled from 'styled-components'; + +const ErrorContainer = styled.div` + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + padding: 2rem; + background-color: #f8f9fa; +`; + +const ErrorCard = styled.div` + background: white; + border-radius: 8px; + padding: 2rem; + max-width: 600px; + width: 100%; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + text-align: center; +`; + +const ErrorTitle = styled.h1` + color: #dc3545; + font-size: 2rem; + margin-bottom: 1rem; + font-weight: 600; +`; + +const ErrorMessage = styled.p` + color: #6c757d; + font-size: 1.1rem; + line-height: 1.6; + margin-bottom: 2rem; +`; + +const ErrorDetails = styled.details` + margin-bottom: 2rem; + text-align: left; + + summary { + cursor: pointer; + color: #007bff; + font-weight: 500; + margin-bottom: 0.5rem; + + &:hover { + color: #0056b3; + } + } +`; + +const ErrorCode = styled.pre` + background: #f8f9fa; + padding: 1rem; + border-radius: 4px; + overflow-x: auto; + font-size: 0.9rem; + color: #495057; + white-space: pre-wrap; + word-break: break-word; +`; + +const ButtonGroup = styled.div` + display: flex; + gap: 1rem; + justify-content: center; + flex-wrap: wrap; +`; + +const Button = styled.button` + padding: 0.75rem 1.5rem; + border: none; + border-radius: 4px; + font-size: 1rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + + &:focus { + outline: 2px solid #007bff; + outline-offset: 2px; + } + + &:disabled { + opacity: 0.6; + cursor: not-allowed; + } +`; + +const PrimaryButton = styled(Button)` + background-color: #007bff; + color: white; + + &:hover:not(:disabled) { + background-color: #0056b3; + } +`; + +const SecondaryButton = styled(Button)` + background-color: #6c757d; + color: white; + + &:hover:not(:disabled) { + background-color: #5a6268; + } +`; + +class ErrorBoundary extends React.Component { + constructor(props) { + super(props); + this.state = { + hasError: false, + error: null, + errorInfo: null + }; + } + + static getDerivedStateFromError(error) { + return { hasError: true }; + } + + componentDidCatch(error, errorInfo) { + this.setState({ + error: error, + errorInfo: errorInfo + }); + + // Log error to console for debugging + console.error('Error caught by boundary:', error, errorInfo); + + // In production, you might want to send this to an error reporting service + // reportError(error, errorInfo); + } + + handleRetry = () => { + this.setState({ + hasError: false, + error: null, + errorInfo: null + }); + }; + + handleReload = () => { + window.location.reload(); + }; + + handleReportError = () => { + const errorData = { + error: this.state.error?.toString(), + stack: this.state.error?.stack, + componentStack: this.state.errorInfo?.componentStack, + userAgent: navigator.userAgent, + timestamp: new Date().toISOString(), + url: window.location.href + }; + + // Copy error details to clipboard + navigator.clipboard.writeText(JSON.stringify(errorData, null, 2)) + .then(() => { + alert('Error details copied to clipboard. Please send this to support.'); + }) + .catch(() => { + alert('Failed to copy error details. Please try again.'); + }); + }; + + render() { + if (this.state.hasError) { + return ( + + + Oops! Something went wrong + + We're sorry, but something unexpected happened. You can try refreshing the page + or contact support if the problem persists. + + + {this.state.error && ( + + Show technical details + + {this.state.error.toString()} + {this.state.errorInfo?.componentStack} + + + )} + + + + Try Again + + + Refresh Page + + + Report Error + + + + + ); + } + + return this.props.children; + } +} + +export default ErrorBoundary; \ No newline at end of file diff --git a/frontend/src/components/ui/LoadingSpinner.jsx b/frontend/src/components/ui/LoadingSpinner.jsx new file mode 100644 index 0000000000..81ff1d0fd7 --- /dev/null +++ b/frontend/src/components/ui/LoadingSpinner.jsx @@ -0,0 +1,66 @@ +import React from 'react'; +import styled, { keyframes } from 'styled-components'; + +const spin = keyframes` + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +`; + +const LoadingContainer = styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 200px; + padding: 2rem; + + ${({ fullscreen }) => fullscreen && ` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + z-index: 9999; + min-height: 100vh; + `} +`; + +const Spinner = styled.div` + width: ${({ size }) => size || '40px'}; + height: ${({ size }) => size || '40px'}; + border: 3px solid #f3f3f3; + border-top: 3px solid #007bff; + border-radius: 50%; + animation: ${spin} 1s linear infinite; + margin-bottom: 1rem; +`; + +const LoadingText = styled.p` + color: #666; + font-size: 0.9rem; + margin: 0; + text-align: center; +`; + +const LoadingSpinner = ({ + text = 'Loading...', + size = '40px', + fullscreen = false, + className = '' +}) => { + return ( + + + {text} + + ); +}; + +export default LoadingSpinner; \ No newline at end of file diff --git a/frontend/src/components/ui/Navbar.jsx b/frontend/src/components/ui/Navbar.jsx index 681c3fc915..c5f379b482 100644 --- a/frontend/src/components/ui/Navbar.jsx +++ b/frontend/src/components/ui/Navbar.jsx @@ -1,10 +1,43 @@ -import { useState } from 'react'; +import { useState, useRef, useEffect } from 'react'; import { Link } from 'react-router-dom'; +import { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation'; export const Navbar = () => { const [open, setOpen] = useState(false); + const menuButtonRef = useRef(null); - const toggleMenu = () => setOpen(!open); + const { containerRef, focusFirst } = useKeyboardNavigation({ + onEscape: () => setOpen(false), + trapFocus: open, + autoFocus: false, + }); + + const toggleMenu = () => { + setOpen(!open); + }; + + // Focus management when menu opens/closes + useEffect(() => { + if (open) { + // Focus first menu item when menu opens + setTimeout(() => { + focusFirst(); + }, 100); + } else { + // Focus menu button when menu closes + setTimeout(() => { + menuButtonRef.current?.focus(); + }, 100); + } + }, [open, focusFirst]); + + // Handle keyboard navigation for menu button + const handleMenuKeyDown = (e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + toggleMenu(); + } + }; const linkBase = 'text-gray-700 hover:text-green-600 transition-colors px-4 py-2 text-base font-medium'; diff --git a/frontend/src/components/ui/Toast.jsx b/frontend/src/components/ui/Toast.jsx new file mode 100644 index 0000000000..e8b5693e49 --- /dev/null +++ b/frontend/src/components/ui/Toast.jsx @@ -0,0 +1,272 @@ +import React, { useEffect, useState } from 'react'; +import styled, { keyframes, css } from 'styled-components'; +import { useToast } from '../../contexts/ToastContext'; + +const slideIn = keyframes` + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0); + opacity: 1; + } +`; + +const slideOut = keyframes` + from { + transform: translateX(0); + opacity: 1; + } + to { + transform: translateX(100%); + opacity: 0; + } +`; + +const ToastContainer = styled.div` + position: fixed; + top: 1rem; + right: 1rem; + z-index: 9999; + display: flex; + flex-direction: column; + gap: 0.5rem; + max-width: 420px; + + @media (max-width: 768px) { + left: 1rem; + right: 1rem; + max-width: none; + } +`; + +const ToastWrapper = styled.div` + ${({ isExiting }) => css` + animation: ${isExiting ? slideOut : slideIn} 0.3s ease-out; + `} +`; + +const ToastCard = styled.div` + background: white; + border-radius: 8px; + padding: 1rem; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + border-left: 4px solid ${({ type }) => { + switch (type) { + case 'success': return '#28a745'; + case 'error': return '#dc3545'; + case 'warning': return '#ffc107'; + case 'info': return '#17a2b8'; + default: return '#17a2b8'; + } + }}; + display: flex; + align-items: flex-start; + gap: 0.75rem; + position: relative; + + &:focus-within { + outline: 2px solid #007bff; + outline-offset: 2px; + } +`; + +const ToastIcon = styled.div` + width: 20px; + height: 20px; + flex-shrink: 0; + margin-top: 0.125rem; + + svg { + width: 100%; + height: 100%; + fill: ${({ type }) => { + switch (type) { + case 'success': return '#28a745'; + case 'error': return '#dc3545'; + case 'warning': return '#ffc107'; + case 'info': return '#17a2b8'; + default: return '#17a2b8'; + } + }}; + } +`; + +const ToastContent = styled.div` + flex: 1; + + h4 { + margin: 0 0 0.25rem 0; + font-size: 0.9rem; + font-weight: 600; + color: #333; + } + + p { + margin: 0; + font-size: 0.875rem; + line-height: 1.4; + color: #666; + } +`; + +const CloseButton = styled.button` + background: none; + border: none; + cursor: pointer; + padding: 0.25rem; + color: #999; + flex-shrink: 0; + border-radius: 4px; + + &:hover { + color: #666; + background-color: rgba(0, 0, 0, 0.05); + } + + &:focus { + outline: 2px solid #007bff; + outline-offset: 2px; + } + + svg { + width: 16px; + height: 16px; + fill: currentColor; + } +`; + +const ProgressBar = styled.div` + position: absolute; + bottom: 0; + left: 0; + height: 3px; + background-color: ${({ type }) => { + switch (type) { + case 'success': return '#28a745'; + case 'error': return '#dc3545'; + case 'warning': return '#ffc107'; + case 'info': return '#17a2b8'; + default: return '#17a2b8'; + } + }}; + border-radius: 0 0 8px 8px; + width: ${({ progress }) => progress}%; + transition: width 0.1s linear; +`; + +const getToastIcon = (type) => { + switch (type) { + case 'success': + return ( + + + + ); + case 'error': + return ( + + + + ); + case 'warning': + return ( + + + + ); + case 'info': + default: + return ( + + + + ); + } +}; + +const Toast = ({ toast, onRemove }) => { + const [isExiting, setIsExiting] = useState(false); + const [progress, setProgress] = useState(100); + + useEffect(() => { + if (toast.duration > 0) { + const interval = setInterval(() => { + setProgress((prev) => { + const newProgress = prev - (100 / (toast.duration / 100)); + return newProgress <= 0 ? 0 : newProgress; + }); + }, 100); + + return () => clearInterval(interval); + } + }, [toast.duration]); + + const handleClose = () => { + setIsExiting(true); + setTimeout(() => onRemove(toast.id), 300); + }; + + const getTitle = (type) => { + switch (type) { + case 'success': return 'Success'; + case 'error': return 'Error'; + case 'warning': return 'Warning'; + case 'info': return 'Info'; + default: return 'Notification'; + } + }; + + return ( + + + + {getToastIcon(toast.type)} + + + +

{toast.title || getTitle(toast.type)}

+

{toast.message}

+
+ + + + + + + + {toast.duration > 0 && ( + + )} +
+
+ ); +}; + +export const ToastNotifications = () => { + const { toasts, removeToast } = useToast(); + + return ( + + {toasts.map((toast) => ( + + ))} + + ); +}; + +export default Toast; \ No newline at end of file diff --git a/frontend/src/components/ui/TreeDetailModal.jsx b/frontend/src/components/ui/TreeDetailModal.jsx index be58907c63..c3e8e8b36d 100644 --- a/frontend/src/components/ui/TreeDetailModal.jsx +++ b/frontend/src/components/ui/TreeDetailModal.jsx @@ -1,6 +1,7 @@ import { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import styled from 'styled-components'; +import { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation'; const ModalOverlay = styled.div` position: fixed; @@ -270,6 +271,12 @@ const mockMeasurementHistory = [ export const TreeDetailModal = ({ tree, isOpen, onClose }) => { const [measurementHistory, setMeasurementHistory] = useState([]); + const { containerRef, focusFirst } = useKeyboardNavigation({ + onEscape: onClose, + trapFocus: true, + autoFocus: true, + }); + useEffect(() => { if (tree && isOpen) { // In a real application, this would fetch from an API @@ -301,10 +308,10 @@ export const TreeDetailModal = ({ tree, isOpen, onClose }) => { return ( - + - {tree.name} - + {tree.name} + diff --git a/frontend/src/contexts/ToastContext.jsx b/frontend/src/contexts/ToastContext.jsx new file mode 100644 index 0000000000..e755a7c062 --- /dev/null +++ b/frontend/src/contexts/ToastContext.jsx @@ -0,0 +1,91 @@ +import React, { createContext, useContext, useReducer, useCallback } from 'react'; + +const ToastContext = createContext(); + +const toastReducer = (state, action) => { + switch (action.type) { + case 'ADD_TOAST': + return [...state, action.toast]; + case 'REMOVE_TOAST': + return state.filter(toast => toast.id !== action.id); + case 'CLEAR_ALL': + return []; + default: + return state; + } +}; + +export const ToastProvider = ({ children }) => { + const [toasts, dispatch] = useReducer(toastReducer, []); + + const addToast = useCallback((toast) => { + const id = Date.now() + Math.random(); + const newToast = { + id, + type: 'info', + duration: 5000, + ...toast, + }; + + dispatch({ type: 'ADD_TOAST', toast: newToast }); + + // Auto-remove toast after duration + if (newToast.duration > 0) { + setTimeout(() => { + dispatch({ type: 'REMOVE_TOAST', id }); + }, newToast.duration); + } + + return id; + }, []); + + const removeToast = useCallback((id) => { + dispatch({ type: 'REMOVE_TOAST', id }); + }, []); + + const clearAll = useCallback(() => { + dispatch({ type: 'CLEAR_ALL' }); + }, []); + + // Convenience methods for different toast types + const showSuccess = useCallback((message, options = {}) => { + return addToast({ message, type: 'success', ...options }); + }, [addToast]); + + const showError = useCallback((message, options = {}) => { + return addToast({ message, type: 'error', duration: 7000, ...options }); + }, [addToast]); + + const showWarning = useCallback((message, options = {}) => { + return addToast({ message, type: 'warning', duration: 6000, ...options }); + }, [addToast]); + + const showInfo = useCallback((message, options = {}) => { + return addToast({ message, type: 'info', ...options }); + }, [addToast]); + + const value = { + toasts, + addToast, + removeToast, + clearAll, + showSuccess, + showError, + showWarning, + showInfo, + }; + + return ( + + {children} + + ); +}; + +export const useToast = () => { + const context = useContext(ToastContext); + if (!context) { + throw new Error('useToast must be used within a ToastProvider'); + } + return context; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useKeyboardNavigation.js b/frontend/src/hooks/useKeyboardNavigation.js new file mode 100644 index 0000000000..a485f2bb86 --- /dev/null +++ b/frontend/src/hooks/useKeyboardNavigation.js @@ -0,0 +1,356 @@ +import { useEffect, useCallback, useRef } from 'react'; + +export const useKeyboardNavigation = (options = {}) => { + const { + onEscape, + onEnter, + onSpace, + onArrowUp, + onArrowDown, + onArrowLeft, + onArrowRight, + onTab, + trapFocus = false, + autoFocus = false, + disabled = false, + } = options; + + const containerRef = useRef(null); + const focusableElements = useRef([]); + + // Get all focusable elements within the container + const getFocusableElements = useCallback(() => { + if (!containerRef.current) return []; + + const selectors = [ + 'button:not([disabled])', + 'input:not([disabled])', + 'select:not([disabled])', + 'textarea:not([disabled])', + 'a[href]:not([disabled])', + '[tabindex]:not([tabindex="-1"]):not([disabled])', + 'summary:not([disabled])', + ]; + + return Array.from(containerRef.current.querySelectorAll(selectors.join(','))) + .filter(el => { + const style = window.getComputedStyle(el); + return style.display !== 'none' && style.visibility !== 'hidden'; + }); + }, []); + + // Update focusable elements list + const updateFocusableElements = useCallback(() => { + focusableElements.current = getFocusableElements(); + }, [getFocusableElements]); + + // Handle keyboard events + const handleKeyDown = useCallback((event) => { + if (disabled) return; + + const { key, shiftKey, ctrlKey, altKey, metaKey } = event; + + // Don't handle if modifier keys are pressed (except shift for Tab) + if ((ctrlKey || altKey || metaKey) && key !== 'Tab') return; + + switch (key) { + case 'Escape': + if (onEscape) { + event.preventDefault(); + onEscape(event); + } + break; + + case 'Enter': + if (onEnter) { + event.preventDefault(); + onEnter(event); + } + break; + + case ' ': + if (onSpace) { + event.preventDefault(); + onSpace(event); + } + break; + + case 'ArrowUp': + if (onArrowUp) { + event.preventDefault(); + onArrowUp(event); + } + break; + + case 'ArrowDown': + if (onArrowDown) { + event.preventDefault(); + onArrowDown(event); + } + break; + + case 'ArrowLeft': + if (onArrowLeft) { + event.preventDefault(); + onArrowLeft(event); + } + break; + + case 'ArrowRight': + if (onArrowRight) { + event.preventDefault(); + onArrowRight(event); + } + break; + + case 'Tab': + if (trapFocus && focusableElements.current.length > 0) { + event.preventDefault(); + handleTabNavigation(shiftKey); + } + if (onTab) { + onTab(event); + } + break; + + default: + break; + } + }, [ + disabled, + onEscape, + onEnter, + onSpace, + onArrowUp, + onArrowDown, + onArrowLeft, + onArrowRight, + onTab, + trapFocus, + ]); + + // Handle tab navigation within trapped focus + const handleTabNavigation = useCallback((shiftKey) => { + updateFocusableElements(); + const elements = focusableElements.current; + + if (elements.length === 0) return; + + const activeElement = document.activeElement; + const currentIndex = elements.indexOf(activeElement); + + let nextIndex; + if (shiftKey) { + // Shift+Tab: go to previous element + nextIndex = currentIndex <= 0 ? elements.length - 1 : currentIndex - 1; + } else { + // Tab: go to next element + nextIndex = currentIndex >= elements.length - 1 ? 0 : currentIndex + 1; + } + + elements[nextIndex]?.focus(); + }, [updateFocusableElements]); + + // Focus management + const focusFirst = useCallback(() => { + updateFocusableElements(); + const elements = focusableElements.current; + elements[0]?.focus(); + }, [updateFocusableElements]); + + const focusLast = useCallback(() => { + updateFocusableElements(); + const elements = focusableElements.current; + elements[elements.length - 1]?.focus(); + }, [updateFocusableElements]); + + const focusNext = useCallback(() => { + updateFocusableElements(); + const elements = focusableElements.current; + const activeElement = document.activeElement; + const currentIndex = elements.indexOf(activeElement); + const nextIndex = currentIndex >= elements.length - 1 ? 0 : currentIndex + 1; + elements[nextIndex]?.focus(); + }, [updateFocusableElements]); + + const focusPrevious = useCallback(() => { + updateFocusableElements(); + const elements = focusableElements.current; + const activeElement = document.activeElement; + const currentIndex = elements.indexOf(activeElement); + const previousIndex = currentIndex <= 0 ? elements.length - 1 : currentIndex - 1; + elements[previousIndex]?.focus(); + }, [updateFocusableElements]); + + // Setup event listeners + useEffect(() => { + const container = containerRef.current; + if (!container) return; + + container.addEventListener('keydown', handleKeyDown); + + // Auto-focus first element if enabled + if (autoFocus) { + const timer = setTimeout(() => { + focusFirst(); + }, 100); + + return () => { + clearTimeout(timer); + container.removeEventListener('keydown', handleKeyDown); + }; + } + + return () => { + container.removeEventListener('keydown', handleKeyDown); + }; + }, [handleKeyDown, autoFocus, focusFirst]); + + // Update focusable elements on mount and when container changes + useEffect(() => { + updateFocusableElements(); + }, [updateFocusableElements]); + + return { + containerRef, + focusFirst, + focusLast, + focusNext, + focusPrevious, + updateFocusableElements, + getFocusableElements, + }; +}; + +// Hook for handling arrow key navigation in lists/grids +export const useArrowNavigation = (options = {}) => { + const { + direction = 'vertical', // 'vertical', 'horizontal', 'grid' + wrap = true, + onSelect, + disabled = false, + } = options; + + const listRef = useRef(null); + const currentIndex = useRef(0); + + const handleArrowNavigation = useCallback((event) => { + if (disabled) return; + + const { key } = event; + if (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) return; + + event.preventDefault(); + + const items = listRef.current?.querySelectorAll('[role="option"], [role="menuitem"], [role="gridcell"], .focusable-item'); + if (!items || items.length === 0) return; + + let newIndex = currentIndex.current; + + switch (key) { + case 'ArrowUp': + if (direction === 'vertical' || direction === 'grid') { + newIndex = newIndex > 0 ? newIndex - 1 : (wrap ? items.length - 1 : 0); + } + break; + + case 'ArrowDown': + if (direction === 'vertical' || direction === 'grid') { + newIndex = newIndex < items.length - 1 ? newIndex + 1 : (wrap ? 0 : items.length - 1); + } + break; + + case 'ArrowLeft': + if (direction === 'horizontal' || direction === 'grid') { + newIndex = newIndex > 0 ? newIndex - 1 : (wrap ? items.length - 1 : 0); + } + break; + + case 'ArrowRight': + if (direction === 'horizontal' || direction === 'grid') { + newIndex = newIndex < items.length - 1 ? newIndex + 1 : (wrap ? 0 : items.length - 1); + } + break; + + default: + return; + } + + currentIndex.current = newIndex; + items[newIndex]?.focus(); + + if (onSelect) { + onSelect(newIndex, items[newIndex]); + } + }, [direction, wrap, onSelect, disabled]); + + useEffect(() => { + const container = listRef.current; + if (!container) return; + + container.addEventListener('keydown', handleArrowNavigation); + return () => container.removeEventListener('keydown', handleArrowNavigation); + }, [handleArrowNavigation]); + + const setActiveIndex = useCallback((index) => { + currentIndex.current = index; + }, []); + + return { + listRef, + setActiveIndex, + currentIndex: currentIndex.current, + }; +}; + +// Hook for managing skip links +export const useSkipLinks = () => { + const skipLinksRef = useRef(null); + + const createSkipLink = useCallback((text, targetId) => { + const link = document.createElement('a'); + link.href = `#${targetId}`; + link.textContent = text; + link.className = 'skip-link'; + link.style.cssText = ` + position: absolute; + top: -40px; + left: 6px; + background: #000; + color: #fff; + padding: 8px; + text-decoration: none; + z-index: 10000; + border-radius: 4px; + font-size: 14px; + opacity: 0; + transition: opacity 0.3s; + `; + + link.addEventListener('focus', () => { + link.style.opacity = '1'; + link.style.top = '6px'; + }); + + link.addEventListener('blur', () => { + link.style.opacity = '0'; + link.style.top = '-40px'; + }); + + return link; + }, []); + + const addSkipLinks = useCallback((links) => { + const container = skipLinksRef.current || document.body; + + links.forEach(({ text, targetId }) => { + const skipLink = createSkipLink(text, targetId); + container.appendChild(skipLink); + }); + }, [createSkipLink]); + + return { + skipLinksRef, + addSkipLinks, + }; +}; \ No newline at end of file diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index 62ee48bfd8..93f3f9ff42 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -4,33 +4,118 @@ import styled from 'styled-components'; import { SurvivalRateChart, AverageHeightChart, CO2AbsorptionChart } from '../components/charts'; import { GlobalFilters } from '../components/filters'; import { ExportButtonComponent } from '../components/ui/ExportButton'; +import { mediaQueries, spacing, touchTarget } from '../utils/responsive'; const DashboardContainer = styled.div` min-height: 100vh; background-color: #f9fafb; + display: flex; + flex-direction: column; + + ${mediaQueries.desktop} { + flex-direction: row; + } `; const Header = styled.header` background: white; border-bottom: 1px solid #e5e7eb; - padding: 1rem 0; + padding: ${spacing.md}; + position: sticky; + top: 0; + z-index: 100; + + ${mediaQueries.desktop} { + display: none; + } +`; + +const MobileMenuButton = styled.button` + display: flex; + align-items: center; + justify-content: center; + width: ${touchTarget.comfortable}; + height: ${touchTarget.comfortable}; + background: none; + border: none; + cursor: pointer; + border-radius: 8px; + transition: background-color 0.2s ease; + + &:hover { + background-color: #f3f4f6; + } + + &:focus { + outline: 2px solid #007bff; + outline-offset: 2px; + } + + svg { + width: 24px; + height: 24px; + fill: #374151; + } + + ${mediaQueries.desktop} { + display: none; + } `; const Sidebar = styled.aside` background: white; border-right: 1px solid #e5e7eb; - width: 250px; + width: 100%; position: fixed; top: 0; left: 0; height: 100vh; overflow-y: auto; - z-index: 10; + z-index: 1000; + transform: translateX(-100%); + transition: transform 0.3s ease; + + ${({ isOpen }) => isOpen && ` + transform: translateX(0); + `} + + ${mediaQueries.desktop} { + width: 250px; + position: sticky; + top: 0; + transform: translateX(0); + z-index: 10; + } +`; + +const SidebarOverlay = styled.div` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + z-index: 999; + opacity: ${({ isOpen }) => isOpen ? 1 : 0}; + visibility: ${({ isOpen }) => isOpen ? 'visible' : 'hidden'}; + transition: opacity 0.3s ease, visibility 0.3s ease; + + ${mediaQueries.desktop} { + display: none; + } `; const MainContent = styled.main` - margin-left: 250px; - padding: 2rem; + flex: 1; + padding: ${spacing.md}; + + ${mediaQueries.tablet} { + padding: ${spacing.lg}; + } + + ${mediaQueries.desktop} { + padding: ${spacing.xl}; + } `; // Mock data for export @@ -48,11 +133,20 @@ const mockTreeData = [ export const DashboardPage = () => { const { user, logout, isAdmin } = useAuth(); const [filters, setFilters] = useState({}); + const [sidebarOpen, setSidebarOpen] = useState(false); const handleLogout = () => { logout(); }; + const toggleSidebar = () => { + setSidebarOpen(!sidebarOpen); + }; + + const closeSidebar = () => { + setSidebarOpen(false); + }; + const handleFiltersChange = useCallback((newFilters) => { setFilters(newFilters); // TODO: Update charts and data based on filters @@ -73,37 +167,63 @@ export const DashboardPage = () => { return ( - {/* Header */} + {/* Mobile Header */}
-
-
-
-

Nanwa Dashboard

-
-
-
- Welcome, {user?.name} - {isAdmin() && ( - - Admin - - )} -
- -
+
+
+ + + + + +

+ Nanwa Dashboard +

+
+
+ + Welcome, {user?.name} + {isAdmin() && ( + + Admin + + )} + +
+ {/* Sidebar Overlay */} + + {/* Sidebar */} - +
+ {/* Desktop Header */} +
+
+
+

+ Nanwa Dashboard +

+
+
+ + Welcome, {user?.firstName || user?.name} + {isAdmin() && ( + + Admin + + )} + + + +
+
+
+ {/* Main Content */}
diff --git a/frontend/src/pages/LoginPage.jsx b/frontend/src/pages/LoginPage.jsx index e19630e824..306f6ea8e2 100644 --- a/frontend/src/pages/LoginPage.jsx +++ b/frontend/src/pages/LoginPage.jsx @@ -2,6 +2,8 @@ import { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; import { Navbar } from '../components/ui/Navbar'; +import { useColdStartDetection } from '../hooks/useColdStartDetection'; +import { ColdStartLoader } from '../components/ui/ColdStartLoader'; export const LoginPage = () => { const [formData, setFormData] = useState({ @@ -14,6 +16,15 @@ export const LoginPage = () => { const { login } = useAuth(); const navigate = useNavigate(); + + const { + connectionState, + handleRetry, + startConnection, + connectionSuccess, + connectionFailed, + resetConnection + } = useColdStartDetection(); const validateForm = () => { const newErrors = {}; @@ -58,23 +69,38 @@ export const LoginPage = () => { } setIsSubmitting(true); + startConnection(); try { - const result = await login(formData.email, formData.password); + const result = await login(formData.email, formData.password, handleRetry); - if (!result.success) { + if (result.success) { + connectionSuccess(); + } else { + connectionFailed(new Error(result.error)); setErrors({ general: result.error }); } } catch (error) { - setErrors({ general: 'An unexpected error occurred. Please try again.' }); + connectionFailed(error); + setErrors({ general: 'Connection failed. Please check your internet connection and try again.' }); } finally { setIsSubmitting(false); } }; + const handleCancelConnection = () => { + resetConnection(); + setIsSubmitting(false); + }; + return ( <> +
From 5a3ca301780f45609d57c0de50c874475b76520c Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 13:16:00 +0300 Subject: [PATCH 021/111] Temporarily allow all CORS origins for testing --- backend/server.js | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/backend/server.js b/backend/server.js index 8bfbca0f79..fdbe3ae058 100644 --- a/backend/server.js +++ b/backend/server.js @@ -36,6 +36,7 @@ dotenv.config(); // MongoDB connection const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/nanwa-forestry"; +console.log('🔗 Connecting to MongoDB:', mongoUrl ? 'URL provided' : 'Using default localhost'); mongoose.connect(mongoUrl); mongoose.Promise = Promise; @@ -69,7 +70,7 @@ console.log('🔗 Allowed CORS origins:', allowedOrigins); // Socket.IO setup const io = new Server(server, { cors: { - origin: allowedOrigins, + origin: true, // Allow all origins temporarily methods: ["GET", "POST"], credentials: true }, @@ -103,18 +104,9 @@ io.on('connection', (socket) => { global.io = io; global.realtimeController = realtimeController; -// Middleware +// Middleware - Temporarily allow all origins for testing app.use(cors({ - origin: (origin, callback) => { - // Allow requests with no origin (like mobile apps or curl requests) - if (!origin) return callback(null, true); - - if (allowedOrigins.includes(origin)) { - callback(null, true); - } else { - callback(new Error('Not allowed by CORS')); - } - }, + origin: true, // Allow all origins temporarily credentials: true })); app.use(express.json({ limit: '10mb' })); From 3aadaa20218a49753e0ab0964b8e282cc7a4079a Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 13:29:15 +0300 Subject: [PATCH 022/111] Add debugging logs and health check endpoints --- backend/server.js | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/backend/server.js b/backend/server.js index fdbe3ae058..e5c1d2ea08 100644 --- a/backend/server.js +++ b/backend/server.js @@ -34,10 +34,24 @@ import { // Load environment variables dotenv.config(); +// Debug environment variables +console.log('🔧 Environment check:'); +console.log('- NODE_ENV:', process.env.NODE_ENV); +console.log('- PORT:', process.env.PORT); +console.log('- MONGO_URL:', process.env.MONGO_URL ? 'Set' : 'Missing'); +console.log('- JWT_SECRET:', process.env.JWT_SECRET ? 'Set' : 'Missing'); + // MongoDB connection const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/nanwa-forestry"; -console.log('🔗 Connecting to MongoDB:', mongoUrl ? 'URL provided' : 'Using default localhost'); -mongoose.connect(mongoUrl); +console.log('🔗 Connecting to MongoDB:', mongoUrl.includes('mongodb+srv') ? 'Atlas connection' : 'Local connection'); + +mongoose.connect(mongoUrl) + .then(() => console.log('✅ MongoDB connected successfully')) + .catch((err) => { + console.error('❌ MongoDB connection failed:', err.message); + process.exit(1); // Exit if MongoDB connection fails + }); + mongoose.Promise = Promise; // MongoDB connection events @@ -141,6 +155,24 @@ app.get("/health", (req, res) => { }); }); +// Health check endpoints +app.get('/', (req, res) => { + res.json({ + status: 'Server is running', + timestamp: new Date().toISOString(), + environment: process.env.NODE_ENV, + mongodb: mongoose.connection.readyState === 1 ? 'Connected' : 'Disconnected' + }); +}); + +app.get('/api', (req, res) => { + res.json({ + status: 'API is running', + timestamp: new Date().toISOString(), + mongodb: mongoose.connection.readyState === 1 ? 'Connected' : 'Disconnected' + }); +}); + // API Documentation app.use("/docs", docsRoutes); From b1e8fd0a874fd8b76fec02c199a92a1e97c128da Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 13:52:09 +0300 Subject: [PATCH 023/111] Add login debugging logs --- backend/controllers/authController.js | 9 +++++++++ backend/server.js | 12 ++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/backend/controllers/authController.js b/backend/controllers/authController.js index d9076f6fdd..0b842c22df 100644 --- a/backend/controllers/authController.js +++ b/backend/controllers/authController.js @@ -84,10 +84,14 @@ export const login = async (req, res) => { } const { email, password } = req.body; + console.log('🔐 Login attempt:', { email, password: '***' }); // Find user by email const user = await User.findByEmail(email); + console.log('👤 User found:', user ? 'Yes' : 'No'); + if (!user) { + console.log('❌ User not found in database'); return res.status(401).json({ success: false, message: 'Invalid email or password' @@ -96,6 +100,7 @@ export const login = async (req, res) => { // Check if account is active if (!user.isActive) { + console.log('❌ User account is deactivated'); return res.status(401).json({ success: false, message: 'Account is deactivated' @@ -103,8 +108,12 @@ export const login = async (req, res) => { } // Check password + console.log('🔒 Comparing password...'); const isPasswordValid = await user.comparePassword(password); + console.log('🔒 Password valid:', isPasswordValid); + if (!isPasswordValid) { + console.log('❌ Password comparison failed'); return res.status(401).json({ success: false, message: 'Invalid email or password' diff --git a/backend/server.js b/backend/server.js index e5c1d2ea08..3ad07654a7 100644 --- a/backend/server.js +++ b/backend/server.js @@ -45,11 +45,13 @@ console.log('- JWT_SECRET:', process.env.JWT_SECRET ? 'Set' : 'Missing'); const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/nanwa-forestry"; console.log('🔗 Connecting to MongoDB:', mongoUrl.includes('mongodb+srv') ? 'Atlas connection' : 'Local connection'); +// Don't crash the app if MongoDB fails initially - let it retry mongoose.connect(mongoUrl) .then(() => console.log('✅ MongoDB connected successfully')) .catch((err) => { console.error('❌ MongoDB connection failed:', err.message); - process.exit(1); // Exit if MongoDB connection fails + console.log('⚠️ Server will continue running but database operations will fail'); + // Don't exit - let the app start and show the error in health check }); mongoose.Promise = Promise; @@ -169,7 +171,13 @@ app.get('/api', (req, res) => { res.json({ status: 'API is running', timestamp: new Date().toISOString(), - mongodb: mongoose.connection.readyState === 1 ? 'Connected' : 'Disconnected' + mongodb: mongoose.connection.readyState === 1 ? 'Connected' : 'Disconnected', + environment: { + NODE_ENV: process.env.NODE_ENV, + MONGO_URL: process.env.MONGO_URL ? 'Set' : 'Missing', + JWT_SECRET: process.env.JWT_SECRET ? 'Set' : 'Missing', + PORT: process.env.PORT + } }); }); From 72eba8d732ae1613bbe9da73197717053eac349c Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 13:57:55 +0300 Subject: [PATCH 024/111] Removed rate limits for testing --- backend/routes/auth.js | 54 +++++++++++++++++++++++++++++++++++++++-- frontend/src/lib/api.js | 2 +- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/backend/routes/auth.js b/backend/routes/auth.js index 83a909ee45..8391428943 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -86,7 +86,7 @@ const router = express.Router(); * 429: * description: Too many requests */ -router.post('/register', authLimiter, validateRegister, register); +router.post('/register', validateRegister, register); // Temporarily removed authLimiter /** * @swagger @@ -135,7 +135,57 @@ router.post('/register', authLimiter, validateRegister, register); * 429: * description: Too many requests */ -router.post('/login', authLimiter, validateLogin, login); +router.post('/login', validateLogin, login); // Temporarily removed authLimiter + +// Temporary bypass endpoint for testing +router.post('/test-login', async (req, res) => { + try { + const { email, password } = req.body; + + // Hardcoded test credentials + if (email === 'admin@nanwa.com' && password === 'admin123') { + const token = 'test-jwt-token-admin'; + return res.json({ + success: true, + message: 'Login successful', + token, + user: { + _id: 'test-id', + email: 'admin@nanwa.com', + firstName: 'Admin', + lastName: 'User', + role: 'admin' + } + }); + } + + if (email === 'user@nanwa.com' && password === 'user123') { + const token = 'test-jwt-token-user'; + return res.json({ + success: true, + message: 'Login successful', + token, + user: { + _id: 'test-id-2', + email: 'user@nanwa.com', + firstName: 'Regular', + lastName: 'User', + role: 'user' + } + }); + } + + return res.status(401).json({ + success: false, + message: 'Invalid credentials' + }); + } catch (error) { + return res.status(500).json({ + success: false, + message: 'Server error' + }); + } +}); /** * @swagger diff --git a/frontend/src/lib/api.js b/frontend/src/lib/api.js index 4f8a69a310..0eb1e2af14 100644 --- a/frontend/src/lib/api.js +++ b/frontend/src/lib/api.js @@ -189,7 +189,7 @@ const apiClient = new ApiClient(); // Authentication API methods export const authAPI = { register: (userData, options = {}) => apiClient.post('/auth/register', userData, options), - login: (credentials, options = {}) => apiClient.post('/auth/login', credentials, options), + login: (credentials, options = {}) => apiClient.post('/auth/test-login', credentials, options), // Temporarily use test endpoint logout: () => apiClient.post('/auth/logout'), logoutAll: () => apiClient.post('/auth/logout-all'), refreshToken: () => apiClient.post('/auth/refresh'), From f6da0b7c66a624ee327de3200ef901cb8a1ebea5 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 14:31:10 +0300 Subject: [PATCH 025/111] Backend: Remove temporary auth fixes and restore production authentication MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove test-login endpoint bypass - Restore rate limiting on auth endpoints - Add debug endpoints for user verification - Add seed-users endpoint for production database setup - Enhanced debugging in login process 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- backend/controllers/authController.js | 12 +++ backend/models/User.js | 6 +- backend/routes/auth.js | 124 +++++++++++++++----------- 3 files changed, 90 insertions(+), 52 deletions(-) diff --git a/backend/controllers/authController.js b/backend/controllers/authController.js index 0b842c22df..012141ce6e 100644 --- a/backend/controllers/authController.js +++ b/backend/controllers/authController.js @@ -98,6 +98,16 @@ export const login = async (req, res) => { }); } + // Debug user data + console.log('📄 User data:', { + id: user._id, + email: user.email, + firstName: user.firstName, + role: user.role, + hashedPassword: user.password.substring(0, 10) + '...', + isActive: user.isActive + }); + // Check if account is active if (!user.isActive) { console.log('❌ User account is deactivated'); @@ -109,6 +119,8 @@ export const login = async (req, res) => { // Check password console.log('🔒 Comparing password...'); + console.log('🔒 Entered password:', password); + console.log('🔒 Stored hash starts with:', user.password.substring(0, 20)); const isPasswordValid = await user.comparePassword(password); console.log('🔒 Password valid:', isPasswordValid); diff --git a/backend/models/User.js b/backend/models/User.js index 8ccf097672..f5d113af45 100644 --- a/backend/models/User.js +++ b/backend/models/User.js @@ -72,7 +72,11 @@ userSchema.pre('save', function(next) { // Instance method to check password userSchema.methods.comparePassword = async function(candidatePassword) { - return bcrypt.compare(candidatePassword, this.password); + console.log('🔐 comparePassword called with:', candidatePassword); + console.log('🔐 Comparing against hash:', this.password); + const result = await bcrypt.compare(candidatePassword, this.password); + console.log('🔐 bcrypt.compare result:', result); + return result; }; // Instance method to get user info without password diff --git a/backend/routes/auth.js b/backend/routes/auth.js index 8391428943..817dd27bc7 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -86,7 +86,7 @@ const router = express.Router(); * 429: * description: Too many requests */ -router.post('/register', validateRegister, register); // Temporarily removed authLimiter +router.post('/register', authLimiter, validateRegister, register); /** * @swagger @@ -135,57 +135,8 @@ router.post('/register', validateRegister, register); // Temporarily removed aut * 429: * description: Too many requests */ -router.post('/login', validateLogin, login); // Temporarily removed authLimiter +router.post('/login', authLimiter, validateLogin, login); -// Temporary bypass endpoint for testing -router.post('/test-login', async (req, res) => { - try { - const { email, password } = req.body; - - // Hardcoded test credentials - if (email === 'admin@nanwa.com' && password === 'admin123') { - const token = 'test-jwt-token-admin'; - return res.json({ - success: true, - message: 'Login successful', - token, - user: { - _id: 'test-id', - email: 'admin@nanwa.com', - firstName: 'Admin', - lastName: 'User', - role: 'admin' - } - }); - } - - if (email === 'user@nanwa.com' && password === 'user123') { - const token = 'test-jwt-token-user'; - return res.json({ - success: true, - message: 'Login successful', - token, - user: { - _id: 'test-id-2', - email: 'user@nanwa.com', - firstName: 'Regular', - lastName: 'User', - role: 'user' - } - }); - } - - return res.status(401).json({ - success: false, - message: 'Invalid credentials' - }); - } catch (error) { - return res.status(500).json({ - success: false, - message: 'Server error' - }); - } -}); /** * @swagger @@ -338,4 +289,75 @@ router.put('/profile', authenticateToken, validateProfileUpdate, updateProfile); */ router.post('/logout-all', authenticateToken, logoutAll); +// Debug endpoint to check user existence (remove in production) +router.get('/debug-users', async (req, res) => { + try { + const { User } = await import('../models/index.js'); + const users = await User.find({}, { email: 1, firstName: 1, lastName: 1, role: 1, password: 1 }); + res.json({ + success: true, + users: users.map(user => ({ + email: user.email, + firstName: user.firstName, + lastName: user.lastName, + role: user.role, + passwordHash: user.password.substring(0, 20) + '...' + })) + }); + } catch (error) { + res.status(500).json({ + success: false, + message: 'Error fetching users', + error: error.message + }); + } +}); + +// Seed users endpoint (remove in production) +router.post('/seed-users', async (req, res) => { + try { + const { User } = await import('../models/index.js'); + + // Delete existing users + await User.deleteMany({}); + + // Create test users + const sampleUsers = [ + { + email: 'admin@nanwa.com', + password: 'admin123', + firstName: 'Admin', + lastName: 'User', + role: 'admin' + }, + { + email: 'user@nanwa.com', + password: 'user123', + firstName: 'Regular', + lastName: 'User', + role: 'user' + } + ]; + + const users = await User.create(sampleUsers); + + res.json({ + success: true, + message: 'Users seeded successfully', + users: users.map(user => ({ + email: user.email, + firstName: user.firstName, + lastName: user.lastName, + role: user.role + })) + }); + } catch (error) { + res.status(500).json({ + success: false, + message: 'Error seeding users', + error: error.message + }); + } +}); + export default router; \ No newline at end of file From 9cb76d0b7b9eeeeddb110567b158f9e774b732e7 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 14:31:28 +0300 Subject: [PATCH 026/111] Frontend: Update API to use proper authentication endpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Switch from test-login to proper /auth/login endpoint - Remove temporary authentication bypass 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- frontend/src/lib/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/lib/api.js b/frontend/src/lib/api.js index 0eb1e2af14..4f8a69a310 100644 --- a/frontend/src/lib/api.js +++ b/frontend/src/lib/api.js @@ -189,7 +189,7 @@ const apiClient = new ApiClient(); // Authentication API methods export const authAPI = { register: (userData, options = {}) => apiClient.post('/auth/register', userData, options), - login: (credentials, options = {}) => apiClient.post('/auth/test-login', credentials, options), // Temporarily use test endpoint + login: (credentials, options = {}) => apiClient.post('/auth/login', credentials, options), logout: () => apiClient.post('/auth/logout'), logoutAll: () => apiClient.post('/auth/logout-all'), refreshToken: () => apiClient.post('/auth/refresh'), From 2f0b1d545aebd354e6aa1305dbbc73f6414c6303 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 14:38:31 +0300 Subject: [PATCH 027/111] cleanup of backend --- backend/controllers/authController.js | 21 -------- backend/models/User.js | 6 +-- backend/routes/auth.js | 70 --------------------------- backend/server.js | 11 ++++- 4 files changed, 10 insertions(+), 98 deletions(-) diff --git a/backend/controllers/authController.js b/backend/controllers/authController.js index 012141ce6e..d9076f6fdd 100644 --- a/backend/controllers/authController.js +++ b/backend/controllers/authController.js @@ -84,33 +84,18 @@ export const login = async (req, res) => { } const { email, password } = req.body; - console.log('🔐 Login attempt:', { email, password: '***' }); // Find user by email const user = await User.findByEmail(email); - console.log('👤 User found:', user ? 'Yes' : 'No'); - if (!user) { - console.log('❌ User not found in database'); return res.status(401).json({ success: false, message: 'Invalid email or password' }); } - // Debug user data - console.log('📄 User data:', { - id: user._id, - email: user.email, - firstName: user.firstName, - role: user.role, - hashedPassword: user.password.substring(0, 10) + '...', - isActive: user.isActive - }); - // Check if account is active if (!user.isActive) { - console.log('❌ User account is deactivated'); return res.status(401).json({ success: false, message: 'Account is deactivated' @@ -118,14 +103,8 @@ export const login = async (req, res) => { } // Check password - console.log('🔒 Comparing password...'); - console.log('🔒 Entered password:', password); - console.log('🔒 Stored hash starts with:', user.password.substring(0, 20)); const isPasswordValid = await user.comparePassword(password); - console.log('🔒 Password valid:', isPasswordValid); - if (!isPasswordValid) { - console.log('❌ Password comparison failed'); return res.status(401).json({ success: false, message: 'Invalid email or password' diff --git a/backend/models/User.js b/backend/models/User.js index f5d113af45..8ccf097672 100644 --- a/backend/models/User.js +++ b/backend/models/User.js @@ -72,11 +72,7 @@ userSchema.pre('save', function(next) { // Instance method to check password userSchema.methods.comparePassword = async function(candidatePassword) { - console.log('🔐 comparePassword called with:', candidatePassword); - console.log('🔐 Comparing against hash:', this.password); - const result = await bcrypt.compare(candidatePassword, this.password); - console.log('🔐 bcrypt.compare result:', result); - return result; + return bcrypt.compare(candidatePassword, this.password); }; // Instance method to get user info without password diff --git a/backend/routes/auth.js b/backend/routes/auth.js index 817dd27bc7..57b5841cf0 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -289,75 +289,5 @@ router.put('/profile', authenticateToken, validateProfileUpdate, updateProfile); */ router.post('/logout-all', authenticateToken, logoutAll); -// Debug endpoint to check user existence (remove in production) -router.get('/debug-users', async (req, res) => { - try { - const { User } = await import('../models/index.js'); - const users = await User.find({}, { email: 1, firstName: 1, lastName: 1, role: 1, password: 1 }); - res.json({ - success: true, - users: users.map(user => ({ - email: user.email, - firstName: user.firstName, - lastName: user.lastName, - role: user.role, - passwordHash: user.password.substring(0, 20) + '...' - })) - }); - } catch (error) { - res.status(500).json({ - success: false, - message: 'Error fetching users', - error: error.message - }); - } -}); - -// Seed users endpoint (remove in production) -router.post('/seed-users', async (req, res) => { - try { - const { User } = await import('../models/index.js'); - - // Delete existing users - await User.deleteMany({}); - - // Create test users - const sampleUsers = [ - { - email: 'admin@nanwa.com', - password: 'admin123', - firstName: 'Admin', - lastName: 'User', - role: 'admin' - }, - { - email: 'user@nanwa.com', - password: 'user123', - firstName: 'Regular', - lastName: 'User', - role: 'user' - } - ]; - - const users = await User.create(sampleUsers); - - res.json({ - success: true, - message: 'Users seeded successfully', - users: users.map(user => ({ - email: user.email, - firstName: user.firstName, - lastName: user.lastName, - role: user.role - })) - }); - } catch (error) { - res.status(500).json({ - success: false, - message: 'Error seeding users', - error: error.message - }); - } -}); export default router; \ No newline at end of file diff --git a/backend/server.js b/backend/server.js index 3ad07654a7..7e1d452fff 100644 --- a/backend/server.js +++ b/backend/server.js @@ -120,9 +120,16 @@ io.on('connection', (socket) => { global.io = io; global.realtimeController = realtimeController; -// Middleware - Temporarily allow all origins for testing +// CORS configuration for production +const allowedOrigins = [ + "http://localhost:3000", + "http://localhost:5173", // Vite dev server + "https://entitree.netlify.app", + process.env.FRONTEND_URL +].filter(Boolean); + app.use(cors({ - origin: true, // Allow all origins temporarily + origin: allowedOrigins, credentials: true })); app.use(express.json({ limit: '10mb' })); From 2ebf8b0025867a2b1b5315eb9d4e805bb1bd3c69 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 14:49:46 +0300 Subject: [PATCH 028/111] fix auth for frontend --- frontend/src/contexts/AuthContext.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/contexts/AuthContext.jsx b/frontend/src/contexts/AuthContext.jsx index ac26bc2d82..472fc7aa0d 100644 --- a/frontend/src/contexts/AuthContext.jsx +++ b/frontend/src/contexts/AuthContext.jsx @@ -40,7 +40,7 @@ export const AuthProvider = ({ children }) => { // Make actual API call to backend with retry support const response = await authAPI.login({ email, password }, { onRetry }); - const { token, user: userData } = response; + const { token, user: userData } = response.data; // Store token and user data securely localStorage.setItem('authToken', token); @@ -68,7 +68,7 @@ export const AuthProvider = ({ children }) => { // Make actual API call to backend const response = await authAPI.register({ email, password }); - const { token, user: userData } = response; + const { token, user: userData } = response.data; localStorage.setItem('authToken', token); localStorage.setItem('userData', JSON.stringify(userData)); From d91b12aecf50e217f103df8c0b7449c512aa1cf2 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 15:22:33 +0300 Subject: [PATCH 029/111] fixed duplicate variable --- backend/server.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/backend/server.js b/backend/server.js index 7e1d452fff..0b1b8c0f06 100644 --- a/backend/server.js +++ b/backend/server.js @@ -121,13 +121,6 @@ global.io = io; global.realtimeController = realtimeController; // CORS configuration for production -const allowedOrigins = [ - "http://localhost:3000", - "http://localhost:5173", // Vite dev server - "https://entitree.netlify.app", - process.env.FRONTEND_URL -].filter(Boolean); - app.use(cors({ origin: allowedOrigins, credentials: true From eb8c3b0d61259da5b56bc1070aa6756b39ca583c Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 18:27:51 +0300 Subject: [PATCH 030/111] Fix error handling in cold start detection hook --- frontend/src/hooks/useColdStartDetection.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/hooks/useColdStartDetection.js b/frontend/src/hooks/useColdStartDetection.js index 61f8a07dc0..b919b1bde4 100644 --- a/frontend/src/hooks/useColdStartDetection.js +++ b/frontend/src/hooks/useColdStartDetection.js @@ -51,10 +51,11 @@ export const useColdStartDetection = () => { }, []); const connectionFailed = useCallback((error) => { + const errorMessage = error && typeof error === 'object' ? error.message || String(error) : String(error || 'Connection failed'); setConnectionState(prev => ({ ...prev, isConnecting: false, - error: error.message || 'Connection failed', + error: errorMessage, message: 'Connection failed. Please try again.' })); }, []); From d9eb341a13cd02dd8182b2ff349a74585171f295 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 21:26:47 +0300 Subject: [PATCH 031/111] fixed testing issue with login --- frontend/src/lib/api.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/api.js b/frontend/src/lib/api.js index 4f8a69a310..94bebe988e 100644 --- a/frontend/src/lib/api.js +++ b/frontend/src/lib/api.js @@ -99,7 +99,10 @@ class ApiClient { return await response.json(); } catch (error) { if (error.name === 'AbortError') { - error.message = 'Request timeout'; + const timeoutError = new Error('Request timeout'); + timeoutError.name = 'AbortError'; + timeoutError.status = 408; + error = timeoutError; } // Check if this is a cold start error and if we should retry From c36e9ba660ce43585e17742d660d2686559cb3a4 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 21:32:34 +0300 Subject: [PATCH 032/111] fixed UI bug in the dashboard --- frontend/src/pages/DashboardPage.jsx | 80 ++++++++++------------------ 1 file changed, 27 insertions(+), 53 deletions(-) diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index a6824696de..0d518023a4 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -53,15 +53,15 @@ export const DashboardPage = () => { }; return ( -
- {/* Mobile Header */} -
+
+ {/* Top Header - Always visible */} +
- Welcome, {user?.name} + Welcome, {user?.firstName || user?.name} {isAdmin() && ( Admin @@ -83,29 +83,34 @@ export const DashboardPage = () => {
- {/* Sidebar Overlay */} -
-
+ +
); }; \ No newline at end of file From 9a2083c02ca8c73c8c172551f8ed388d774884cc Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Tue, 15 Jul 2025 21:36:47 +0300 Subject: [PATCH 033/111] UI cleanup --- frontend/src/pages/DashboardPage.jsx | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index 0d518023a4..4f0b38bf01 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -108,7 +108,7 @@ export const DashboardPage = () => { {/* Sidebar */} @@ -183,7 +170,6 @@ export const DashboardPage = () => {

- Date: Tue, 15 Jul 2025 21:38:20 +0300 Subject: [PATCH 034/111] updated gitignore --- .gitignore | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/.gitignore b/.gitignore index cf8c2d4d0d..df6605d1a7 100644 --- a/.gitignore +++ b/.gitignore @@ -14,19 +14,4 @@ yarn-error.log* package-lock.json -.AI_context -Frontend_prd -frontend_tasklist.txt -.cursor -.claude -.env.example -.eslintrc.json -.prettierrc.json -.prettierignore -.prettierignore -CLAUDE.md -.cursor/rules/frontend-assumptions.mdc -.cursor/rules/frontend-assumptions.md -.cursor/rules/frontend-assumptions.txt -.cursor/rules/frontend-assumptions.txt \ No newline at end of file From d8e5595282666d586a7cf6d5d15b531024932b6b Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Wed, 16 Jul 2025 12:11:23 +0300 Subject: [PATCH 035/111] backend: refactored config files --- backend/config/swagger.js | 291 +---------------------- backend/config/swagger/info.js | 12 + backend/config/swagger/schemas/common.js | 46 ++++ backend/config/swagger/schemas/forest.js | 76 ++++++ backend/config/swagger/schemas/index.js | 12 + backend/config/swagger/schemas/tree.js | 69 ++++++ backend/config/swagger/schemas/user.js | 51 ++++ backend/config/swagger/security.js | 13 + backend/config/swagger/servers.js | 14 ++ 9 files changed, 302 insertions(+), 282 deletions(-) create mode 100644 backend/config/swagger/info.js create mode 100644 backend/config/swagger/schemas/common.js create mode 100644 backend/config/swagger/schemas/forest.js create mode 100644 backend/config/swagger/schemas/index.js create mode 100644 backend/config/swagger/schemas/tree.js create mode 100644 backend/config/swagger/schemas/user.js create mode 100644 backend/config/swagger/security.js create mode 100644 backend/config/swagger/servers.js diff --git a/backend/config/swagger.js b/backend/config/swagger.js index 8ffee8c4df..42137702f7 100644 --- a/backend/config/swagger.js +++ b/backend/config/swagger.js @@ -1,292 +1,19 @@ import swaggerJSDoc from 'swagger-jsdoc'; +import { info } from './swagger/info.js'; +import { servers } from './swagger/servers.js'; +import { securitySchemes, security } from './swagger/security.js'; +import { schemas } from './swagger/schemas/index.js'; const options = { definition: { openapi: '3.0.0', - info: { - title: 'Nanwa Forestry API', - version: '1.0.0', - description: 'A comprehensive API for forest and tree management, monitoring, and data visualization', - contact: { - name: 'API Support', - email: 'support@nanwa-forestry.com' - }, - license: { - name: 'MIT', - url: 'https://opensource.org/licenses/MIT' - } - }, - servers: [ - { - url: 'http://localhost:8080/api', - description: 'Development server' - }, - { - url: 'https://api-staging.nanwa-forestry.com/api', - description: 'Staging server' - }, - { - url: 'https://api.nanwa-forestry.com/api', - description: 'Production server' - } - ], + info, + servers, components: { - securitySchemes: { - bearerAuth: { - type: 'http', - scheme: 'bearer', - bearerFormat: 'JWT' - } - }, - schemas: { - User: { - type: 'object', - required: ['firstName', 'lastName', 'email', 'password'], - properties: { - _id: { - type: 'string', - description: 'User ID' - }, - firstName: { - type: 'string', - maxLength: 50, - description: 'User first name' - }, - lastName: { - type: 'string', - maxLength: 50, - description: 'User last name' - }, - email: { - type: 'string', - format: 'email', - description: 'User email address' - }, - role: { - type: 'string', - enum: ['user', 'admin'], - default: 'user', - description: 'User role' - }, - isActive: { - type: 'boolean', - default: true, - description: 'Whether user account is active' - }, - lastLogin: { - type: 'string', - format: 'date-time', - description: 'Last login timestamp' - }, - createdAt: { - type: 'string', - format: 'date-time', - description: 'Account creation timestamp' - }, - updatedAt: { - type: 'string', - format: 'date-time', - description: 'Account last update timestamp' - } - } - }, - Forest: { - type: 'object', - required: ['name', 'region', 'location', 'area', 'establishedDate'], - properties: { - _id: { - type: 'string', - description: 'Forest ID' - }, - name: { - type: 'string', - maxLength: 100, - description: 'Forest name' - }, - region: { - type: 'string', - maxLength: 100, - description: 'Geographic region' - }, - location: { - type: 'object', - description: 'GeoJSON Point location', - properties: { - type: { - type: 'string', - enum: ['Point'] - }, - coordinates: { - type: 'array', - items: { - type: 'number' - }, - minItems: 2, - maxItems: 2, - description: '[longitude, latitude]' - } - } - }, - area: { - type: 'number', - minimum: 0, - description: 'Forest area' - }, - areaUnit: { - type: 'string', - enum: ['hectares', 'acres', 'sq_km', 'sq_miles'], - default: 'hectares', - description: 'Unit of area measurement' - }, - establishedDate: { - type: 'string', - format: 'date', - description: 'Date forest was established' - }, - description: { - type: 'string', - maxLength: 500, - description: 'Forest description' - }, - isActive: { - type: 'boolean', - default: true, - description: 'Whether forest is active' - }, - metadata: { - type: 'object', - properties: { - soilType: { type: 'string' }, - climate: { type: 'string' }, - elevation: { type: 'number' }, - avgRainfall: { type: 'number' }, - avgTemperature: { type: 'number' } - }, - description: 'Additional forest metadata' - } - } - }, - Tree: { - type: 'object', - required: ['forestId', 'species', 'plantedDate', 'location'], - properties: { - _id: { - type: 'string', - description: 'Tree ID' - }, - forestId: { - type: 'string', - description: 'ID of the forest this tree belongs to' - }, - species: { - type: 'string', - description: 'Tree species' - }, - plantedDate: { - type: 'string', - format: 'date', - description: 'Date tree was planted' - }, - location: { - type: 'object', - description: 'GeoJSON Point location', - properties: { - type: { - type: 'string', - enum: ['Point'] - }, - coordinates: { - type: 'array', - items: { - type: 'number' - }, - minItems: 2, - maxItems: 2 - } - } - }, - isAlive: { - type: 'boolean', - default: true, - description: 'Whether tree is alive' - }, - measurements: { - type: 'array', - items: { - type: 'object', - properties: { - height: { type: 'number', description: 'Height in meters' }, - diameter: { type: 'number', description: 'Diameter in meters' }, - healthStatus: { - type: 'string', - enum: ['healthy', 'stressed', 'diseased', 'dead'], - description: 'Tree health status' - }, - co2Absorption: { type: 'number', description: 'CO2 absorption in kg' }, - measuredAt: { - type: 'string', - format: 'date-time', - description: 'Measurement timestamp' - }, - notes: { type: 'string', description: 'Additional notes' } - } - }, - description: 'Tree measurements over time' - } - } - }, - Error: { - type: 'object', - properties: { - success: { - type: 'boolean', - example: false - }, - message: { - type: 'string', - description: 'Error message' - }, - error: { - type: 'string', - description: 'Detailed error information (development only)' - }, - errors: { - type: 'array', - items: { - type: 'object', - properties: { - field: { type: 'string' }, - message: { type: 'string' } - } - }, - description: 'Validation errors' - } - } - }, - SuccessResponse: { - type: 'object', - properties: { - success: { - type: 'boolean', - example: true - }, - message: { - type: 'string', - description: 'Success message' - }, - data: { - type: 'object', - description: 'Response data' - } - } - } - } + securitySchemes, + schemas }, - security: [ - { - bearerAuth: [] - } - ] + security }, apis: [ './routes/*.js', diff --git a/backend/config/swagger/info.js b/backend/config/swagger/info.js new file mode 100644 index 0000000000..cc0f79029c --- /dev/null +++ b/backend/config/swagger/info.js @@ -0,0 +1,12 @@ +export const info = { + title: 'Nanwa Forestry API', + version: '0.1.0', + description: 'An experimental API for forest and tree management - Educational project for learning purposes', + contact: { + name: 'Educational Project' + }, + license: { + name: 'MIT', + url: 'https://opensource.org/licenses/MIT' + } +}; \ No newline at end of file diff --git a/backend/config/swagger/schemas/common.js b/backend/config/swagger/schemas/common.js new file mode 100644 index 0000000000..706167fab7 --- /dev/null +++ b/backend/config/swagger/schemas/common.js @@ -0,0 +1,46 @@ +export const errorSchema = { + type: 'object', + properties: { + success: { + type: 'boolean', + example: false + }, + message: { + type: 'string', + description: 'Error message' + }, + error: { + type: 'string', + description: 'Detailed error information (development only)' + }, + errors: { + type: 'array', + items: { + type: 'object', + properties: { + field: { type: 'string' }, + message: { type: 'string' } + } + }, + description: 'Validation errors' + } + } +}; + +export const successResponseSchema = { + type: 'object', + properties: { + success: { + type: 'boolean', + example: true + }, + message: { + type: 'string', + description: 'Success message' + }, + data: { + type: 'object', + description: 'Response data' + } + } +}; \ No newline at end of file diff --git a/backend/config/swagger/schemas/forest.js b/backend/config/swagger/schemas/forest.js new file mode 100644 index 0000000000..6ceddfc4bd --- /dev/null +++ b/backend/config/swagger/schemas/forest.js @@ -0,0 +1,76 @@ +export const forestSchema = { + type: 'object', + required: ['name', 'region', 'location', 'area', 'establishedDate'], + properties: { + _id: { + type: 'string', + description: 'Forest ID' + }, + name: { + type: 'string', + maxLength: 100, + description: 'Forest name' + }, + region: { + type: 'string', + maxLength: 100, + description: 'Geographic region' + }, + location: { + type: 'object', + description: 'GeoJSON Point location', + properties: { + type: { + type: 'string', + enum: ['Point'] + }, + coordinates: { + type: 'array', + items: { + type: 'number' + }, + minItems: 2, + maxItems: 2, + description: '[longitude, latitude]' + } + } + }, + area: { + type: 'number', + minimum: 0, + description: 'Forest area' + }, + areaUnit: { + type: 'string', + enum: ['hectares', 'acres', 'sq_km', 'sq_miles'], + default: 'hectares', + description: 'Unit of area measurement' + }, + establishedDate: { + type: 'string', + format: 'date', + description: 'Date forest was established' + }, + description: { + type: 'string', + maxLength: 500, + description: 'Forest description' + }, + isActive: { + type: 'boolean', + default: true, + description: 'Whether forest is active' + }, + metadata: { + type: 'object', + properties: { + soilType: { type: 'string' }, + climate: { type: 'string' }, + elevation: { type: 'number' }, + avgRainfall: { type: 'number' }, + avgTemperature: { type: 'number' } + }, + description: 'Additional forest metadata' + } + } +}; \ No newline at end of file diff --git a/backend/config/swagger/schemas/index.js b/backend/config/swagger/schemas/index.js new file mode 100644 index 0000000000..410d35e755 --- /dev/null +++ b/backend/config/swagger/schemas/index.js @@ -0,0 +1,12 @@ +import { userSchema } from './user.js'; +import { forestSchema } from './forest.js'; +import { treeSchema } from './tree.js'; +import { errorSchema, successResponseSchema } from './common.js'; + +export const schemas = { + User: userSchema, + Forest: forestSchema, + Tree: treeSchema, + Error: errorSchema, + SuccessResponse: successResponseSchema +}; \ No newline at end of file diff --git a/backend/config/swagger/schemas/tree.js b/backend/config/swagger/schemas/tree.js new file mode 100644 index 0000000000..9113e3a30c --- /dev/null +++ b/backend/config/swagger/schemas/tree.js @@ -0,0 +1,69 @@ +export const treeSchema = { + type: 'object', + required: ['forestId', 'species', 'plantedDate', 'location'], + properties: { + _id: { + type: 'string', + description: 'Tree ID' + }, + forestId: { + type: 'string', + description: 'ID of the forest this tree belongs to' + }, + species: { + type: 'string', + description: 'Tree species' + }, + plantedDate: { + type: 'string', + format: 'date', + description: 'Date tree was planted' + }, + location: { + type: 'object', + description: 'GeoJSON Point location', + properties: { + type: { + type: 'string', + enum: ['Point'] + }, + coordinates: { + type: 'array', + items: { + type: 'number' + }, + minItems: 2, + maxItems: 2 + } + } + }, + isAlive: { + type: 'boolean', + default: true, + description: 'Whether tree is alive' + }, + measurements: { + type: 'array', + items: { + type: 'object', + properties: { + height: { type: 'number', description: 'Height in meters' }, + diameter: { type: 'number', description: 'Diameter in meters' }, + healthStatus: { + type: 'string', + enum: ['healthy', 'stressed', 'diseased', 'dead'], + description: 'Tree health status' + }, + co2Absorption: { type: 'number', description: 'CO2 absorption in kg' }, + measuredAt: { + type: 'string', + format: 'date-time', + description: 'Measurement timestamp' + }, + notes: { type: 'string', description: 'Additional notes' } + } + }, + description: 'Tree measurements over time' + } + } +}; \ No newline at end of file diff --git a/backend/config/swagger/schemas/user.js b/backend/config/swagger/schemas/user.js new file mode 100644 index 0000000000..ea7a1f1e54 --- /dev/null +++ b/backend/config/swagger/schemas/user.js @@ -0,0 +1,51 @@ +export const userSchema = { + type: 'object', + required: ['firstName', 'lastName', 'email', 'password'], + properties: { + _id: { + type: 'string', + description: 'User ID' + }, + firstName: { + type: 'string', + maxLength: 50, + description: 'User first name' + }, + lastName: { + type: 'string', + maxLength: 50, + description: 'User last name' + }, + email: { + type: 'string', + format: 'email', + description: 'User email address' + }, + role: { + type: 'string', + enum: ['user', 'admin'], + default: 'user', + description: 'User role' + }, + isActive: { + type: 'boolean', + default: true, + description: 'Whether user account is active' + }, + lastLogin: { + type: 'string', + format: 'date-time', + description: 'Last login timestamp' + }, + createdAt: { + type: 'string', + format: 'date-time', + description: 'Account creation timestamp' + }, + updatedAt: { + type: 'string', + format: 'date-time', + description: 'Account last update timestamp' + } + } +}; \ No newline at end of file diff --git a/backend/config/swagger/security.js b/backend/config/swagger/security.js new file mode 100644 index 0000000000..dc2d6669ac --- /dev/null +++ b/backend/config/swagger/security.js @@ -0,0 +1,13 @@ +export const securitySchemes = { + bearerAuth: { + type: 'http', + scheme: 'bearer', + bearerFormat: 'JWT' + } +}; + +export const security = [ + { + bearerAuth: [] + } +]; \ No newline at end of file diff --git a/backend/config/swagger/servers.js b/backend/config/swagger/servers.js new file mode 100644 index 0000000000..e8e65c3484 --- /dev/null +++ b/backend/config/swagger/servers.js @@ -0,0 +1,14 @@ +export const servers = [ + { + url: 'http://localhost:8080/api', + description: 'Development server' + }, + { + url: 'https://api-staging.nanwa-forestry.com/api', + description: 'Staging server' + }, + { + url: 'https://api.nanwa-forestry.com/api', + description: 'Production server' + } +]; \ No newline at end of file From d7b76709a7dbd80b798575afcdf42714472a9dfe Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 00:57:32 +0300 Subject: [PATCH 036/111] complete refactor of frontend components --- frontend/.env.example | 17 - frontend/dist/assets/AdminPage-Bc5ol_Rn.js | 102 ++++ .../dist/assets/ChartComponents-BrntlwBm.js | 53 ++ .../dist/assets/DarkModeToggle-sLchHfDj.js | 1 + .../dist/assets/DashboardPage-BnZglKQh.js | 69 +++ frontend/dist/assets/ErrorPages-D4z_BlyV.js | 1 + frontend/dist/assets/ExportButton-Y3IlBTFt.js | 215 ++++++++ .../dist/assets/FilterHeader-DdjxYr1F.css | 1 + frontend/dist/assets/FilterHeader-DzCm_NrU.js | 276 ++++++++++ frontend/dist/assets/FormElements-5NQybTAT.js | 159 ++++++ frontend/dist/assets/IconButton-DIc-CK1Q.js | 1 + frontend/dist/assets/LandingPage-QWDx4awI.js | 1 + frontend/dist/assets/LoginPage-Ckb0MyS_.js | 1 + frontend/dist/assets/MapPage-25t4MxmA.css | 1 + frontend/dist/assets/MapPage-CWavP_xM.js | 119 ++++ frontend/dist/assets/MapSidebar-yNxbJbqT.js | 194 +++++++ frontend/dist/assets/Navbar-DOE0P8dm.js | 1 + .../dist/assets/PasswordInput-dcNbels6.js | 1 + frontend/dist/assets/RegisterPage-C1DYj1NC.js | 27 + frontend/dist/assets/Table-BCdM5JW5.js | 69 +++ .../dist/assets/TreeDetailLayout-CKxWzGm5.js | 187 +++++++ .../dist/assets/TreeDetailPage-D6Enxj1V.js | 8 + frontend/dist/assets/index-BDpfdlnl.css | 1 + frontend/dist/assets/index-BJRqtcJi.css | 1 - frontend/dist/assets/index-CGuCVMO8.js | 113 ---- frontend/dist/assets/index-DJ39NcK9.js | 189 +++++++ .../assets/useKeyboardNavigation-C5b08Ak3.js | 1 + frontend/dist/index.html | 8 +- frontend/dist/tree.png | Bin 0 -> 80363 bytes frontend/src/components/KeepAliveProvider.jsx | 4 +- frontend/src/components/admin/AdminHeader.jsx | 110 ++++ .../src/components/admin/AdminPageLayout.jsx | 54 ++ frontend/src/components/admin/AdminStats.jsx | 77 +++ .../src/components/admin/AuditLogFilters.jsx | 30 + .../src/components/admin/AuditLogTable.jsx | 511 ++---------------- .../components/admin/AuditLogTableBody.jsx | 105 ++++ frontend/src/components/admin/StatCard.jsx | 59 ++ frontend/src/components/admin/index.js | 8 + .../src/components/auth/DemoCredentials.jsx | 11 + frontend/src/components/auth/LoginForm.jsx | 163 ++++++ .../auth/PasswordStrengthIndicator.jsx | 59 ++ .../src/components/auth/ProtectedRoute.jsx | 17 +- frontend/src/components/auth/RegisterForm.jsx | 146 +++++ frontend/src/components/auth/index.js | 6 + .../components/charts/AverageHeightChart.jsx | 95 +--- .../components/charts/CO2AbsorptionChart.jsx | 91 +--- .../components/charts/SurvivalRateChart.jsx | 87 +-- frontend/src/components/charts/index.js | 13 +- frontend/src/components/filters/DateInput.jsx | 32 ++ .../components/filters/DateRangePicker.jsx | 208 ++----- .../filters/DateRangePicker.styles.js | 93 ++++ .../src/components/filters/FilterErrors.jsx | 21 + .../src/components/filters/FilterHeader.jsx | 60 ++ .../src/components/filters/GlobalFilters.jsx | 75 +-- frontend/src/components/filters/index.js | 8 +- frontend/src/components/map/ClusterIcon.jsx | 39 ++ frontend/src/components/map/ForestMap.jsx | 321 +---------- .../src/components/map/ForestMap.styles.js | 85 +++ frontend/src/components/map/MapController.jsx | 23 + frontend/src/components/map/MapHeader.jsx | 25 + frontend/src/components/map/MapLegend.jsx | 32 ++ .../src/components/map/MapLoadingHandler.jsx | 37 ++ frontend/src/components/map/MarkerCluster.jsx | 73 +++ frontend/src/components/map/TreeIcon.jsx | 35 ++ frontend/src/components/map/TreePopup.jsx | 55 ++ frontend/src/components/map/index.js | 14 + frontend/src/components/ui/AboutSection.jsx | 31 ++ frontend/src/components/ui/ActionBadge.jsx | 31 ++ frontend/src/components/ui/BackIcon.jsx | 21 + frontend/src/components/ui/Button.jsx | 31 +- frontend/src/components/ui/ButtonGroup.jsx | 40 ++ .../src/components/ui/ChartComponents.jsx | 123 +++++ frontend/src/components/ui/CloseIcon.jsx | 21 + frontend/src/components/ui/DarkModeToggle.jsx | 70 +-- .../src/components/ui/DashboardHeader.jsx | 52 ++ .../src/components/ui/DashboardSidebar.jsx | 68 +++ .../src/components/ui/DashboardStatCard.jsx | 22 + frontend/src/components/ui/ErrorActions.jsx | 19 + frontend/src/components/ui/ErrorBoundary.jsx | 206 ++----- frontend/src/components/ui/ErrorCard.jsx | 64 +++ .../src/components/ui/ErrorPageContainer.jsx | 90 +++ .../components/ui/ErrorPageIllustrations.jsx | 28 + .../src/components/ui/ErrorPageLayout.jsx | 66 +++ frontend/src/components/ui/ExportButton.jsx | 9 +- frontend/src/components/ui/FeatureCard.jsx | 13 + .../src/components/ui/FeaturesSection.jsx | 60 ++ frontend/src/components/ui/Footer.jsx | 45 ++ .../components/ui/ForestOverviewSection.jsx | 46 ++ frontend/src/components/ui/FormElements.jsx | 141 +++++ frontend/src/components/ui/FormField.jsx | 26 + frontend/src/components/ui/HealthBadge.jsx | 27 + frontend/src/components/ui/HeroSection.jsx | 39 ++ frontend/src/components/ui/HomeIcon.jsx | 27 + frontend/src/components/ui/IconButton.jsx | 35 ++ frontend/src/components/ui/ImageGallery.jsx | 52 ++ frontend/src/components/ui/InfoCard.jsx | 52 ++ frontend/src/components/ui/LoadingButton.jsx | 23 + frontend/src/components/ui/LoadingSpinner.jsx | 23 +- frontend/src/components/ui/Logo.jsx | 13 + frontend/src/components/ui/MapPageHeader.jsx | 46 ++ .../components/ui/MapPageHeaderSection.jsx | 26 + frontend/src/components/ui/MapSidebar.jsx | 67 +++ frontend/src/components/ui/MenuIcon.jsx | 21 + .../src/components/ui/MobileMenuDropdown.jsx | 12 + frontend/src/components/ui/Modal.jsx | 99 ++++ frontend/src/components/ui/MoonIcon.jsx | 21 + frontend/src/components/ui/NavMenuItems.jsx | 27 + frontend/src/components/ui/Navbar.jsx | 60 +- frontend/src/components/ui/PageNumbers.jsx | 43 ++ frontend/src/components/ui/Pagination.jsx | 99 ++++ frontend/src/components/ui/PaginationInfo.jsx | 16 + frontend/src/components/ui/PasswordInput.jsx | 67 +++ frontend/src/components/ui/RefreshIcon.jsx | 39 ++ frontend/src/components/ui/SearchIcon.jsx | 29 + frontend/src/components/ui/ServerIcon.jsx | 58 ++ frontend/src/components/ui/Spinner.jsx | 36 ++ frontend/src/components/ui/StatsGrid.jsx | 25 + frontend/src/components/ui/SunIcon.jsx | 21 + frontend/src/components/ui/Table.jsx | 133 +++++ frontend/src/components/ui/Toast.jsx | 233 +------- frontend/src/components/ui/Toast.styles.js | 119 ++++ frontend/src/components/ui/ToastIcon.jsx | 62 +++ .../src/components/ui/TreeActionButtons.jsx | 70 +++ frontend/src/components/ui/TreeBasicInfo.jsx | 22 + .../src/components/ui/TreeDetailHeader.jsx | 120 ++++ frontend/src/components/ui/TreeDetailInfo.jsx | 70 +++ .../src/components/ui/TreeDetailLayout.jsx | 50 ++ .../components/ui/TreeDetailMeasurements.jsx | 79 +++ .../src/components/ui/TreeDetailModal.jsx | 451 ++-------------- .../src/components/ui/TreeDetailSidebar.jsx | 84 +++ .../src/components/ui/TreeLocationInfo.jsx | 23 + .../components/ui/TreeMeasurementHistory.jsx | 54 ++ frontend/src/components/ui/index.js | 98 ++++ frontend/src/constants/auditLogConstants.js | 18 + frontend/src/constants/keepAliveConstants.js | 7 + frontend/src/constants/mapConstants.js | 41 ++ frontend/src/constants/toastTheme.js | 28 + frontend/src/hooks/useAuditLogs.js | 179 ++++++ frontend/src/hooks/useChartConfig.js | 40 ++ frontend/src/hooks/useDateRange.js | 64 +++ frontend/src/hooks/useErrorPageNavigation.js | 23 + frontend/src/hooks/useErrorReporting.js | 34 ++ frontend/src/hooks/useFilterParams.js | 79 +++ frontend/src/hooks/useFormValidation.js | 60 ++ frontend/src/hooks/useKeepAlive.js | 40 +- frontend/src/hooks/useLogin.js | 59 ++ frontend/src/hooks/useMapControls.js | 87 +++ frontend/src/hooks/useMapFilters.js | 21 + frontend/src/hooks/usePagination.js | 29 + frontend/src/hooks/usePasswordStrength.js | 23 + frontend/src/hooks/usePerformanceMetrics.js | 33 ++ frontend/src/hooks/useProtectedRoute.js | 16 + frontend/src/hooks/useRegisterForm.js | 94 ++++ frontend/src/hooks/useSidebarState.js | 24 + frontend/src/hooks/useToastTimer.js | 20 + frontend/src/hooks/useTreeDetail.js | 72 +++ frontend/src/hooks/useTreeFiltering.js | 31 ++ frontend/src/hooks/useTreeMeasurements.js | 27 + frontend/src/hooks/useTreeNavigation.js | 34 ++ frontend/src/hooks/useTreeSelection.js | 29 + frontend/src/hooks/useTreeShare.js | 20 + frontend/src/lib/api.js | 273 +--------- frontend/src/lib/config/apiConfig.js | 22 + frontend/src/lib/core/ApiClient.js | 128 +++++ frontend/src/lib/services/authService.js | 14 + frontend/src/lib/services/dashboardService.js | 15 + frontend/src/lib/services/dataService.js | 23 + frontend/src/lib/services/forestService.js | 13 + frontend/src/lib/services/index.js | 6 + frontend/src/lib/services/treeService.js | 16 + frontend/src/lib/store.js | 115 +--- frontend/src/lib/stores/authStore.js | 48 ++ frontend/src/lib/stores/dataStore.js | 50 ++ frontend/src/lib/stores/filtersStore.js | 40 ++ frontend/src/lib/stores/index.js | 5 + frontend/src/lib/stores/storeUtils.js | 74 +++ frontend/src/lib/stores/uiStore.js | 35 ++ frontend/src/lib/utils.js | 32 ++ frontend/src/lib/utils/apiUtils.js | 125 +++++ frontend/src/main.jsx | 59 +- frontend/src/pages/AdminPage.jsx | 227 +------- frontend/src/pages/DashboardPage.jsx | 263 ++------- frontend/src/pages/ErrorPages.jsx | 254 +-------- frontend/src/pages/LandingPage.jsx | 182 +------ frontend/src/pages/LoginPage.jsx | 254 +-------- frontend/src/pages/MapPage.jsx | 158 +----- frontend/src/pages/RegisterPage.jsx | 337 +----------- frontend/src/pages/TreeDetailPage.jsx | 504 ++--------------- frontend/src/test/setup.js | 33 +- frontend/src/test/utils/globalMocks.js | 60 ++ frontend/src/test/utils/index.js | 7 + frontend/src/test/utils/testHelpers.js | 87 +++ frontend/src/utils/coreWebVitals.js | 123 +++++ frontend/src/utils/dateUtils.js | 56 ++ frontend/src/utils/filterValidation.js | 113 ++++ frontend/src/utils/mapIcons.js | 4 + frontend/src/utils/performance.js | 335 ++---------- frontend/src/utils/performanceRatings.js | 59 ++ frontend/src/utils/performanceReporting.js | 123 +++++ frontend/src/utils/resourceMonitor.js | 101 ++++ frontend/src/utils/responsive.js | 268 +-------- .../src/utils/responsive/accessibility.js | 33 ++ frontend/src/utils/responsive/breakpoints.js | 33 ++ frontend/src/utils/responsive/helpers.js | 25 + frontend/src/utils/responsive/index.js | 39 ++ frontend/src/utils/responsive/mixins.js | 64 +++ frontend/src/utils/responsive/print.js | 34 ++ frontend/src/utils/responsive/spacing.js | 46 ++ frontend/src/utils/responsive/typography.js | 30 + frontend/src/utils/sortUtils.js | 100 ++++ frontend/vite.config.js | 1 + 211 files changed, 9876 insertions(+), 5195 deletions(-) delete mode 100644 frontend/.env.example create mode 100644 frontend/dist/assets/AdminPage-Bc5ol_Rn.js create mode 100644 frontend/dist/assets/ChartComponents-BrntlwBm.js create mode 100644 frontend/dist/assets/DarkModeToggle-sLchHfDj.js create mode 100644 frontend/dist/assets/DashboardPage-BnZglKQh.js create mode 100644 frontend/dist/assets/ErrorPages-D4z_BlyV.js create mode 100644 frontend/dist/assets/ExportButton-Y3IlBTFt.js create mode 100644 frontend/dist/assets/FilterHeader-DdjxYr1F.css create mode 100644 frontend/dist/assets/FilterHeader-DzCm_NrU.js create mode 100644 frontend/dist/assets/FormElements-5NQybTAT.js create mode 100644 frontend/dist/assets/IconButton-DIc-CK1Q.js create mode 100644 frontend/dist/assets/LandingPage-QWDx4awI.js create mode 100644 frontend/dist/assets/LoginPage-Ckb0MyS_.js create mode 100644 frontend/dist/assets/MapPage-25t4MxmA.css create mode 100644 frontend/dist/assets/MapPage-CWavP_xM.js create mode 100644 frontend/dist/assets/MapSidebar-yNxbJbqT.js create mode 100644 frontend/dist/assets/Navbar-DOE0P8dm.js create mode 100644 frontend/dist/assets/PasswordInput-dcNbels6.js create mode 100644 frontend/dist/assets/RegisterPage-C1DYj1NC.js create mode 100644 frontend/dist/assets/Table-BCdM5JW5.js create mode 100644 frontend/dist/assets/TreeDetailLayout-CKxWzGm5.js create mode 100644 frontend/dist/assets/TreeDetailPage-D6Enxj1V.js create mode 100644 frontend/dist/assets/index-BDpfdlnl.css delete mode 100644 frontend/dist/assets/index-BJRqtcJi.css delete mode 100644 frontend/dist/assets/index-CGuCVMO8.js create mode 100644 frontend/dist/assets/index-DJ39NcK9.js create mode 100644 frontend/dist/assets/useKeyboardNavigation-C5b08Ak3.js create mode 100644 frontend/dist/tree.png create mode 100644 frontend/src/components/admin/AdminHeader.jsx create mode 100644 frontend/src/components/admin/AdminPageLayout.jsx create mode 100644 frontend/src/components/admin/AdminStats.jsx create mode 100644 frontend/src/components/admin/AuditLogFilters.jsx create mode 100644 frontend/src/components/admin/AuditLogTableBody.jsx create mode 100644 frontend/src/components/admin/StatCard.jsx create mode 100644 frontend/src/components/admin/index.js create mode 100644 frontend/src/components/auth/DemoCredentials.jsx create mode 100644 frontend/src/components/auth/LoginForm.jsx create mode 100644 frontend/src/components/auth/PasswordStrengthIndicator.jsx create mode 100644 frontend/src/components/auth/RegisterForm.jsx create mode 100644 frontend/src/components/auth/index.js create mode 100644 frontend/src/components/filters/DateInput.jsx create mode 100644 frontend/src/components/filters/DateRangePicker.styles.js create mode 100644 frontend/src/components/filters/FilterErrors.jsx create mode 100644 frontend/src/components/filters/FilterHeader.jsx create mode 100644 frontend/src/components/map/ClusterIcon.jsx create mode 100644 frontend/src/components/map/ForestMap.styles.js create mode 100644 frontend/src/components/map/MapController.jsx create mode 100644 frontend/src/components/map/MapHeader.jsx create mode 100644 frontend/src/components/map/MapLegend.jsx create mode 100644 frontend/src/components/map/MapLoadingHandler.jsx create mode 100644 frontend/src/components/map/MarkerCluster.jsx create mode 100644 frontend/src/components/map/TreeIcon.jsx create mode 100644 frontend/src/components/map/TreePopup.jsx create mode 100644 frontend/src/components/map/index.js create mode 100644 frontend/src/components/ui/AboutSection.jsx create mode 100644 frontend/src/components/ui/ActionBadge.jsx create mode 100644 frontend/src/components/ui/BackIcon.jsx create mode 100644 frontend/src/components/ui/ButtonGroup.jsx create mode 100644 frontend/src/components/ui/ChartComponents.jsx create mode 100644 frontend/src/components/ui/CloseIcon.jsx create mode 100644 frontend/src/components/ui/DashboardHeader.jsx create mode 100644 frontend/src/components/ui/DashboardSidebar.jsx create mode 100644 frontend/src/components/ui/DashboardStatCard.jsx create mode 100644 frontend/src/components/ui/ErrorActions.jsx create mode 100644 frontend/src/components/ui/ErrorCard.jsx create mode 100644 frontend/src/components/ui/ErrorPageContainer.jsx create mode 100644 frontend/src/components/ui/ErrorPageIllustrations.jsx create mode 100644 frontend/src/components/ui/ErrorPageLayout.jsx create mode 100644 frontend/src/components/ui/FeatureCard.jsx create mode 100644 frontend/src/components/ui/FeaturesSection.jsx create mode 100644 frontend/src/components/ui/Footer.jsx create mode 100644 frontend/src/components/ui/ForestOverviewSection.jsx create mode 100644 frontend/src/components/ui/FormElements.jsx create mode 100644 frontend/src/components/ui/FormField.jsx create mode 100644 frontend/src/components/ui/HealthBadge.jsx create mode 100644 frontend/src/components/ui/HeroSection.jsx create mode 100644 frontend/src/components/ui/HomeIcon.jsx create mode 100644 frontend/src/components/ui/IconButton.jsx create mode 100644 frontend/src/components/ui/ImageGallery.jsx create mode 100644 frontend/src/components/ui/InfoCard.jsx create mode 100644 frontend/src/components/ui/LoadingButton.jsx create mode 100644 frontend/src/components/ui/Logo.jsx create mode 100644 frontend/src/components/ui/MapPageHeader.jsx create mode 100644 frontend/src/components/ui/MapPageHeaderSection.jsx create mode 100644 frontend/src/components/ui/MapSidebar.jsx create mode 100644 frontend/src/components/ui/MenuIcon.jsx create mode 100644 frontend/src/components/ui/MobileMenuDropdown.jsx create mode 100644 frontend/src/components/ui/Modal.jsx create mode 100644 frontend/src/components/ui/MoonIcon.jsx create mode 100644 frontend/src/components/ui/NavMenuItems.jsx create mode 100644 frontend/src/components/ui/PageNumbers.jsx create mode 100644 frontend/src/components/ui/Pagination.jsx create mode 100644 frontend/src/components/ui/PaginationInfo.jsx create mode 100644 frontend/src/components/ui/PasswordInput.jsx create mode 100644 frontend/src/components/ui/RefreshIcon.jsx create mode 100644 frontend/src/components/ui/SearchIcon.jsx create mode 100644 frontend/src/components/ui/ServerIcon.jsx create mode 100644 frontend/src/components/ui/Spinner.jsx create mode 100644 frontend/src/components/ui/StatsGrid.jsx create mode 100644 frontend/src/components/ui/SunIcon.jsx create mode 100644 frontend/src/components/ui/Table.jsx create mode 100644 frontend/src/components/ui/Toast.styles.js create mode 100644 frontend/src/components/ui/ToastIcon.jsx create mode 100644 frontend/src/components/ui/TreeActionButtons.jsx create mode 100644 frontend/src/components/ui/TreeBasicInfo.jsx create mode 100644 frontend/src/components/ui/TreeDetailHeader.jsx create mode 100644 frontend/src/components/ui/TreeDetailInfo.jsx create mode 100644 frontend/src/components/ui/TreeDetailLayout.jsx create mode 100644 frontend/src/components/ui/TreeDetailMeasurements.jsx create mode 100644 frontend/src/components/ui/TreeDetailSidebar.jsx create mode 100644 frontend/src/components/ui/TreeLocationInfo.jsx create mode 100644 frontend/src/components/ui/TreeMeasurementHistory.jsx create mode 100644 frontend/src/components/ui/index.js create mode 100644 frontend/src/constants/auditLogConstants.js create mode 100644 frontend/src/constants/keepAliveConstants.js create mode 100644 frontend/src/constants/mapConstants.js create mode 100644 frontend/src/constants/toastTheme.js create mode 100644 frontend/src/hooks/useAuditLogs.js create mode 100644 frontend/src/hooks/useChartConfig.js create mode 100644 frontend/src/hooks/useDateRange.js create mode 100644 frontend/src/hooks/useErrorPageNavigation.js create mode 100644 frontend/src/hooks/useErrorReporting.js create mode 100644 frontend/src/hooks/useFilterParams.js create mode 100644 frontend/src/hooks/useFormValidation.js create mode 100644 frontend/src/hooks/useLogin.js create mode 100644 frontend/src/hooks/useMapControls.js create mode 100644 frontend/src/hooks/useMapFilters.js create mode 100644 frontend/src/hooks/usePagination.js create mode 100644 frontend/src/hooks/usePasswordStrength.js create mode 100644 frontend/src/hooks/usePerformanceMetrics.js create mode 100644 frontend/src/hooks/useProtectedRoute.js create mode 100644 frontend/src/hooks/useRegisterForm.js create mode 100644 frontend/src/hooks/useSidebarState.js create mode 100644 frontend/src/hooks/useToastTimer.js create mode 100644 frontend/src/hooks/useTreeDetail.js create mode 100644 frontend/src/hooks/useTreeFiltering.js create mode 100644 frontend/src/hooks/useTreeMeasurements.js create mode 100644 frontend/src/hooks/useTreeNavigation.js create mode 100644 frontend/src/hooks/useTreeSelection.js create mode 100644 frontend/src/hooks/useTreeShare.js create mode 100644 frontend/src/lib/config/apiConfig.js create mode 100644 frontend/src/lib/core/ApiClient.js create mode 100644 frontend/src/lib/services/authService.js create mode 100644 frontend/src/lib/services/dashboardService.js create mode 100644 frontend/src/lib/services/dataService.js create mode 100644 frontend/src/lib/services/forestService.js create mode 100644 frontend/src/lib/services/index.js create mode 100644 frontend/src/lib/services/treeService.js create mode 100644 frontend/src/lib/stores/authStore.js create mode 100644 frontend/src/lib/stores/dataStore.js create mode 100644 frontend/src/lib/stores/filtersStore.js create mode 100644 frontend/src/lib/stores/index.js create mode 100644 frontend/src/lib/stores/storeUtils.js create mode 100644 frontend/src/lib/stores/uiStore.js create mode 100644 frontend/src/lib/utils/apiUtils.js create mode 100644 frontend/src/test/utils/globalMocks.js create mode 100644 frontend/src/test/utils/index.js create mode 100644 frontend/src/test/utils/testHelpers.js create mode 100644 frontend/src/utils/coreWebVitals.js create mode 100644 frontend/src/utils/dateUtils.js create mode 100644 frontend/src/utils/filterValidation.js create mode 100644 frontend/src/utils/mapIcons.js create mode 100644 frontend/src/utils/performanceRatings.js create mode 100644 frontend/src/utils/performanceReporting.js create mode 100644 frontend/src/utils/resourceMonitor.js create mode 100644 frontend/src/utils/responsive/accessibility.js create mode 100644 frontend/src/utils/responsive/breakpoints.js create mode 100644 frontend/src/utils/responsive/helpers.js create mode 100644 frontend/src/utils/responsive/index.js create mode 100644 frontend/src/utils/responsive/mixins.js create mode 100644 frontend/src/utils/responsive/print.js create mode 100644 frontend/src/utils/responsive/spacing.js create mode 100644 frontend/src/utils/responsive/typography.js create mode 100644 frontend/src/utils/sortUtils.js diff --git a/frontend/.env.example b/frontend/.env.example deleted file mode 100644 index 2cccd27378..0000000000 --- a/frontend/.env.example +++ /dev/null @@ -1,17 +0,0 @@ -# API Configuration -VITE_API_URL=http://localhost:5000/api -VITE_API_TIMEOUT=10000 - -# Map Configuration -VITE_MAP_API_KEY=your_map_api_key_here -VITE_MAP_TILE_URL=https://tile.openstreetmap.org/{z}/{x}/{y}.png - -# Environment -VITE_ENV=development - -# Feature Flags -VITE_ENABLE_DARK_MODE=true -VITE_ENABLE_ANALYTICS=false - -# Error Tracking -VITE_SENTRY_DSN=your_sentry_dsn_here diff --git a/frontend/dist/assets/AdminPage-Bc5ol_Rn.js b/frontend/dist/assets/AdminPage-Bc5ol_Rn.js new file mode 100644 index 0000000000..3bedd7649f --- /dev/null +++ b/frontend/dist/assets/AdminPage-Bc5ol_Rn.js @@ -0,0 +1,102 @@ +import{j as e,n as k,r as d,g as I,u as v,d as a,N as E}from"./index-DJ39NcK9.js";import{E as y,T as M,a as N,b as S,c as T,d as m,S as O,e as P,f as D,g as U}from"./Table-BCdM5JW5.js";import{F as _,S as W,a as z,A as H,P as B}from"./FormElements-5NQybTAT.js";import"./vendor-BtP0CW_r.js";const p={CREATE:"CREATE",UPDATE:"UPDATE",DELETE:"DELETE",LOGIN:"LOGIN",LOGOUT:"LOGOUT"},F=[{value:"",label:"All Actions"},{value:p.CREATE,label:"Create"},{value:p.UPDATE,label:"Update"},{value:p.DELETE,label:"Delete"},{value:p.LOGIN,label:"Login"},{value:p.LOGOUT,label:"Logout"}],w=10,R=({searchTerm:t,setSearchTerm:s,actionFilter:r,setActionFilter:o})=>e.jsxs(_,{children:[e.jsx(W,{type:"text",placeholder:"Search by user, action, or details...",value:t,onChange:n=>s(n.target.value)}),e.jsx(z,{value:r,onChange:n=>o(n.target.value),children:F.map(n=>e.jsx("option",{value:n.value,children:n.label},n.value))})]}),G={ASC:"asc"},f={NONE:"⇅",ASC:"↑",DESC:"↓"},Z=(t,s,r)=>s!==t?f.NONE:r===G.ASC?f.ASC:f.DESC,A=({field:t,sortField:s,sortDirection:r,onSort:o,children:n})=>e.jsxs(T,{onClick:()=>o(t),children:[n," ",e.jsx(O,{children:Z(t,s,r)})]}),K=({sortField:t,sortDirection:s,onSort:r})=>e.jsx(N,{children:e.jsxs(S,{children:[e.jsx(A,{field:"timestamp",sortField:t,sortDirection:s,onSort:r,children:"Timestamp"}),e.jsx(A,{field:"user",sortField:t,sortDirection:s,onSort:r,children:"User"}),e.jsx(A,{field:"action",sortField:t,sortDirection:s,onSort:r,children:"Action"}),e.jsx(A,{field:"resource",sortField:t,sortDirection:s,onSort:r,children:"Resource"}),e.jsx(T,{children:"Details"}),e.jsx(T,{children:"IP Address"})]})}),V=({log:t})=>e.jsxs(S,{children:[e.jsx(m,{children:k(t.timestamp)}),e.jsx(m,{children:t.user}),e.jsx(m,{children:e.jsx(H,{action:t.action,children:t.action})}),e.jsx(m,{children:t.resource}),e.jsx(m,{children:t.details}),e.jsx(m,{children:t.ipAddress})]},t.id),X=({logs:t,sortField:s,sortDirection:r,onSort:o})=>t.length===0?e.jsx(y,{children:e.jsx("p",{children:"No audit logs found matching your criteria."})}):e.jsxs(M,{children:[e.jsx(K,{sortField:s,sortDirection:r,onSort:o}),e.jsx("tbody",{children:t.map(n=>e.jsx(V,{log:n},n.id))})]}),$=[{id:1,timestamp:"2024-01-15T10:30:00Z",user:"admin@nanwa.com",action:"CREATE",resource:"Tree",resourceId:"tree_001",details:"Created new tree record for Forest A",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:2,timestamp:"2024-01-15T10:25:00Z",user:"user@nanwa.com",action:"UPDATE",resource:"Tree",resourceId:"tree_002",details:"Updated height measurement from 2.3m to 2.4m",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:3,timestamp:"2024-01-15T10:20:00Z",user:"admin@nanwa.com",action:"DELETE",resource:"Forest",resourceId:"forest_003",details:"Deleted forest record due to data cleanup",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:4,timestamp:"2024-01-15T10:15:00Z",user:"user@nanwa.com",action:"LOGIN",resource:"Authentication",resourceId:"auth_session_001",details:"User logged in successfully",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:5,timestamp:"2024-01-15T10:10:00Z",user:"admin@nanwa.com",action:"UPDATE",resource:"User",resourceId:"user_001",details:"Updated user permissions to admin level",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:6,timestamp:"2024-01-15T10:05:00Z",user:"system",action:"CREATE",resource:"Measurement",resourceId:"measurement_001",details:"Automated measurement recorded for tree batch",ipAddress:"127.0.0.1",userAgent:"System/1.0"},{id:7,timestamp:"2024-01-15T10:00:00Z",user:"user@nanwa.com",action:"LOGOUT",resource:"Authentication",resourceId:"auth_session_002",details:"User logged out",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}],q=()=>{const[t,s]=d.useState([]),[r,o]=d.useState(!1),n=async()=>{o(!0);try{await new Promise(i=>setTimeout(i,500)),s($)}catch(i){console.error("Failed to fetch audit logs:",i)}finally{o(!1)}};return d.useEffect(()=>{n()},[]),{auditLogs:t,loading:r,refetchAuditLogs:n}},J=t=>{const[s,r]=d.useState(""),[o,n]=d.useState(""),[i,h]=d.useState("timestamp"),[l,g]=d.useState("desc"),b=d.useMemo(()=>t.filter(c=>{const x=s===""||c.user.toLowerCase().includes(s.toLowerCase())||c.details.toLowerCase().includes(s.toLowerCase())||c.resource.toLowerCase().includes(s.toLowerCase()),u=o===""||c.action===o;return x&&u}).sort((c,x)=>{const u=c[i],j=x[i];return l==="asc"?u>j?1:-1:u{i===c?g(l==="asc"?"desc":"asc"):(h(c),g("desc"))}}},Q=(t,s=w)=>{const[r,o]=d.useState(1),n=Math.ceil(t.length/s),i=(r-1)*s,h=t.slice(i,i+s);return d.useEffect(()=>{o(1)},[t.length]),{currentPage:r,setCurrentPage:o,totalPages:n,startIndex:i,paginatedData:h,pageSize:s}},Y=()=>{const{auditLogs:t,loading:s}=q(),{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i,sortField:h,sortDirection:l,filteredAndSortedLogs:g,handleSort:b}=J(t),{currentPage:L,setCurrentPage:c,totalPages:x,startIndex:u,paginatedData:j,pageSize:C}=Q(g,w);return e.jsxs(P,{children:[e.jsxs(D,{children:[e.jsx(U,{children:"Audit Log"}),e.jsx(R,{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i})]}),s?e.jsx(I,{text:"Loading audit logs..."}):e.jsx(X,{logs:j,sortField:h,sortDirection:l,onSort:b}),e.jsx(B,{currentPage:L,totalPages:x,startIndex:u,pageSize:C,totalItems:g.length,onPageChange:c})]})},ee=a.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`,te=a.div` + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; + display: flex; + justify-content: space-between; + align-items: center; +`,se=a.a` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #10b981; + color: white; + text-decoration: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + transition: all 0.2s; + + &:hover { + background: #059669; + } +`,re=a.span` + padding: 0.5rem 1rem; + background: #fee2e2; + color: #991b1b; + border-radius: 9999px; + font-size: 0.875rem; + font-weight: 500; +`,ne=a.div` + display: flex; + align-items: center; + gap: 1rem; +`,oe=a.span` + font-size: 0.875rem; + color: #374151; +`,ae=a.button` + color: #374151; + background: none; + border: none; + padding: 0.5rem; + border-radius: 0.375rem; + cursor: pointer; + transition: color 0.2s; + + &:hover { + color: #10b981; + } +`,ie=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 19l-7-7m0 0l7-7m-7 7h18"})}),ce=()=>e.jsx("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),de=()=>{const{user:t,logout:s}=v(),r=async()=>{await s()};return e.jsx(ee,{children:e.jsxs(te,{children:[e.jsxs(se,{href:"/dashboard",children:[e.jsx(ie,{}),"Back to Dashboard"]}),e.jsxs(ne,{children:[e.jsx(re,{children:"Admin Panel"}),e.jsxs(oe,{children:["Welcome, ",e.jsx("strong",{children:t==null?void 0:t.name})]}),e.jsx(ae,{onClick:r,"aria-label":"Logout",children:e.jsx(ce,{})})]})]})})},le=a.div` + background: white; + padding: 1.5rem; + border-radius: 0.75rem; + border: 1px solid #e5e7eb; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +`,ue=a.div` + font-size: 2rem; + font-weight: 700; + color: #111827; + margin-bottom: 0.5rem; +`,me=a.div` + font-size: 0.875rem; + color: #6b7280; + font-weight: 500; +`,he=a.div` + display: inline-flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + border-radius: 0.75rem; + margin-bottom: 1rem; + + ${t=>{switch(t.type){case"users":return"background: #dbeafe; color: #1e40af;";case"actions":return"background: #d1fae5; color: #065f46;";case"errors":return"background: #fee2e2; color: #991b1b;";case"activity":return"background: #fef3c7; color: #92400e;";default:return"background: #f3f4f6; color: #374151;"}}} +`,ge=({icon:t,value:s,label:r,type:o})=>e.jsxs(le,{children:[e.jsx(he,{type:o,children:t}),e.jsx(ue,{children:s}),e.jsx(me,{children:r})]}),xe=a.div` + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 1.5rem; + margin-bottom: 2rem; +`,pe=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z"})}),je=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5H7a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"})}),Ae=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),be=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),fe=()=>{const t=[{icon:e.jsx(pe,{}),value:"42",label:"Active Users",type:"users"},{icon:e.jsx(je,{}),value:"1,247",label:"Total Actions Today",type:"actions"},{icon:e.jsx(Ae,{}),value:"3",label:"Failed Actions",type:"errors"},{icon:e.jsx(be,{}),value:"98.5%",label:"System Uptime",type:"activity"}];return e.jsx(xe,{children:t.map((s,r)=>e.jsx(ge,{icon:s.icon,value:s.value,label:s.label,type:s.type},r))})},Te=a.div` + min-height: 100vh; + background-color: #f9fafb; +`,Le=a.main` + max-width: 1200px; + margin: 0 auto; + padding: 2rem 1rem; +`,ve=a.div` + margin-bottom: 2rem; +`,Se=a.h1` + font-size: 2.5rem; + font-weight: 700; + color: #111827; + margin: 0 0 1rem 0; +`,we=a.p` + color: #6b7280; + font-size: 1.125rem; + margin: 0; +`,Ce=({children:t})=>e.jsx(Te,{children:t}),ke=({title:t,description:s})=>e.jsxs(ve,{children:[e.jsx(Se,{children:t}),e.jsx(we,{children:s})]}),Ie=({children:t})=>e.jsx(Le,{children:t}),Oe=()=>{const{isAdmin:t}=v();return t()?e.jsxs(Ce,{children:[e.jsx(de,{}),e.jsxs(Ie,{children:[e.jsx(ke,{title:"System Administration",description:"Monitor system activity and user actions with comprehensive audit logging."}),e.jsx(fe,{}),e.jsx(Y,{})]})]}):e.jsx(E,{to:"/dashboard",replace:!0})};export{Oe as AdminPage}; diff --git a/frontend/dist/assets/ChartComponents-BrntlwBm.js b/frontend/dist/assets/ChartComponents-BrntlwBm.js new file mode 100644 index 0000000000..f3e89acaa7 --- /dev/null +++ b/frontend/dist/assets/ChartComponents-BrntlwBm.js @@ -0,0 +1,53 @@ +import{j as n,d as r}from"./index-DJ39NcK9.js";const j=r.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`,C=r.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`,w=r.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`,d=r.div` + background: white; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + padding: 0.75rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); +`,l=r.div` + text-align: center; + margin-bottom: 1rem; +`,m=r.div` + font-size: 2.5rem; + font-weight: 700; + color: #10b981; + line-height: 1; +`,g=r.div` + font-size: 0.875rem; + color: #6b7280; + margin-top: 0.25rem; +`,x=r.div` + display: flex; + justify-content: center; + gap: 1rem; + margin-top: 1rem; + flex-wrap: wrap; +`,p=r.div` + display: flex; + align-items: center; +`,h=r.div` + width: 0.75rem; + height: 0.75rem; + border-radius: 50%; + margin-right: 0.5rem; + background-color: ${t=>t.color}; +`,b=r.span` + font-size: 0.875rem; + color: #6b7280; +`,u=(t,e,o)=>e?e(t):`${t}${o}`,v=({active:t,payload:e,label:o,valueFormatter:s,unit:i=""})=>t&&e&&e.length?n.jsxs(d,{children:[n.jsx("p",{className:"font-medium",children:o}),e.map((a,c)=>n.jsx("p",{className:"text-sm text-gray-600",children:u(a.value,s,i)},c))]}):null,y=({value:t,label:e})=>n.jsxs(l,{children:[n.jsxs(m,{children:[t,"%"]}),n.jsx(g,{children:e})]}),L=({data:t})=>n.jsx(x,{children:t.map((e,o)=>n.jsxs(p,{children:[n.jsx(h,{color:e.color}),n.jsxs(b,{children:[e.name," (",e.value,"%)"]})]},o))});export{j as C,C as a,w as b,y as c,v as d,L as e}; diff --git a/frontend/dist/assets/DarkModeToggle-sLchHfDj.js b/frontend/dist/assets/DarkModeToggle-sLchHfDj.js new file mode 100644 index 0000000000..ab50e9e02f --- /dev/null +++ b/frontend/dist/assets/DarkModeToggle-sLchHfDj.js @@ -0,0 +1 @@ +import{j as r,e as i,f as a}from"./index-DJ39NcK9.js";import{I as l}from"./IconButton-DIc-CK1Q.js";const d=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),c=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})}),m=({className:t="",size:o="md"})=>{const{isDarkMode:e,toggleDarkMode:s}=i(),n={sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6"};return r.jsxs(l,{onClick:s,className:a("relative bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300",t),size:o,"aria-label":e?"Switch to light mode":"Switch to dark mode",title:e?"Switch to light mode":"Switch to dark mode",children:[r.jsx(d,{className:a(n[o],"transition-all duration-200",e?"rotate-90 scale-0":"rotate-0 scale-100")}),r.jsx(c,{className:a(n[o],"absolute transition-all duration-200",e?"rotate-0 scale-100":"-rotate-90 scale-0")})]})};export{m as D}; diff --git a/frontend/dist/assets/DashboardPage-BnZglKQh.js b/frontend/dist/assets/DashboardPage-BnZglKQh.js new file mode 100644 index 0000000000..34ef1e994b --- /dev/null +++ b/frontend/dist/assets/DashboardPage-BnZglKQh.js @@ -0,0 +1,69 @@ +var Sy=Object.defineProperty;var Ey=(e,t,r)=>t in e?Sy(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ia=(e,t,r)=>Ey(e,typeof t!="symbol"?t+"":t,r);import{u as qh,j as E,r as g,c as H,b as jy}from"./index-DJ39NcK9.js";import{C as Nu,a as $u,b as Ru,c as Ty,d as Lu,e as ky}from"./ChartComponents-BrntlwBm.js";import{g as St,r as Bu}from"./vendor-BtP0CW_r.js";import{G as Cy}from"./FilterHeader-DzCm_NrU.js";import{E as _y}from"./ExportButton-Y3IlBTFt.js";import{D as My}from"./DarkModeToggle-sLchHfDj.js";import"./IconButton-DIc-CK1Q.js";const Dy=({onToggleSidebar:e})=>{const{user:t,logout:r,isAdmin:n}=qh(),i=async()=>{await r()};return E.jsx("header",{className:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4 sticky top-0 z-50",children:E.jsxs("div",{className:"flex items-center justify-between",children:[E.jsxs("div",{className:"flex items-center gap-4",children:[E.jsx("button",{onClick:e,"aria-label":"Toggle menu",className:"lg:hidden flex items-center justify-center w-10 h-10 bg-none border-none cursor-pointer rounded-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-500 focus:outline-offset-2",children:E.jsx("svg",{className:"w-6 h-6 text-gray-700 dark:text-gray-300",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})}),E.jsx("h1",{className:"text-2xl font-bold text-green-600 dark:text-green-400 m-0",children:"Nanwa Dashboard"})]}),E.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[E.jsxs("span",{className:"text-gray-700 dark:text-gray-300",children:["Welcome, ",E.jsx("strong",{children:(t==null?void 0:t.firstName)||(t==null?void 0:t.name)}),n()&&E.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 text-xs rounded-full font-bold",children:"Admin"})]}),E.jsx(My,{size:"sm"}),E.jsxs("button",{onClick:i,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-red-600 dark:hover:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/30 rounded-lg transition-colors",title:"Logout",children:[E.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),"Logout"]})]})]})})},Iy=({isOpen:e,onClose:t})=>{const{isAdmin:r}=qh();return E.jsxs(E.Fragment,{children:[E.jsx("div",{className:`lg:hidden fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${e?"opacity-100 visible":"opacity-0 invisible"}`,onClick:t}),E.jsx("aside",{className:` + bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 w-full lg:w-64 fixed lg:sticky top-0 h-screen overflow-y-auto z-50 lg:z-10 transform transition-transform duration-300 ease-in-out + ${e?"translate-x-0":"-translate-x-full lg:translate-x-0"} + `,children:E.jsx("div",{className:"p-6",children:E.jsxs("nav",{className:"space-y-2",children:[E.jsxs("a",{href:"#dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30 rounded-lg",children:[E.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),E.jsxs("a",{href:"/map",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[E.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),E.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[E.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),r()&&E.jsxs("a",{href:"/admin",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[E.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})})]})},Sn=({icon:e,title:t,value:r,color:n="green"})=>{const i={green:"bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400",blue:"bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400",yellow:"bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400",purple:"bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400"};return E.jsx("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:E.jsxs("div",{className:"flex items-center",children:[E.jsx("div",{className:`p-2 rounded-lg ${i[n]}`,children:e}),E.jsxs("div",{className:"ml-4",children:[E.jsx("p",{className:"text-sm font-medium text-gray-600 dark:text-gray-300",children:t}),E.jsx("p",{className:"text-2xl font-bold text-gray-900 dark:text-white",children:r})]})]})})},Ny=()=>E.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:[E.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:"Forest Overview"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-4",children:"Your forests are performing excellently with strong growth indicators and high survival rates."}),E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Recent Activity"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full mr-3"}),"New measurements recorded for Forest A"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-blue-500 rounded-full mr-3"}),"Survival rate improved by 2.3%"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-purple-500 rounded-full mr-3"}),"CO₂ absorption increased by 15%"]})]})]}),E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Next Actions"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-yellow-500 rounded-full mr-3"}),"Schedule maintenance for Forest B"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-orange-500 rounded-full mr-3"}),"Review growth data for Q4 report"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-red-500 rounded-full mr-3"}),"Address low-performing areas in Forest C"]})]})]})]})]});var aa={},oa={},zl;function $y(){return zl||(zl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==="__proto__"}e.isUnsafeProperty=t}(oa)),oa}var ua={},Fl;function zh(){return Fl||(Fl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){switch(typeof r){case"number":case"symbol":return!1;case"string":return r.includes(".")||r.includes("[")||r.includes("]")}}e.isDeepKey=t}(ua)),ua}var sa={},Wl;function Fh(){return Wl||(Wl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var n;return typeof r=="string"||typeof r=="symbol"?r:Object.is((n=r==null?void 0:r.valueOf)==null?void 0:n.call(r),-0)?"-0":String(r)}e.toKey=t}(sa)),sa}var la={},Ul;function Ku(){return Ul||(Ul=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){const n=[],i=r.length;if(i===0)return n;let a=0,o="",u="",l=!1;for(r.charCodeAt(0)===46&&(n.push(""),a++);ae===0?0:e>0?1:-1,We=e=>typeof e=="number"&&e!=+e,Zt=e=>typeof e=="string"&&e.indexOf("%")===e.length-1,D=e=>(typeof e=="number"||e instanceof Number)&&!We(e),dt=e=>D(e)||typeof e=="string",zy=0,or=e=>{var t=++zy;return"".concat(e||"").concat(t)},ke=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!D(t)&&typeof t!="string")return n;var a;if(Zt(t)){if(r==null)return n;var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return We(a)&&(a=n),i&&r!=null&&a>r&&(a=r),a},Wh=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nD(e)&&D(t)?r=>e+r*(t-e):()=>t;function Uh(e,t,r){if(!(!e||!e.length))return e.find(n=>n&&(typeof t=="function"?t(n):Rt(n,t))===r)}var J=e=>e===null||typeof e>"u",fn=e=>J(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1)),Fy=["viewBox","children"],Wy=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],Xl=["points","pathLength"],da={svg:Fy,polygon:Xl,polyline:Xl},zu=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],Fu=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(g.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{zu.includes(i)&&(n[i]=a=>r[i](r,a))}),n},Uy=(e,t,r)=>n=>(e(t,r,n),null),wi=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var a=e[i];zu.includes(i)&&typeof a=="function"&&(n||(n={}),n[i]=Uy(a,t,r))}),n},Zl=e=>typeof e=="string"?e:e?e.displayName||e.name||"Component":"",Jl=null,ha=null,Hh=e=>{if(e===Jl&&Array.isArray(ha))return ha;var t=[];return g.Children.forEach(e,r=>{J(r)||(qy.isFragment(r)?t=t.concat(Hh(r.props.children)):t.push(r))}),ha=t,Jl=e,t};function dn(e,t){var r=[],n=[];return Array.isArray(t)?n=t.map(i=>Zl(i)):n=[Zl(t)],Hh(e).forEach(i=>{var a=Rt(i,"type.displayName")||Rt(i,"type.name");n.indexOf(a)!==-1&&r.push(i)}),r}var Yh=e=>e&&typeof e=="object"&&"clipDot"in e?!!e.clipDot:!0,Hy=(e,t,r,n)=>{var i,a=(i=n&&(da==null?void 0:da[n]))!==null&&i!==void 0?i:[];return t.startsWith("data-")||typeof e!="function"&&(n&&a.includes(t)||Wy.includes(t))||r&&zu.includes(t)},z=(e,t,r)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var n=e;if(g.isValidElement(e)&&(n=e.props),typeof n!="object"&&typeof n!="function")return null;var i={};return Object.keys(n).forEach(a=>{var o;Hy((o=n)===null||o===void 0?void 0:o[a],a,t,r)&&(i[a]=n[a])}),i},Yy=["children","width","height","viewBox","className","style","title","desc"];function qo(){return qo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,width:n,height:i,viewBox:a,className:o,style:u,title:l,desc:c}=e,s=Gy(e,Yy),f=a||{width:n,height:i,x:0,y:0},d=H("recharts-surface",o);return g.createElement("svg",qo({},z(s,!0,"svg"),{className:d,width:n,height:i,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height),ref:t}),g.createElement("title",null,l),g.createElement("desc",null,c),r)}),Xy=["children","className"];function zo(){return zo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,className:n}=e,i=Zy(e,Xy),a=H("recharts-layer",n);return g.createElement("g",zo({className:a},z(i,!0),{ref:t}),r)}),Qy=g.createContext(null);function ee(e){return function(){return e}}const Vh=Math.cos,qn=Math.sin,lt=Math.sqrt,zn=Math.PI,Pi=2*zn,Fo=Math.PI,Wo=2*Fo,Gt=1e-6,e0=Wo-Gt;function Xh(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Xh;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;iGt)if(!(Math.abs(f*l-c*s)>Gt)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let h=n-o,v=i-u,p=l*l+c*c,m=h*h+v*v,y=Math.sqrt(p),b=Math.sqrt(d),x=a*Math.tan((Fo-Math.acos((p+d-m)/(2*y*b)))/2),P=x/b,w=x/y;Math.abs(P-1)>Gt&&this._append`L${t+P*s},${r+P*f}`,this._append`A${a},${a},0,0,${+(f*h>s*v)},${this._x1=t+w*l},${this._y1=r+w*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),l=n*Math.sin(i),c=t+u,s=r+l,f=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${c},${s}`:(Math.abs(this._x1-c)>Gt||Math.abs(this._y1-s)>Gt)&&this._append`L${c},${s}`,n&&(d<0&&(d=d%Wo+Wo),d>e0?this._append`A${n},${n},0,1,${f},${t-u},${r-l}A${n},${n},0,1,${f},${this._x1=c},${this._y1=s}`:d>Gt&&this._append`A${n},${n},0,${+(d>=Fo)},${f},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Wu(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new r0(t)}function Uu(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Zh(e){this._context=e}Zh.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function Oi(e){return new Zh(e)}function Jh(e){return e[0]}function Qh(e){return e[1]}function ev(e,t){var r=ee(!0),n=null,i=Oi,a=null,o=Wu(u);e=typeof e=="function"?e:e===void 0?Jh:ee(e),t=typeof t=="function"?t:t===void 0?Qh:ee(t);function u(l){var c,s=(l=Uu(l)).length,f,d=!1,h;for(n==null&&(a=i(h=o())),c=0;c<=s;++c)!(c=h;--v)u.point(x[v],P[v]);u.lineEnd(),u.areaEnd()}y&&(x[d]=+e(m,d,f),P[d]=+t(m,d,f),u.point(n?+n(m,d,f):x[d],r?+r(m,d,f):P[d]))}if(b)return u=null,b+""||null}function s(){return ev().defined(i).curve(o).context(a)}return c.x=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),n=null,c):e},c.x0=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),c):e},c.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:ee(+f),c):n},c.y=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),r=null,c):t},c.y0=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),c):t},c.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:ee(+f),c):r},c.lineX0=c.lineY0=function(){return s().x(e).y(t)},c.lineY1=function(){return s().x(e).y(r)},c.lineX1=function(){return s().x(n).y(t)},c.defined=function(f){return arguments.length?(i=typeof f=="function"?f:ee(!!f),c):i},c.curve=function(f){return arguments.length?(o=f,a!=null&&(u=o(a)),c):o},c.context=function(f){return arguments.length?(f==null?a=u=null:u=o(a=f),c):a},c}class tv{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function n0(e){return new tv(e,!0)}function i0(e){return new tv(e,!1)}const Hu={draw(e,t){const r=lt(t/zn);e.moveTo(r,0),e.arc(0,0,r,0,Pi)}},a0={draw(e,t){const r=lt(t/5)/2;e.moveTo(-3*r,-r),e.lineTo(-r,-r),e.lineTo(-r,-3*r),e.lineTo(r,-3*r),e.lineTo(r,-r),e.lineTo(3*r,-r),e.lineTo(3*r,r),e.lineTo(r,r),e.lineTo(r,3*r),e.lineTo(-r,3*r),e.lineTo(-r,r),e.lineTo(-3*r,r),e.closePath()}},rv=lt(1/3),o0=rv*2,u0={draw(e,t){const r=lt(t/o0),n=r*rv;e.moveTo(0,-r),e.lineTo(n,0),e.lineTo(0,r),e.lineTo(-n,0),e.closePath()}},s0={draw(e,t){const r=lt(t),n=-r/2;e.rect(n,n,r,r)}},l0=.8908130915292852,nv=qn(zn/10)/qn(7*zn/10),c0=qn(Pi/10)*nv,f0=-Vh(Pi/10)*nv,d0={draw(e,t){const r=lt(t*l0),n=c0*r,i=f0*r;e.moveTo(0,-r),e.lineTo(n,i);for(let a=1;a<5;++a){const o=Pi*a/5,u=Vh(o),l=qn(o);e.lineTo(l*r,-u*r),e.lineTo(u*n-l*i,l*n+u*i)}e.closePath()}},va=lt(3),h0={draw(e,t){const r=-lt(t/(va*3));e.moveTo(0,r*2),e.lineTo(-va*r,-r),e.lineTo(va*r,-r),e.closePath()}},Xe=-.5,Ze=lt(3)/2,Uo=1/lt(12),v0=(Uo/2+1)*3,p0={draw(e,t){const r=lt(t/v0),n=r/2,i=r*Uo,a=n,o=r*Uo+r,u=-a,l=o;e.moveTo(n,i),e.lineTo(a,o),e.lineTo(u,l),e.lineTo(Xe*n-Ze*i,Ze*n+Xe*i),e.lineTo(Xe*a-Ze*o,Ze*a+Xe*o),e.lineTo(Xe*u-Ze*l,Ze*u+Xe*l),e.lineTo(Xe*n+Ze*i,Xe*i-Ze*n),e.lineTo(Xe*a+Ze*o,Xe*o-Ze*a),e.lineTo(Xe*u+Ze*l,Xe*l-Ze*u),e.closePath()}};function m0(e,t){let r=null,n=Wu(i);e=typeof e=="function"?e:ee(e||Hu),t=typeof t=="function"?t:ee(t===void 0?64:+t);function i(){let a;if(r||(r=a=n()),e.apply(this,arguments).draw(r,+t.apply(this,arguments)),a)return r=null,a+""||null}return i.type=function(a){return arguments.length?(e=typeof a=="function"?a:ee(a),i):e},i.size=function(a){return arguments.length?(t=typeof a=="function"?a:ee(+a),i):t},i.context=function(a){return arguments.length?(r=a??null,i):r},i}function Fn(){}function Wn(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function iv(e){this._context=e}iv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Wn(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Wn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function g0(e){return new iv(e)}function av(e){this._context=e}av.prototype={areaStart:Fn,areaEnd:Fn,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Wn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function y0(e){return new av(e)}function ov(e){this._context=e}ov.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Wn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function b0(e){return new ov(e)}function uv(e){this._context=e}uv.prototype={areaStart:Fn,areaEnd:Fn,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function x0(e){return new uv(e)}function Ql(e){return e<0?-1:1}function ec(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(Ql(a)+Ql(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function tc(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function pa(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function Un(e){this._context=e}Un.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:pa(this,this._t0,tc(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,pa(this,tc(this,r=ec(this,e,t)),r);break;default:pa(this,this._t0,r=ec(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function sv(e){this._context=new lv(e)}(sv.prototype=Object.create(Un.prototype)).point=function(e,t){Un.prototype.point.call(this,t,e)};function lv(e){this._context=e}lv.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function w0(e){return new Un(e)}function P0(e){return new sv(e)}function cv(e){this._context=e}cv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=rc(e),i=rc(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function A0(e){return new Ai(e,.5)}function S0(e){return new Ai(e,0)}function E0(e){return new Ai(e,1)}function Or(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function j0(e,t){return e[t]}function T0(e){const t=[];return t.key=e,t}function k0(){var e=ee([]),t=Ho,r=Or,n=j0;function i(a){var o=Array.from(e.apply(this,arguments),T0),u,l=o.length,c=-1,s;for(const f of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n{var t="symbol".concat(fn(e));return fv[t]||Hu},q0=(e,t,r)=>{if(t==="area")return e;switch(r){case"cross":return 5*e*e/9;case"diamond":return .5*e*e/Math.sqrt(3);case"square":return e*e;case"star":{var n=18*B0;return 1.25*e*e*(Math.tan(n)-Math.tan(n*2)*Math.tan(n)**2)}case"triangle":return Math.sqrt(3)*e*e/4;case"wye":return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}},z0=(e,t)=>{fv["symbol".concat(fn(e))]=t},dv=e=>{var{type:t="circle",size:r=64,sizeType:n="area"}=e,i=R0(e,D0),a=ic(ic({},i),{},{type:t,size:r,sizeType:n}),o=()=>{var f=K0(t),d=m0().type(f).size(q0(r,n,t));return d()},{className:u,cx:l,cy:c}=a,s=z(a,!0);return l===+l&&c===+c&&r===+r?g.createElement("path",Yo({},s,{className:H("recharts-symbols",u),transform:"translate(".concat(l,", ").concat(c,")"),d:o()})):null};dv.registerSymbol=z0;var ma={},ga={},ac;function F0(){return ac||(ac=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){const i=new Map;for(let a=0;a=0}e.isLength=t}(wa)),wa}var sc;function Yu(){return sc||(sc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=W0();function r(n){return n!=null&&typeof n!="function"&&t.isLength(n.length)}e.isArrayLike=r}(xa)),xa}var Pa={},lc;function U0(){return lc||(lc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="object"&&r!==null}e.isObjectLike=t}(Pa)),Pa}var cc;function H0(){return cc||(cc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Yu(),r=U0();function n(i){return r.isObjectLike(i)&&t.isArrayLike(i)}e.isArrayLikeObject=n}(ba)),ba}var Oa={},Aa={},fc;function Y0(){return fc||(fc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=qu();function r(n){return function(i){return t.get(i,n)}}e.property=r}(Aa)),Aa}var Sa={},Ea={},ja={},Ta={},dc;function vv(){return dc||(dc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r!==null&&(typeof r=="object"||typeof r=="function")}e.isObject=t}(Ta)),Ta}var ka={},hc;function pv(){return hc||(hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null||typeof r!="object"&&typeof r!="function"}e.isPrimitive=t}(ka)),ka}var Ca={},vc;function Gu(){return vc||(vc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){return r===n||Number.isNaN(r)&&Number.isNaN(n)}e.eq=t}(Ca)),Ca}var pc;function G0(){return pc||(pc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Vu(),r=vv(),n=pv(),i=Gu();function a(f,d,h){return typeof h!="function"?t.isMatch(f,d):o(f,d,function v(p,m,y,b,x,P){const w=h(p,m,y,b,x,P);return w!==void 0?!!w:o(p,m,v,P)},new Map)}function o(f,d,h,v){if(d===f)return!0;switch(typeof d){case"object":return u(f,d,h,v);case"function":return Object.keys(d).length>0?o(f,{...d},h,v):i.eq(f,d);default:return r.isObject(f)?typeof d=="string"?d==="":!0:i.eq(f,d)}}function u(f,d,h,v){if(d==null)return!0;if(Array.isArray(d))return c(f,d,h,v);if(d instanceof Map)return l(f,d,h,v);if(d instanceof Set)return s(f,d,h,v);const p=Object.keys(d);if(f==null)return p.length===0;if(p.length===0)return!0;if(v&&v.has(d))return v.get(d)===f;v&&v.set(d,f);try{for(let m=0;m{})}e.isMatch=r}(Ea)),Ea}var _a={},Ma={},Da={},gc;function mv(){return gc||(gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Object.getOwnPropertySymbols(r).filter(n=>Object.prototype.propertyIsEnumerable.call(r,n))}e.getSymbols=t}(Da)),Da}var Ia={},yc;function Xu(){return yc||(yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null?r===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(r)}e.getTag=t}(Ia)),Ia}var Na={},bc;function Zu(){return bc||(bc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t="[object RegExp]",r="[object String]",n="[object Number]",i="[object Boolean]",a="[object Arguments]",o="[object Symbol]",u="[object Date]",l="[object Map]",c="[object Set]",s="[object Array]",f="[object Function]",d="[object ArrayBuffer]",h="[object Object]",v="[object Error]",p="[object DataView]",m="[object Uint8Array]",y="[object Uint8ClampedArray]",b="[object Uint16Array]",x="[object Uint32Array]",P="[object BigUint64Array]",w="[object Int8Array]",O="[object Int16Array]",A="[object Int32Array]",j="[object BigInt64Array]",T="[object Float32Array]",I="[object Float64Array]";e.argumentsTag=a,e.arrayBufferTag=d,e.arrayTag=s,e.bigInt64ArrayTag=j,e.bigUint64ArrayTag=P,e.booleanTag=i,e.dataViewTag=p,e.dateTag=u,e.errorTag=v,e.float32ArrayTag=T,e.float64ArrayTag=I,e.functionTag=f,e.int16ArrayTag=O,e.int32ArrayTag=A,e.int8ArrayTag=w,e.mapTag=l,e.numberTag=n,e.objectTag=h,e.regexpTag=t,e.setTag=c,e.stringTag=r,e.symbolTag=o,e.uint16ArrayTag=b,e.uint32ArrayTag=x,e.uint8ArrayTag=m,e.uint8ClampedArrayTag=y}(Na)),Na}var $a={},xc;function V0(){return xc||(xc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return ArrayBuffer.isView(r)&&!(r instanceof DataView)}e.isTypedArray=t}($a)),$a}var wc;function gv(){return wc||(wc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=mv(),r=Xu(),n=Zu(),i=pv(),a=V0();function o(s,f){return u(s,void 0,s,new Map,f)}function u(s,f,d,h=new Map,v=void 0){const p=v==null?void 0:v(s,f,d,h);if(p!=null)return p;if(i.isPrimitive(s))return s;if(h.has(s))return h.get(s);if(Array.isArray(s)){const m=new Array(s.length);h.set(s,m);for(let y=0;yt.isMatch(a,i)}e.matches=n}(Sa)),Sa}var Ra={},La={},Ba={},Ac;function J0(){return Ac||(Ac=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=gv(),r=Zu();function n(i,a){return t.cloneDeepWith(i,(o,u,l,c)=>{const s=a==null?void 0:a(o,u,l,c);if(s!=null)return s;if(typeof i=="object")switch(Object.prototype.toString.call(i)){case r.numberTag:case r.stringTag:case r.booleanTag:{const f=new i.constructor(i==null?void 0:i.valueOf());return t.copyProperties(f,i),f}case r.argumentsTag:{const f={};return t.copyProperties(f,i),f.length=i.length,f[Symbol.iterator]=i[Symbol.iterator],f}default:return}})}e.cloneDeepWith=n}(Ba)),Ba}var Sc;function Q0(){return Sc||(Sc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=J0();function r(n){return t.cloneDeepWith(n)}e.cloneDeep=r}(La)),La}var Ka={},qa={},Ec;function yv(){return Ec||(Ec=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=/^(?:0|[1-9]\d*)$/;function r(n,i=Number.MAX_SAFE_INTEGER){switch(typeof n){case"number":return Number.isInteger(n)&&n>=0&&n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?c:u;return Ya.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:s,Ya}var Nc;function lb(){return Nc||(Nc=1,Ha.exports=sb()),Ha.exports}/** + * @license React + * use-sync-external-store-shim/with-selector.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var $c;function cb(){if($c)return Ua;$c=1;var e=Bu(),t=lb();function r(c,s){return c===s&&(c!==0||1/c===1/s)||c!==c&&s!==s}var n=typeof Object.is=="function"?Object.is:r,i=t.useSyncExternalStore,a=e.useRef,o=e.useEffect,u=e.useMemo,l=e.useDebugValue;return Ua.useSyncExternalStoreWithSelector=function(c,s,f,d,h){var v=a(null);if(v.current===null){var p={hasValue:!1,value:null};v.current=p}else p=v.current;v=u(function(){function y(O){if(!b){if(b=!0,x=O,O=d(O),h!==void 0&&p.hasValue){var A=p.value;if(h(A,O))return P=A}return P=O}if(A=P,n(x,O))return A;var j=d(O);return h!==void 0&&h(A,j)?(x=O,A):(x=O,P=j)}var b=!1,x,P,w=f===void 0?null:f;return[function(){return y(s())},w===null?void 0:function(){return y(w())}]},[s,f,d,h]);var m=i(c,v[0],v[1]);return o(function(){p.hasValue=!0,p.value=m},[m]),l(m),m},Ua}var Rc;function fb(){return Rc||(Rc=1,Wa.exports=cb()),Wa.exports}var db=fb(),Ju=g.createContext(null),hb=e=>e,ae=()=>{var e=g.useContext(Ju);return e?e.store.dispatch:hb},Kn=()=>{},vb=()=>Kn,pb=(e,t)=>e===t;function $(e){var t=g.useContext(Ju);return db.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:vb,t?t.store.getState:Kn,t?t.store.getState:Kn,t?e:Kn,pb)}function mb(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function gb(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!="object")throw new TypeError(t)}function yb(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var Lc=e=>Array.isArray(e)?e:[e];function bb(e){const t=Array.isArray(e[0])?e[0]:e;return yb(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function xb(e,t){const r=[],{length:n}=e;for(let i=0;i{r=jn(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function Ab(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let a=0,o=0,u,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),mb(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const s={...r,...l},{memoize:f,memoizeOptions:d=[],argsMemoize:h=bv,argsMemoizeOptions:v=[]}=s,p=Lc(d),m=Lc(v),y=bb(i),b=f(function(){return a++,c.apply(null,arguments)},...p),x=h(function(){o++;const w=xb(y,arguments);return u=b.apply(null,w),u},...m);return Object.assign(x,{resultFunc:c,memoizedResultFunc:b,dependencies:y,dependencyRecomputations:()=>o,resetDependencyRecomputations:()=>{o=0},lastResult:()=>u,recomputations:()=>a,resetRecomputations:()=>{a=0},memoize:f,argsMemoize:h})};return Object.assign(n,{withTypes:()=>n}),n}var S=Ab(bv),Sb=Object.assign((e,t=S)=>{gb(e,`createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof e}`);const r=Object.keys(e),n=r.map(a=>e[a]);return t(n,(...a)=>a.reduce((o,u,l)=>(o[r[l]]=u,o),{}))},{withTypes:()=>Sb}),Ga={},Va={},Xa={},Kc;function Eb(){return Kc||(Kc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(n){return typeof n=="symbol"?1:n===null?2:n===void 0?3:n!==n?4:0}const r=(n,i,a)=>{if(n!==i){const o=t(n),u=t(i);if(o===u&&o===0){if(ni)return a==="desc"?-1:1}return a==="desc"?u-o:o-u}return 0};e.compareValues=r}(Xa)),Xa}var Za={},Ja={},qc;function xv(){return qc||(qc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="symbol"||r instanceof Symbol}e.isSymbol=t}(Ja)),Ja}var zc;function jb(){return zc||(zc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=xv(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function i(a,o){return Array.isArray(a)?!1:typeof a=="number"||typeof a=="boolean"||a==null||t.isSymbol(a)?!0:typeof a=="string"&&(n.test(a)||!r.test(a))||o!=null&&Object.hasOwn(o,a)}e.isKey=i}(Za)),Za}var Fc;function Tb(){return Fc||(Fc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Eb(),r=jb(),n=Ku();function i(a,o,u,l){if(a==null)return[];u=l?void 0:u,Array.isArray(a)||(a=Object.values(a)),Array.isArray(o)||(o=o==null?[null]:[o]),o.length===0&&(o=[null]),Array.isArray(u)||(u=u==null?[]:[u]),u=u.map(h=>String(h));const c=(h,v)=>{let p=h;for(let m=0;mv==null||h==null?v:typeof h=="object"&&"key"in h?Object.hasOwn(v,h.key)?v[h.key]:c(v,h.path):typeof h=="function"?h(v):Array.isArray(h)?c(v,h):typeof v=="object"?v[h]:v,f=o.map(h=>(Array.isArray(h)&&h.length===1&&(h=h[0]),h==null||typeof h=="function"||Array.isArray(h)||r.isKey(h)?h:{key:h,path:n.toPath(h)}));return a.map(h=>({original:h,criteria:f.map(v=>s(v,h))})).slice().sort((h,v)=>{for(let p=0;ph.original)}e.orderBy=i}(Va)),Va}var Qa={},Wc;function kb(){return Wc||(Wc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=1){const i=[],a=Math.floor(n),o=(u,l)=>{for(let c=0;c1&&n.isIterateeCall(a,o[0],o[1])?o=[]:u>2&&n.isIterateeCall(o[0],o[1],o[2])&&(o=[o[0]]),t.orderBy(a,r.flatten(o),["asc"])}e.sortBy=i}(Ga)),Ga}var to,Yc;function _b(){return Yc||(Yc=1,to=Cb().sortBy),to}var Mb=_b();const Si=St(Mb);var Pv=e=>e.legend.settings,Db=e=>e.legend.size,Ib=e=>e.legend.payload;S([Ib,Pv],(e,t)=>{var{itemSorter:r}=t,n=e.flat(1);return r?Si(n,r):n});var Tn=1;function Nb(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],[t,r]=g.useState({height:0,left:0,top:0,width:0}),n=g.useCallback(i=>{if(i!=null){var a=i.getBoundingClientRect(),o={height:a.height,left:a.left,top:a.top,width:a.width};(Math.abs(o.height-t.height)>Tn||Math.abs(o.left-t.left)>Tn||Math.abs(o.top-t.top)>Tn||Math.abs(o.width-t.width)>Tn)&&r({height:o.height,left:o.left,top:o.top,width:o.width})}},[t.width,t.height,t.top,t.left,...e]);return[t,n]}function Pe(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var $b=typeof Symbol=="function"&&Symbol.observable||"@@observable",Gc=$b,ro=()=>Math.random().toString(36).substring(7).split("").join("."),Rb={INIT:`@@redux/INIT${ro()}`,REPLACE:`@@redux/REPLACE${ro()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${ro()}`},Hn=Rb;function Qu(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function Ov(e,t,r){if(typeof e!="function")throw new Error(Pe(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(Pe(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Pe(1));return r(Ov)(e,t)}let n=e,i=t,a=new Map,o=a,u=0,l=!1;function c(){o===a&&(o=new Map,a.forEach((m,y)=>{o.set(y,m)}))}function s(){if(l)throw new Error(Pe(3));return i}function f(m){if(typeof m!="function")throw new Error(Pe(4));if(l)throw new Error(Pe(5));let y=!0;c();const b=u++;return o.set(b,m),function(){if(y){if(l)throw new Error(Pe(6));y=!1,c(),o.delete(b),a=null}}}function d(m){if(!Qu(m))throw new Error(Pe(7));if(typeof m.type>"u")throw new Error(Pe(8));if(typeof m.type!="string")throw new Error(Pe(17));if(l)throw new Error(Pe(9));try{l=!0,i=n(i,m)}finally{l=!1}return(a=o).forEach(b=>{b()}),m}function h(m){if(typeof m!="function")throw new Error(Pe(10));n=m,d({type:Hn.REPLACE})}function v(){const m=f;return{subscribe(y){if(typeof y!="object"||y===null)throw new Error(Pe(11));function b(){const P=y;P.next&&P.next(s())}return b(),{unsubscribe:m(b)}},[Gc](){return this}}}return d({type:Hn.INIT}),{dispatch:d,subscribe:f,getState:s,replaceReducer:h,[Gc]:v}}function Lb(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:Hn.INIT})>"u")throw new Error(Pe(12));if(typeof r(void 0,{type:Hn.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Pe(13))})}function Av(e){const t=Object.keys(e),r={};for(let a=0;a"u")throw u&&u.type,new Error(Pe(14));c[f]=v,l=l||v!==h}return l=l||n.length!==Object.keys(o).length,l?c:o}}function Yn(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function Bb(...e){return t=>(r,n)=>{const i=t(r,n);let a=()=>{throw new Error(Pe(15))};const o={getState:i.getState,dispatch:(l,...c)=>a(l,...c)},u=e.map(l=>l(o));return a=Yn(...u)(i.dispatch),{...i,dispatch:a}}}function Sv(e){return Qu(e)&&"type"in e&&typeof e.type=="string"}var Ev=Symbol.for("immer-nothing"),Vc=Symbol.for("immer-draftable"),Ue=Symbol.for("immer-state");function ut(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Ar=Object.getPrototypeOf;function ur(e){return!!e&&!!e[Ue]}function wt(e){var t;return e?jv(e)||Array.isArray(e)||!!e[Vc]||!!((t=e.constructor)!=null&&t[Vc])||ji(e)||Ti(e):!1}var Kb=Object.prototype.constructor.toString();function jv(e){if(!e||typeof e!="object")return!1;const t=Ar(e);if(t===null)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object?!0:typeof r=="function"&&Function.toString.call(r)===Kb}function Gn(e,t){Ei(e)===0?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function Ei(e){const t=e[Ue];return t?t.type_:Array.isArray(e)?1:ji(e)?2:Ti(e)?3:0}function Go(e,t){return Ei(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Tv(e,t,r){const n=Ei(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function qb(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function ji(e){return e instanceof Map}function Ti(e){return e instanceof Set}function Vt(e){return e.copy_||e.base_}function Vo(e,t){if(ji(e))return new Map(e);if(Ti(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=jv(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[Ue];let i=Reflect.ownKeys(n);for(let a=0;a1&&(e.set=e.add=e.clear=e.delete=zb),Object.freeze(e),t&&Object.entries(e).forEach(([r,n])=>es(n,!0))),e}function zb(){ut(2)}function ki(e){return Object.isFrozen(e)}var Fb={};function sr(e){const t=Fb[e];return t||ut(0,e),t}var Jr;function kv(){return Jr}function Wb(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Xc(e,t){t&&(sr("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Xo(e){Zo(e),e.drafts_.forEach(Ub),e.drafts_=null}function Zo(e){e===Jr&&(Jr=e.parent_)}function Zc(e){return Jr=Wb(Jr,e)}function Ub(e){const t=e[Ue];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Jc(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[Ue].modified_&&(Xo(t),ut(4)),wt(e)&&(e=Vn(t,e),t.parent_||Xn(t,e)),t.patches_&&sr("Patches").generateReplacementPatches_(r[Ue].base_,e,t.patches_,t.inversePatches_)):e=Vn(t,r,[]),Xo(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==Ev?e:void 0}function Vn(e,t,r){if(ki(t))return t;const n=t[Ue];if(!n)return Gn(t,(i,a)=>Qc(e,n,t,i,a,r)),t;if(n.scope_!==e)return t;if(!n.modified_)return Xn(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const i=n.copy_;let a=i,o=!1;n.type_===3&&(a=new Set(i),i.clear(),o=!0),Gn(a,(u,l)=>Qc(e,n,i,u,l,r,o)),Xn(e,i,!1),r&&e.patches_&&sr("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function Qc(e,t,r,n,i,a,o){if(ur(i)){const u=a&&t&&t.type_!==3&&!Go(t.assigned_,n)?a.concat(n):void 0,l=Vn(e,i,u);if(Tv(r,n,l),ur(l))e.canAutoFreeze_=!1;else return}else o&&r.add(i);if(wt(i)&&!ki(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Vn(e,i),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&Object.prototype.propertyIsEnumerable.call(r,n)&&Xn(e,i)}}function Xn(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&es(t,r)}function Hb(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:kv(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,a=ts;r&&(i=[n],a=Qr);const{revoke:o,proxy:u}=Proxy.revocable(i,a);return n.draft_=u,n.revoke_=o,u}var ts={get(e,t){if(t===Ue)return e;const r=Vt(e);if(!Go(r,t))return Yb(e,r,t);const n=r[t];return e.finalized_||!wt(n)?n:n===no(e.base_,t)?(io(e),e.copy_[t]=Qo(n,e)):n},has(e,t){return t in Vt(e)},ownKeys(e){return Reflect.ownKeys(Vt(e))},set(e,t,r){const n=Cv(Vt(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=no(Vt(e),t),a=i==null?void 0:i[Ue];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(qb(r,i)&&(r!==void 0||Go(e.base_,t)))return!0;io(e),Jo(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return no(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,io(e),Jo(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Vt(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){ut(11)},getPrototypeOf(e){return Ar(e.base_)},setPrototypeOf(){ut(12)}},Qr={};Gn(ts,(e,t)=>{Qr[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});Qr.deleteProperty=function(e,t){return Qr.set.call(this,e,t,void 0)};Qr.set=function(e,t,r){return ts.set.call(this,e[0],t,r,e[0])};function no(e,t){const r=e[Ue];return(r?Vt(r):e)[t]}function Yb(e,t,r){var i;const n=Cv(t,r);return n?"value"in n?n.value:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function Cv(e,t){if(!(t in e))return;let r=Ar(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Ar(r)}}function Jo(e){e.modified_||(e.modified_=!0,e.parent_&&Jo(e.parent_))}function io(e){e.copy_||(e.copy_=Vo(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var Gb=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const a=r;r=t;const o=this;return function(l=a,...c){return o.produce(l,s=>r.call(this,s,...c))}}typeof r!="function"&&ut(6),n!==void 0&&typeof n!="function"&&ut(7);let i;if(wt(t)){const a=Zc(this),o=Qo(t,void 0);let u=!0;try{i=r(o),u=!1}finally{u?Xo(a):Zo(a)}return Xc(a,n),Jc(i,a)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===Ev&&(i=void 0),this.autoFreeze_&&es(i,!0),n){const a=[],o=[];sr("Patches").generateReplacementPatches_(t,i,a,o),n(a,o)}return i}else ut(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(o,...u)=>this.produceWithPatches(o,l=>t(l,...u));let n,i;return[this.produce(t,r,(o,u)=>{n=o,i=u}),n,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){wt(e)||ut(8),ur(e)&&(e=bt(e));const t=Zc(this),r=Qo(e,void 0);return r[Ue].isManual_=!0,Zo(t),r}finishDraft(e,t){const r=e&&e[Ue];(!r||!r.isManual_)&&ut(9);const{scope_:n}=r;return Xc(n,t),Jc(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const i=t[r];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}r>-1&&(t=t.slice(r+1));const n=sr("Patches").applyPatches_;return ur(e)?n(e,t):this.produce(e,i=>n(i,t))}};function Qo(e,t){const r=ji(e)?sr("MapSet").proxyMap_(e,t):Ti(e)?sr("MapSet").proxySet_(e,t):Hb(e,t);return(t?t.scope_:kv()).drafts_.push(r),r}function bt(e){return ur(e)||ut(10,e),_v(e)}function _v(e){if(!wt(e)||ki(e))return e;const t=e[Ue];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=Vo(e,t.scope_.immer_.useStrictShallowCopy_)}else r=Vo(e,!0);return Gn(r,(n,i)=>{Tv(r,n,_v(i))}),t&&(t.finalized_=!1),r}var He=new Gb,Mv=He.produce;He.produceWithPatches.bind(He);He.setAutoFreeze.bind(He);He.setUseStrictShallowCopy.bind(He);He.applyPatches.bind(He);He.createDraft.bind(He);He.finishDraft.bind(He);function Dv(e){return({dispatch:r,getState:n})=>i=>a=>typeof a=="function"?a(r,n,e):i(a)}var Vb=Dv(),Xb=Dv,Zb=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Yn:Yn.apply(null,arguments)};function tt(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(Fe(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>Sv(n)&&n.type===e,r}var Iv=class Gr extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,Gr.prototype)}static get[Symbol.species](){return Gr}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new Gr(...t[0].concat(this)):new Gr(...t.concat(this))}};function ef(e){return wt(e)?Mv(e,()=>{}):e}function kn(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function Jb(e){return typeof e=="boolean"}var Qb=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:a=!0}=t??{};let o=new Iv;return r&&(Jb(r)?o.push(Vb):o.push(Xb(r.extraArgument))),o},ex="RTK_autoBatch",tf=e=>t=>{setTimeout(t,e)},tx=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,a=!1,o=!1;const u=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:tf(10):e.type==="callback"?e.queueNotification:tf(e.timeout),c=()=>{o=!1,a&&(a=!1,u.forEach(s=>s()))};return Object.assign({},n,{subscribe(s){const f=()=>i&&s(),d=n.subscribe(f);return u.add(s),()=>{d(),u.delete(s)}},dispatch(s){var f;try{return i=!((f=s==null?void 0:s.meta)!=null&&f[ex]),a=!i,a&&(o||(o=!0,l(c))),n.dispatch(s)}finally{i=!0}}})},rx=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new Iv(e);return n&&i.push(tx(typeof n=="object"?n:void 0)),i};function nx(e){const t=Qb(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:a=void 0,enhancers:o=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(Qu(r))u=Av(r);else throw new Error(Fe(1));let l;typeof n=="function"?l=n(t):l=t();let c=Yn;i&&(c=Zb({trace:!1,...typeof i=="object"&&i}));const s=Bb(...l),f=rx(s);let d=typeof o=="function"?o(f):f();const h=c(...d);return Ov(u,a,h)}function Nv(e){const t={},r=[];let n;const i={addCase(a,o){const u=typeof a=="string"?a:a.type;if(!u)throw new Error(Fe(28));if(u in t)throw new Error(Fe(29));return t[u]=o,i},addMatcher(a,o){return r.push({matcher:a,reducer:o}),i},addDefaultCase(a){return n=a,i}};return e(i),[t,r,n]}function ix(e){return typeof e=="function"}function ax(e,t){let[r,n,i]=Nv(t),a;if(ix(e))a=()=>ef(e());else{const u=ef(e);a=()=>u}function o(u=a(),l){let c=[r[l.type],...n.filter(({matcher:s})=>s(l)).map(({reducer:s})=>s)];return c.filter(s=>!!s).length===0&&(c=[i]),c.reduce((s,f)=>{if(f)if(ur(s)){const h=f(s,l);return h===void 0?s:h}else{if(wt(s))return Mv(s,d=>f(d,l));{const d=f(s,l);if(d===void 0){if(s===null)return s;throw Error("A case reducer on a non-draftable value must not return undefined")}return d}}return s},u)}return o.getInitialState=a,o}var ox="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",ux=(e=21)=>{let t="",r=e;for(;r--;)t+=ox[Math.random()*64|0];return t},sx=Symbol.for("rtk-slice-createasyncthunk");function lx(e,t){return`${e}/${t}`}function cx({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[sx];return function(i){const{name:a,reducerPath:o=a}=i;if(!a)throw new Error(Fe(11));const u=(typeof i.reducers=="function"?i.reducers(dx()):i.reducers)||{},l=Object.keys(u),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(P,w){const O=typeof P=="string"?P:P.type;if(!O)throw new Error(Fe(12));if(O in c.sliceCaseReducersByType)throw new Error(Fe(13));return c.sliceCaseReducersByType[O]=w,s},addMatcher(P,w){return c.sliceMatchers.push({matcher:P,reducer:w}),s},exposeAction(P,w){return c.actionCreators[P]=w,s},exposeCaseReducer(P,w){return c.sliceCaseReducersByName[P]=w,s}};l.forEach(P=>{const w=u[P],O={reducerName:P,type:lx(a,P),createNotation:typeof i.reducers=="function"};vx(w)?mx(O,w,s,t):hx(O,w,s)});function f(){const[P={},w=[],O=void 0]=typeof i.extraReducers=="function"?Nv(i.extraReducers):[i.extraReducers],A={...P,...c.sliceCaseReducersByType};return ax(i.initialState,j=>{for(let T in A)j.addCase(T,A[T]);for(let T of c.sliceMatchers)j.addMatcher(T.matcher,T.reducer);for(let T of w)j.addMatcher(T.matcher,T.reducer);O&&j.addDefaultCase(O)})}const d=P=>P,h=new Map,v=new WeakMap;let p;function m(P,w){return p||(p=f()),p(P,w)}function y(){return p||(p=f()),p.getInitialState()}function b(P,w=!1){function O(j){let T=j[P];return typeof T>"u"&&w&&(T=kn(v,O,y)),T}function A(j=d){const T=kn(h,w,()=>new WeakMap);return kn(T,j,()=>{const I={};for(const[C,_]of Object.entries(i.selectors??{}))I[C]=fx(_,j,()=>kn(v,j,y),w);return I})}return{reducerPath:P,getSelectors:A,get selectors(){return A(O)},selectSlice:O}}const x={name:a,reducer:m,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:y,...b(o),injectInto(P,{reducerPath:w,...O}={}){const A=w??o;return P.inject({reducerPath:A,reducer:m},O),{...x,...b(A,!0)}}};return x}}function fx(e,t,r,n){function i(a,...o){let u=t(a);return typeof u>"u"&&n&&(u=r()),e(u,...o)}return i.unwrapped=e,i}var nt=cx();function dx(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function hx({type:e,reducerName:t,createNotation:r},n,i){let a,o;if("reducer"in n){if(r&&!px(n))throw new Error(Fe(17));a=n.reducer,o=n.prepare}else a=n;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?tt(e,o):tt(e))}function vx(e){return e._reducerDefinitionType==="asyncThunk"}function px(e){return e._reducerDefinitionType==="reducerWithPrepare"}function mx({type:e,reducerName:t},r,n,i){if(!i)throw new Error(Fe(18));const{payloadCreator:a,fulfilled:o,pending:u,rejected:l,settled:c,options:s}=r,f=i(e,a,s);n.exposeAction(t,f),o&&n.addCase(f.fulfilled,o),u&&n.addCase(f.pending,u),l&&n.addCase(f.rejected,l),c&&n.addMatcher(f.settled,c),n.exposeCaseReducer(t,{fulfilled:o||Cn,pending:u||Cn,rejected:l||Cn,settled:c||Cn})}function Cn(){}var gx="task",$v="listener",Rv="completed",rs="cancelled",yx=`task-${rs}`,bx=`task-${Rv}`,eu=`${$v}-${rs}`,xx=`${$v}-${Rv}`,Ci=class{constructor(e){ia(this,"name","TaskAbortError");ia(this,"message");this.code=e,this.message=`${gx} ${rs} (reason: ${e})`}},ns=(e,t)=>{if(typeof e!="function")throw new TypeError(Fe(32))},Zn=()=>{},Lv=(e,t=Zn)=>(e.catch(t),e),Bv=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),rr=(e,t)=>{const r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},nr=e=>{if(e.aborted){const{reason:t}=e;throw new Ci(t)}};function Kv(e,t){let r=Zn;return new Promise((n,i)=>{const a=()=>i(new Ci(e.reason));if(e.aborted){a();return}r=Bv(e,a),t.finally(()=>r()).then(n,i)}).finally(()=>{r=Zn})}var wx=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof Ci?"cancelled":"rejected",error:r}}finally{t==null||t()}},Jn=e=>t=>Lv(Kv(e,t).then(r=>(nr(e),r))),qv=e=>{const t=Jn(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:wr}=Object,rf={},_i="listenerMiddleware",Px=(e,t)=>{const r=n=>Bv(e,()=>rr(n,e.reason));return(n,i)=>{ns(n);const a=new AbortController;r(a);const o=wx(async()=>{nr(e),nr(a.signal);const u=await n({pause:Jn(a.signal),delay:qv(a.signal),signal:a.signal});return nr(a.signal),u},()=>rr(a,bx));return i!=null&&i.autoJoin&&t.push(o.catch(Zn)),{result:Jn(e)(o),cancel(){rr(a,yx)}}}},Ox=(e,t)=>{const r=async(n,i)=>{nr(t);let a=()=>{};const u=[new Promise((l,c)=>{let s=e({predicate:n,effect:(f,d)=>{d.unsubscribe(),l([f,d.getState(),d.getOriginalState()])}});a=()=>{s(),c()}})];i!=null&&u.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await Kv(t,Promise.race(u));return nr(t),l}finally{a()}};return(n,i)=>Lv(r(n,i))},zv=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:a}=e;if(t)i=tt(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(Fe(21));return ns(a),{predicate:i,type:t,effect:a}},Fv=wr(e=>{const{type:t,predicate:r,effect:n}=zv(e);return{id:ux(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(Fe(22))}}},{withTypes:()=>Fv}),nf=(e,t)=>{const{type:r,effect:n,predicate:i}=zv(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===i)&&a.effect===n)},tu=e=>{e.pending.forEach(t=>{rr(t,eu)})},Ax=e=>()=>{e.forEach(tu),e.clear()},af=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Wv=wr(tt(`${_i}/add`),{withTypes:()=>Wv}),Sx=tt(`${_i}/removeAll`),Uv=wr(tt(`${_i}/remove`),{withTypes:()=>Uv}),Ex=(...e)=>{console.error(`${_i}/error`,...e)},hn=(e={})=>{const t=new Map,{extra:r,onError:n=Ex}=e;ns(n);const i=s=>(s.unsubscribe=()=>t.delete(s.id),t.set(s.id,s),f=>{s.unsubscribe(),f!=null&&f.cancelActive&&tu(s)}),a=s=>{const f=nf(t,s)??Fv(s);return i(f)};wr(a,{withTypes:()=>a});const o=s=>{const f=nf(t,s);return f&&(f.unsubscribe(),s.cancelActive&&tu(f)),!!f};wr(o,{withTypes:()=>o});const u=async(s,f,d,h)=>{const v=new AbortController,p=Ox(a,v.signal),m=[];try{s.pending.add(v),await Promise.resolve(s.effect(f,wr({},d,{getOriginalState:h,condition:(y,b)=>p(y,b).then(Boolean),take:p,delay:qv(v.signal),pause:Jn(v.signal),extra:r,signal:v.signal,fork:Px(v.signal,m),unsubscribe:s.unsubscribe,subscribe:()=>{t.set(s.id,s)},cancelActiveListeners:()=>{s.pending.forEach((y,b,x)=>{y!==v&&(rr(y,eu),x.delete(y))})},cancel:()=>{rr(v,eu),s.pending.delete(v)},throwIfCancelled:()=>{nr(v.signal)}})))}catch(y){y instanceof Ci||af(n,y,{raisedBy:"effect"})}finally{await Promise.all(m),rr(v,xx),s.pending.delete(v)}},l=Ax(t);return{middleware:s=>f=>d=>{if(!Sv(d))return f(d);if(Wv.match(d))return a(d.payload);if(Sx.match(d)){l();return}if(Uv.match(d))return o(d.payload);let h=s.getState();const v=()=>{if(h===rf)throw new Error(Fe(23));return h};let p;try{if(p=f(d),t.size>0){const m=s.getState(),y=Array.from(t.values());for(const b of y){let x=!1;try{x=b.predicate(d,m,h)}catch(P){x=!1,af(n,P,{raisedBy:"predicate"})}x&&u(b,d,s,v)}}}finally{h=rf}return p},startListening:a,stopListening:o,clearListeners:l}};function Fe(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var jx={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},Hv=nt({name:"chartLayout",initialState:jx,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top,e.margin.right=t.payload.right,e.margin.bottom=t.payload.bottom,e.margin.left=t.payload.left},setScale(e,t){e.scale=t.payload}}}),{setMargin:Tx,setLayout:kx,setChartSize:Cx,setScale:_x}=Hv.actions,Mx=Hv.reducer;function of(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function uf(e){for(var t=1;te*180/Math.PI,ce=(e,t,r,n)=>({x:e+Math.cos(-Qn*n)*r,y:t+Math.sin(-Qn*n)*r}),Yv=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},Rx=(e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return Math.sqrt((r-i)**2+(n-a)**2)},Lx=(e,t)=>{var{x:r,y:n}=e,{cx:i,cy:a}=t,o=Rx({x:r,y:n},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var u=(r-i)/o,l=Math.acos(u);return n>a&&(l=2*Math.PI-l),{radius:o,angle:$x(l),angleInRadian:l}},Bx=e=>{var{startAngle:t,endAngle:r}=e,n=Math.floor(t/360),i=Math.floor(r/360),a=Math.min(n,i);return{startAngle:t-a*360,endAngle:r-a*360}},Kx=(e,t)=>{var{startAngle:r,endAngle:n}=t,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return e+o*360},qx=(e,t)=>{var{x:r,y:n}=e,{radius:i,angle:a}=Lx({x:r,y:n},t),{innerRadius:o,outerRadius:u}=t;if(iu||i===0)return null;var{startAngle:l,endAngle:c}=Bx(t),s=a,f;if(l<=c){for(;s>c;)s-=360;for(;s=l&&s<=c}else{for(;s>l;)s-=360;for(;s=c&&s<=l}return f?uf(uf({},t),{},{radius:i,angle:Kx(s,t)}):null};function sf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Qe(e){for(var t=1;t{var a,o=-1,u=(a=t==null?void 0:t.length)!==null&&a!==void 0?a:0;if(u<=1||e==null)return 0;if(n==="angleAxis"&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var l=0;l0?r[l-1].coordinate:r[u-1].coordinate,s=r[l].coordinate,f=l>=u-1?r[0].coordinate:r[l+1].coordinate,d=void 0;if(ge(s-c)!==ge(f-s)){var h=[];if(ge(f-s)===ge(i[1]-i[0])){d=f;var v=s+i[1]-i[0];h[0]=Math.min(v,(v+c)/2),h[1]=Math.max(v,(v+c)/2)}else{d=c;var p=f+i[1]-i[0];h[0]=Math.min(s,(p+s)/2),h[1]=Math.max(s,(p+s)/2)}var m=[Math.min(s,(d+s)/2),Math.max(s,(d+s)/2)];if(e>m[0]&&e<=m[1]||e>=h[0]&&e<=h[1]){({index:o}=r[l]);break}}else{var y=Math.min(c,f),b=Math.max(c,f);if(e>(y+s)/2&&e<=(b+s)/2){({index:o}=r[l]);break}}}else if(t){for(var x=0;x0&&x(t[x].coordinate+t[x-1].coordinate)/2&&e<=(t[x].coordinate+t[x+1].coordinate)/2||x===u-1&&e>(t[x].coordinate+t[x-1].coordinate)/2){({index:o}=t[x]);break}}return o},Hx=(e,t,r)=>{if(t&&r){var{width:n,height:i}=r,{align:a,verticalAlign:o,layout:u}=t;if((u==="vertical"||u==="horizontal"&&o==="middle")&&a!=="center"&&D(e[a]))return Qe(Qe({},e),{},{[a]:e[a]+(n||0)});if((u==="horizontal"||u==="vertical"&&a==="center")&&o!=="middle"&&D(e[o]))return Qe(Qe({},e),{},{[o]:e[o]+(i||0)})}return e},qt=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",Gv=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,a,o=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(a=!0),u.coordinate));return i||o.push(t),a||o.push(r),o},Vv=(e,t,r)=>{if(!e)return null;var{duplicateDomain:n,type:i,range:a,scale:o,realScaleType:u,isCategorical:l,categoricalDomain:c,tickCount:s,ticks:f,niceTicks:d,axisType:h}=e;if(!o)return null;var v=u==="scaleBand"&&o.bandwidth?o.bandwidth()/2:2,p=i==="category"&&o.bandwidth?o.bandwidth()/v:0;if(p=h==="angleAxis"&&a&&a.length>=2?ge(a[0]-a[1])*2*p:p,f||d){var m=(f||d||[]).map((y,b)=>{var x=n?n.indexOf(y):y;return{coordinate:o(x)+p,value:y,offset:p,index:b}});return m.filter(y=>!We(y.coordinate))}return l&&c?c.map((y,b)=>({coordinate:o(y)+p,value:y,index:b,offset:p})):o.ticks&&s!=null?o.ticks(s).map((y,b)=>({coordinate:o(y)+p,value:y,offset:p,index:b})):o.domain().map((y,b)=>({coordinate:o(y)+p,value:n?n[y]:y,index:b,offset:p}))},lf=1e-4,Yx=e=>{var t=e.domain();if(!(!t||t.length<=2)){var r=t.length,n=e.range(),i=Math.min(n[0],n[1])-lf,a=Math.max(n[0],n[1])+lf,o=e(t[0]),u=e(t[r-1]);(oa||ua)&&e.domain([t[0],t[r-1]])}},Gx=(e,t)=>{if(!t||t.length!==2||!D(t[0])||!D(t[1]))return e;var r=Math.min(t[0],t[1]),n=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!D(e[0])||e[0]n)&&(i[1]=n),i[0]>n&&(i[0]=n),i[1]{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[o][r][0]=i,e[o][r][1]=i+u,i=e[o][r][1]):(e[o][r][0]=a,e[o][r][1]=a+u,a=e[o][r][1])}},Xx=e=>{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[a][r][0]=i,e[a][r][1]=i+o,i=e[a][r][1]):(e[a][r][0]=0,e[a][r][1]=0)}},Zx={sign:Vx,expand:C0,none:Or,silhouette:_0,wiggle:M0,positive:Xx},Jx=(e,t,r)=>{var n=Zx[r],i=k0().keys(t).value((a,o)=>+re(a,o,0)).order(Ho).offset(n);return i(e)};function Xv(e){return e==null?void 0:String(e)}function cf(e){var{axis:t,ticks:r,bandSize:n,entry:i,index:a,dataKey:o}=e;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!J(i[t.dataKey])){var u=Uh(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r[a]?r[a].coordinate+n/2:null}var l=re(i,J(o)?t.dataKey:o);return J(l)?null:t.scale(l)}var ff=e=>{var{axis:t,ticks:r,offset:n,bandSize:i,entry:a,index:o}=e;if(t.type==="category")return r[o]?r[o].coordinate+n:null;var u=re(a,t.dataKey,t.scale.domain()[o]);return J(u)?null:t.scale(u)-i/2+n},Qx=e=>{var{numericAxis:t}=e,r=t.scale.domain();if(t.type==="number"){var n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return n<=0&&i>=0?0:i<0?i:n}return r[0]},ew=e=>{var t=e.flat(2).filter(D);return[Math.min(...t),Math.max(...t)]},tw=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],rw=(e,t,r)=>{if(e!=null)return tw(Object.keys(e).reduce((n,i)=>{var a=e[i],{stackedData:o}=a,u=o.reduce((l,c)=>{var s=ew(c.slice(t,r+1));return[Math.min(l[0],s[0]),Math.max(l[1],s[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},df=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,hf=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,en=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=Si(t,s=>s.coordinate),a=1/0,o=1,u=i.length;o=i.left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height;return a?{x:e,y:t}:null}return n?qx({x:e,y:t},n):null}var iw=(e,t,r,n)=>{var i=t.find(c=>c&&c.index===r);if(i){if(e==="horizontal")return{x:i.coordinate,y:n.y};if(e==="vertical")return{x:n.x,y:i.coordinate};if(e==="centric"){var a=i.coordinate,{radius:o}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,o,a)),{},{angle:a,radius:o})}var u=i.coordinate,{angle:l}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,u,l)),{},{angle:l,radius:u})}return{x:0,y:0}},aw=(e,t)=>t==="horizontal"?e.x:t==="vertical"?e.y:t==="centric"?e.angle:e.radius,Et=e=>e.layout.width,jt=e=>e.layout.height,ow=e=>e.layout.scale,Zv=e=>e.layout.margin,is=S(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),as=S(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),Jv="data-recharts-item-index",Qv="data-recharts-item-data-key",Mi=60;function pf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function _t(e){for(var t=1;te.brush.height,ve=S([Et,jt,Zv,cw,is,as,Pv,Db],(e,t,r,n,i,a,o,u)=>{var l=a.reduce((v,p)=>{var{orientation:m}=p;if(!p.mirror&&!p.hide){var y=typeof p.width=="number"?p.width:Mi;return _t(_t({},v),{},{[m]:v[m]+y})}return v},{left:r.left||0,right:r.right||0}),c=i.reduce((v,p)=>{var{orientation:m}=p;return!p.mirror&&!p.hide?_t(_t({},v),{},{[m]:Rt(v,"".concat(m))+p.height}):v},{top:r.top||0,bottom:r.bottom||0}),s=_t(_t({},c),l),f=s.bottom;s.bottom+=n,s=Hx(s,o,u);var d=e-s.left-s.right,h=t-s.top-s.bottom;return _t(_t({brushBottom:f},s),{},{width:Math.max(d,0),height:Math.max(h,0)})}),fw=S(ve,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),ep=S(Et,jt,(e,t)=>({x:0,y:0,width:e,height:t})),dw=g.createContext(null),Ce=()=>g.useContext(dw)!=null,Di=e=>e.brush,Ii=S([Di,ve,Zv],(e,t,r)=>({height:e.height,x:D(e.x)?e.x:t.left,y:D(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:D(e.width)?e.width:t.width})),os=()=>{var e,t=Ce(),r=$(fw),n=$(Ii),i=(e=$(Di))===null||e===void 0?void 0:e.padding;return!t||!n||!i?r:{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}},hw={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},tp=()=>{var e;return(e=$(ve))!==null&&e!==void 0?e:hw},rp=()=>$(Et),np=()=>$(jt),Y=e=>e.layout.layoutType,Ni=()=>$(Y),vw={settings:{layout:"horizontal",align:"center",verticalAlign:"middle",itemSorter:"value"},size:{width:0,height:0},payload:[]},ip=nt({name:"legend",initialState:vw,reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload(e,t){e.payload.push(t.payload)},removeLegendPayload(e,t){var r=bt(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)}}}),{setLegendSize:I2,setLegendSettings:N2,addLegendPayload:ap,removeLegendPayload:op}=ip.actions,pw=ip.reducer;function ru(){return ru=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{separator:t=" : ",contentStyle:r={},itemStyle:n={},labelStyle:i={},payload:a,formatter:o,itemSorter:u,wrapperClassName:l,labelClassName:c,label:s,labelFormatter:f,accessibilityLayer:d=!1}=e,h=()=>{if(a&&a.length){var w={padding:0,margin:0},O=(u?Si(a,u):a).map((A,j)=>{if(A.type==="none")return null;var T=A.formatter||o||bw,{value:I,name:C}=A,_=I,R=C;if(T){var B=T(I,C,A,j,a);if(Array.isArray(B))[_,R]=B;else if(B!=null)_=B;else return null}var F=ao({display:"block",paddingTop:4,paddingBottom:4,color:A.color||"#000"},n);return g.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(j),style:F},dt(R)?g.createElement("span",{className:"recharts-tooltip-item-name"},R):null,dt(R)?g.createElement("span",{className:"recharts-tooltip-item-separator"},t):null,g.createElement("span",{className:"recharts-tooltip-item-value"},_),g.createElement("span",{className:"recharts-tooltip-item-unit"},A.unit||""))});return g.createElement("ul",{className:"recharts-tooltip-item-list",style:w},O)}return null},v=ao({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},r),p=ao({margin:0},i),m=!J(s),y=m?s:"",b=H("recharts-default-tooltip",l),x=H("recharts-tooltip-label",c);m&&f&&a!==void 0&&a!==null&&(y=f(s,a));var P=d?{role:"status","aria-live":"assertive"}:{};return g.createElement("div",ru({className:b,style:v},P),g.createElement("p",{className:x,style:p},g.isValidElement(y)?y:"".concat(y)),h())},Kr="recharts-tooltip-wrapper",ww={visibility:"hidden"};function Pw(e){var{coordinate:t,translateX:r,translateY:n}=e;return H(Kr,{["".concat(Kr,"-right")]:D(r)&&t&&D(t.x)&&r>=t.x,["".concat(Kr,"-left")]:D(r)&&t&&D(t.x)&&r=t.y,["".concat(Kr,"-top")]:D(n)&&t&&D(t.y)&&n0?i:0),f=r[n]+i;if(t[n])return o[n]?s:f;var d=l[n];if(d==null)return 0;if(o[n]){var h=s,v=d;return hm?Math.max(s,d):Math.max(f,d)}function Ow(e){var{translateX:t,translateY:r,useTranslate3d:n}=e;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function Aw(e){var{allowEscapeViewBox:t,coordinate:r,offsetTopLeft:n,position:i,reverseDirection:a,tooltipBox:o,useTranslate3d:u,viewBox:l}=e,c,s,f;return o.height>0&&o.width>0&&r?(s=gf({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:l,viewBoxDimension:l.width}),f=gf({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:l,viewBoxDimension:l.height}),c=Ow({translateX:s,translateY:f,useTranslate3d:u})):c=ww,{cssProperties:c,cssClasses:Pw({translateX:s,translateY:f,coordinate:r})}}function yf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function _n(e){for(var t=1;t{if(t.key==="Escape"){var r,n,i,a;this.setState({dismissed:!0,dismissedAtCoordinate:{x:(r=(n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==null&&r!==void 0?r:0,y:(i=(a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==null&&i!==void 0?i:0}})}})}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown)}componentDidUpdate(){var t,r;this.state.dismissed&&(((t=this.props.coordinate)===null||t===void 0?void 0:t.x)!==this.state.dismissedAtCoordinate.x||((r=this.props.coordinate)===null||r===void 0?void 0:r.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}render(){var{active:t,allowEscapeViewBox:r,animationDuration:n,animationEasing:i,children:a,coordinate:o,hasPayload:u,isAnimationActive:l,offset:c,position:s,reverseDirection:f,useTranslate3d:d,viewBox:h,wrapperStyle:v,lastBoundingBox:p,innerRef:m,hasPortalFromProps:y}=this.props,{cssClasses:b,cssProperties:x}=Aw({allowEscapeViewBox:r,coordinate:o,offsetTopLeft:c,position:s,reverseDirection:f,tooltipBox:{height:p.height,width:p.width},useTranslate3d:d,viewBox:h}),P=y?{}:_n(_n({transition:l&&t?"transform ".concat(n,"ms ").concat(i):void 0},x),{},{pointerEvents:"none",visibility:!this.state.dismissed&&t&&u?"visible":"hidden",position:"absolute",top:0,left:0}),w=_n(_n({},P),{},{visibility:!this.state.dismissed&&t&&u?"visible":"hidden"},v);return g.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:b,style:w,ref:m},a)}}var Tw=()=>!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout),fr={isSsr:Tw()},up=()=>$(e=>e.rootProps.accessibilityLayer);function Ye(e){return Number.isFinite(e)}function Sr(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function iu(){return iu=Object.assign?Object.assign.bind():function(e){for(var t=1;tYe(e.x)&&Ye(e.y),qr=e=>e.x,zr=e=>e.y,Mw=(e,t)=>{if(typeof e=="function")return e;var r="curve".concat(fn(e));return(r==="curveMonotone"||r==="curveBump")&&t?wf["".concat(r).concat(t==="vertical"?"Y":"X")]:wf[r]||Oi},Dw=e=>{var{type:t="linear",points:r=[],baseLine:n,layout:i,connectNulls:a=!1}=e,o=Mw(t,i),u=a?r.filter(Mn):r,l;if(Array.isArray(n)){var c=a?n.filter(f=>Mn(f)):n,s=u.map((f,d)=>xf(xf({},f),{},{base:c[d]}));return i==="vertical"?l=En().y(zr).x1(qr).x0(f=>f.base.x):l=En().x(qr).y1(zr).y0(f=>f.base.y),l.defined(Mn).curve(o),l(s)}return i==="vertical"&&D(n)?l=En().y(zr).x1(qr).x0(n):D(n)?l=En().x(qr).y1(zr).y0(n):l=ev().x(qr).y(zr),l.defined(Mn).curve(o),l(u)},us=e=>{var{className:t,points:r,path:n,pathRef:i}=e;if((!r||!r.length)&&!n)return null;var a=r&&r.length?Dw(e):n;return g.createElement("path",iu({},z(e,!1),Fu(e),{className:H("recharts-curve",t),d:a===null?void 0:a,ref:i}))},Iw=["x","y","top","left","width","height","className"];function au(){return au=Object.assign?Object.assign.bind():function(e){for(var t=1;t"M".concat(e,",").concat(i,"v").concat(n,"M").concat(a,",").concat(t,"h").concat(r),zw=e=>{var{x:t=0,y:r=0,top:n=0,left:i=0,width:a=0,height:o=0,className:u}=e,l=Bw(e,Iw),c=Nw({x:t,y:r,top:n,left:i,width:a,height:o},l);return!D(t)||!D(r)||!D(a)||!D(o)||!D(n)||!D(i)?null:g.createElement("path",au({},z(c,!0),{className:H("recharts-cross",u),d:qw(t,r,a,o,n,i)}))};function Fw(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-i:r.left+.5,y:e==="horizontal"?r.top+.5:t.y-i,width:e==="horizontal"?n:r.width-1,height:e==="horizontal"?r.height-1:n}}function Of(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ww(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}var oo={},uo={},so={},Af;function Gw(){return Af||(Af=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){if(!r||typeof r!="object")return!1;const n=Object.getPrototypeOf(r);return n===null||n===Object.prototype||Object.getPrototypeOf(n)===null?Object.prototype.toString.call(r)==="[object Object]":!1}e.isPlainObject=t}(so)),so}var Sf;function Vw(){return Sf||(Sf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Gw(),r=mv(),n=Xu(),i=Zu(),a=Gu();function o(c,s,f){return u(c,s,void 0,void 0,void 0,void 0,f)}function u(c,s,f,d,h,v,p){const m=p(c,s,f,d,h,v);if(m!==void 0)return m;if(typeof c==typeof s)switch(typeof c){case"bigint":case"string":case"boolean":case"symbol":case"undefined":return c===s;case"number":return c===s||Object.is(c,s);case"function":return c===s;case"object":return l(c,s,v,p)}return l(c,s,v,p)}function l(c,s,f,d){if(Object.is(c,s))return!0;let h=n.getTag(c),v=n.getTag(s);if(h===i.argumentsTag&&(h=i.objectTag),v===i.argumentsTag&&(v=i.objectTag),h!==v)return!1;switch(h){case i.stringTag:return c.toString()===s.toString();case i.numberTag:{const y=c.valueOf(),b=s.valueOf();return a.eq(y,b)}case i.booleanTag:case i.dateTag:case i.symbolTag:return Object.is(c.valueOf(),s.valueOf());case i.regexpTag:return c.source===s.source&&c.flags===s.flags;case i.functionTag:return c===s}f=f??new Map;const p=f.get(c),m=f.get(s);if(p!=null&&m!=null)return p===s;f.set(c,s),f.set(s,c);try{switch(h){case i.mapTag:{if(c.size!==s.size)return!1;for(const[y,b]of c.entries())if(!s.has(y)||!u(b,s.get(y),y,c,s,f,d))return!1;return!0}case i.setTag:{if(c.size!==s.size)return!1;const y=Array.from(c.values()),b=Array.from(s.values());for(let x=0;xu(P,O,void 0,c,s,f,d));if(w===-1)return!1;b.splice(w,1)}return!0}case i.arrayTag:case i.uint8ArrayTag:case i.uint8ClampedArrayTag:case i.uint16ArrayTag:case i.uint32ArrayTag:case i.bigUint64ArrayTag:case i.int8ArrayTag:case i.int16ArrayTag:case i.int32ArrayTag:case i.bigInt64ArrayTag:case i.float32ArrayTag:case i.float64ArrayTag:{if(typeof Buffer<"u"&&Buffer.isBuffer(c)!==Buffer.isBuffer(s)||c.length!==s.length)return!1;for(let y=0;ynull,n=!1,i=null,a=o=>{if(!n){if(Array.isArray(o)){if(!o.length)return;var u=o,[l,...c]=u;if(typeof l=="number"){i=e.setTimeout(a.bind(null,c),l);return}a(l),i=e.setTimeout(a.bind(null,c));return}typeof o=="object"&&(t=o,r(t)),typeof o=="function"&&o()}};return{stop:()=>{n=!0},start:o=>{n=!1,i&&(i(),i=null),a(o)},subscribe:o=>(r=o,()=>{r=()=>null}),getTimeoutController:()=>e}}var ei=1e-4,sp=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],lp=(e,t)=>e.map((r,n)=>r*t**n).reduce((r,n)=>r+n),kf=(e,t)=>r=>{var n=sp(e,t);return lp(n,r)},r1=(e,t)=>r=>{var n=sp(e,t),i=[...n.map((a,o)=>a*o).slice(1),0];return lp(i,r)},Cf=function(){for(var t,r,n,i,a=arguments.length,o=new Array(a),u=0;uparseFloat(v)))}}else o.length===4&&([t,n,r,i]=o);var c=kf(t,r),s=kf(n,i),f=r1(t,r),d=v=>v>1?1:v<0?0:v,h=v=>{for(var p=v>1?1:v,m=p,y=0;y<8;++y){var b=c(m)-p,x=f(m);if(Math.abs(b-p)0&&arguments[0]!==void 0?arguments[0]:{},{stiff:r=100,damping:n=8,dt:i=17}=t,a=(o,u,l)=>{var c=-(o-u)*r,s=l*n,f=l+(c-s)*i/1e3,d=l*i/1e3+o;return Math.abs(d-u){if(typeof e=="string")switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return Cf(e);case"spring":return n1();default:if(e.split("(")[0]==="cubic-bezier")return Cf(e)}return typeof e=="function"?e:null};function _f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Mf(e){for(var t=1;te.replace(/([A-Z])/g,t=>"-".concat(t.toLowerCase())),l1=(e,t,r)=>e.map(n=>"".concat(s1(n)," ").concat(t,"ms ").concat(r)).join(","),c1=(e,t)=>[Object.keys(e),Object.keys(t)].reduce((r,n)=>r.filter(i=>n.includes(i))),tn=(e,t)=>Object.keys(t).reduce((r,n)=>Mf(Mf({},r),{},{[n]:e(n,t[n])}),{});function Df(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Oe(e){for(var t=1;te+(t-e)*r,ou=e=>{var{from:t,to:r}=e;return t!==r},cp=(e,t,r)=>{var n=tn((i,a)=>{if(ou(a)){var[o,u]=e(a.from,a.to,a.velocity);return Oe(Oe({},a),{},{from:o,velocity:u})}return a},t);return r<1?tn((i,a)=>ou(a)?Oe(Oe({},a),{},{velocity:ti(a.velocity,n[i].velocity,r),from:ti(a.from,n[i].from,r)}):a,t):cp(e,n,r-1)};function v1(e,t,r,n,i,a){var o,u=n.reduce((d,h)=>Oe(Oe({},d),{},{[h]:{from:e[h],velocity:0,to:t[h]}}),{}),l=()=>tn((d,h)=>h.from,u),c=()=>!Object.values(u).filter(ou).length,s=null,f=d=>{o||(o=d);var h=d-o,v=h/r.dt;u=cp(r,u,v),i(Oe(Oe(Oe({},e),t),l())),o=d,c()||(s=a.setTimeout(f))};return()=>(s=a.setTimeout(f),()=>{s()})}function p1(e,t,r,n,i,a,o){var u=null,l=i.reduce((f,d)=>Oe(Oe({},f),{},{[d]:[e[d],t[d]]}),{}),c,s=f=>{c||(c=f);var d=(f-c)/n,h=tn((p,m)=>ti(...m,r(d)),l);if(a(Oe(Oe(Oe({},e),t),h)),d<1)u=o.setTimeout(s);else{var v=tn((p,m)=>ti(...m,r(1)),l);a(Oe(Oe(Oe({},e),t),v))}};return()=>(u=o.setTimeout(s),()=>{u()})}const m1=(e,t,r,n,i,a)=>{var o=c1(e,t);return r.isStepper===!0?v1(e,t,r,o,i,a):p1(e,t,r,n,o,i,a)};class g1{setTimeout(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),i=null,a=o=>{o-n>=r?t(o):typeof requestAnimationFrame=="function"&&(i=requestAnimationFrame(a))};return i=requestAnimationFrame(a),()=>{cancelAnimationFrame(i)}}}var y1=["children","begin","duration","attributeName","easing","isActive","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart","animationManager"];function uu(){return uu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{this.stopJSAnimation=c()};this.manager.start([l,o,s,i,u])}runAnimation(t){var{begin:r,duration:n,attributeName:i,to:a,easing:o,onAnimationStart:u,onAnimationEnd:l,children:c}=t;if(this.unSubscribe=this.manager.subscribe(this.handleStyleChange),typeof o=="function"||typeof c=="function"||o==="spring"){this.runJSAnimation(t);return}var s=i?{[i]:a}:a,f=l1(Object.keys(s),n,o);this.manager.start([u,r,Mt(Mt({},s),{},{transition:f}),n,l])}render(){var t=this.props,{children:r,begin:n,duration:i,attributeName:a,easing:o,isActive:u,from:l,to:c,canBegin:s,onAnimationEnd:f,shouldReAnimate:d,onAnimationReStart:h,animationManager:v}=t,p=b1(t,y1),m=g.Children.count(r),y=this.state.style;if(typeof r=="function")return r(y);if(!u||m===0||i<=0)return r;var b=x=>{var{style:P={},className:w}=x.props,O=g.cloneElement(x,Mt(Mt({},p),{},{style:Mt(Mt({},P),y),className:w}));return O};return m===1?b(g.Children.only(r)):g.createElement("div",null,g.Children.map(r,x=>b(x)))}}Jt(ss,"displayName","Animate");Jt(ss,"defaultProps",{begin:0,duration:1e3,attributeName:"",easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}});var A1=g.createContext(null);function Lt(e){var t,r,n=g.useContext(A1);return g.createElement(ss,uu({},e,{animationManager:(t=(r=e.animationManager)!==null&&r!==void 0?r:n)!==null&&t!==void 0?t:O1()}))}function ri(){return ri=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=Math.min(Math.abs(r)/2,Math.abs(n)/2),o=n>=0?1:-1,u=r>=0?1:-1,l=n>=0&&r>=0||n<0&&r<0?1:0,c;if(a>0&&i instanceof Array){for(var s=[0,0,0,0],f=0,d=4;fa?a:i[f];c="M".concat(e,",").concat(t+o*s[0]),s[0]>0&&(c+="A ".concat(s[0],",").concat(s[0],",0,0,").concat(l,",").concat(e+u*s[0],",").concat(t)),c+="L ".concat(e+r-u*s[1],",").concat(t),s[1]>0&&(c+="A ".concat(s[1],",").concat(s[1],",0,0,").concat(l,`, + `).concat(e+r,",").concat(t+o*s[1])),c+="L ".concat(e+r,",").concat(t+n-o*s[2]),s[2]>0&&(c+="A ".concat(s[2],",").concat(s[2],",0,0,").concat(l,`, + `).concat(e+r-u*s[2],",").concat(t+n)),c+="L ".concat(e+u*s[3],",").concat(t+n),s[3]>0&&(c+="A ".concat(s[3],",").concat(s[3],",0,0,").concat(l,`, + `).concat(e,",").concat(t+n-o*s[3])),c+="Z"}else if(a>0&&i===+i&&i>0){var h=Math.min(a,i);c="M ".concat(e,",").concat(t+o*h,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+u*h,",").concat(t,` + L `).concat(e+r-u*h,",").concat(t,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r,",").concat(t+o*h,` + L `).concat(e+r,",").concat(t+n-o*h,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r-u*h,",").concat(t+n,` + L `).concat(e+u*h,",").concat(t+n,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e,",").concat(t+n-o*h," Z")}else c="M ".concat(e,",").concat(t," h ").concat(r," v ").concat(n," h ").concat(-r," Z");return c},S1={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},fp=e=>{var t=it(e,S1),r=g.useRef(null),[n,i]=g.useState(-1);g.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var y=r.current.getTotalLength();y&&i(y)}catch{}},[]);var{x:a,y:o,width:u,height:l,radius:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isAnimationActive:v,isUpdateAnimationActive:p}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||u===0||l===0)return null;var m=H("recharts-rectangle",s);return p?g.createElement(Lt,{canBegin:n>0,from:{width:u,height:l,x:a,y:o},to:{width:u,height:l,x:a,y:o},duration:d,animationEasing:f,isActive:p},y=>{var{width:b,height:x,x:P,y:w}=y;return g.createElement(Lt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,isActive:v,easing:f},g.createElement("path",ri({},z(t,!0),{className:m,d:Nf(P,w,b,x,c),ref:r})))}):g.createElement("path",ri({},z(t,!0),{className:m,d:Nf(a,o,u,l,c)}))};function dp(e){var{cx:t,cy:r,radius:n,startAngle:i,endAngle:a}=e,o=ce(t,r,n,i),u=ce(t,r,n,a);return{points:[o,u],cx:t,cy:r,radius:n,startAngle:i,endAngle:a}}function su(){return su=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=ge(t-e),n=Math.min(Math.abs(t-e),359.999);return r*n},Dn=e=>{var{cx:t,cy:r,radius:n,angle:i,sign:a,isExternal:o,cornerRadius:u,cornerIsExternal:l}=e,c=u*(o?1:-1)+n,s=Math.asin(u/c)/Qn,f=l?i:i+a*s,d=ce(t,r,c,f),h=ce(t,r,n,f),v=l?i-a*s:i,p=ce(t,r,c*Math.cos(s*Qn),v);return{center:d,circleTangency:h,lineTangency:p,theta:s}},hp=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:a,endAngle:o}=e,u=E1(a,o),l=a+u,c=ce(t,r,i,a),s=ce(t,r,i,l),f="M ".concat(c.x,",").concat(c.y,` + A `).concat(i,",").concat(i,`,0, + `).concat(+(Math.abs(u)>180),",").concat(+(a>l),`, + `).concat(s.x,",").concat(s.y,` + `);if(n>0){var d=ce(t,r,n,a),h=ce(t,r,n,l);f+="L ".concat(h.x,",").concat(h.y,` + A `).concat(n,",").concat(n,`,0, + `).concat(+(Math.abs(u)>180),",").concat(+(a<=l),`, + `).concat(d.x,",").concat(d.y," Z")}else f+="L ".concat(t,",").concat(r," Z");return f},j1=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,cornerRadius:a,forceCornerRadius:o,cornerIsExternal:u,startAngle:l,endAngle:c}=e,s=ge(c-l),{circleTangency:f,lineTangency:d,theta:h}=Dn({cx:t,cy:r,radius:i,angle:l,sign:s,cornerRadius:a,cornerIsExternal:u}),{circleTangency:v,lineTangency:p,theta:m}=Dn({cx:t,cy:r,radius:i,angle:c,sign:-s,cornerRadius:a,cornerIsExternal:u}),y=u?Math.abs(l-c):Math.abs(l-c)-h-m;if(y<0)return o?"M ".concat(d.x,",").concat(d.y,` + a`).concat(a,",").concat(a,",0,0,1,").concat(a*2,`,0 + a`).concat(a,",").concat(a,",0,0,1,").concat(-a*2,`,0 + `):hp({cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:l,endAngle:c});var b="M ".concat(d.x,",").concat(d.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(f.x,",").concat(f.y,` + A`).concat(i,",").concat(i,",0,").concat(+(y>180),",").concat(+(s<0),",").concat(v.x,",").concat(v.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(p.x,",").concat(p.y,` + `);if(n>0){var{circleTangency:x,lineTangency:P,theta:w}=Dn({cx:t,cy:r,radius:n,angle:l,sign:s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),{circleTangency:O,lineTangency:A,theta:j}=Dn({cx:t,cy:r,radius:n,angle:c,sign:-s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),T=u?Math.abs(l-c):Math.abs(l-c)-w-j;if(T<0&&a===0)return"".concat(b,"L").concat(t,",").concat(r,"Z");b+="L".concat(A.x,",").concat(A.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(O.x,",").concat(O.y,` + A`).concat(n,",").concat(n,",0,").concat(+(T>180),",").concat(+(s>0),",").concat(x.x,",").concat(x.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(P.x,",").concat(P.y,"Z")}else b+="L".concat(t,",").concat(r,"Z");return b},T1={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},vp=e=>{var t=it(e,T1),{cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:o,forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s,className:f}=t;if(a0&&Math.abs(c-s)<360?p=j1({cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:Math.min(v,h/2),forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s}):p=hp({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:c,endAngle:s}),g.createElement("path",su({},z(t,!0),{className:d,d:p}))};function k1(e,t,r){var n,i,a,o;if(e==="horizontal")n=t.x,a=n,i=r.top,o=r.top+r.height;else if(e==="vertical")i=t.y,o=i,n=r.left,a=r.left+r.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var{cx:u,cy:l,innerRadius:c,outerRadius:s,angle:f}=t,d=ce(u,l,c,f),h=ce(u,l,s,f);n=d.x,i=d.y,a=h.x,o=h.y}else return dp(t);return[{x:n,y:i},{x:a,y:o}]}var fo={},ho={},vo={},$f;function C1(){return $f||($f=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=xv();function r(n){return t.isSymbol(n)?NaN:Number(n)}e.toNumber=r}(vo)),vo}var Rf;function _1(){return Rf||(Rf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=C1();function r(n){return n?(n=t.toNumber(n),n===1/0||n===-1/0?(n<0?-1:1)*Number.MAX_VALUE:n===n?n:0):n===0?n:0}e.toFinite=r}(ho)),ho}var Lf;function M1(){return Lf||(Lf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=wv(),r=_1();function n(i,a,o){o&&typeof o!="number"&&t.isIterateeCall(i,a,o)&&(a=o=void 0),i=r.toFinite(i),a===void 0?(a=i,i=0):a=r.toFinite(a),o=o===void 0?it?1:e>=t?0:NaN}function N1(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function ls(e){let t,r,n;e.length!==2?(t=Nt,r=(u,l)=>Nt(e(u),l),n=(u,l)=>e(u)-l):(t=e===Nt||e===N1?e:$1,r=e,n=e);function i(u,l,c=0,s=u.length){if(c>>1;r(u[f],l)<0?c=f+1:s=f}while(c>>1;r(u[f],l)<=0?c=f+1:s=f}while(cc&&n(u[f-1],l)>-n(u[f],l)?f-1:f}return{left:i,center:o,right:a}}function $1(){return 0}function mp(e){return e===null?NaN:+e}function*R1(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const L1=ls(Nt),vn=L1.right;ls(mp).center;class Kf extends Map{constructor(t,r=q1){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(qf(this,t))}has(t){return super.has(qf(this,t))}set(t,r){return super.set(B1(this,t),r)}delete(t){return super.delete(K1(this,t))}}function qf({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function B1({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function K1({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function q1(e){return e!==null&&typeof e=="object"?e.valueOf():e}function z1(e=Nt){if(e===Nt)return gp;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function gp(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const F1=Math.sqrt(50),W1=Math.sqrt(10),U1=Math.sqrt(2);function ni(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=F1?10:a>=W1?5:a>=U1?2:1;let u,l,c;return i<0?(c=Math.pow(10,-i)/o,u=Math.round(e*c),l=Math.round(t*c),u/ct&&--l,c=-c):(c=Math.pow(10,i)*o,u=Math.round(e/c),l=Math.round(t/c),u*ct&&--l),l0))return[];if(e===t)return[e];const n=t=i))return[];const u=a-i+1,l=new Array(u);if(n)if(o<0)for(let c=0;c=n)&&(r=n);return r}function Ff(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function yp(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?gp:z1(i);n>r;){if(n-r>600){const l=n-r+1,c=t-r+1,s=Math.log(l),f=.5*Math.exp(2*s/3),d=.5*Math.sqrt(s*f*(l-f)/l)*(c-l/2<0?-1:1),h=Math.max(r,Math.floor(t-c*f/l+d)),v=Math.min(n,Math.floor(t+(l-c)*f/l+d));yp(e,t,h,v,i)}const a=e[t];let o=r,u=n;for(Fr(e,r,t),i(e[n],a)>0&&Fr(e,r,n);o0;)--u}i(e[r],a)===0?Fr(e,r,u):(++u,Fr(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function Fr(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function H1(e,t,r){if(e=Float64Array.from(R1(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Ff(e);if(t>=1)return zf(e);var n,i=(n-1)*t,a=Math.floor(i),o=zf(yp(e,a).subarray(0,a+1)),u=Ff(e.subarray(a+1));return o+(u-o)*(i-a)}}function Y1(e,t,r=mp){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return o+(u-o)*(i-a)}}function G1(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?In(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?In(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Z1.exec(e))?new De(t[1],t[2],t[3],1):(t=J1.exec(e))?new De(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Q1.exec(e))?In(t[1],t[2],t[3],t[4]):(t=eP.exec(e))?In(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=tP.exec(e))?Xf(t[1],t[2]/100,t[3]/100,1):(t=rP.exec(e))?Xf(t[1],t[2]/100,t[3]/100,t[4]):Wf.hasOwnProperty(e)?Yf(Wf[e]):e==="transparent"?new De(NaN,NaN,NaN,0):null}function Yf(e){return new De(e>>16&255,e>>8&255,e&255,1)}function In(e,t,r,n){return n<=0&&(e=t=r=NaN),new De(e,t,r,n)}function aP(e){return e instanceof pn||(e=an(e)),e?(e=e.rgb(),new De(e.r,e.g,e.b,e.opacity)):new De}function hu(e,t,r,n){return arguments.length===1?aP(e):new De(e,t,r,n??1)}function De(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}ds(De,hu,xp(pn,{brighter(e){return e=e==null?ii:Math.pow(ii,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?rn:Math.pow(rn,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new De(ir(this.r),ir(this.g),ir(this.b),ai(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Gf,formatHex:Gf,formatHex8:oP,formatRgb:Vf,toString:Vf}));function Gf(){return`#${Qt(this.r)}${Qt(this.g)}${Qt(this.b)}`}function oP(){return`#${Qt(this.r)}${Qt(this.g)}${Qt(this.b)}${Qt((isNaN(this.opacity)?1:this.opacity)*255)}`}function Vf(){const e=ai(this.opacity);return`${e===1?"rgb(":"rgba("}${ir(this.r)}, ${ir(this.g)}, ${ir(this.b)}${e===1?")":`, ${e})`}`}function ai(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ir(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Qt(e){return e=ir(e),(e<16?"0":"")+e.toString(16)}function Xf(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new st(e,t,r,n)}function wp(e){if(e instanceof st)return new st(e.h,e.s,e.l,e.opacity);if(e instanceof pn||(e=an(e)),!e)return new st;if(e instanceof st)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,u=a-i,l=(a+i)/2;return u?(t===a?o=(r-n)/u+(r0&&l<1?0:o,new st(o,u,l,e.opacity)}function uP(e,t,r,n){return arguments.length===1?wp(e):new st(e,t,r,n??1)}function st(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}ds(st,uP,xp(pn,{brighter(e){return e=e==null?ii:Math.pow(ii,e),new st(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?rn:Math.pow(rn,e),new st(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new De(mo(e>=240?e-240:e+120,i,n),mo(e,i,n),mo(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new st(Zf(this.h),Nn(this.s),Nn(this.l),ai(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=ai(this.opacity);return`${e===1?"hsl(":"hsla("}${Zf(this.h)}, ${Nn(this.s)*100}%, ${Nn(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Zf(e){return e=(e||0)%360,e<0?e+360:e}function Nn(e){return Math.max(0,Math.min(1,e||0))}function mo(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const hs=e=>()=>e;function sP(e,t){return function(r){return e+r*t}}function lP(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function cP(e){return(e=+e)==1?Pp:function(t,r){return r-t?lP(t,r,e):hs(isNaN(t)?r:t)}}function Pp(e,t){var r=t-e;return r?sP(e,r):hs(isNaN(e)?t:e)}const Jf=function e(t){var r=cP(t);function n(i,a){var o=r((i=hu(i)).r,(a=hu(a)).r),u=r(i.g,a.g),l=r(i.b,a.b),c=Pp(i.opacity,a.opacity);return function(s){return i.r=o(s),i.g=u(s),i.b=l(s),i.opacity=c(s),i+""}}return n.gamma=e,n}(1);function fP(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),u[o]?u[o]+=a:u[++o]=a),(n=n[0])===(i=i[0])?u[o]?u[o]+=i:u[++o]=i:(u[++o]=null,l.push({i:o,x:oi(n,i)})),r=go.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function PP(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?OP:PP,l=c=null,f}function f(d){return d==null||isNaN(d=+d)?a:(l||(l=u(e.map(n),t,r)))(n(o(d)))}return f.invert=function(d){return o(i((c||(c=u(t,e.map(n),oi)))(d)))},f.domain=function(d){return arguments.length?(e=Array.from(d,ui),s()):e.slice()},f.range=function(d){return arguments.length?(t=Array.from(d),s()):t.slice()},f.rangeRound=function(d){return t=Array.from(d),r=vs,s()},f.clamp=function(d){return arguments.length?(o=d?!0:Te,s()):o!==Te},f.interpolate=function(d){return arguments.length?(r=d,s()):r},f.unknown=function(d){return arguments.length?(a=d,f):a},function(d,h){return n=d,i=h,s()}}function ps(){return $i()(Te,Te)}function AP(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function si(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Er(e){return e=si(Math.abs(e)),e?e[1]:NaN}function SP(e,t){return function(r,n){for(var i=r.length,a=[],o=0,u=e[0],l=0;i>0&&u>0&&(l+u+1>n&&(u=Math.max(1,n-l)),a.push(r.substring(i-=u,i+u)),!((l+=u+1)>n));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}function EP(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var jP=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function on(e){if(!(t=jP.exec(e)))throw new Error("invalid format: "+e);var t;return new ms({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}on.prototype=ms.prototype;function ms(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}ms.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function TP(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var Op;function kP(e,t){var r=si(e,t);if(!r)return e+"";var n=r[0],i=r[1],a=i-(Op=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+si(e,Math.max(0,t+a-1))[0]}function ed(e,t){var r=si(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const td={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:AP,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>ed(e*100,t),r:ed,s:kP,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function rd(e){return e}var nd=Array.prototype.map,id=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function CP(e){var t=e.grouping===void 0||e.thousands===void 0?rd:SP(nd.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?rd:EP(nd.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function c(f){f=on(f);var d=f.fill,h=f.align,v=f.sign,p=f.symbol,m=f.zero,y=f.width,b=f.comma,x=f.precision,P=f.trim,w=f.type;w==="n"?(b=!0,w="g"):td[w]||(x===void 0&&(x=12),P=!0,w="g"),(m||d==="0"&&h==="=")&&(m=!0,d="0",h="=");var O=p==="$"?r:p==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",A=p==="$"?n:/[%p]/.test(w)?o:"",j=td[w],T=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function I(C){var _=O,R=A,B,F,V;if(w==="c")R=j(C)+R,C="";else{C=+C;var K=C<0||1/C<0;if(C=isNaN(C)?l:j(Math.abs(C),x),P&&(C=TP(C)),K&&+C==0&&v!=="+"&&(K=!1),_=(K?v==="("?v:u:v==="-"||v==="("?"":v)+_,R=(w==="s"?id[8+Op/3]:"")+R+(K&&v==="("?")":""),T){for(B=-1,F=C.length;++BV||V>57){R=(V===46?i+C.slice(B+1):C.slice(B))+R,C=C.slice(0,B);break}}}b&&!m&&(C=t(C,1/0));var de=_.length+C.length+R.length,oe=de>1)+_+C+R+oe.slice(de);break;default:C=oe+_+C+R;break}return a(C)}return I.toString=function(){return f+""},I}function s(f,d){var h=c((f=on(f),f.type="f",f)),v=Math.max(-8,Math.min(8,Math.floor(Er(d)/3)))*3,p=Math.pow(10,-v),m=id[8+v/3];return function(y){return h(p*y)+m}}return{format:c,formatPrefix:s}}var $n,gs,Ap;_P({thousands:",",grouping:[3],currency:["$",""]});function _P(e){return $n=CP(e),gs=$n.format,Ap=$n.formatPrefix,$n}function MP(e){return Math.max(0,-Er(Math.abs(e)))}function DP(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Er(t)/3)))*3-Er(Math.abs(e)))}function IP(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Er(t)-Er(e))+1}function Sp(e,t,r,n){var i=fu(e,t,r),a;switch(n=on(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=DP(i,o))&&(n.precision=a),Ap(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=IP(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=MP(i))&&(n.precision=a-(n.type==="%")*2);break}}return gs(n)}function zt(e){var t=e.domain;return e.ticks=function(r){var n=t();return lu(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return Sp(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],u=n[a],l,c,s=10;for(u0;){if(c=cu(o,u,r),c===l)return n[i]=o,n[a]=u,t(n);if(c>0)o=Math.floor(o/c)*c,u=Math.ceil(u/c)*c;else if(c<0)o=Math.ceil(o*c)/c,u=Math.floor(u*c)/c;else break;l=c}return e},e}function Ep(){var e=ps();return e.copy=function(){return mn(e,Ep())},at.apply(e,arguments),zt(e)}function jp(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,ui),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return jp(e).unknown(t)},e=arguments.length?Array.from(e,ui):[0,1],zt(r)}function Tp(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function BP(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function ud(e){return(t,r)=>-e(-t,r)}function ys(e){const t=e(ad,od),r=t.domain;let n=10,i,a;function o(){return i=BP(n),a=LP(n),r()[0]<0?(i=ud(i),a=ud(a),e(NP,$P)):e(ad,od),t}return t.base=function(u){return arguments.length?(n=+u,o()):n},t.domain=function(u){return arguments.length?(r(u),o()):r()},t.ticks=u=>{const l=r();let c=l[0],s=l[l.length-1];const f=s0){for(;d<=h;++d)for(v=1;vs)break;y.push(p)}}else for(;d<=h;++d)for(v=n-1;v>=1;--v)if(p=d>0?v/a(-d):v*a(d),!(ps)break;y.push(p)}y.length*2{if(u==null&&(u=10),l==null&&(l=n===10?"s":","),typeof l!="function"&&(!(n%1)&&(l=on(l)).precision==null&&(l.trim=!0),l=gs(l)),u===1/0)return l;const c=Math.max(1,n*u/t.ticks().length);return s=>{let f=s/a(Math.round(i(s)));return f*nr(Tp(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function kp(){const e=ys($i()).domain([1,10]);return e.copy=()=>mn(e,kp()).base(e.base()),at.apply(e,arguments),e}function sd(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function ld(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function bs(e){var t=1,r=e(sd(t),ld(t));return r.constant=function(n){return arguments.length?e(sd(t=+n),ld(t)):t},zt(r)}function Cp(){var e=bs($i());return e.copy=function(){return mn(e,Cp()).constant(e.constant())},at.apply(e,arguments)}function cd(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function KP(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function qP(e){return e<0?-e*e:e*e}function xs(e){var t=e(Te,Te),r=1;function n(){return r===1?e(Te,Te):r===.5?e(KP,qP):e(cd(r),cd(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},zt(t)}function ws(){var e=xs($i());return e.copy=function(){return mn(e,ws()).exponent(e.exponent())},at.apply(e,arguments),e}function zP(){return ws.apply(null,arguments).exponent(.5)}function fd(e){return Math.sign(e)*e*e}function FP(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function _p(){var e=ps(),t=[0,1],r=!1,n;function i(a){var o=FP(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(fd(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,ui)).map(fd)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return _p(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},at.apply(i,arguments),zt(i)}function Mp(){var e=[],t=[],r=[],n;function i(){var o=0,u=Math.max(1,t.length);for(r=new Array(u-1);++o0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[c-1],n[c]]},o.unknown=function(l){return arguments.length&&(a=l),o},o.thresholds=function(){return n.slice()},o.copy=function(){return Dp().domain([e,t]).range(i).unknown(a)},at.apply(zt(o),arguments)}function Ip(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[vn(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return Ip().domain(e).range(t).unknown(r)},at.apply(i,arguments)}const yo=new Date,bo=new Date;function pe(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),u=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,u)=>{const l=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a0))return l;let c;do l.push(c=new Date(+a)),t(a,u),e(a);while(cpe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,u)=>{if(o>=o)if(u<0)for(;++u<=0;)for(;t(o,-1),!a(o););else for(;--u>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(yo.setTime(+a),bo.setTime(+o),e(yo),e(bo),Math.floor(r(yo,bo))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const li=pe(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);li.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?pe(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):li);li.range;const gt=1e3,et=gt*60,yt=et*60,Pt=yt*24,Ps=Pt*7,dd=Pt*30,xo=Pt*365,er=pe(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*gt)},(e,t)=>(t-e)/gt,e=>e.getUTCSeconds());er.range;const Os=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getMinutes());Os.range;const As=pe(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getUTCMinutes());As.range;const Ss=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt-e.getMinutes()*et)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getHours());Ss.range;const Es=pe(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getUTCHours());Es.range;const gn=pe(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*et)/Pt,e=>e.getDate()-1);gn.range;const Ri=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Pt,e=>e.getUTCDate()-1);Ri.range;const Np=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Pt,e=>Math.floor(e/Pt));Np.range;function dr(e){return pe(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*et)/Ps)}const Li=dr(0),ci=dr(1),WP=dr(2),UP=dr(3),jr=dr(4),HP=dr(5),YP=dr(6);Li.range;ci.range;WP.range;UP.range;jr.range;HP.range;YP.range;function hr(e){return pe(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Ps)}const Bi=hr(0),fi=hr(1),GP=hr(2),VP=hr(3),Tr=hr(4),XP=hr(5),ZP=hr(6);Bi.range;fi.range;GP.range;VP.range;Tr.range;XP.range;ZP.range;const js=pe(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());js.range;const Ts=pe(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Ts.range;const Ot=pe(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Ot.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});Ot.range;const At=pe(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());At.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});At.range;function $p(e,t,r,n,i,a){const o=[[er,1,gt],[er,5,5*gt],[er,15,15*gt],[er,30,30*gt],[a,1,et],[a,5,5*et],[a,15,15*et],[a,30,30*et],[i,1,yt],[i,3,3*yt],[i,6,6*yt],[i,12,12*yt],[n,1,Pt],[n,2,2*Pt],[r,1,Ps],[t,1,dd],[t,3,3*dd],[e,1,xo]];function u(c,s,f){const d=sm).right(o,d);if(h===o.length)return e.every(fu(c/xo,s/xo,f));if(h===0)return li.every(Math.max(fu(c,s,f),1));const[v,p]=o[d/o[h-1][2]53)return null;"w"in k||(k.w=1),"Z"in k?(Q=Po(Wr(k.y,0,1)),Ne=Q.getUTCDay(),Q=Ne>4||Ne===0?fi.ceil(Q):fi(Q),Q=Ri.offset(Q,(k.V-1)*7),k.y=Q.getUTCFullYear(),k.m=Q.getUTCMonth(),k.d=Q.getUTCDate()+(k.w+6)%7):(Q=wo(Wr(k.y,0,1)),Ne=Q.getDay(),Q=Ne>4||Ne===0?ci.ceil(Q):ci(Q),Q=gn.offset(Q,(k.V-1)*7),k.y=Q.getFullYear(),k.m=Q.getMonth(),k.d=Q.getDate()+(k.w+6)%7)}else("W"in k||"U"in k)&&("w"in k||(k.w="u"in k?k.u%7:"W"in k?1:0),Ne="Z"in k?Po(Wr(k.y,0,1)).getUTCDay():wo(Wr(k.y,0,1)).getDay(),k.m=0,k.d="W"in k?(k.w+6)%7+k.W*7-(Ne+5)%7:k.w+k.U*7-(Ne+6)%7);return"Z"in k?(k.H+=k.Z/100|0,k.M+=k.Z%100,Po(k)):wo(k)}}function j(N,q,W,k){for(var _e=0,Q=q.length,Ne=W.length,$e,Yt;_e=Ne)return-1;if($e=q.charCodeAt(_e++),$e===37){if($e=q.charAt(_e++),Yt=w[$e in hd?q.charAt(_e++):$e],!Yt||(k=Yt(N,W,k))<0)return-1}else if($e!=W.charCodeAt(k++))return-1}return k}function T(N,q,W){var k=c.exec(q.slice(W));return k?(N.p=s.get(k[0].toLowerCase()),W+k[0].length):-1}function I(N,q,W){var k=h.exec(q.slice(W));return k?(N.w=v.get(k[0].toLowerCase()),W+k[0].length):-1}function C(N,q,W){var k=f.exec(q.slice(W));return k?(N.w=d.get(k[0].toLowerCase()),W+k[0].length):-1}function _(N,q,W){var k=y.exec(q.slice(W));return k?(N.m=b.get(k[0].toLowerCase()),W+k[0].length):-1}function R(N,q,W){var k=p.exec(q.slice(W));return k?(N.m=m.get(k[0].toLowerCase()),W+k[0].length):-1}function B(N,q,W){return j(N,t,q,W)}function F(N,q,W){return j(N,r,q,W)}function V(N,q,W){return j(N,n,q,W)}function K(N){return o[N.getDay()]}function de(N){return a[N.getDay()]}function oe(N){return l[N.getMonth()]}function Ie(N){return u[N.getMonth()]}function Ge(N){return i[+(N.getHours()>=12)]}function L(N){return 1+~~(N.getMonth()/3)}function we(N){return o[N.getUTCDay()]}function Ht(N){return a[N.getUTCDay()]}function Ve(N){return l[N.getUTCMonth()]}function Py(N){return u[N.getUTCMonth()]}function Oy(N){return i[+(N.getUTCHours()>=12)]}function Ay(N){return 1+~~(N.getUTCMonth()/3)}return{format:function(N){var q=O(N+="",x);return q.toString=function(){return N},q},parse:function(N){var q=A(N+="",!1);return q.toString=function(){return N},q},utcFormat:function(N){var q=O(N+="",P);return q.toString=function(){return N},q},utcParse:function(N){var q=A(N+="",!0);return q.toString=function(){return N},q}}}var hd={"-":"",_:" ",0:"0"},be=/^\s*\d+/,nO=/^%/,iO=/[\\^$*+?|[\]().{}]/g;function U(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function oO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function uO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function sO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function lO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function cO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function vd(e,t,r){var n=be.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function pd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function fO(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function dO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function hO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function md(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function vO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function gd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function pO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function mO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function gO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function yO(e,t,r){var n=be.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function bO(e,t,r){var n=nO.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function xO(e,t,r){var n=be.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function wO(e,t,r){var n=be.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function yd(e,t){return U(e.getDate(),t,2)}function PO(e,t){return U(e.getHours(),t,2)}function OO(e,t){return U(e.getHours()%12||12,t,2)}function AO(e,t){return U(1+gn.count(Ot(e),e),t,3)}function Rp(e,t){return U(e.getMilliseconds(),t,3)}function SO(e,t){return Rp(e,t)+"000"}function EO(e,t){return U(e.getMonth()+1,t,2)}function jO(e,t){return U(e.getMinutes(),t,2)}function TO(e,t){return U(e.getSeconds(),t,2)}function kO(e){var t=e.getDay();return t===0?7:t}function CO(e,t){return U(Li.count(Ot(e)-1,e),t,2)}function Lp(e){var t=e.getDay();return t>=4||t===0?jr(e):jr.ceil(e)}function _O(e,t){return e=Lp(e),U(jr.count(Ot(e),e)+(Ot(e).getDay()===4),t,2)}function MO(e){return e.getDay()}function DO(e,t){return U(ci.count(Ot(e)-1,e),t,2)}function IO(e,t){return U(e.getFullYear()%100,t,2)}function NO(e,t){return e=Lp(e),U(e.getFullYear()%100,t,2)}function $O(e,t){return U(e.getFullYear()%1e4,t,4)}function RO(e,t){var r=e.getDay();return e=r>=4||r===0?jr(e):jr.ceil(e),U(e.getFullYear()%1e4,t,4)}function LO(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+U(t/60|0,"0",2)+U(t%60,"0",2)}function bd(e,t){return U(e.getUTCDate(),t,2)}function BO(e,t){return U(e.getUTCHours(),t,2)}function KO(e,t){return U(e.getUTCHours()%12||12,t,2)}function qO(e,t){return U(1+Ri.count(At(e),e),t,3)}function Bp(e,t){return U(e.getUTCMilliseconds(),t,3)}function zO(e,t){return Bp(e,t)+"000"}function FO(e,t){return U(e.getUTCMonth()+1,t,2)}function WO(e,t){return U(e.getUTCMinutes(),t,2)}function UO(e,t){return U(e.getUTCSeconds(),t,2)}function HO(e){var t=e.getUTCDay();return t===0?7:t}function YO(e,t){return U(Bi.count(At(e)-1,e),t,2)}function Kp(e){var t=e.getUTCDay();return t>=4||t===0?Tr(e):Tr.ceil(e)}function GO(e,t){return e=Kp(e),U(Tr.count(At(e),e)+(At(e).getUTCDay()===4),t,2)}function VO(e){return e.getUTCDay()}function XO(e,t){return U(fi.count(At(e)-1,e),t,2)}function ZO(e,t){return U(e.getUTCFullYear()%100,t,2)}function JO(e,t){return e=Kp(e),U(e.getUTCFullYear()%100,t,2)}function QO(e,t){return U(e.getUTCFullYear()%1e4,t,4)}function eA(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Tr(e):Tr.ceil(e),U(e.getUTCFullYear()%1e4,t,4)}function tA(){return"+0000"}function xd(){return"%"}function wd(e){return+e}function Pd(e){return Math.floor(+e/1e3)}var gr,qp,zp;rA({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function rA(e){return gr=rO(e),qp=gr.format,gr.parse,zp=gr.utcFormat,gr.utcParse,gr}function nA(e){return new Date(e)}function iA(e){return e instanceof Date?+e:+new Date(+e)}function ks(e,t,r,n,i,a,o,u,l,c){var s=ps(),f=s.invert,d=s.domain,h=c(".%L"),v=c(":%S"),p=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),b=c("%b %d"),x=c("%B"),P=c("%Y");function w(O){return(l(O)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>H1(e,a/n))},r.copy=function(){return Hp(t).domain(e)},Tt.apply(r,arguments)}function qi(){var e=0,t=.5,r=1,n=1,i,a,o,u,l,c=Te,s,f=!1,d;function h(p){return isNaN(p=+p)?d:(p=.5+((p=+s(p))-a)*(n*pe.chartData,Ms=S([vr],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),Ds=(e,t,r,n)=>n?Ms(e):vr(e);function kr(e){if(Array.isArray(e)&&e.length===2){var[t,r]=e;if(Ye(t)&&Ye(r))return!0}return!1}function Od(e,t,r){return r?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function lA(e,t){if(t&&typeof e!="function"&&Array.isArray(e)&&e.length===2){var[r,n]=e,i,a;if(Ye(r))i=r;else if(typeof r=="function")return;if(Ye(n))a=n;else if(typeof n=="function")return;var o=[i,a];if(kr(o))return o}}function cA(e,t,r){if(!(!r&&t==null)){if(typeof e=="function"&&t!=null)try{var n=e(t,r);if(kr(n))return Od(n,t,r)}catch{}if(Array.isArray(e)&&e.length===2){var[i,a]=e,o,u;if(i==="auto")t!=null&&(o=Math.min(...t));else if(D(i))o=i;else if(typeof i=="function")try{t!=null&&(o=i(t==null?void 0:t[0]))}catch{}else if(typeof i=="string"&&df.test(i)){var l=df.exec(i);if(l==null||t==null)o=void 0;else{var c=+l[1];o=t[0]-c}}else o=t==null?void 0:t[0];if(a==="auto")t!=null&&(u=Math.max(...t));else if(D(a))u=a;else if(typeof a=="function")try{t!=null&&(u=a(t==null?void 0:t[1]))}catch{}else if(typeof a=="string"&&hf.test(a)){var s=hf.exec(a);if(s==null||t==null)u=void 0;else{var f=+s[1];u=t[1]+f}}else u=t==null?void 0:t[1];var d=[o,u];if(kr(d))return t==null?d:Od(d,t,r)}}}var Dr=1e9,fA={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Ns,ne=!0,rt="[DecimalError] ",ar=rt+"Invalid argument: ",Is=rt+"Exponent out of range: ",Ir=Math.floor,Xt=Math.pow,dA=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,ze,me=1e7,te=7,Xp=9007199254740991,di=Ir(Xp/te),M={};M.absoluteValue=M.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};M.comparedTo=M.cmp=function(e){var t,r,n,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};M.decimalPlaces=M.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*te;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};M.dividedBy=M.div=function(e){return xt(this,new this.constructor(e))};M.dividedToIntegerBy=M.idiv=function(e){var t=this,r=t.constructor;return Z(xt(t,new r(e),0,1),r.precision)};M.equals=M.eq=function(e){return!this.cmp(e)};M.exponent=function(){return fe(this)};M.greaterThan=M.gt=function(e){return this.cmp(e)>0};M.greaterThanOrEqualTo=M.gte=function(e){return this.cmp(e)>=0};M.isInteger=M.isint=function(){return this.e>this.d.length-2};M.isNegative=M.isneg=function(){return this.s<0};M.isPositive=M.ispos=function(){return this.s>0};M.isZero=function(){return this.s===0};M.lessThan=M.lt=function(e){return this.cmp(e)<0};M.lessThanOrEqualTo=M.lte=function(e){return this.cmp(e)<1};M.logarithm=M.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(ze))throw Error(rt+"NaN");if(r.s<1)throw Error(rt+(r.s?"NaN":"-Infinity"));return r.eq(ze)?new n(0):(ne=!1,t=xt(un(r,a),un(e,a),a),ne=!0,Z(t,i))};M.minus=M.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Qp(t,e):Zp(t,(e.s=-e.s,e))};M.modulo=M.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(rt+"NaN");return r.s?(ne=!1,t=xt(r,e,0,1).times(e),ne=!0,r.minus(t)):Z(new n(r),i)};M.naturalExponential=M.exp=function(){return Jp(this)};M.naturalLogarithm=M.ln=function(){return un(this)};M.negated=M.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};M.plus=M.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Zp(t,e):Qp(t,(e.s=-e.s,e))};M.precision=M.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(ar+e);if(t=fe(i)+1,n=i.d.length-1,r=n*te+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};M.squareRoot=M.sqrt=function(){var e,t,r,n,i,a,o,u=this,l=u.constructor;if(u.s<1){if(!u.s)return new l(0);throw Error(rt+"NaN")}for(e=fe(u),ne=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=ct(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Ir((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new l(t)):n=new l(i.toString()),r=l.precision,i=o=r+3;;)if(a=n,n=a.plus(xt(u,a,o+2)).times(.5),ct(a.d).slice(0,o)===(t=ct(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(Z(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;o+=4}return ne=!0,Z(n,r)};M.times=M.mul=function(e){var t,r,n,i,a,o,u,l,c,s=this,f=s.constructor,d=s.d,h=(e=new f(e)).d;if(!s.s||!e.s)return new f(0);for(e.s*=s.s,r=s.e+e.e,l=d.length,c=h.length,l=0;){for(t=0,i=l+n;i>n;)u=a[i]+h[n]*d[i-n-1]+t,a[i--]=u%me|0,t=u/me|0;a[i]=(a[i]+t)%me|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,ne?Z(e,f.precision):e};M.toDecimalPlaces=M.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(ht(e,0,Dr),t===void 0?t=n.rounding:ht(t,0,8),Z(r,e+fe(r)+1,t))};M.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=lr(n,!0):(ht(e,0,Dr),t===void 0?t=i.rounding:ht(t,0,8),n=Z(new i(n),e+1,t),r=lr(n,!0,e+1)),r};M.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?lr(i):(ht(e,0,Dr),t===void 0?t=a.rounding:ht(t,0,8),n=Z(new a(i),e+fe(i)+1,t),r=lr(n.abs(),!1,e+fe(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};M.toInteger=M.toint=function(){var e=this,t=e.constructor;return Z(new t(e),fe(e)+1,t.rounding)};M.toNumber=function(){return+this};M.toPower=M.pow=function(e){var t,r,n,i,a,o,u=this,l=u.constructor,c=12,s=+(e=new l(e));if(!e.s)return new l(ze);if(u=new l(u),!u.s){if(e.s<1)throw Error(rt+"Infinity");return u}if(u.eq(ze))return u;if(n=l.precision,e.eq(ze))return Z(u,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=u.s,o){if((r=s<0?-s:s)<=Xp){for(i=new l(ze),t=Math.ceil(n/te+4),ne=!1;r%2&&(i=i.times(u),Sd(i.d,t)),r=Ir(r/2),r!==0;)u=u.times(u),Sd(u.d,t);return ne=!0,e.s<0?new l(ze).div(i):Z(i,n)}}else if(a<0)throw Error(rt+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,ne=!1,i=e.times(un(u,n+c)),ne=!0,i=Jp(i),i.s=a,i};M.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=fe(i),n=lr(i,r<=a.toExpNeg||r>=a.toExpPos)):(ht(e,1,Dr),t===void 0?t=a.rounding:ht(t,0,8),i=Z(new a(i),e,t),r=fe(i),n=lr(i,e<=r||r<=a.toExpNeg,e)),n};M.toSignificantDigits=M.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(ht(e,1,Dr),t===void 0?t=n.rounding:ht(t,0,8)),Z(new n(r),e,t)};M.toString=M.valueOf=M.val=M.toJSON=M[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=fe(e),r=e.constructor;return lr(e,t<=r.toExpNeg||t>=r.toExpPos)};function Zp(e,t){var r,n,i,a,o,u,l,c,s=e.constructor,f=s.precision;if(!e.s||!t.s)return t.s||(t=new s(e)),ne?Z(t,f):t;if(l=e.d,c=t.d,o=e.e,i=t.e,l=l.slice(),a=o-i,a){for(a<0?(n=l,a=-a,u=c.length):(n=c,i=o,u=l.length),o=Math.ceil(f/te),u=o>u?o+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=l.length,a=c.length,u-a<0&&(a=u,n=c,c=l,l=n),r=0;a;)r=(l[--a]=l[a]+c[a]+r)/me|0,l[a]%=me;for(r&&(l.unshift(r),++i),u=l.length;l[--u]==0;)l.pop();return t.d=l,t.e=i,ne?Z(t,f):t}function ht(e,t,r){if(e!==~~e||er)throw Error(ar+e)}function ct(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(u=l=0;ui[u]?1:-1;break}return l}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var u,l,c,s,f,d,h,v,p,m,y,b,x,P,w,O,A,j,T=n.constructor,I=n.s==i.s?1:-1,C=n.d,_=i.d;if(!n.s)return new T(n);if(!i.s)throw Error(rt+"Division by zero");for(l=n.e-i.e,A=_.length,w=C.length,h=new T(I),v=h.d=[],c=0;_[c]==(C[c]||0);)++c;if(_[c]>(C[c]||0)&&--l,a==null?b=a=T.precision:o?b=a+(fe(n)-fe(i))+1:b=a,b<0)return new T(0);if(b=b/te+2|0,c=0,A==1)for(s=0,_=_[0],b++;(c1&&(_=e(_,s),C=e(C,s),A=_.length,w=C.length),P=A,p=C.slice(0,A),m=p.length;m=me/2&&++O;do s=0,u=t(_,p,A,m),u<0?(y=p[0],A!=m&&(y=y*me+(p[1]||0)),s=y/O|0,s>1?(s>=me&&(s=me-1),f=e(_,s),d=f.length,m=p.length,u=t(f,p,d,m),u==1&&(s--,r(f,A16)throw Error(Is+fe(e));if(!e.s)return new s(ze);for(ne=!1,u=f,o=new s(.03125);e.abs().gte(.1);)e=e.times(o),c+=5;for(n=Math.log(Xt(2,c))/Math.LN10*2+5|0,u+=n,r=i=a=new s(ze),s.precision=u;;){if(i=Z(i.times(e),u),r=r.times(++l),o=a.plus(xt(i,r,u)),ct(o.d).slice(0,u)===ct(a.d).slice(0,u)){for(;c--;)a=Z(a.times(a),u);return s.precision=f,t==null?(ne=!0,Z(a,f)):a}a=o}}function fe(e){for(var t=e.e*te,r=e.d[0];r>=10;r/=10)t++;return t}function Oo(e,t,r){if(t>e.LN10.sd())throw ne=!0,r&&(e.precision=r),Error(rt+"LN10 precision limit exceeded");return Z(new e(e.LN10),t)}function Dt(e){for(var t="";e--;)t+="0";return t}function un(e,t){var r,n,i,a,o,u,l,c,s,f=1,d=10,h=e,v=h.d,p=h.constructor,m=p.precision;if(h.s<1)throw Error(rt+(h.s?"NaN":"-Infinity"));if(h.eq(ze))return new p(0);if(t==null?(ne=!1,c=m):c=t,h.eq(10))return t==null&&(ne=!0),Oo(p,c);if(c+=d,p.precision=c,r=ct(v),n=r.charAt(0),a=fe(h),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)h=h.times(e),r=ct(h.d),n=r.charAt(0),f++;a=fe(h),n>1?(h=new p("0."+r),a++):h=new p(n+"."+r.slice(1))}else return l=Oo(p,c+2,m).times(a+""),h=un(new p(n+"."+r.slice(1)),c-d).plus(l),p.precision=m,t==null?(ne=!0,Z(h,m)):h;for(u=o=h=xt(h.minus(ze),h.plus(ze),c),s=Z(h.times(h),c),i=3;;){if(o=Z(o.times(s),c),l=u.plus(xt(o,new p(i),c)),ct(l.d).slice(0,c)===ct(u.d).slice(0,c))return u=u.times(2),a!==0&&(u=u.plus(Oo(p,c+2,m).times(a+""))),u=xt(u,new p(f),c),p.precision=m,t==null?(ne=!0,Z(u,m)):u;u=l,i+=2}}function Ad(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Ir(r/te),e.d=[],n=(r+1)%te,r<0&&(n+=te),ndi||e.e<-di))throw Error(Is+r)}else e.s=0,e.e=0,e.d=[0];return e}function Z(e,t,r){var n,i,a,o,u,l,c,s,f=e.d;for(o=1,a=f[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=te,i=t,c=f[s=0];else{if(s=Math.ceil((n+1)/te),a=f.length,s>=a)return e;for(c=a=f[s],o=1;a>=10;a/=10)o++;n%=te,i=n-te+o}if(r!==void 0&&(a=Xt(10,o-i-1),u=c/a%10|0,l=t<0||f[s+1]!==void 0||c%a,l=r<4?(u||l)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||l||r==6&&(n>0?i>0?c/Xt(10,o-i):0:f[s-1])%10&1||r==(e.s<0?8:7))),t<1||!f[0])return l?(a=fe(e),f.length=1,t=t-a-1,f[0]=Xt(10,(te-t%te)%te),e.e=Ir(-t/te)||0):(f.length=1,f[0]=e.e=e.s=0),e;if(n==0?(f.length=s,a=1,s--):(f.length=s+1,a=Xt(10,te-n),f[s]=i>0?(c/Xt(10,o-i)%Xt(10,i)|0)*a:0),l)for(;;)if(s==0){(f[0]+=a)==me&&(f[0]=1,++e.e);break}else{if(f[s]+=a,f[s]!=me)break;f[s--]=0,a=1}for(n=f.length;f[--n]===0;)f.pop();if(ne&&(e.e>di||e.e<-di))throw Error(Is+fe(e));return e}function Qp(e,t){var r,n,i,a,o,u,l,c,s,f,d=e.constructor,h=d.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new d(e),ne?Z(t,h):t;if(l=e.d,f=t.d,n=t.e,c=e.e,l=l.slice(),o=c-n,o){for(s=o<0,s?(r=l,o=-o,u=f.length):(r=f,n=c,u=l.length),i=Math.max(Math.ceil(h/te),u)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=l.length,u=f.length,s=i0;--i)l[u++]=0;for(i=f.length;i>o;){if(l[--i]0?a=a.charAt(0)+"."+a.slice(1)+Dt(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+Dt(-i-1)+a,r&&(n=r-o)>0&&(a+=Dt(n))):i>=o?(a+=Dt(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+Dt(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=Dt(n))),e.s<0?"-"+a:a}function Sd(e,t){if(e.length>t)return e.length=t,!0}function em(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(ar+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return Ad(o,a.toString())}else if(typeof a!="string")throw Error(ar+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,dA.test(a))Ad(o,a);else throw Error(ar+a)}if(i.prototype=M,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=em,i.config=i.set=hA,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(ar+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(ar+r+": "+n);return this}var Ns=em(fA);ze=new Ns(1);const G=Ns;var vA=e=>e,tm={},rm=e=>e===tm,Ed=e=>function t(){return arguments.length===0||arguments.length===1&&rm(arguments.length<=0?void 0:arguments[0])?t:e(...arguments)},nm=(e,t)=>e===1?t:Ed(function(){for(var r=arguments.length,n=new Array(r),i=0;io!==tm).length;return a>=e?t(...n):nm(e-a,Ed(function(){for(var o=arguments.length,u=new Array(o),l=0;lrm(s)?u.shift():s);return t(...c,...u)}))}),zi=e=>nm(e.length,e),mu=(e,t)=>{for(var r=[],n=e;nArray.isArray(t)?t.map(e):Object.keys(t).map(r=>t[r]).map(e)),mA=function(){for(var t=arguments.length,r=new Array(t),n=0;nl(u),a(...arguments))}},gu=e=>Array.isArray(e)?e.reverse():e.split("").reverse().join(""),im=e=>{var t=null,r=null;return function(){for(var n=arguments.length,i=new Array(n),a=0;a{var l;return o===((l=t)===null||l===void 0?void 0:l[u])})||(t=i,r=e(...i)),r}};function am(e){var t;return e===0?t=1:t=Math.floor(new G(e).abs().log(10).toNumber())+1,t}function om(e,t,r){for(var n=new G(e),i=0,a=[];n.lt(t)&&i<1e5;)a.push(n.toNumber()),n=n.add(r),i++;return a}zi((e,t,r)=>{var n=+e,i=+t;return n+r*(i-n)});zi((e,t,r)=>{var n=t-+e;return n=n||1/0,(r-e)/n});zi((e,t,r)=>{var n=t-+e;return n=n||1/0,Math.max(0,Math.min(1,(r-e)/n))});var um=e=>{var[t,r]=e,[n,i]=[t,r];return t>r&&([n,i]=[r,t]),[n,i]},sm=(e,t,r)=>{if(e.lte(0))return new G(0);var n=am(e.toNumber()),i=new G(10).pow(n),a=e.div(i),o=n!==1?.05:.1,u=new G(Math.ceil(a.div(o).toNumber())).add(r).mul(o),l=u.mul(i);return t?new G(l.toNumber()):new G(Math.ceil(l.toNumber()))},gA=(e,t,r)=>{var n=new G(1),i=new G(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new G(10).pow(am(e)-1),i=new G(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new G(Math.floor(e)))}else e===0?i=new G(Math.floor((t-1)/2)):r||(i=new G(Math.floor(e)));var o=Math.floor((t-1)/2),u=mA(pA(l=>i.add(new G(l-o).mul(n)).toNumber()),mu);return u(0,t)},lm=function(t,r,n,i){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((r-t)/(n-1)))return{step:new G(0),tickMin:new G(0),tickMax:new G(0)};var o=sm(new G(r).sub(t).div(n-1),i,a),u;t<=0&&r>=0?u=new G(0):(u=new G(t).add(r).div(2),u=u.sub(new G(u).mod(o)));var l=Math.ceil(u.sub(t).div(o).toNumber()),c=Math.ceil(new G(r).sub(u).div(o).toNumber()),s=l+c+1;return s>n?lm(t,r,n,i,a+1):(s0?c+(n-s):c,l=r>0?l:l+(n-s)),{step:o,tickMin:u.sub(new G(l).mul(o)),tickMax:u.add(new G(c).mul(o))})};function yA(e){var[t,r]=e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Math.max(n,2),[o,u]=um([t,r]);if(o===-1/0||u===1/0){var l=u===1/0?[o,...mu(0,n-1).map(()=>1/0)]:[...mu(0,n-1).map(()=>-1/0),u];return t>r?gu(l):l}if(o===u)return gA(o,n,i);var{step:c,tickMin:s,tickMax:f}=lm(o,u,a,i,0),d=om(s,f.add(new G(.1).mul(c)),c);return t>r?gu(d):d}function bA(e,t){var[r,n]=e,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,[a,o]=um([r,n]);if(a===-1/0||o===1/0)return[r,n];if(a===o)return[a];var u=Math.max(t,2),l=sm(new G(o).sub(a).div(u-1),i,0),c=[...om(new G(a),new G(o),l),o];return i===!1&&(c=c.map(s=>Math.round(s))),r>n?gu(c):c}var xA=im(yA),wA=im(bA),cm=e=>e.rootProps.maxBarSize,PA=e=>e.rootProps.barGap,fm=e=>e.rootProps.barCategoryGap,OA=e=>e.rootProps.barSize,yn=e=>e.rootProps.stackOffset,$s=e=>e.options.chartName,Rs=e=>e.rootProps.syncId,dm=e=>e.rootProps.syncMethod,Ls=e=>e.options.eventEmitter,pt={allowDuplicatedCategory:!0,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"category"},Be={allowDataOverflow:!1,allowDuplicatedCategory:!0,radiusAxisId:0,scale:"auto",tick:!0,tickCount:5,type:"number"},Fi=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t},AA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!1,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:pt.reversed,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:pt.type,unit:void 0},SA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:Be.type,unit:void 0},EA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:pt.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:"number",unit:void 0},jA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:"category",unit:void 0},Bs=(e,t)=>e.polarAxis.angleAxis[t]!=null?e.polarAxis.angleAxis[t]:e.layout.layoutType==="radial"?EA:AA,Ks=(e,t)=>e.polarAxis.radiusAxis[t]!=null?e.polarAxis.radiusAxis[t]:e.layout.layoutType==="radial"?jA:SA,Wi=e=>e.polarOptions,qs=S([Et,jt,ve],Yv),hm=S([Wi,qs],(e,t)=>{if(e!=null)return ke(e.innerRadius,t,0)}),vm=S([Wi,qs],(e,t)=>{if(e!=null)return ke(e.outerRadius,t,t*.8)}),TA=e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:r}=e;return[t,r]},pm=S([Wi],TA);S([Bs,pm],Fi);var mm=S([qs,hm,vm],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});S([Ks,mm],Fi);var kA=S([Y,Wi,hm,vm,Et,jt],(e,t,r,n,i,a)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var{cx:o,cy:u,startAngle:l,endAngle:c}=t;return{cx:ke(o,i,i/2),cy:ke(u,a,a/2),innerRadius:r,outerRadius:n,startAngle:l,endAngle:c,clockWise:!1}}}),ue=(e,t)=>t,bn=(e,t,r)=>r;function jd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function hi(e){for(var t=1;t{var r=e.cartesianAxis.xAxis[t];return r??Re},Le={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:yu,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,width:Mi},Wt=(e,t)=>{var r=e.cartesianAxis.yAxis[t];return r??Le},DA={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},zs=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??DA},se=(e,t,r)=>{switch(t){case"xAxis":return kt(e,r);case"yAxis":return Wt(e,r);case"zAxis":return zs(e,r);case"angleAxis":return Bs(e,r);case"radiusAxis":return Ks(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},IA=(e,t,r)=>{switch(t){case"xAxis":return kt(e,r);case"yAxis":return Wt(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},xn=(e,t,r)=>{switch(t){case"xAxis":return kt(e,r);case"yAxis":return Wt(e,r);case"angleAxis":return Bs(e,r);case"radiusAxis":return Ks(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},gm=e=>e.graphicalItems.countOfBars>0;function Fs(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var Ui=e=>e.graphicalItems.cartesianItems,NA=S([ue,bn],Fs),Ws=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),wn=S([Ui,se,NA],Ws),ym=e=>e.filter(t=>t.stackId===void 0),$A=S([wn],ym),Us=e=>e.map(t=>t.data).filter(Boolean).flat(1),RA=S([wn],Us),Hs=(e,t)=>{var{chartData:r=[],dataStartIndex:n,dataEndIndex:i}=t;return e.length>0?e:r.slice(n,i+1)},Hi=S([RA,Ds],Hs),Ys=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:re(i,n)}))):e.map(n=>({value:n})),Yi=S([Hi,se,wn],Ys);function bm(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function pr(e){return e.filter(t=>dt(t)||t instanceof Date).map(Number).filter(t=>We(t)===!1)}function LA(e,t,r){return!r||typeof t!="number"||We(t)?[]:r.length?pr(r.flatMap(n=>{var i=re(e,n.dataKey),a,o;if(Array.isArray(i)?[a,o]=i:a=o=i,!(!Ye(a)||!Ye(o)))return[t-a,t+o]})):[]}var xm=(e,t,r)=>{var n={},i=t.reduce((a,o)=>(o.stackId==null||(a[o.stackId]==null&&(a[o.stackId]=[]),a[o.stackId].push(o)),a),n);return Object.fromEntries(Object.entries(i).map(a=>{var[o,u]=a,l=u.map(c=>c.dataKey);return[o,{stackedData:Jx(e,l,r),graphicalItems:u}]}))},bu=S([Hi,wn,yn],xm),wm=(e,t,r)=>{var{dataStartIndex:n,dataEndIndex:i}=t;if(r!=="zAxis"){var a=rw(e,n,i);if(!(a!=null&&a[0]===0&&a[1]===0))return a}},BA=S([bu,vr,ue],wm),Pm=(e,t,r,n)=>r.length>0?e.flatMap(i=>r.flatMap(a=>{var o,u,l=(o=a.errorBars)===null||o===void 0?void 0:o.filter(s=>bm(n,s)),c=re(i,(u=t.dataKey)!==null&&u!==void 0?u:a.dataKey);return{value:c,errorDomain:LA(i,c,l)}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(i=>({value:re(i,t.dataKey),errorDomain:[]})):e.map(i=>({value:i,errorDomain:[]})),KA=S(Hi,se,$A,ue,Pm);function qA(e){var{value:t}=e;if(dt(t)||t instanceof Date)return t}var zA=e=>{var t=e.flatMap(n=>[n.value,n.errorDomain]).flat(1),r=pr(t);if(r.length!==0)return[Math.min(...r),Math.max(...r)]},FA=(e,t,r)=>{var n=e.map(qA).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&Wh(n))?pp(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},Gs=e=>{var t;if(e==null||!("domain"in e))return yu;if(e.domain!=null)return e.domain;if(e.ticks!=null){if(e.type==="number"){var r=pr(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:yu},Vs=function(){for(var t=arguments.length,r=new Array(t),n=0;ne.referenceElements.dots,Nr=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),WA=S([Om,ue,bn],Nr),Am=e=>e.referenceElements.areas,UA=S([Am,ue,bn],Nr),Sm=e=>e.referenceElements.lines,HA=S([Sm,ue,bn],Nr),Em=(e,t)=>{var r=pr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},YA=S(WA,ue,Em),jm=(e,t)=>{var r=pr(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},GA=S([UA,ue],jm),Tm=(e,t)=>{var r=pr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},VA=S(HA,ue,Tm),XA=S(YA,VA,GA,(e,t,r)=>Vs(e,r,t)),km=S([se],Gs),Xs=(e,t,r,n,i)=>{var a=lA(t,e.allowDataOverflow);return a??cA(t,Vs(r,i,zA(n)),e.allowDataOverflow)},ZA=S([se,km,BA,KA,XA],Xs),JA=[0,1],Zs=(e,t,r,n,i,a,o)=>{if(!(e==null||r==null||r.length===0)){var{dataKey:u,type:l}=e,c=qt(t,a);return c&&u==null?pp(0,r.length):l==="category"?FA(n,e,c):i==="expand"?JA:o}},Js=S([se,Y,Hi,Yi,yn,ue,ZA],Zs),Cm=(e,t,r,n,i)=>{if(e!=null){var{scale:a,type:o}=e;if(a==="auto")return t==="radial"&&i==="radiusAxis"?"band":t==="radial"&&i==="angleAxis"?"linear":o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?"point":o==="category"?"band":"linear";if(typeof a=="string"){var u="scale".concat(fn(a));return u in Vr?u:"point"}}},$r=S([se,Y,gm,$s,ue],Cm);function QA(e){if(e!=null){if(e in Vr)return Vr[e]();var t="scale".concat(fn(e));if(t in Vr)return Vr[t]()}}function Qs(e,t,r,n){if(!(r==null||n==null)){if(typeof e.scale=="function")return e.scale.copy().domain(r).range(n);var i=QA(t);if(i!=null){var a=i.domain(r).range(n);return Yx(a),a}}}var el=(e,t,r)=>{var n=Gs(t);if(!(r!=="auto"&&r!=="linear")){if(t!=null&&t.tickCount&&Array.isArray(n)&&(n[0]==="auto"||n[1]==="auto")&&kr(e))return xA(e,t.tickCount,t.allowDecimals);if(t!=null&&t.tickCount&&t.type==="number"&&kr(e))return wA(e,t.tickCount,t.allowDecimals)}},tl=S([Js,xn,$r],el),rl=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&kr(t)&&Array.isArray(r)&&r.length>0){var i=t[0],a=r[0],o=t[1],u=r[r.length-1];return[Math.min(i,a),Math.max(o,u)]}return t},eS=S([se,Js,tl,ue],rl),tS=S(Yi,se,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(pr(e.map(u=>u.value))).sort((u,l)=>u-l);if(n.length<2)return 1/0;var i=n[n.length-1]-n[0];if(i===0)return 1/0;for(var a=0;an,(e,t,r,n,i)=>{if(!Ye(e))return 0;var a=t==="vertical"?n.height:n.width;if(i==="gap")return e*a/2;if(i==="no-gap"){var o=ke(r,e*a),u=e*a/2;return u-o-(u-o)/a*o}return 0}),rS=(e,t)=>{var r=kt(e,t);return r==null||typeof r.padding!="string"?0:_m(e,"xAxis",t,r.padding)},nS=(e,t)=>{var r=Wt(e,t);return r==null||typeof r.padding!="string"?0:_m(e,"yAxis",t,r.padding)},iS=S(kt,rS,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var{padding:i}=e;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),aS=S(Wt,nS,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var{padding:i}=e;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),oS=S([ve,iS,Ii,Di,(e,t,r)=>r],(e,t,r,n,i)=>{var{padding:a}=n;return i?[a.left,r.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),uS=S([ve,Y,aS,Ii,Di,(e,t,r)=>r],(e,t,r,n,i,a)=>{var{padding:o}=i;return a?[n.height-o.bottom,o.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),Pn=(e,t,r,n)=>{var i;switch(t){case"xAxis":return oS(e,r,n);case"yAxis":return uS(e,r,n);case"zAxis":return(i=zs(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return pm(e);case"radiusAxis":return mm(e,r);default:return}},Mm=S([se,Pn],Fi),Rr=S([se,$r,eS,Mm],Qs);S(wn,ue,(e,t)=>e.flatMap(r=>{var n;return(n=r.errorBars)!==null&&n!==void 0?n:[]}).filter(r=>bm(t,r)));function Dm(e,t){return e.idt.id?1:0}var Gi=(e,t)=>t,Vi=(e,t,r)=>r,sS=S(is,Gi,Vi,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(Dm)),lS=S(as,Gi,Vi,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(Dm)),Im=(e,t)=>({width:e.width,height:t.height}),cS=(e,t)=>{var r=typeof t.width=="number"?t.width:Mi;return{width:r,height:e.height}},Nm=S(ve,kt,Im),fS=(e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}},dS=(e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}},hS=S(jt,ve,sS,Gi,Vi,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=Im(t,u);o==null&&(o=fS(t,n,e));var c=n==="top"&&!i||n==="bottom"&&i;a[u.id]=o-Number(c)*l.height,o+=(c?-1:1)*l.height}),a}),vS=S(Et,ve,lS,Gi,Vi,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=cS(t,u);o==null&&(o=dS(t,n,e));var c=n==="left"&&!i||n==="right"&&i;a[u.id]=o-Number(c)*l.width,o+=(c?-1:1)*l.width}),a}),pS=(e,t)=>{var r=ve(e),n=kt(e,t);if(n!=null){var i=hS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:r.left,y:0}:{x:r.left,y:a}}},mS=(e,t)=>{var r=ve(e),n=Wt(e,t);if(n!=null){var i=vS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:0,y:r.top}:{x:a,y:r.top}}},$m=S(ve,Wt,(e,t)=>{var r=typeof t.width=="number"?t.width:Mi;return{width:r,height:e.height}}),Td=(e,t,r)=>{switch(t){case"xAxis":return Nm(e,r).width;case"yAxis":return $m(e,r).height;default:return}},Rm=(e,t,r,n)=>{if(r!=null){var{allowDuplicatedCategory:i,type:a,dataKey:o}=r,u=qt(e,n),l=t.map(c=>c.value);if(o&&u&&a==="category"&&i&&Wh(l))return l}},nl=S([Y,Yi,se,ue],Rm),Lm=(e,t,r,n)=>{if(!(r==null||r.dataKey==null)){var{type:i,scale:a}=r,o=qt(e,n);if(o&&(i==="number"||a!=="auto"))return t.map(u=>u.value)}},il=S([Y,Yi,xn,ue],Lm),kd=S([Y,IA,$r,Rr,nl,il,Pn,tl,ue],(e,t,r,n,i,a,o,u,l)=>{if(t==null)return null;var c=qt(e,l);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:l,categoricalDomain:a,duplicateDomain:i,isCategorical:c,niceTicks:u,range:o,realScaleType:r,scale:n}}),gS=(e,t,r,n,i,a,o,u,l)=>{if(!(t==null||n==null)){var c=qt(e,l),{type:s,ticks:f,tickCount:d}=t,h=r==="scaleBand"&&typeof n.bandwidth=="function"?n.bandwidth()/2:2,v=s==="category"&&n.bandwidth?n.bandwidth()/h:0;v=l==="angleAxis"&&a!=null&&a.length>=2?ge(a[0]-a[1])*2*v:v;var p=f||i;if(p){var m=p.map((y,b)=>{var x=o?o.indexOf(y):y;return{index:b,coordinate:n(x)+v,value:y,offset:v}});return m.filter(y=>!We(y.coordinate))}return c&&u?u.map((y,b)=>({coordinate:n(y)+v,value:y,index:b,offset:v})):n.ticks?n.ticks(d).map(y=>({coordinate:n(y)+v,value:y,offset:v})):n.domain().map((y,b)=>({coordinate:n(y)+v,value:o?o[y]:y,index:b,offset:v}))}},Bm=S([Y,xn,$r,Rr,tl,Pn,nl,il,ue],gS),yS=(e,t,r,n,i,a,o)=>{if(!(t==null||r==null||n==null||n[0]===n[1])){var u=qt(e,o),{tickCount:l}=t,c=0;return c=o==="angleAxis"&&(n==null?void 0:n.length)>=2?ge(n[0]-n[1])*2*c:c,u&&a?a.map((s,f)=>({coordinate:r(s)+c,value:s,index:f,offset:c})):r.ticks?r.ticks(l).map(s=>({coordinate:r(s)+c,value:s,offset:c})):r.domain().map((s,f)=>({coordinate:r(s)+c,value:i?i[s]:s,index:f,offset:c}))}},Bt=S([Y,xn,Rr,Pn,nl,il,ue],yS),vt=S(se,Rr,(e,t)=>{if(!(e==null||t==null))return hi(hi({},e),{},{scale:t})}),bS=S([se,$r,Js,Mm],Qs);S((e,t,r)=>zs(e,r),bS,(e,t)=>{if(!(e==null||t==null))return hi(hi({},e),{},{scale:t})});var xS=S([Y,is,as],(e,t,r)=>{switch(e){case"horizontal":return t.some(n=>n.reversed)?"right-to-left":"left-to-right";case"vertical":return r.some(n=>n.reversed)?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}}),Km=e=>e.options.defaultTooltipEventType,qm=e=>e.options.validateTooltipEventTypes;function zm(e,t,r){if(e==null)return t;var n=e?"axis":"item";return r==null?t:r.includes(n)?n:t}function al(e,t){var r=Km(e),n=qm(e);return zm(t,r,n)}function wS(e){return $(t=>al(t,e))}var Fm=(e,t)=>{var r,n=Number(t);if(!(We(n)||t==null))return n>=0?e==null||(r=e[n])===null||r===void 0?void 0:r.value:void 0},PS=e=>e.tooltip.settings,It={active:!1,index:null,dataKey:void 0,coordinate:void 0},OS={itemInteraction:{click:It,hover:It},axisInteraction:{click:It,hover:It},keyboardInteraction:It,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},Wm=nt({name:"tooltip",initialState:OS,reducers:{addTooltipEntrySettings(e,t){e.tooltipItemPayloads.push(t.payload)},removeTooltipEntrySettings(e,t){var r=bt(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate,e.keyboardInteraction.dataKey=t.payload.activeDataKey}}}),{addTooltipEntrySettings:AS,removeTooltipEntrySettings:SS,setTooltipSettingsState:ES,setActiveMouseOverItemIndex:Um,mouseLeaveItem:jS,mouseLeaveChart:Hm,setActiveClickItemIndex:TS,setMouseOverAxisIndex:Ym,setMouseClickAxisIndex:kS,setSyncInteraction:xu,setKeyboardInteraction:wu}=Wm.actions,CS=Wm.reducer;function Cd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Rn(e){for(var t=1;t{if(t==null)return It;var i=IS(e,t,r);if(i==null)return It;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var a=e.settings.active===!0;if(NS(i)){if(a)return Rn(Rn({},i),{},{active:!0})}else if(n!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:n};return Rn(Rn({},It),{},{coordinate:i.coordinate})},ol=(e,t)=>{var r=e==null?void 0:e.index;if(r==null)return null;var n=Number(r);if(!Ye(n))return r;var i=0,a=1/0;return t.length>0&&(a=t.length-1),String(Math.max(i,Math.min(n,a)))},Vm=(e,t,r,n,i,a,o,u)=>{if(!(a==null||u==null)){var l=o[0],c=l==null?void 0:u(l.positions,a);if(c!=null)return c;var s=i==null?void 0:i[Number(a)];if(s)switch(r){case"horizontal":return{x:s.coordinate,y:(n.top+t)/2};default:return{x:(n.left+e)/2,y:s.coordinate}}}},Xm=(e,t,r,n)=>{if(t==="axis")return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i;return r==="hover"?i=e.itemInteraction.hover.dataKey:i=e.itemInteraction.click.dataKey,i==null&&n!=null?[e.tooltipItemPayloads[0]]:e.tooltipItemPayloads.filter(a=>{var o;return((o=a.settings)===null||o===void 0?void 0:o.dataKey)===i})},On=e=>e.options.tooltipPayloadSearcher,Lr=e=>e.tooltip;function _d(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Md(e){for(var t=1;t{if(!(t==null||a==null)){var{chartData:u,computedData:l,dataStartIndex:c,dataEndIndex:s}=r,f=[];return e.reduce((d,h)=>{var v,{dataDefinedOnItem:p,settings:m}=h,y=KS(p,u),b=BS(y,c,s),x=(v=m==null?void 0:m.dataKey)!==null&&v!==void 0?v:n==null?void 0:n.dataKey,P=m==null?void 0:m.nameKey,w;if(n!=null&&n.dataKey&&Array.isArray(b)&&!Array.isArray(b[0])&&o==="axis"?w=Uh(b,n.dataKey,i):w=a(b,t,l,P),Array.isArray(w))w.forEach(A=>{var j=Md(Md({},m),{},{name:A.name,unit:A.unit,color:void 0,fill:void 0});d.push(vf({tooltipEntrySettings:j,dataKey:A.dataKey,payload:A.payload,value:re(A.payload,A.dataKey),name:A.name}))});else{var O;d.push(vf({tooltipEntrySettings:m,dataKey:x,payload:w,value:re(w,x),name:(O=re(w,P))!==null&&O!==void 0?O:m==null?void 0:m.name}))}return d},f)}},xe=e=>{var t=Y(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},Br=e=>e.tooltip.settings.axisId,Ae=e=>{var t=xe(e),r=Br(e);return xn(e,t,r)},ul=S([Ae,Y,gm,$s,xe],Cm),qS=S([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),zS=S([xe,Br],Fs),Xi=S([qS,Ae,zS],Ws),FS=S([Xi],Us),mr=S([FS,vr],Hs),sl=S([mr,Ae,Xi],Ys),WS=S([Ae],Gs),US=S([mr,Xi,yn],xm),HS=S([US,vr,xe],wm),YS=S([Xi],ym),GS=S([mr,Ae,YS,xe],Pm),VS=S([Om,xe,Br],Nr),XS=S([VS,xe],Em),ZS=S([Am,xe,Br],Nr),JS=S([ZS,xe],jm),QS=S([Sm,xe,Br],Nr),eE=S([QS,xe],Tm),tE=S([XS,eE,JS],Vs),rE=S([Ae,WS,HS,GS,tE],Xs),Jm=S([Ae,Y,mr,sl,yn,xe,rE],Zs),nE=S([Jm,Ae,ul],el),iE=S([Ae,Jm,nE,xe],rl),Qm=e=>{var t=xe(e),r=Br(e),n=!1;return Pn(e,t,r,n)},eg=S([Ae,Qm],Fi),tg=S([Ae,ul,iE,eg],Qs),aE=S([Y,sl,Ae,xe],Rm),oE=S([Y,sl,Ae,xe],Lm),uE=(e,t,r,n,i,a,o,u)=>{if(t){var{type:l}=t,c=qt(e,u);if(n){var s=r==="scaleBand"&&n.bandwidth?n.bandwidth()/2:2,f=l==="category"&&n.bandwidth?n.bandwidth()/s:0;return f=u==="angleAxis"&&i!=null&&(i==null?void 0:i.length)>=2?ge(i[0]-i[1])*2*f:f,c&&o?o.map((d,h)=>({coordinate:n(d)+f,value:d,index:h,offset:f})):n.domain().map((d,h)=>({coordinate:n(d)+f,value:a?a[d]:d,index:h,offset:f}))}}},Ct=S([Y,Ae,ul,tg,Qm,aE,oE,xe],uE),ll=S([Km,qm,PS],(e,t,r)=>zm(r.shared,e,t)),rg=e=>e.tooltip.settings.trigger,cl=e=>e.tooltip.settings.defaultIndex,Zi=S([Lr,ll,rg,cl],Gm),Kt=S([Zi,mr],ol),ng=S([Ct,Kt],Fm),ig=S([Zi],e=>{if(e)return e.dataKey}),ag=S([Lr,ll,rg,cl],Xm),sE=S([Et,jt,Y,ve,Ct,cl,ag,On],Vm),lE=S([Zi,sE],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),cE=S([Zi],e=>e.active),fE=S([ag,Kt,vr,Ae,ng,On,ll],Zm),dE=S([fE],e=>{if(e!=null){var t=e.map(r=>r.payload).filter(r=>r!=null);return Array.from(new Set(t))}});function Dd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Id(e){for(var t=1;t$(Ae),gE=()=>{var e=mE(),t=$(Ct),r=$(tg);return en(Id(Id({},e),{},{scale:r}),t)},yE=()=>$($s),fl=(e,t)=>t,og=(e,t,r)=>r,dl=(e,t,r,n)=>n,bE=S(Ct,e=>Si(e,t=>t.coordinate)),hl=S([Lr,fl,og,dl],Gm),ug=S([hl,mr],ol),xE=(e,t,r)=>{if(t!=null){var n=Lr(e);return t==="axis"?r==="hover"?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:r==="hover"?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},sg=S([Lr,fl,og,dl],Xm),vi=S([Et,jt,Y,ve,Ct,dl,sg,On],Vm),wE=S([hl,vi],(e,t)=>{var r;return(r=e.coordinate)!==null&&r!==void 0?r:t}),lg=S(Ct,ug,Fm),PE=S([sg,ug,vr,Ae,lg,On,fl],Zm),OE=S([hl],e=>({isActive:e.active,activeIndex:e.index})),AE=(e,t,r,n,i,a,o,u)=>{if(!(!e||!t||!n||!i||!a)){var l=nw(e.chartX,e.chartY,t,r,u);if(l){var c=aw(l,t),s=Ux(c,o,a,n,i),f=iw(t,a,s,l);return{activeIndex:String(s),activeCoordinate:f}}}};function Pu(){return Pu=Object.assign?Object.assign.bind():function(e){for(var t=1;tg.useContext(cg),Ao={exports:{}},$d;function _E(){return $d||($d=1,function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(r=!1));function i(l,c,s){this.fn=l,this.context=c,this.once=s||!1}function a(l,c,s,f,d){if(typeof s!="function")throw new TypeError("The listener must be a function");var h=new i(s,f||l,d),v=r?r+c:c;return l._events[v]?l._events[v].fn?l._events[v]=[l._events[v],h]:l._events[v].push(h):(l._events[v]=h,l._eventsCount++),l}function o(l,c){--l._eventsCount===0?l._events=new n:delete l._events[c]}function u(){this._events=new n,this._eventsCount=0}u.prototype.eventNames=function(){var c=[],s,f;if(this._eventsCount===0)return c;for(f in s=this._events)t.call(s,f)&&c.push(r?f.slice(1):f);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(s)):c},u.prototype.listeners=function(c){var s=r?r+c:c,f=this._events[s];if(!f)return[];if(f.fn)return[f.fn];for(var d=0,h=f.length,v=new Array(h);d{e.eventEmitter==null&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),NE=fg.reducer,{createEventEmitter:$E}=fg.actions;function RE(e){return e.tooltip.syncInteraction}var LE={chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},dg=nt({name:"chartData",initialState:LE,reducers:{setChartData(e,t){if(e.chartData=t.payload,t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var{startIndex:r,endIndex:n}=t.payload;r!=null&&(e.dataStartIndex=r),n!=null&&(e.dataEndIndex=n)}}}),{setChartData:Ld,setDataStartEndIndexes:BE,setComputedData:$2}=dg.actions,KE=dg.reducer,hg=()=>{};function qE(){var e=$(Rs),t=$(Ls),r=ae(),n=$(dm),i=$(Ct),a=Ni(),o=os(),u=$(l=>l.rootProps.className);g.useEffect(()=>{if(e==null)return hg;var l=(c,s,f)=>{if(t!==f&&e===c){if(n==="index"){r(s);return}if(i!=null){var d;if(typeof n=="function"){var h={activeTooltipIndex:s.payload.index==null?void 0:Number(s.payload.index),isTooltipActive:s.payload.active,activeIndex:s.payload.index==null?void 0:Number(s.payload.index),activeLabel:s.payload.label,activeDataKey:s.payload.dataKey,activeCoordinate:s.payload.coordinate},v=n(i,h);d=i[v]}else n==="value"&&(d=i.find(O=>String(O.value)===s.payload.label));var{coordinate:p}=s.payload;if(d==null||s.payload.active===!1||p==null||o==null){r(xu({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0}));return}var{x:m,y}=p,b=Math.min(m,o.x+o.width),x=Math.min(y,o.y+o.height),P={x:a==="horizontal"?d.coordinate:b,y:a==="horizontal"?x:d.coordinate},w=xu({active:s.payload.active,coordinate:P,dataKey:s.payload.dataKey,index:String(d.index),label:s.payload.label});r(w)}}};return sn.on(Ou,l),()=>{sn.off(Ou,l)}},[u,r,t,e,n,i,a,o])}function zE(){var e=$(Rs),t=$(Ls),r=ae();g.useEffect(()=>{if(e==null)return hg;var n=(i,a,o)=>{t!==o&&e===i&&r(BE(a))};return sn.on(Rd,n),()=>{sn.off(Rd,n)}},[r,t,e])}function FE(){var e=ae();g.useEffect(()=>{e($E())},[e]),qE(),zE()}function WE(e,t,r,n,i,a){var o=$(d=>xE(d,e,t)),u=$(Ls),l=$(Rs),c=$(dm),s=$(RE),f=s==null?void 0:s.active;g.useEffect(()=>{if(!f&&l!=null&&u!=null){var d=xu({active:a,coordinate:r,dataKey:o,index:i,label:typeof n=="number"?String(n):n});sn.emit(Ou,l,d,u)}},[f,r,o,i,n,u,l,c,a])}function Bd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Kd(e){for(var t=1;t{w(ES({shared:m,trigger:y,axisId:P,active:r,defaultIndex:O}))},[w,m,y,P,r,O]);var A=os(),j=up(),T=wS(m),{activeIndex:I,isActive:C}=$(Ve=>OE(Ve,T,y,O)),_=$(Ve=>PE(Ve,T,y,O)),R=$(Ve=>lg(Ve,T,y,O)),B=$(Ve=>wE(Ve,T,y,O)),F=_,V=CE(),K=r??C,[de,oe]=Nb([F,K]),Ie=T==="axis"?R:void 0;WE(T,y,B,Ie,I,K);var Ge=x??V;if(Ge==null)return null;var L=F??qd;K||(L=qd),u&&L.length&&(L=ub(F.filter(Ve=>Ve.value!=null&&(Ve.hide!==!0||t.includeHidden)),s,GE));var we=L.length>0,Ht=g.createElement(jw,{allowEscapeViewBox:n,animationDuration:i,animationEasing:a,isAnimationActive:l,active:K,coordinate:B,hasPayload:we,offset:c,position:f,reverseDirection:d,useTranslate3d:h,viewBox:A,wrapperStyle:v,lastBoundingBox:de,innerRef:oe,hasPortalFromProps:!!x},VE(o,Kd(Kd({},t),{},{payload:L,label:Ie,active:K,coordinate:B,accessibilityLayer:j})));return g.createElement(g.Fragment,null,jy.createPortal(Ht,Ge),K&&g.createElement(kE,{cursor:p,tooltipEventType:T,coordinate:B,payload:F,index:I}))}var So={},Eo={},zd;function ZE(){return zd||(zd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=0,i={}){typeof i!="object"&&(i={});let a=null,o=null,u=null,l=0,c=null,s;const{leading:f=!1,trailing:d=!0,maxWait:h}=i,v="maxWait"in i,p=v?Math.max(Number(h)||0,n):0,m=A=>(a!==null&&(s=r.apply(o,a)),a=o=null,l=A,s),y=A=>(l=A,c=setTimeout(w,n),f&&a!==null?m(A):s),b=A=>(c=null,d&&a!==null?m(A):s),x=A=>{if(u===null)return!0;const j=A-u,T=j>=n||j<0,I=v&&A-l>=p;return T||I},P=A=>{const j=u===null?0:A-u,T=n-j,I=p-(A-l);return v?Math.min(T,I):T},w=()=>{const A=Date.now();if(x(A))return b(A);c=setTimeout(w,P(A))},O=function(...A){const j=Date.now(),T=x(j);if(a=A,o=this,u=j,T){if(c===null)return y(j);if(v)return clearTimeout(c),c=setTimeout(w,n),m(j)}return c===null&&(c=setTimeout(w,n)),s};return O.cancel=()=>{c!==null&&clearTimeout(c),l=0,u=a=o=c=null},O.flush=()=>c===null?s:b(Date.now()),O}e.debounce=t}(Eo)),Eo}var Fd;function JE(){return Fd||(Fd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=ZE();function r(n,i=0,a={}){const{leading:o=!0,trailing:u=!0}=a;return t.debounce(n,i,{leading:o,maxWait:i,trailing:u})}e.throttle=r}(So)),So}var jo,Wd;function QE(){return Wd||(Wd=1,jo=JE().throttle),jo}var ej=QE();const tj=St(ej);var Xr=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;a{var{aspect:r,initialDimension:n={width:-1,height:-1},width:i="100%",height:a="100%",minWidth:o=0,minHeight:u,maxHeight:l,children:c,debounce:s=0,id:f,className:d,onResize:h,style:v={}}=e,p=g.useRef(null),m=g.useRef();m.current=h,g.useImperativeHandle(t,()=>p.current);var[y,b]=g.useState({containerWidth:n.width,containerHeight:n.height}),x=g.useCallback((w,O)=>{b(A=>{var j=Math.round(w),T=Math.round(O);return A.containerWidth===j&&A.containerHeight===T?A:{containerWidth:j,containerHeight:T}})},[]);g.useEffect(()=>{var w=T=>{var I,{width:C,height:_}=T[0].contentRect;x(C,_),(I=m.current)===null||I===void 0||I.call(m,C,_)};s>0&&(w=tj(w,s,{trailing:!0,leading:!1}));var O=new ResizeObserver(w),{width:A,height:j}=p.current.getBoundingClientRect();return x(A,j),O.observe(p.current),()=>{O.disconnect()}},[x,s]);var P=g.useMemo(()=>{var{containerWidth:w,containerHeight:O}=y;if(w<0||O<0)return null;Xr(Zt(i)||Zt(a),`The width(%s) and height(%s) are both fixed numbers, + maybe you don't need to use a ResponsiveContainer.`,i,a),Xr(!r||r>0,"The aspect(%s) must be greater than zero.",r);var A=Zt(i)?w:i,j=Zt(a)?O:a;return r&&r>0&&(A?j=A/r:j&&(A=j*r),l&&j>l&&(j=l)),Xr(A>0||j>0,`The width(%s) and height(%s) of chart should be greater than 0, + please check the style of container, or the props width(%s) and height(%s), + or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the + height and width.`,A,j,i,a,o,u,r),g.Children.map(c,T=>g.cloneElement(T,{width:A,height:j,style:To({width:A,height:j},T.props.style)}))},[r,c,a,l,u,o,y,i]);return g.createElement("div",{id:f?"".concat(f):void 0,className:H("recharts-responsive-container",d),style:To(To({},v),{},{width:i,height:a,minWidth:o,minHeight:u,maxHeight:l}),ref:p},g.createElement("div",{style:{width:0,height:0,overflow:"visible"}},P))}),An=e=>null;An.displayName="Cell";function Hd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Au(e){for(var t=1;t{t[r]||delete t[r]}),t}var Zr=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||fr.isSsr)return{width:0,height:0};var n=cj(r),i=JSON.stringify({text:t,copyStyle:n});if(yr.widthCache[i])return yr.widthCache[i];try{var a=document.getElementById(Yd);a||(a=document.createElement("span"),a.setAttribute("id",Yd),a.setAttribute("aria-hidden","true"),document.body.appendChild(a));var o=Au(Au({},lj),n);Object.assign(a.style,o),a.textContent="".concat(t);var u=a.getBoundingClientRect(),l={width:u.width,height:u.height};return yr.widthCache[i]=l,++yr.cacheCount>sj&&(yr.cacheCount=0,yr.widthCache={}),l}catch{return{width:0,height:0}}},Gd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,Vd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,fj=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,dj=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,vg={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},hj=Object.keys(vg),br="NaN";function vj(e,t){return e*vg[t]}class Me{static parse(t){var r,[,n,i]=(r=dj.exec(t))!==null&&r!==void 0?r:[];return new Me(parseFloat(n),i??"")}constructor(t,r){this.num=t,this.unit=r,this.num=t,this.unit=r,We(t)&&(this.unit=""),r!==""&&!fj.test(r)&&(this.num=NaN,this.unit=""),hj.includes(r)&&(this.num=vj(t,r),this.unit="px")}add(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num+t.num,this.unit)}subtract(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num-t.num,this.unit)}multiply(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num*t.num,this.unit||t.unit)}divide(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num/t.num,this.unit||t.unit)}toString(){return"".concat(this.num).concat(this.unit)}isNaN(){return We(this.num)}}function pg(e){if(e.includes(br))return br;for(var t=e;t.includes("*")||t.includes("/");){var r,[,n,i,a]=(r=Gd.exec(t))!==null&&r!==void 0?r:[],o=Me.parse(n??""),u=Me.parse(a??""),l=i==="*"?o.multiply(u):o.divide(u);if(l.isNaN())return br;t=t.replace(Gd,l.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,[,s,f,d]=(c=Vd.exec(t))!==null&&c!==void 0?c:[],h=Me.parse(s??""),v=Me.parse(d??""),p=f==="+"?h.add(v):h.subtract(v);if(p.isNaN())return br;t=t.replace(Vd,p.toString())}return t}var Xd=/\(([^()]*)\)/;function pj(e){for(var t=e,r;(r=Xd.exec(t))!=null;){var[,n]=r;t=t.replace(Xd,pg(n))}return t}function mj(e){var t=e.replace(/\s+/g,"");return t=pj(t),t=pg(t),t}function gj(e){try{return mj(e)}catch{return br}}function ko(e){var t=gj(e.slice(5,-1));return t===br?"":t}var yj=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],bj=["dx","dy","angle","className","breakAll"];function Su(){return Su=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:t,breakAll:r,style:n}=e;try{var i=[];J(t)||(r?i=t.toString().split(""):i=t.toString().split(mg));var a=i.map(u=>({word:u,width:Zr(u,n).width})),o=r?0:Zr(" ",n).width;return{wordsWithComputedWidth:a,spaceWidth:o}}catch{return null}},wj=(e,t,r,n,i)=>{var{maxLines:a,children:o,style:u,breakAll:l}=e,c=D(a),s=o,f=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return C.reduce((_,R)=>{var{word:B,width:F}=R,V=_[_.length-1];if(V&&(n==null||i||V.width+F+rI.reduce((C,_)=>C.width>_.width?C:_);if(!c||i)return d;var v=d.length>a||h(d).width>Number(n);if(!v)return d;for(var p="…",m=I=>{var C=s.slice(0,I),_=gg({breakAll:l,style:u,children:C+p}).wordsWithComputedWidth,R=f(_),B=R.length>a||h(R).width>Number(n);return[B,R]},y=0,b=s.length-1,x=0,P;y<=b&&x<=s.length-1;){var w=Math.floor((y+b)/2),O=w-1,[A,j]=m(O),[T]=m(w);if(!A&&!T&&(y=w+1),A&&T&&(b=w-1),!A&&T){P=j;break}x++}return P||d},Jd=e=>{var t=J(e)?[]:e.toString().split(mg);return[{words:t}]},Pj=e=>{var{width:t,scaleToFit:r,children:n,style:i,breakAll:a,maxLines:o}=e;if((t||r)&&!fr.isSsr){var u,l,c=gg({breakAll:a,children:n,style:i});if(c){var{wordsWithComputedWidth:s,spaceWidth:f}=c;u=s,l=f}else return Jd(n);return wj({breakAll:a,children:n,maxLines:o,style:i},u,l,t,r)}return Jd(n)},Qd="#808080",Ji=g.forwardRef((e,t)=>{var{x:r=0,y:n=0,lineHeight:i="1em",capHeight:a="0.71em",scaleToFit:o=!1,textAnchor:u="start",verticalAnchor:l="end",fill:c=Qd}=e,s=Zd(e,yj),f=g.useMemo(()=>Pj({breakAll:s.breakAll,children:s.children,maxLines:s.maxLines,scaleToFit:o,style:s.style,width:s.width}),[s.breakAll,s.children,s.maxLines,o,s.style,s.width]),{dx:d,dy:h,angle:v,className:p,breakAll:m}=s,y=Zd(s,bj);if(!dt(r)||!dt(n))return null;var b=r+(D(d)?d:0),x=n+(D(h)?h:0),P;switch(l){case"start":P=ko("calc(".concat(a,")"));break;case"middle":P=ko("calc(".concat((f.length-1)/2," * -").concat(i," + (").concat(a," / 2))"));break;default:P=ko("calc(".concat(f.length-1," * -").concat(i,")"));break}var w=[];if(o){var O=f[0].width,{width:A}=s;w.push("scale(".concat(D(A)?A/O:1,")"))}return v&&w.push("rotate(".concat(v,", ").concat(b,", ").concat(x,")")),w.length&&(y.transform=w.join(" ")),g.createElement("text",Su({},z(y,!0),{ref:t,x:b,y:x,className:H("recharts-text",p),textAnchor:u,fill:c.includes("url")?Qd:c}),f.map((j,T)=>{var I=j.words.join(m?"":" ");return g.createElement("tspan",{x:b,dy:T===0?P:i,key:"".concat(I,"-").concat(T)},I)}))});Ji.displayName="Text";var Oj=["offset"],Aj=["labelRef"];function eh(e,t){if(e==null)return{};var r,n,i=Sj(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{value:t,formatter:r}=e,n=J(e.children)?t:e.children;return typeof r=="function"?r(n):n},gl=e=>e!=null&&typeof e=="function",Cj=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},_j=(e,t,r)=>{var{position:n,viewBox:i,offset:a,className:o}=e,{cx:u,cy:l,innerRadius:c,outerRadius:s,startAngle:f,endAngle:d,clockWise:h}=i,v=(c+s)/2,p=Cj(f,d),m=p>=0?1:-1,y,b;n==="insideStart"?(y=f+m*a,b=h):n==="insideEnd"?(y=d-m*a,b=!h):n==="end"&&(y=d+m*a,b=h),b=p<=0?b:!b;var x=ce(u,l,v,y),P=ce(u,l,v,y+(b?1:-1)*359),w="M".concat(x.x,",").concat(x.y,` + A`).concat(v,",").concat(v,",0,1,").concat(b?0:1,`, + `).concat(P.x,",").concat(P.y),O=J(e.id)?or("recharts-radial-line-"):e.id;return g.createElement("text",mt({},r,{dominantBaseline:"central",className:H("recharts-radial-bar-label",o)}),g.createElement("defs",null,g.createElement("path",{id:O,d:w})),g.createElement("textPath",{xlinkHref:"#".concat(O)},t))},Mj=e=>{var{viewBox:t,offset:r,position:n}=e,{cx:i,cy:a,innerRadius:o,outerRadius:u,startAngle:l,endAngle:c}=t,s=(l+c)/2;if(n==="outside"){var{x:f,y:d}=ce(i,a,u+r,s);return{x:f,y:d,textAnchor:f>=i?"start":"end",verticalAnchor:"middle"}}if(n==="center")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"middle"};if(n==="centerTop")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"start"};if(n==="centerBottom")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"end"};var h=(o+u)/2,{x:v,y:p}=ce(i,a,h,s);return{x:v,y:p,textAnchor:"middle",verticalAnchor:"middle"}},Dj=(e,t)=>{var{parentViewBox:r,offset:n,position:i}=e,{x:a,y:o,width:u,height:l}=t,c=l>=0?1:-1,s=c*n,f=c>0?"end":"start",d=c>0?"start":"end",h=u>=0?1:-1,v=h*n,p=h>0?"end":"start",m=h>0?"start":"end";if(i==="top"){var y={x:a+u/2,y:o-c*n,textAnchor:"middle",verticalAnchor:f};return le(le({},y),r?{height:Math.max(o-r.y,0),width:u}:{})}if(i==="bottom"){var b={x:a+u/2,y:o+l+s,textAnchor:"middle",verticalAnchor:d};return le(le({},b),r?{height:Math.max(r.y+r.height-(o+l),0),width:u}:{})}if(i==="left"){var x={x:a-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"};return le(le({},x),r?{width:Math.max(x.x-r.x,0),height:l}:{})}if(i==="right"){var P={x:a+u+v,y:o+l/2,textAnchor:m,verticalAnchor:"middle"};return le(le({},P),r?{width:Math.max(r.x+r.width-P.x,0),height:l}:{})}var w=r?{width:u,height:l}:{};return i==="insideLeft"?le({x:a+v,y:o+l/2,textAnchor:m,verticalAnchor:"middle"},w):i==="insideRight"?le({x:a+u-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"},w):i==="insideTop"?le({x:a+u/2,y:o+s,textAnchor:"middle",verticalAnchor:d},w):i==="insideBottom"?le({x:a+u/2,y:o+l-s,textAnchor:"middle",verticalAnchor:f},w):i==="insideTopLeft"?le({x:a+v,y:o+s,textAnchor:m,verticalAnchor:d},w):i==="insideTopRight"?le({x:a+u-v,y:o+s,textAnchor:p,verticalAnchor:d},w):i==="insideBottomLeft"?le({x:a+v,y:o+l-s,textAnchor:m,verticalAnchor:f},w):i==="insideBottomRight"?le({x:a+u-v,y:o+l-s,textAnchor:p,verticalAnchor:f},w):i&&typeof i=="object"&&(D(i.x)||Zt(i.x))&&(D(i.y)||Zt(i.y))?le({x:a+ke(i.x,u),y:o+ke(i.y,l),textAnchor:"end",verticalAnchor:"end"},w):le({x:a+u/2,y:o+l/2,textAnchor:"middle",verticalAnchor:"middle"},w)},Ij=e=>"cx"in e&&D(e.cx);function qe(e){var{offset:t=5}=e,r=eh(e,Oj),n=le({offset:t},r),{viewBox:i,position:a,value:o,children:u,content:l,className:c="",textBreakAll:s,labelRef:f}=n,d=os(),h=i||d;if(!h||J(o)&&J(u)&&!g.isValidElement(l)&&typeof l!="function")return null;if(g.isValidElement(l)){var{labelRef:v}=n,p=eh(n,Aj);return g.cloneElement(l,p)}var m;if(typeof l=="function"){if(m=g.createElement(l,n),g.isValidElement(m))return m}else m=kj(n);var y=Ij(h),b=z(n,!0);if(y&&(a==="insideStart"||a==="insideEnd"||a==="end"))return _j(n,m,b);var x=y?Mj(n):Dj(n,h);return g.createElement(Ji,mt({ref:f,className:H("recharts-label",c)},b,x,{breakAll:s}),m)}qe.displayName="Label";var yg=e=>{var{cx:t,cy:r,angle:n,startAngle:i,endAngle:a,r:o,radius:u,innerRadius:l,outerRadius:c,x:s,y:f,top:d,left:h,width:v,height:p,clockWise:m,labelViewBox:y}=e;if(y)return y;if(D(v)&&D(p)){if(D(s)&&D(f))return{x:s,y:f,width:v,height:p};if(D(d)&&D(h))return{x:d,y:h,width:v,height:p}}if(D(s)&&D(f))return{x:s,y:f,width:0,height:0};if(D(t)&&D(r))return{cx:t,cy:r,startAngle:i||n||0,endAngle:a||n||0,innerRadius:l||0,outerRadius:c||u||o||0,clockWise:m};if(e.viewBox)return e.viewBox},Nj=(e,t,r)=>{if(!e)return null;var n={viewBox:t,labelRef:r};return e===!0?g.createElement(qe,mt({key:"label-implicit"},n)):dt(e)?g.createElement(qe,mt({key:"label-implicit",value:e},n)):g.isValidElement(e)?e.type===qe?g.cloneElement(e,le({key:"label-implicit"},n)):g.createElement(qe,mt({key:"label-implicit",content:e},n)):gl(e)?g.createElement(qe,mt({key:"label-implicit",content:e},n)):e&&typeof e=="object"?g.createElement(qe,mt({},e,{key:"label-implicit"},n)):null},$j=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var{children:i,labelRef:a}=t,o=yg(t),u=dn(i,qe).map((c,s)=>g.cloneElement(c,{viewBox:r||o,key:"label-".concat(s)}));if(!n)return u;var l=Nj(t.label,r||o,a);return[l,...u]};qe.parseViewBox=yg;qe.renderCallByParent=$j;var Co={},_o={},rh;function Rj(){return rh||(rh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r[r.length-1]}e.last=t}(_o)),_o}var Mo={},nh;function Lj(){return nh||(nh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Array.isArray(r)?r:Array.from(r)}e.toArray=t}(Mo)),Mo}var ih;function Bj(){return ih||(ih=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Rj(),r=Lj(),n=Yu();function i(a){if(n.isArrayLike(a))return t.last(r.toArray(a))}e.last=i}(Co)),Co}var Do,ah;function Kj(){return ah||(ah=1,Do=Bj().last),Do}var qj=Kj();const zj=St(qj);var Fj=["valueAccessor"],Wj=["data","dataKey","clockWise","id","textBreakAll"];function pi(){return pi=Object.assign?Object.assign.bind():function(e){for(var t=1;tArray.isArray(e.value)?zj(e.value):e.value;function $t(e){var{valueAccessor:t=Vj}=e,r=sh(e,Fj),{data:n,dataKey:i,clockWise:a,id:o,textBreakAll:u}=r,l=sh(r,Wj);return!n||!n.length?null:g.createElement(ye,{className:"recharts-label-list"},n.map((c,s)=>{var f=J(i)?t(c,s):re(c&&c.payload,i),d=J(o)?{}:{id:"".concat(o,"-").concat(s)};return g.createElement(qe,pi({},z(c,!0),l,d,{parentViewBox:c.parentViewBox,value:f,textBreakAll:u,viewBox:qe.parseViewBox(J(a)?c:uh(uh({},c),{},{clockWise:a})),key:"label-".concat(s),index:s}))}))}$t.displayName="LabelList";function Xj(e,t){return e?e===!0?g.createElement($t,{key:"labelList-implicit",data:t}):g.isValidElement(e)||gl(e)?g.createElement($t,{key:"labelList-implicit",data:t,content:e}):typeof e=="object"?g.createElement($t,pi({data:t},e,{key:"labelList-implicit"})):null:null}function Zj(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var{children:n}=e,i=dn(n,$t).map((o,u)=>g.cloneElement(o,{data:t,key:"labelList-".concat(u)}));if(!r)return i;var a=Xj(e.label,t);return[a,...i]}$t.renderCallByParent=Zj;function Eu(){return Eu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{cx:t,cy:r,r:n,className:i}=e,a=H("recharts-dot",i);return t===+t&&r===+r&&n===+n?g.createElement("circle",Eu({},z(e,!1),Fu(e),{className:a,cx:t,cy:r,r:n})):null},xg=e=>e.graphicalItems.polarItems,Jj=S([ue,bn],Fs),yl=S([xg,se,Jj],Ws),Qj=S([yl],Us),bl=S([Qj,Ms],Hs),eT=S([bl,se,yl],Ys),tT=S([bl,se,yl],(e,t,r)=>r.length>0?e.flatMap(n=>r.flatMap(i=>{var a,o=re(n,(a=t.dataKey)!==null&&a!==void 0?a:i.dataKey);return{value:o,errorDomain:[]}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey),errorDomain:[]})):e.map(n=>({value:n,errorDomain:[]}))),lh=()=>{},rT=S([se,km,lh,tT,lh],Xs),wg=S([se,Y,bl,eT,yn,ue,rT],Zs),nT=S([wg,se,$r],el);S([se,wg,nT,ue],rl);var iT={radiusAxis:{},angleAxis:{}},Pg=nt({name:"polarAxis",initialState:iT,reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),{addRadiusAxis:R2,removeRadiusAxis:L2,addAngleAxis:B2,removeAngleAxis:K2}=Pg.actions,aT=Pg.reducer;function ch(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function fh(e){for(var t=1;tt,lT=[],wl=(e,t,r)=>(r==null?void 0:r.length)===0?lT:r,Og=S([Ms,xl,wl],(e,t,r)=>{var{chartData:n}=e,i;if((t==null?void 0:t.data)!=null&&t.data.length>0?i=t.data:i=n,(!i||!i.length)&&r!=null&&(i=r.map(a=>fh(fh({},t.presentationProps),a.props))),i!=null)return i}),cT=S([Og,xl,wl],(e,t,r)=>{if(e!=null)return e.map((n,i)=>{var a,o=re(n,t.nameKey,t.name),u;return r!=null&&(a=r[i])!==null&&a!==void 0&&(a=a.props)!==null&&a!==void 0&&a.fill?u=r[i].props.fill:typeof n=="object"&&n!=null&&"fill"in n?u=n.fill:u=t.fill,{value:_r(o,t.dataKey),color:u,payload:n,type:t.legendType}})}),fT=S([xg,xl],(e,t)=>{if(e.some(r=>r.type==="pie"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),dT=S([Og,fT,wl,ve],(e,t,r,n)=>{if(!(t==null||e==null))return nk({offset:n,pieSettings:t,displayedData:e,cells:r})}),hT={countOfBars:0,cartesianItems:[],polarItems:[]},Ag=nt({name:"graphicalItems",initialState:hT,reducers:{addBar(e){e.countOfBars+=1},removeBar(e){e.countOfBars-=1},addCartesianGraphicalItem(e,t){e.cartesianItems.push(t.payload)},replaceCartesianGraphicalItem(e,t){var{prev:r,next:n}=t.payload,i=bt(e).cartesianItems.indexOf(r);i>-1&&(e.cartesianItems[i]=n)},removeCartesianGraphicalItem(e,t){var r=bt(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},addPolarGraphicalItem(e,t){e.polarItems.push(t.payload)},removePolarGraphicalItem(e,t){var r=bt(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)}}}),{addBar:vT,removeBar:pT,addCartesianGraphicalItem:mT,replaceCartesianGraphicalItem:gT,removeCartesianGraphicalItem:yT,addPolarGraphicalItem:bT,removePolarGraphicalItem:xT}=Ag.actions,wT=Ag.reducer;function dh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function hh(e){for(var t=1;t{var n=hh(hh({},e),{},{stackId:Xv(e.stackId)});r.current===null?t(mT(n)):r.current!==n&&t(gT({prev:r.current,next:n})),r.current=n},[t,e]),g.useEffect(()=>()=>{r.current&&(t(yT(r.current)),r.current=null)},[t]),null}function ET(e){var t=ae();return g.useEffect(()=>(t(bT(e)),()=>{t(xT(e))}),[t,e]),null}var Io={},vh;function jT(){return vh||(vh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var i;if(typeof r!="object"||r==null)return!1;if(Object.getPrototypeOf(r)===null)return!0;if(Object.prototype.toString.call(r)!=="[object Object]"){const a=r[Symbol.toStringTag];return a==null||!((i=Object.getOwnPropertyDescriptor(r,Symbol.toStringTag))!=null&&i.writable)?!1:r.toString()===`[object ${a}]`}let n=r;for(;Object.getPrototypeOf(n)!==null;)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(r)===n}e.isPlainObject=t}(Io)),Io}var No,ph;function TT(){return ph||(ph=1,No=jT().isPlainObject),No}var kT=TT();const CT=St(kT);function mi(){return mi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=r-n,o;return o="M ".concat(e,",").concat(t),o+="L ".concat(e+r,",").concat(t),o+="L ".concat(e+r-a/2,",").concat(t+i),o+="L ".concat(e+r-a/2-n,",").concat(t+i),o+="L ".concat(e,",").concat(t," Z"),o},_T={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},MT=e=>{var t=it(e,_T),r=g.useRef(),[n,i]=g.useState(-1);g.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var m=r.current.getTotalLength();m&&i(m)}catch{}},[]);var{x:a,y:o,upperWidth:u,lowerWidth:l,height:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isUpdateAnimationActive:v}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||c!==+c||u===0&&l===0||c===0)return null;var p=H("recharts-trapezoid",s);return v?g.createElement(Lt,{canBegin:n>0,from:{upperWidth:0,lowerWidth:0,height:c,x:a,y:o},to:{upperWidth:u,lowerWidth:l,height:c,x:a,y:o},duration:d,animationEasing:f,isActive:v},m=>{var{upperWidth:y,lowerWidth:b,height:x,x:P,y:w}=m;return g.createElement(Lt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,easing:f},g.createElement("path",mi({},z(t,!0),{className:p,d:mh(P,w,y,b,x),ref:r})))}):g.createElement("g",null,g.createElement("path",mi({},z(t,!0),{className:p,d:mh(a,o,u,l,c)})))},DT=["option","shapeType","propTransformer","activeClassName","isActive"];function IT(e,t){if(e==null)return{};var r,n,i=NT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(Um({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}},Ol=e=>{var t=ae();return(r,n)=>i=>{e==null||e(r,n,i),t(jS())}},Al=(e,t)=>{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(TS({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}};function Sl(e){var{fn:t,args:r}=e,n=ae(),i=Ce();return g.useEffect(()=>{if(!i){var a=t(r);return n(AS(a)),()=>{n(SS(a))}}},[t,r,n,i]),null}var Eg=()=>{};function jg(e){var{legendPayload:t}=e,r=ae(),n=Ce();return g.useEffect(()=>n?Eg:(r(ap(t)),()=>{r(op(t))}),[r,n,t]),null}function zT(e){var{legendPayload:t}=e,r=ae(),n=$(Y);return g.useEffect(()=>n!=="centric"&&n!=="radial"?Eg:(r(ap(t)),()=>{r(op(t))}),[r,n,t]),null}function El(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"animation-",r=g.useRef(or(t)),n=g.useRef(e);return n.current!==e&&(r.current=or(t),n.current=e),r.current}var FT=["onMouseEnter","onClick","onMouseLeave"];function WT(e,t){if(e==null)return{};var r,n,i=UT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;nz(e,!1),[e]),r=g.useMemo(()=>dn(e.children,An),[e.children]),n=g.useMemo(()=>({name:e.name,nameKey:e.nameKey,tooltipType:e.tooltipType,data:e.data,dataKey:e.dataKey,cx:e.cx,cy:e.cy,startAngle:e.startAngle,endAngle:e.endAngle,minAngle:e.minAngle,paddingAngle:e.paddingAngle,innerRadius:e.innerRadius,outerRadius:e.outerRadius,cornerRadius:e.cornerRadius,legendType:e.legendType,fill:e.fill,presentationProps:t}),[e.cornerRadius,e.cx,e.cy,e.data,e.dataKey,e.endAngle,e.innerRadius,e.minAngle,e.name,e.nameKey,e.outerRadius,e.paddingAngle,e.startAngle,e.tooltipType,e.legendType,e.fill,t]),i=$(a=>cT(a,n,r));return g.createElement(zT,{legendPayload:i})}function VT(e){var{dataKey:t,nameKey:r,sectors:n,stroke:i,strokeWidth:a,fill:o,name:u,hide:l,tooltipType:c}=e;return{dataDefinedOnItem:n==null?void 0:n.map(s=>s.tooltipPayload),positions:n==null?void 0:n.map(s=>s.tooltipPosition),settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:r,name:_r(u,t),hide:l,type:c,color:o,unit:""}}}var XT=(e,t)=>e>t?"start":etypeof t=="function"?t(e):ke(t,r,r*.8),JT=(e,t,r)=>{var{top:n,left:i,width:a,height:o}=t,u=Yv(a,o),l=i+ke(e.cx,a,a/2),c=n+ke(e.cy,o,o/2),s=ke(e.innerRadius,u,0),f=ZT(r,e.outerRadius,u),d=e.maxRadius||Math.sqrt(a*a+o*o)/2;return{cx:l,cy:c,innerRadius:s,outerRadius:f,maxRadius:d}},QT=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},ek=(e,t)=>{if(g.isValidElement(e))return g.cloneElement(e,t);if(typeof e=="function")return e(t);var r=H("recharts-pie-label-line",typeof e!="boolean"?e.className:"");return g.createElement(us,cr({},t,{type:"linear",className:r}))},tk=(e,t,r)=>{if(g.isValidElement(e))return g.cloneElement(e,t);var n=r;if(typeof e=="function"&&(n=e(t),g.isValidElement(n)))return n;var i=H("recharts-pie-label-text",typeof e!="boolean"&&typeof e!="function"?e.className:"");return g.createElement(Ji,cr({},t,{alignmentBaseline:"middle",className:i}),n)};function rk(e){var{sectors:t,props:r,showLabels:n}=e,{label:i,labelLine:a,dataKey:o}=r;if(!n||!i||!t)return null;var u=z(r,!1),l=z(i,!1),c=z(a,!1),s=typeof i=="object"&&"offsetRadius"in i&&i.offsetRadius||20,f=t.map((d,h)=>{var v=(d.startAngle+d.endAngle)/2,p=ce(d.cx,d.cy,d.outerRadius+s,v),m=ie(ie(ie(ie({},u),d),{},{stroke:"none"},l),{},{index:h,textAnchor:XT(p.x,d.cx)},p),y=ie(ie(ie(ie({},u),d),{},{fill:"none",stroke:d.fill},c),{},{index:h,points:[ce(d.cx,d.cy,d.outerRadius,v),p],key:"line"});return g.createElement(ye,{key:"label-".concat(d.startAngle,"-").concat(d.endAngle,"-").concat(d.midAngle,"-").concat(h)},a&&ek(a,y),tk(i,m,re(d,o)))});return g.createElement(ye,{className:"recharts-pie-labels"},f)}function Tg(e){var{sectors:t,activeShape:r,inactiveShape:n,allOtherPieProps:i,showLabels:a}=e,o=$(Kt),{onMouseEnter:u,onClick:l,onMouseLeave:c}=i,s=WT(i,FT),f=Pl(u,i.dataKey),d=Ol(c),h=Al(l,i.dataKey);return t==null?null:g.createElement(g.Fragment,null,t.map((v,p)=>{if((v==null?void 0:v.startAngle)===0&&(v==null?void 0:v.endAngle)===0&&t.length!==1)return null;var m=r&&String(p)===o,y=o?n:null,b=m?r:y,x=ie(ie({},v),{},{stroke:v.stroke,tabIndex:-1,[Jv]:p,[Qv]:i.dataKey});return g.createElement(ye,cr({tabIndex:-1,className:"recharts-pie-sector"},wi(s,v,p),{onMouseEnter:f(v,p),onMouseLeave:d(v,p),onClick:h(v,p),key:"sector-".concat(v==null?void 0:v.startAngle,"-").concat(v==null?void 0:v.endAngle,"-").concat(v.midAngle,"-").concat(p)}),g.createElement(Sg,cr({option:b,isActive:m,shapeType:"sector"},x)))}),g.createElement(rk,{sectors:t,props:i,showLabels:a}))}function nk(e){var t,{pieSettings:r,displayedData:n,cells:i,offset:a}=e,{cornerRadius:o,startAngle:u,endAngle:l,dataKey:c,nameKey:s,tooltipType:f}=r,d=Math.abs(r.minAngle),h=QT(u,l),v=Math.abs(h),p=n.length<=1?0:(t=r.paddingAngle)!==null&&t!==void 0?t:0,m=n.filter(O=>re(O,c,0)!==0).length,y=(v>=360?m:m-1)*p,b=v-m*d-y,x=n.reduce((O,A)=>{var j=re(A,c,0);return O+(D(j)?j:0)},0),P;if(x>0){var w;P=n.map((O,A)=>{var j=re(O,c,0),T=re(O,s,A),I=JT(r,a,O),C=(D(j)?j:0)/x,_,R=ie(ie({},O),i&&i[A]&&i[A].props);A?_=w.endAngle+ge(h)*p*(j!==0?1:0):_=u;var B=_+ge(h)*((j!==0?d:0)+C*b),F=(_+B)/2,V=(I.innerRadius+I.outerRadius)/2,K=[{name:T,value:j,payload:R,dataKey:c,type:f}],de=ce(I.cx,I.cy,V,F);return w=ie(ie(ie(ie({},r.presentationProps),{},{percent:C,cornerRadius:o,name:T,tooltipPayload:K,midAngle:F,middleRadius:V,tooltipPosition:de},R),I),{},{value:re(O,c),startAngle:_,endAngle:B,payload:R,paddingAngle:ge(h)*p}),w})}return P}function ik(e){var{props:t,previousSectorsRef:r}=e,{sectors:n,isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:u,activeShape:l,inactiveShape:c,onAnimationStart:s,onAnimationEnd:f}=t,d=El(t,"recharts-pie-"),h=r.current,[v,p]=g.useState(!0),m=g.useCallback(()=>{typeof f=="function"&&f(),p(!1)},[f]),y=g.useCallback(()=>{typeof s=="function"&&s(),p(!0)},[s]);return g.createElement(Lt,{begin:a,duration:o,isActive:i,easing:u,from:{t:0},to:{t:1},onAnimationStart:y,onAnimationEnd:m,key:d},b=>{var{t:x}=b,P=[],w=n&&n[0],O=w.startAngle;return n.forEach((A,j)=>{var T=h&&h[j],I=j>0?Rt(A,"paddingAngle",0):0;if(T){var C=Ke(T.endAngle-T.startAngle,A.endAngle-A.startAngle),_=ie(ie({},A),{},{startAngle:O+I,endAngle:O+C(x)+I});P.push(_),O=_.endAngle}else{var{endAngle:R,startAngle:B}=A,F=Ke(0,R-B),V=F(x),K=ie(ie({},A),{},{startAngle:O+I,endAngle:O+V+I});P.push(K),O=K.endAngle}}),r.current=P,g.createElement(ye,null,g.createElement(Tg,{sectors:P,activeShape:l,inactiveShape:c,allOtherPieProps:t,showLabels:!v}))})}function ak(e){var{sectors:t,isAnimationActive:r,activeShape:n,inactiveShape:i}=e,a=g.useRef(null),o=a.current;return r&&t&&t.length&&(!o||o!==t)?g.createElement(ik,{props:e,previousSectorsRef:a}):g.createElement(Tg,{sectors:t,activeShape:n,inactiveShape:i,allOtherPieProps:e,showLabels:!0})}function ok(e){var{hide:t,className:r,rootTabIndex:n}=e,i=H("recharts-pie",r);return t?null:g.createElement(ye,{tabIndex:n,className:i},g.createElement(ak,e))}var kg={animationBegin:400,animationDuration:1500,animationEasing:"ease",cx:"50%",cy:"50%",dataKey:"value",endAngle:360,fill:"#808080",hide:!1,innerRadius:0,isAnimationActive:!fr.isSsr,labelLine:!0,legendType:"rect",minAngle:0,nameKey:"name",outerRadius:"80%",paddingAngle:0,rootTabIndex:0,startAngle:0,stroke:"#fff"};function uk(e){var t=it(e,kg),r=g.useMemo(()=>dn(e.children,An),[e.children]),n=z(t,!1),i=g.useMemo(()=>({name:t.name,nameKey:t.nameKey,tooltipType:t.tooltipType,data:t.data,dataKey:t.dataKey,cx:t.cx,cy:t.cy,startAngle:t.startAngle,endAngle:t.endAngle,minAngle:t.minAngle,paddingAngle:t.paddingAngle,innerRadius:t.innerRadius,outerRadius:t.outerRadius,cornerRadius:t.cornerRadius,legendType:t.legendType,fill:t.fill,presentationProps:n}),[t.cornerRadius,t.cx,t.cy,t.data,t.dataKey,t.endAngle,t.innerRadius,t.minAngle,t.name,t.nameKey,t.outerRadius,t.paddingAngle,t.startAngle,t.tooltipType,t.legendType,t.fill,n]),a=$(o=>dT(o,i,r));return g.createElement(g.Fragment,null,g.createElement(Sl,{fn:VT,args:ie(ie({},t),{},{sectors:a})}),g.createElement(ok,cr({},t,{sectors:a})))}class jl extends g.PureComponent{constructor(){super(...arguments),Qi(this,"id",or("recharts-pie-"))}render(){return g.createElement(g.Fragment,null,g.createElement(ET,{data:this.props.data,dataKey:this.props.dataKey,hide:this.props.hide,angleAxisId:0,radiusAxisId:0,stackId:void 0,barSize:void 0,type:"pie"}),g.createElement(GT,this.props),g.createElement(uk,this.props),this.props.children)}}Qi(jl,"displayName","Pie");Qi(jl,"defaultProps",kg);var sk=S([ve],e=>{if(e)return{top:e.top,bottom:e.bottom,left:e.left,right:e.right}}),lk=S([sk,Et,jt],(e,t,r)=>{if(!(!e||t==null||r==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}}),ck=e=>{var t=Ce();return $(r=>vt(r,"xAxis",e,t))},fk=e=>{var t=Ce();return $(r=>vt(r,"yAxis",e,t))},Tl=()=>$(lk),dk=()=>$(dE);function xh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function wh(e){for(var t=1;t{var{point:t,childIndex:r,mainColor:n,activeDot:i,dataKey:a}=e;if(i===!1||t.x==null||t.y==null)return null;var o=wh(wh({index:r,dataKey:a,cx:t.x,cy:t.y,r:4,fill:n??"none",strokeWidth:2,stroke:"#fff",payload:t.payload,value:t.value},z(i,!1)),Fu(i)),u;return g.isValidElement(i)?u=g.cloneElement(i,o):typeof i=="function"?u=i(o):u=g.createElement(bg,o),g.createElement(ye,{className:"recharts-active-dot"},u)};function gk(e){var{points:t,mainColor:r,activeDot:n,itemDataKey:i}=e,a=$(Kt),o=dk();if(t==null||o==null)return null;var u=t.find(l=>o.includes(l.payload));return J(u)?null:mk({point:u,childIndex:Number(a),mainColor:r,dataKey:i,activeDot:n})}var yk=()=>{var e=ae();return g.useEffect(()=>(e(vT()),()=>{e(pT())})),null},bk=["children"];function xk(e,t){if(e==null)return{};var r,n,i=wk(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{},Cg=g.createContext({addErrorBar:Ph,removeErrorBar:Ph}),Pk={data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0},_g=g.createContext(Pk);function Mg(e){var{children:t}=e,r=xk(e,bk);return g.createElement(_g.Provider,{value:r},t)}var Ok=()=>g.useContext(_g),Dg=e=>{var{children:t,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,data:o,stackId:u,hide:l,type:c,barSize:s}=e,[f,d]=g.useState([]),h=g.useCallback(m=>{d(y=>[...y,m])},[d]),v=g.useCallback(m=>{d(y=>y.filter(b=>b!==m))},[d]),p=Ce();return g.createElement(Cg.Provider,{value:{addErrorBar:h,removeErrorBar:v}},g.createElement(ST,{type:c,data:o,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,errorBars:f,stackId:u,hide:l,barSize:s,isPanorama:p}),t)};function Ak(e){var{addErrorBar:t,removeErrorBar:r}=g.useContext(Cg);return g.useEffect(()=>(t(e),()=>{r(e)}),[t,r,e]),null}var Sk=["direction","width","dataKey","isAnimationActive","animationBegin","animationDuration","animationEasing"];function Ig(e,t,r){return(t=Ek(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ek(e){var t=jk(e,"string");return typeof t=="symbol"?t:t+""}function jk(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function ln(){return ln=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{x,y:P,value:w,errorVal:O}=f(b,n,t);if(!O)return null;var A=[],j,T;if(Array.isArray(O)?[j,T]=O:j=T=O,t==="x"){var{scale:I}=p,C=P+v,_=C+r,R=C-r,B=I(w-j),F=I(w+T);A.push({x1:F,y1:_,x2:F,y2:R}),A.push({x1:B,y1:C,x2:F,y2:C}),A.push({x1:B,y1:_,x2:B,y2:R})}else if(t==="y"){var{scale:V}=m,K=x+v,de=K-r,oe=K+r,Ie=V(w-j),Ge=V(w+T);A.push({x1:de,y1:Ge,x2:oe,y2:Ge}),A.push({x1:K,y1:Ie,x2:K,y2:Ge}),A.push({x1:de,y1:Ie,x2:oe,y2:Ie})}var L="".concat(x+v,"px ").concat(P+v,"px");return g.createElement(ye,ln({className:"recharts-errorBar",key:"bar-".concat(A.map(we=>"".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2)))},c),A.map(we=>{var Ht=i?{transformOrigin:"".concat(we.x1-5,"px")}:void 0;return g.createElement(Lt,{from:{transform:"scaleY(0)",transformOrigin:L},to:{transform:"scaleY(1)",transformOrigin:L},begin:a,easing:u,isActive:i,duration:o,key:"line-".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2),style:{transformOrigin:L}},g.createElement("line",ln({},we,{style:Ht})))}))});return g.createElement(ye,{className:"recharts-errorBars"},y)}var Ng=g.createContext(void 0);function _k(e){var t=g.useContext(Ng);return e??t??"x"}function $g(e){var{direction:t,children:r}=e;return g.createElement(Ng.Provider,{value:t},r)}var Rg={stroke:"black",strokeWidth:1.5,width:5,offset:0,isAnimationActive:!0,animationBegin:0,animationDuration:400,animationEasing:"ease-in-out"};function Mk(e){var t=_k(e.direction),{width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o}=it(e,Rg);return g.createElement(g.Fragment,null,g.createElement(Ak,{dataKey:e.dataKey,direction:t}),g.createElement(Ck,ln({},e,{direction:t,width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o})))}class Lg extends g.Component{render(){return g.createElement(Mk,this.props)}}Ig(Lg,"defaultProps",Rg);Ig(Lg,"displayName","ErrorBar");var Dk="Invariant failed";function Ik(e,t){throw new Error(Dk)}var Nk=["x","y"];function ju(){return ju=Object.assign?Object.assign.bind():function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:0;return(n,i)=>{if(D(t))return t;var a=D(n)||J(n);return a?t(n,i):(a||Ik(),r)}};function kl(e,t){var r,n,i=$(c=>kt(c,e)),a=$(c=>Wt(c,t)),o=(r=i==null?void 0:i.allowDataOverflow)!==null&&r!==void 0?r:Re.allowDataOverflow,u=(n=a==null?void 0:a.allowDataOverflow)!==null&&n!==void 0?n:Le.allowDataOverflow,l=o||u;return{needClip:l,needClipX:o,needClipY:u}}function Kg(e){var{xAxisId:t,yAxisId:r,clipPathId:n}=e,i=Tl(),{needClipX:a,needClipY:o,needClip:u}=kl(t,r);if(!u)return null;var{x:l,y:c,width:s,height:f}=i;return g.createElement("clipPath",{id:"clipPath-".concat(n)},g.createElement("rect",{x:a?l:l-s/2,y:o?c:c-f/2,width:a?s:s*2,height:o?f:f*2}))}var Fk=["onMouseEnter","onMouseLeave","onClick"],Wk=["value","background","tooltipPosition"],Uk=["onMouseEnter","onClick","onMouseLeave"];function cn(){return cn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:r,fill:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:_r(r,t),payload:e}]};function Xk(e){var{dataKey:t,stroke:r,strokeWidth:n,fill:i,name:a,hide:o,unit:u}=e;return{dataDefinedOnItem:void 0,positions:void 0,settings:{stroke:r,strokeWidth:n,fill:i,dataKey:t,nameKey:void 0,name:_r(a,t),hide:o,type:e.tooltipType,color:e.fill,unit:u}}}function Zk(e){var t=$(Kt),{data:r,dataKey:n,background:i,allOtherBarProps:a}=e,{onMouseEnter:o,onMouseLeave:u,onClick:l}=a,c=Tu(a,Fk),s=Pl(o,n),f=Ol(u),d=Al(l,n);if(!i||r==null)return null;var h=z(i,!1);return g.createElement(g.Fragment,null,r.map((v,p)=>{var{value:m,background:y,tooltipPosition:b}=v,x=Tu(v,Wk);if(!y)return null;var P=s(v,p),w=f(v,p),O=d(v,p),A=Ee(Ee(Ee(Ee(Ee({option:i,isActive:String(p)===t},x),{},{fill:"#eee"},y),h),wi(c,v,p)),{},{onMouseEnter:P,onMouseLeave:w,onClick:O,dataKey:n,index:p,className:"recharts-bar-background-rectangle"});return g.createElement(Bg,cn({key:"background-bar-".concat(p)},A))}))}function qg(e){var{data:t,props:r,showLabels:n}=e,i=z(r,!1),{shape:a,dataKey:o,activeBar:u}=r,l=$(Kt),c=$(ig),{onMouseEnter:s,onClick:f,onMouseLeave:d}=r,h=Tu(r,Uk),v=Pl(s,o),p=Ol(d),m=Al(f,o);return t?g.createElement(g.Fragment,null,t.map((y,b)=>{var x=u&&String(b)===l&&(c==null||o===c),P=x?u:a,w=Ee(Ee(Ee({},i),y),{},{isActive:x,option:P,index:b,dataKey:o});return g.createElement(ye,cn({className:"recharts-bar-rectangle"},wi(h,y,b),{onMouseEnter:v(y,b),onMouseLeave:p(y,b),onClick:m(y,b),key:"rectangle-".concat(y==null?void 0:y.x,"-").concat(y==null?void 0:y.y,"-").concat(y==null?void 0:y.value,"-").concat(b)}),g.createElement(Bg,w))}),n&&$t.renderCallByParent(r,t)):null}function Jk(e){var{props:t,previousRectanglesRef:r}=e,{data:n,layout:i,isAnimationActive:a,animationBegin:o,animationDuration:u,animationEasing:l,onAnimationEnd:c,onAnimationStart:s}=t,f=r.current,d=El(t,"recharts-bar-"),[h,v]=g.useState(!1),p=g.useCallback(()=>{typeof c=="function"&&c(),v(!1)},[c]),m=g.useCallback(()=>{typeof s=="function"&&s(),v(!0)},[s]);return g.createElement(Lt,{begin:o,duration:u,isActive:a,easing:l,from:{t:0},to:{t:1},onAnimationEnd:p,onAnimationStart:m,key:d},y=>{var{t:b}=y,x=b===1?n:n.map((P,w)=>{var O=f&&f[w];if(O){var A=Ke(O.x,P.x),j=Ke(O.y,P.y),T=Ke(O.width,P.width),I=Ke(O.height,P.height);return Ee(Ee({},P),{},{x:A(b),y:j(b),width:T(b),height:I(b)})}if(i==="horizontal"){var C=Ke(0,P.height),_=C(b);return Ee(Ee({},P),{},{y:P.y+P.height-_,height:_})}var R=Ke(0,P.width),B=R(b);return Ee(Ee({},P),{},{width:B})});return b>0&&(r.current=x),g.createElement(ye,null,g.createElement(qg,{props:t,data:x,showLabels:!h}))})}function Qk(e){var{data:t,isAnimationActive:r}=e,n=g.useRef(null);return r&&t&&t.length&&(n.current==null||n.current!==t)?g.createElement(Jk,{previousRectanglesRef:n,props:e}):g.createElement(qg,{props:e,data:t,showLabels:!0})}var zg=0,eC=(e,t)=>{var r=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:r,errorVal:re(e,t)}};class tC extends g.PureComponent{constructor(){super(...arguments),ea(this,"id",or("recharts-bar-"))}render(){var{hide:t,data:r,dataKey:n,className:i,xAxisId:a,yAxisId:o,needClip:u,background:l,id:c,layout:s}=this.props;if(t)return null;var f=H("recharts-bar",i),d=J(c)?this.id:c;return g.createElement(ye,{className:f},u&&g.createElement("defs",null,g.createElement(Kg,{clipPathId:d,xAxisId:a,yAxisId:o})),g.createElement(ye,{className:"recharts-bar-rectangles",clipPath:u?"url(#clipPath-".concat(d,")"):null},g.createElement(Zk,{data:r,dataKey:n,background:l,allOtherBarProps:this.props}),g.createElement(Qk,this.props)),g.createElement($g,{direction:s==="horizontal"?"y":"x"},this.props.children))}}var Fg={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",hide:!1,isAnimationActive:!fr.isSsr,legendType:"rect",minPointSize:zg,xAxisId:0,yAxisId:0};function rC(e){var{xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s}=it(e,Fg),{needClip:f}=kl(t,r),d=Ni(),h=Ce(),v=g.useMemo(()=>({barSize:e.barSize,data:void 0,dataKey:e.dataKey,maxBarSize:e.maxBarSize,minPointSize:a,stackId:Xv(e.stackId)}),[e.barSize,e.dataKey,e.maxBarSize,a,e.stackId]),p=dn(e.children,An),m=$(x=>CC(x,t,r,h,v,p));if(d!=="vertical"&&d!=="horizontal")return null;var y,b=m==null?void 0:m[0];return b==null||b.height==null||b.width==null?y=0:y=d==="vertical"?b.height/2:b.width/2,g.createElement(Mg,{xAxisId:t,yAxisId:r,data:m,dataPointFormatter:eC,errorBarOffset:y},g.createElement(tC,cn({},e,{layout:d,needClip:f,data:m,xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s})))}function nC(e){var{layout:t,barSettings:{dataKey:r,minPointSize:n},pos:i,bandSize:a,xAxis:o,yAxis:u,xAxisTicks:l,yAxisTicks:c,stackedData:s,displayedData:f,offset:d,cells:h}=e,v=t==="horizontal"?u:o,p=s?v.scale.domain():null,m=Qx({numericAxis:v});return f.map((y,b)=>{var x,P,w,O,A,j;s?x=Gx(s[b],p):(x=re(y,r),Array.isArray(x)||(x=[m,x]));var T=zk(n,zg)(x[1],b);if(t==="horizontal"){var I,[C,_]=[u.scale(x[0]),u.scale(x[1])];P=ff({axis:o,ticks:l,bandSize:a,offset:i.offset,entry:y,index:b}),w=(I=_??C)!==null&&I!==void 0?I:void 0,O=i.size;var R=C-_;if(A=We(R)?0:R,j={x:P,y:d.top,width:O,height:d.height},Math.abs(T)>0&&Math.abs(A)0&&Math.abs(O)t,sC=(e,t,r)=>r,lC=(e,t,r,n)=>n,_l=(e,t,r,n,i)=>i,cC=(e,t,r,n,i)=>i.maxBarSize,fC=(e,t,r,n,i,a)=>a,Eh=(e,t,r)=>{var n=r??e;if(!J(n))return ke(n,t,0)},dC=S([Y,Ui,uC,sC,lC],(e,t,r,n,i)=>t.filter(a=>e==="horizontal"?a.xAxisId===r:a.yAxisId===n).filter(a=>a.isPanorama===i).filter(a=>a.hide===!1).filter(a=>a.type==="bar")),hC=(e,t,r,n)=>{var i=Y(e);return i==="horizontal"?bu(e,"yAxis",r,n):bu(e,"xAxis",t,n)},vC=(e,t,r)=>{var n=Y(e);return n==="horizontal"?Td(e,"xAxis",t):Td(e,"yAxis",r)};function pC(e){return e.stackId!=null&&e.dataKey!=null}var mC=(e,t,r)=>{var n={},i=e.filter(pC),a=e.filter(c=>c.stackId==null),o=i.reduce((c,s)=>(c[s.stackId]||(c[s.stackId]=[]),c[s.stackId].push(s),c),n),u=Object.entries(o).map(c=>{var[s,f]=c,d=f.map(v=>v.dataKey),h=Eh(t,r,f[0].barSize);return{stackId:s,dataKeys:d,barSize:h}}),l=a.map(c=>{var s=[c.dataKey].filter(d=>d!=null),f=Eh(t,r,c.barSize);return{stackId:void 0,dataKeys:s,barSize:f}});return[...u,...l]},gC=S([dC,OA,vC],mC),yC=(e,t,r,n,i)=>{var a,o,u=Y(e),l=cm(e),{maxBarSize:c}=i,s=J(c)?l:c,f,d;return u==="horizontal"?(f=vt(e,"xAxis",t,n),d=Bt(e,"xAxis",t,n)):(f=vt(e,"yAxis",r,n),d=Bt(e,"yAxis",r,n)),(a=(o=en(f,d,!0))!==null&&o!==void 0?o:s)!==null&&a!==void 0?a:0},Wg=(e,t,r,n)=>{var i=Y(e),a,o;return i==="horizontal"?(a=vt(e,"xAxis",t,n),o=Bt(e,"xAxis",t,n)):(a=vt(e,"yAxis",r,n),o=Bt(e,"yAxis",r,n)),en(a,o)};function bC(e,t,r,n,i){var a=n.length;if(!(a<1)){var o=ke(e,r,0,!0),u,l=[];if(Ye(n[0].barSize)){var c=!1,s=r/a,f=n.reduce((y,b)=>y+(b.barSize||0),0);f+=(a-1)*o,f>=r&&(f-=(a-1)*o,o=0),f>=r&&s>0&&(c=!0,s*=.9,f=a*s);var d=(r-f)/2>>0,h={offset:d-o,size:0};u=n.reduce((y,b)=>{var x,P={stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:h.offset+h.size+o,size:c?s:(x=b.barSize)!==null&&x!==void 0?x:0}},w=[...y,P];return h=w[w.length-1].position,w},l)}else{var v=ke(t,r,0,!0);r-2*v-(a-1)*o<=0&&(o=0);var p=(r-2*v-(a-1)*o)/a;p>1&&(p>>=0);var m=Ye(i)?Math.min(p,i):p;u=n.reduce((y,b,x)=>[...y,{stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:v+(p+o)*x+(p-m)/2,size:m}}],l)}return u}}var xC=(e,t,r,n,i,a,o)=>{var u=J(o)?t:o,l=bC(r,n,i!==a?i:a,e,u);return i!==a&&l!=null&&(l=l.map(c=>Bn(Bn({},c),{},{position:Bn(Bn({},c.position),{},{offset:c.position.offset-i/2})}))),l},wC=S([gC,cm,PA,fm,yC,Wg,cC],xC),PC=(e,t,r,n)=>vt(e,"xAxis",t,n),OC=(e,t,r,n)=>vt(e,"yAxis",r,n),AC=(e,t,r,n)=>Bt(e,"xAxis",t,n),SC=(e,t,r,n)=>Bt(e,"yAxis",r,n),EC=S([wC,_l],(e,t)=>{if(e!=null){var r=e.find(n=>n.stackId===t.stackId&&n.dataKeys.includes(t.dataKey));if(r!=null)return r.position}}),jC=(e,t)=>{if(!(!e||(t==null?void 0:t.dataKey)==null)){var{stackId:r}=t;if(r!=null){var n=e[r];if(n){var{stackedData:i}=n;if(i){var a=i.find(o=>o.key===t.dataKey);return a}}}}},TC=S([Ui,_l],(e,t)=>{if(e.some(r=>r.type==="bar"&&t.dataKey===r.dataKey&&t.stackId===r.stackId&&t.stackId===r.stackId))return t}),kC=S([hC,_l],jC),CC=S([ve,PC,OC,AC,SC,EC,Y,Ds,Wg,kC,TC,fC],(e,t,r,n,i,a,o,u,l,c,s,f)=>{var{chartData:d,dataStartIndex:h,dataEndIndex:v}=u;if(!(s==null||a==null||o!=="horizontal"&&o!=="vertical"||t==null||r==null||n==null||i==null||l==null)){var{data:p}=s,m;if(p!=null&&p.length>0?m=p:m=d==null?void 0:d.slice(h,v+1),m!=null)return nC({layout:o,barSettings:s,pos:a,bandSize:l,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,stackedData:c,displayedData:m,offset:e,cells:f})}}),Ug=e=>{var{chartData:t}=e,r=ae(),n=Ce();return g.useEffect(()=>n?()=>{}:(r(Ld(t)),()=>{r(Ld(void 0))}),[t,r,n]),null},jh={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},Hg=nt({name:"brush",initialState:jh,reducers:{setBrushSettings(e,t){return t.payload==null?jh:t.payload}}}),{setBrushSettings:q2}=Hg.actions,_C=Hg.reducer;function MC(e,t,r){return(t=DC(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function DC(e){var t=IC(e,"string");return typeof t=="symbol"?t:t+""}function IC(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}class Ml{static create(t){return new Ml(t)}constructor(t){this.scale=t}get domain(){return this.scale.domain}get range(){return this.scale.range}get rangeMin(){return this.range()[0]}get rangeMax(){return this.range()[1]}get bandwidth(){return this.scale.bandwidth}apply(t){var{bandAware:r,position:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t!==void 0){if(n)switch(n){case"start":return this.scale(t);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+i}case"end":{var a=this.bandwidth?this.bandwidth():0;return this.scale(t)+a}default:return this.scale(t)}if(r){var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+o}return this.scale(t)}}isInRange(t){var r=this.range(),n=r[0],i=r[r.length-1];return n<=i?t>=n&&t<=i:t>=i&&t<=n}}MC(Ml,"EPS",1e-4);function NC(e){return(e%180+180)%180}var $C=function(t){var{width:r,height:n}=t,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=NC(i),o=a*Math.PI/180,u=Math.atan(n/r),l=o>u&&o{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=bt(e).dots.findIndex(n=>n===t.payload);r!==-1&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=bt(e).areas.findIndex(n=>n===t.payload);r!==-1&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=bt(e).lines.findIndex(n=>n===t.payload);r!==-1&&e.lines.splice(r,1)}}}),{addDot:z2,removeDot:F2,addArea:W2,removeArea:U2,addLine:H2,removeLine:Y2}=Yg.actions,LC=Yg.reducer,BC=g.createContext(void 0),KC=e=>{var{children:t}=e,[r]=g.useState("".concat(or("recharts"),"-clip")),n=Tl();if(n==null)return null;var{x:i,y:a,width:o,height:u}=n;return g.createElement(BC.Provider,{value:r},g.createElement("defs",null,g.createElement("clipPath",{id:r},g.createElement("rect",{x:i,y:a,height:u,width:o}))),t)};function $o(e,t){for(var r in e)if({}.hasOwnProperty.call(e,r)&&(!{}.hasOwnProperty.call(t,r)||e[r]!==t[r]))return!1;for(var n in t)if({}.hasOwnProperty.call(t,n)&&!{}.hasOwnProperty.call(e,n))return!1;return!0}function Gg(e,t,r){if(t<1)return[];if(t===1&&r===void 0)return e;for(var n=[],i=0;ie*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function FC(e,t){return Gg(e,t+1)}function WC(e,t,r,n,i){for(var a=(n||[]).slice(),{start:o,end:u}=t,l=0,c=1,s=o,f=function(){var v=n==null?void 0:n[l];if(v===void 0)return{v:Gg(n,c)};var p=l,m,y=()=>(m===void 0&&(m=r(v,p)),m),b=v.coordinate,x=l===0||yi(e,b,y,s,u);x||(l=0,s=o,c+=1),x&&(s=b+e*(y()/2+i),l+=c)},d;c<=a.length;)if(d=f(),d)return d.v;return[]}function Th(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t(v===void 0&&(v=r(h,d)),v);if(d===o-1){var m=e*(h.coordinate+e*p()/2-l);a[d]=h=Se(Se({},h),{},{tickCoord:m>0?h.coordinate-m*e:h.coordinate})}else a[d]=h=Se(Se({},h),{},{tickCoord:h.coordinate});var y=yi(e,h.tickCoord,p,u,l);y&&(l=h.tickCoord-e*(p()/2+i),a[d]=Se(Se({},h),{},{isShow:!0}))},s=o-1;s>=0;s--)c(s);return a}function VC(e,t,r,n,i,a){var o=(n||[]).slice(),u=o.length,{start:l,end:c}=t;if(a){var s=n[u-1],f=r(s,u-1),d=e*(s.coordinate+e*f/2-c);o[u-1]=s=Se(Se({},s),{},{tickCoord:d>0?s.coordinate-d*e:s.coordinate});var h=yi(e,s.tickCoord,()=>f,l,c);h&&(c=s.tickCoord-e*(f/2+i),o[u-1]=Se(Se({},s),{},{isShow:!0}))}for(var v=a?u-1:u,p=function(b){var x=o[b],P,w=()=>(P===void 0&&(P=r(x,b)),P);if(b===0){var O=e*(x.coordinate-e*w()/2-l);o[b]=x=Se(Se({},x),{},{tickCoord:O<0?x.coordinate-O*e:x.coordinate})}else o[b]=x=Se(Se({},x),{},{tickCoord:x.coordinate});var A=yi(e,x.tickCoord,w,l,c);A&&(l=x.tickCoord+e*(w()/2+i),o[b]=Se(Se({},x),{},{isShow:!0}))},m=0;m{var w=typeof c=="function"?c(x.value,P):x.value;return v==="width"?qC(Zr(w,{fontSize:t,letterSpacing:r}),p,f):Zr(w,{fontSize:t,letterSpacing:r})[v]},y=i.length>=2?ge(i[1].coordinate-i[0].coordinate):1,b=zC(a,y,v);return l==="equidistantPreserveStart"?WC(y,b,m,i,o):(l==="preserveStart"||l==="preserveStartEnd"?h=VC(y,b,m,i,o,l==="preserveStartEnd"):h=GC(y,b,m,i,o),h.filter(x=>x.isShow))}var XC=["viewBox"],ZC=["viewBox"];function xr(){return xr=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:[],{tickLine:i,stroke:a,tick:o,tickFormatter:u,unit:l}=this.props,c=Dl(he(he({},this.props),{},{ticks:n}),t,r),s=this.getTickTextAnchor(),f=this.getTickVerticalAnchor(),d=z(this.props,!1),h=z(o,!1),v=he(he({},d),{},{fill:"none"},z(i,!1)),p=c.map((m,y)=>{var{line:b,tick:x}=this.getTickLineCoord(m),P=he(he(he(he({textAnchor:s,verticalAnchor:f},d),{},{stroke:"none",fill:a},h),x),{},{index:y,payload:m,visibleTicksCount:c.length,tickFormatter:u});return g.createElement(ye,xr({className:"recharts-cartesian-axis-tick",key:"tick-".concat(m.value,"-").concat(m.coordinate,"-").concat(m.tickCoord)},wi(this.props,m,y)),i&&g.createElement("line",xr({},v,b,{className:H("recharts-cartesian-axis-tick-line",Rt(i,"className"))})),o&&Ut.renderTickItem(o,P,"".concat(typeof u=="function"?u(m.value,y):m.value).concat(l||"")))});return p.length>0?g.createElement("g",{className:"recharts-cartesian-axis-ticks"},p):null}render(){var{axisLine:t,width:r,height:n,className:i,hide:a}=this.props;if(a)return null;var{ticks:o}=this.props;return r!=null&&r<=0||n!=null&&n<=0?null:g.createElement(ye,{className:H("recharts-cartesian-axis",i),ref:u=>{if(u){var l=u.getElementsByClassName("recharts-cartesian-axis-tick-value");this.tickRefs.current=Array.from(l);var c=l[0];if(c){var s=window.getComputedStyle(c).fontSize,f=window.getComputedStyle(c).letterSpacing;(s!==this.state.fontSize||f!==this.state.letterSpacing)&&this.setState({fontSize:window.getComputedStyle(c).fontSize,letterSpacing:window.getComputedStyle(c).letterSpacing})}}}},t&&this.renderAxisLine(),this.renderTicks(this.state.fontSize,this.state.letterSpacing,o),qe.renderCallByParent(this.props))}}Il(Ut,"displayName","CartesianAxis");Il(Ut,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var t_=["x1","y1","x2","y2","key"],r_=["offset"],n_=["xAxisId","yAxisId"],i_=["xAxisId","yAxisId"];function _h(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function je(e){for(var t=1;t{var{fill:t}=e;if(!t||t==="none")return null;var{fillOpacity:r,x:n,y:i,width:a,height:o,ry:u}=e;return g.createElement("rect",{x:n,y:i,ry:u,width:a,height:o,stroke:"none",fill:t,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function Vg(e,t){var r;if(g.isValidElement(e))r=g.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var{x1:n,y1:i,x2:a,y2:o,key:u}=t,l=bi(t,t_),c=z(l,!1),{offset:s}=c,f=bi(c,r_);r=g.createElement("line",tr({},f,{x1:n,y1:i,x2:a,y2:o,fill:"none",key:u}))}return r}function c_(e){var{x:t,width:r,horizontal:n=!0,horizontalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=bi(e,n_),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:t,y1:c,x2:t+r,y2:c,key:"line-".concat(s),index:s});return Vg(n,f)});return g.createElement("g",{className:"recharts-cartesian-grid-horizontal"},l)}function f_(e){var{y:t,height:r,vertical:n=!0,verticalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=bi(e,i_),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:c,y1:t,x2:c,y2:t+r,key:"line-".concat(s),index:s});return Vg(n,f)});return g.createElement("g",{className:"recharts-cartesian-grid-vertical"},l)}function d_(e){var{horizontalFill:t,fillOpacity:r,x:n,y:i,width:a,height:o,horizontalPoints:u,horizontal:l=!0}=e;if(!l||!t||!t.length)return null;var c=u.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%t.length;return g.createElement("rect",{key:"react-".concat(d),y:f,x:n,height:v,width:a,stroke:"none",fill:t[p],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return g.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},s)}function h_(e){var{vertical:t=!0,verticalFill:r,fillOpacity:n,x:i,y:a,width:o,height:u,verticalPoints:l}=e;if(!t||!r||!r.length)return null;var c=l.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%r.length;return g.createElement("rect",{key:"react-".concat(d),x:f,y:a,width:v,height:u,stroke:"none",fill:r[p],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return g.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},s)}var v_=(e,t)=>{var{xAxis:r,width:n,height:i,offset:a}=e;return Gv(Dl(je(je(je({},Ut.defaultProps),r),{},{ticks:Vv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.left,a.left+a.width,t)},p_=(e,t)=>{var{yAxis:r,width:n,height:i,offset:a}=e;return Gv(Dl(je(je(je({},Ut.defaultProps),r),{},{ticks:Vv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.top,a.top+a.height,t)},m_={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0};function Nl(e){var t=rp(),r=np(),n=tp(),i=je(je({},it(e,m_)),{},{x:D(e.x)?e.x:n.left,y:D(e.y)?e.y:n.top,width:D(e.width)?e.width:n.width,height:D(e.height)?e.height:n.height}),{xAxisId:a,yAxisId:o,x:u,y:l,width:c,height:s,syncWithTicks:f,horizontalValues:d,verticalValues:h}=i,v=Ce(),p=$(T=>kd(T,"xAxis",a,v)),m=$(T=>kd(T,"yAxis",o,v));if(!D(c)||c<=0||!D(s)||s<=0||!D(u)||u!==+u||!D(l)||l!==+l)return null;var y=i.verticalCoordinatesGenerator||v_,b=i.horizontalCoordinatesGenerator||p_,{horizontalPoints:x,verticalPoints:P}=i;if((!x||!x.length)&&typeof b=="function"){var w=d&&d.length,O=b({yAxis:m?je(je({},m),{},{ticks:w?d:m.ticks}):void 0,width:t,height:r,offset:n},w?!0:f);Xr(Array.isArray(O),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof O,"]")),Array.isArray(O)&&(x=O)}if((!P||!P.length)&&typeof y=="function"){var A=h&&h.length,j=y({xAxis:p?je(je({},p),{},{ticks:A?h:p.ticks}):void 0,width:t,height:r,offset:n},A?!0:f);Xr(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(P=j)}return g.createElement("g",{className:"recharts-cartesian-grid"},g.createElement(l_,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),g.createElement(d_,tr({},i,{horizontalPoints:x})),g.createElement(h_,tr({},i,{verticalPoints:P})),g.createElement(c_,tr({},i,{offset:n,horizontalPoints:x,xAxis:p,yAxis:m})),g.createElement(f_,tr({},i,{offset:n,verticalPoints:P,xAxis:p,yAxis:m})))}Nl.displayName="CartesianGrid";var Xg=(e,t,r,n)=>vt(e,"xAxis",t,n),Zg=(e,t,r,n)=>Bt(e,"xAxis",t,n),Jg=(e,t,r,n)=>vt(e,"yAxis",r,n),Qg=(e,t,r,n)=>Bt(e,"yAxis",r,n),g_=S([Y,Xg,Jg,Zg,Qg],(e,t,r,n,i)=>qt(e,"xAxis")?en(t,n,!1):en(r,i,!1)),y_=(e,t,r,n,i)=>i,b_=S([Ui,y_],(e,t)=>{if(e.some(r=>r.type==="line"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),x_=S([Y,Xg,Jg,Zg,Qg,b_,g_,Ds],(e,t,r,n,i,a,o,u)=>{var{chartData:l,dataStartIndex:c,dataEndIndex:s}=u;if(!(a==null||t==null||r==null||n==null||i==null||n.length===0||i.length===0||o==null)){var{dataKey:f,data:d}=a,h;if(d!=null&&d.length>0?h=d:h=l==null?void 0:l.slice(c,s+1),h!=null)return B_({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataKey:f,bandSize:o,displayedData:h})}}),w_=["type","layout","connectNulls","needClip"],P_=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId"];function ey(e,t){if(e==null)return{};var r,n,i=O_(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{dataKey:t,name:r,stroke:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:_r(r,t),payload:e}]};function j_(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:u,unit:l}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:_r(o,t),hide:u,type:e.tooltipType,color:e.stroke,unit:l}}}var ty=(e,t)=>"".concat(t,"px ").concat(e-t,"px");function T_(e,t){for(var r=e.length%2!==0?[...e,0]:e,n=[],i=0;i{var n=r.reduce((f,d)=>f+d);if(!n)return ty(t,e);for(var i=Math.floor(e/n),a=e%n,o=t-e,u=[],l=0,c=0;la){u=[...r.slice(0,l),a-c];break}var s=u.length%2===0?[0,o]:[o];return[...T_(r,i),...u,...s].map(f=>"".concat(f,"px")).join(", ")};function C_(e,t){var r;if(g.isValidElement(e))r=g.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var n=H("recharts-line-dot",typeof e!="boolean"?e.className:"");r=g.createElement(bg,Cr({},t,{className:n}))}return r}function __(e,t){return e==null?!1:t?!0:e.length===1}function M_(e){var{clipPathId:t,points:r,props:n}=e,{dot:i,dataKey:a,needClip:o}=n;if(!__(r,i))return null;var u=Yh(i),l=z(n,!1),c=z(i,!0),s=r.map((d,h)=>{var v=ot(ot(ot({key:"dot-".concat(h),r:3},l),c),{},{index:h,cx:d.x,cy:d.y,dataKey:a,value:d.value,payload:d.payload,points:r});return C_(i,v)}),f={clipPath:o?"url(#clipPath-".concat(u?"":"dots-").concat(t,")"):null};return g.createElement(ye,Cr({className:"recharts-line-dots",key:"dots"},f),s)}function ku(e){var{clipPathId:t,pathRef:r,points:n,strokeDasharray:i,props:a,showLabels:o}=e,{type:u,layout:l,connectNulls:c,needClip:s}=a,f=ey(a,w_),d=ot(ot({},z(f,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:s?"url(#clipPath-".concat(t,")"):null,points:n,type:u,layout:l,connectNulls:c,strokeDasharray:i??a.strokeDasharray});return g.createElement(g.Fragment,null,(n==null?void 0:n.length)>1&&g.createElement(us,Cr({},d,{pathRef:r})),g.createElement(M_,{points:n,clipPathId:t,props:a}),o&&$t.renderCallByParent(a,n))}function D_(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function I_(e){var{clipPathId:t,props:r,pathRef:n,previousPointsRef:i,longestAnimatedLengthRef:a}=e,{points:o,strokeDasharray:u,isAnimationActive:l,animationBegin:c,animationDuration:s,animationEasing:f,animateNewValues:d,width:h,height:v,onAnimationEnd:p,onAnimationStart:m}=r,y=i.current,b=El(r,"recharts-line-"),[x,P]=g.useState(!1),w=g.useCallback(()=>{typeof p=="function"&&p(),P(!1)},[p]),O=g.useCallback(()=>{typeof m=="function"&&m(),P(!0)},[m]),A=D_(n.current),j=a.current;return g.createElement(Lt,{begin:c,duration:s,isActive:l,easing:f,from:{t:0},to:{t:1},onAnimationEnd:w,onAnimationStart:O,key:b},T=>{var{t:I}=T,C=Ke(j,A+j),_=Math.min(C(I),A),R;if(u){var B="".concat(u).split(/[,\s]+/gim).map(K=>parseFloat(K));R=k_(_,A,B)}else R=ty(A,_);if(y){var F=y.length/o.length,V=I===1?o:o.map((K,de)=>{var oe=Math.floor(de*F);if(y[oe]){var Ie=y[oe],Ge=Ke(Ie.x,K.x),L=Ke(Ie.y,K.y);return ot(ot({},K),{},{x:Ge(I),y:L(I)})}if(d){var we=Ke(h*2,K.x),Ht=Ke(v/2,K.y);return ot(ot({},K),{},{x:we(I),y:Ht(I)})}return ot(ot({},K),{},{x:K.x,y:K.y})});return i.current=V,g.createElement(ku,{props:r,points:V,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})}return I>0&&A>0&&(i.current=o,a.current=_),g.createElement(ku,{props:r,points:o,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})})}function N_(e){var{clipPathId:t,props:r}=e,{points:n,isAnimationActive:i}=r,a=g.useRef(null),o=g.useRef(0),u=g.useRef(null),l=a.current;return i&&n&&n.length&&l!==n?g.createElement(I_,{props:r,clipPathId:t,previousPointsRef:a,longestAnimatedLengthRef:o,pathRef:u}):g.createElement(ku,{props:r,points:n,clipPathId:t,pathRef:u,showLabels:!0})}var $_=(e,t)=>({x:e.x,y:e.y,value:e.value,errorVal:re(e.payload,t)});class R_ extends g.Component{constructor(){super(...arguments),ta(this,"id",or("recharts-line-"))}render(){var t,{hide:r,dot:n,points:i,className:a,xAxisId:o,yAxisId:u,top:l,left:c,width:s,height:f,id:d,needClip:h,layout:v}=this.props;if(r)return null;var p=H("recharts-line",a),m=J(d)?this.id:d,{r:y=3,strokeWidth:b=2}=(t=z(n,!1))!==null&&t!==void 0?t:{r:3,strokeWidth:2},x=Yh(n),P=y*2+b;return g.createElement(g.Fragment,null,g.createElement(ye,{className:p},h&&g.createElement("defs",null,g.createElement(Kg,{clipPathId:m,xAxisId:o,yAxisId:u}),!x&&g.createElement("clipPath",{id:"clipPath-dots-".concat(m)},g.createElement("rect",{x:c-P/2,y:l-P/2,width:s+P,height:f+P}))),g.createElement(N_,{props:this.props,clipPathId:m}),g.createElement($g,{direction:v==="horizontal"?"y":"x"},g.createElement(Mg,{xAxisId:o,yAxisId:u,data:i,dataPointFormatter:$_,errorBarOffset:0},this.props.children))),g.createElement(gk,{activeDot:this.props.activeDot,points:i,mainColor:this.props.stroke,itemDataKey:this.props.dataKey}))}}var ry={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:!fr.isSsr,label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0};function L_(e){var t=it(e,ry),{activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,connectNulls:u,dot:l,hide:c,isAnimationActive:s,label:f,legendType:d,xAxisId:h,yAxisId:v}=t,p=ey(t,P_),{needClip:m}=kl(h,v),{height:y,width:b,x,y:P}=Tl(),w=Ni(),O=Ce(),A=g.useMemo(()=>({dataKey:e.dataKey,data:e.data}),[e.dataKey,e.data]),j=$(T=>x_(T,h,v,O,A));return w!=="horizontal"&&w!=="vertical"?null:g.createElement(R_,Cr({},p,{connectNulls:u,dot:l,activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:s,hide:c,label:f,legendType:d,xAxisId:h,yAxisId:v,points:j,layout:w,height:y,width:b,left:x,top:P,needClip:m}))}function B_(e){var{layout:t,xAxis:r,yAxis:n,xAxisTicks:i,yAxisTicks:a,dataKey:o,bandSize:u,displayedData:l}=e;return l.map((c,s)=>{var f=re(c,o);return t==="horizontal"?{x:cf({axis:r,ticks:i,bandSize:u,entry:c,index:s}),y:J(f)?null:n.scale(f),value:f,payload:c}:{x:J(f)?null:r.scale(f),y:cf({axis:n,ticks:a,bandSize:u,entry:c,index:s}),value:f,payload:c}})}class $l extends g.PureComponent{render(){return g.createElement(Dg,{type:"line",data:this.props.data,xAxisId:this.props.xAxisId,yAxisId:this.props.yAxisId,zAxisId:0,dataKey:this.props.dataKey,stackId:void 0,hide:this.props.hide,barSize:void 0},g.createElement(jg,{legendPayload:E_(this.props)}),g.createElement(Sl,{fn:j_,args:this.props}),g.createElement(L_,this.props))}}ta($l,"displayName","Line");ta($l,"defaultProps",ry);function Dh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ih(e){for(var t=1;t{var{children:a}=e,o=ay(e,X_);return o},[e]),n=$(a=>kt(a,r.id)),i=r===n;return g.useEffect(()=>(t(W_(r)),()=>{t(U_(r))}),[r,t]),i?e.children:null}var rM=e=>{var{xAxisId:t,className:r}=e,n=$(ep),i=Ce(),a="xAxis",o=$(h=>Rr(h,a,t,i)),u=$(h=>Bm(h,a,t,i)),l=$(h=>Nm(h,t)),c=$(h=>pS(h,t));if(l==null||c==null)return null;var{dangerouslySetInnerHTML:s,ticks:f}=e,d=ay(e,Z_);return g.createElement(Ut,Cu({},d,{scale:o,x:c.x,y:c.y,width:l.width,height:l.height,className:H("recharts-".concat(a," ").concat(a),r),viewBox:n,ticks:u}))},nM=e=>{var t,r,n,i,a;return g.createElement(tM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.xAxisId,scale:e.scale,type:e.type,padding:e.padding,allowDataOverflow:e.allowDataOverflow,domain:e.domain,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,height:e.height,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter},g.createElement(rM,e))};class ra extends g.Component{render(){return g.createElement(nM,this.props)}}iy(ra,"displayName","XAxis");iy(ra,"defaultProps",{allowDataOverflow:Re.allowDataOverflow,allowDecimals:Re.allowDecimals,allowDuplicatedCategory:Re.allowDuplicatedCategory,height:Re.height,hide:!1,mirror:Re.mirror,orientation:Re.orientation,padding:Re.padding,reversed:Re.reversed,scale:Re.scale,tickCount:Re.tickCount,type:Re.type,xAxisId:0});var iM=e=>{var{ticks:t,label:r,labelGapWithTick:n=5,tickSize:i=0,tickMargin:a=0}=e,o=0;if(t){t.forEach(s=>{if(s){var f=s.getBoundingClientRect();f.width>o&&(o=f.width)}});var u=r?r.getBoundingClientRect().width:0,l=i+a,c=o+l+u+(r?n:0);return Math.round(c)}return 0},aM=["dangerouslySetInnerHTML","ticks"];function oy(e,t,r){return(t=oM(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function oM(e){var t=uM(e,"string");return typeof t=="symbol"?t:t+""}function uM(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function _u(){return _u=Object.assign?Object.assign.bind():function(e){for(var t=1;t(t(H_(e)),()=>{t(Y_(e))}),[e,t]),null}var fM=e=>{var t,{yAxisId:r,className:n,width:i,label:a}=e,o=g.useRef(null),u=g.useRef(null),l=$(ep),c=Ce(),s=ae(),f="yAxis",d=$(x=>Rr(x,f,r,c)),h=$(x=>$m(x,r)),v=$(x=>mS(x,r)),p=$(x=>Bm(x,f,r,c));if(g.useLayoutEffect(()=>{var x;if(!(i!=="auto"||!h||gl(a)||g.isValidElement(a))){var P=o.current,w=P==null||(x=P.tickRefs)===null||x===void 0?void 0:x.current,{tickSize:O,tickMargin:A}=P.props,j=iM({ticks:w,label:u.current,labelGapWithTick:5,tickSize:O,tickMargin:A});Math.round(h.width)!==Math.round(j)&&s(G_({id:r,width:j}))}},[o,o==null||(t=o.current)===null||t===void 0||(t=t.tickRefs)===null||t===void 0?void 0:t.current,h==null?void 0:h.width,h,s,a,r,i]),h==null||v==null)return null;var{dangerouslySetInnerHTML:m,ticks:y}=e,b=sM(e,aM);return g.createElement(Ut,_u({},b,{ref:o,labelRef:u,scale:d,x:v.x,y:v.y,width:h.width,height:h.height,className:H("recharts-".concat(f," ").concat(f),n),viewBox:l,ticks:p}))},dM=e=>{var t,r,n,i,a;return g.createElement(g.Fragment,null,g.createElement(cM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.yAxisId,scale:e.scale,type:e.type,domain:e.domain,allowDataOverflow:e.allowDataOverflow,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,padding:e.padding,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,width:e.width,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter}),g.createElement(fM,e))},hM={allowDataOverflow:Le.allowDataOverflow,allowDecimals:Le.allowDecimals,allowDuplicatedCategory:Le.allowDuplicatedCategory,hide:!1,mirror:Le.mirror,orientation:Le.orientation,padding:Le.padding,reversed:Le.reversed,scale:Le.scale,tickCount:Le.tickCount,type:Le.type,width:Le.width,yAxisId:0};class na extends g.Component{render(){return g.createElement(dM,this.props)}}oy(na,"displayName","YAxis");oy(na,"defaultProps",hM);var Ro={exports:{}},Lo={};/** + * @license React + * use-sync-external-store-with-selector.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Nh;function vM(){if(Nh)return Lo;Nh=1;var e=Bu();function t(l,c){return l===c&&(l!==0||1/l===1/c)||l!==l&&c!==c}var r=typeof Object.is=="function"?Object.is:t,n=e.useSyncExternalStore,i=e.useRef,a=e.useEffect,o=e.useMemo,u=e.useDebugValue;return Lo.useSyncExternalStoreWithSelector=function(l,c,s,f,d){var h=i(null);if(h.current===null){var v={hasValue:!1,value:null};h.current=v}else v=h.current;h=o(function(){function m(w){if(!y){if(y=!0,b=w,w=f(w),d!==void 0&&v.hasValue){var O=v.value;if(d(O,w))return x=O}return x=w}if(O=x,r(b,w))return O;var A=f(w);return d!==void 0&&d(O,A)?(b=w,O):(b=w,x=A)}var y=!1,b,x,P=s===void 0?null:s;return[function(){return m(c())},P===null?void 0:function(){return m(P())}]},[c,s,f,d]);var p=n(l,h[0],h[1]);return a(function(){v.hasValue=!0,v.value=p},[p]),u(p),p},Lo}var $h;function pM(){return $h||($h=1,Ro.exports=vM()),Ro.exports}pM();function mM(e){e()}function gM(){let e=null,t=null;return{clear(){e=null,t=null},notify(){mM(()=>{let r=e;for(;r;)r.callback(),r=r.next})},get(){const r=[];let n=e;for(;n;)r.push(n),n=n.next;return r},subscribe(r){let n=!0;const i=t={callback:r,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!n||e===null||(n=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var Rh={notify(){},get:()=>[]};function yM(e,t){let r,n=Rh,i=0,a=!1;function o(p){s();const m=n.subscribe(p);let y=!1;return()=>{y||(y=!0,m(),f())}}function u(){n.notify()}function l(){v.onStateChange&&v.onStateChange()}function c(){return a}function s(){i++,r||(r=e.subscribe(l),n=gM())}function f(){i--,r&&i===0&&(r(),r=void 0,n.clear(),n=Rh)}function d(){a||(a=!0,s())}function h(){a&&(a=!1,f())}const v={addNestedSub:o,notifyNestedSubs:u,handleChangeWrapper:l,isSubscribed:c,trySubscribe:d,tryUnsubscribe:h,getListeners:()=>n};return v}var bM=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",xM=bM(),wM=()=>typeof navigator<"u"&&navigator.product==="ReactNative",PM=wM(),OM=()=>xM||PM?g.useLayoutEffect:g.useEffect,AM=OM(),Bo=Symbol.for("react-redux-context"),Ko=typeof globalThis<"u"?globalThis:{};function SM(){if(!g.createContext)return{};const e=Ko[Bo]??(Ko[Bo]=new Map);let t=e.get(g.createContext);return t||(t=g.createContext(null),e.set(g.createContext,t)),t}var EM=SM();function jM(e){const{children:t,context:r,serverState:n,store:i}=e,a=g.useMemo(()=>{const l=yM(i);return{store:i,subscription:l,getServerState:n?()=>n:void 0}},[i,n]),o=g.useMemo(()=>i.getState(),[i]);AM(()=>{const{subscription:l}=a;return l.onStateChange=l.notifyNestedSubs,l.trySubscribe(),o!==i.getState()&&l.notifyNestedSubs(),()=>{l.tryUnsubscribe(),l.onStateChange=void 0}},[a,o]);const u=r||EM;return g.createElement(u.Provider,{value:a},t)}var TM=jM,kM=(e,t)=>t,Rl=S([kM,Y,kA,xe,eg,Ct,bE,ve],AE),Ll=e=>{var t=e.currentTarget.getBoundingClientRect(),r=t.width/e.currentTarget.offsetWidth,n=t.height/e.currentTarget.offsetHeight;return{chartX:Math.round((e.clientX-t.left)/r),chartY:Math.round((e.clientY-t.top)/n)}},uy=tt("mouseClick"),sy=hn();sy.startListening({actionCreator:uy,effect:(e,t)=>{var r=e.payload,n=Rl(t.getState(),Ll(r));(n==null?void 0:n.activeIndex)!=null&&t.dispatch(kS({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var Mu=tt("mouseMove"),ly=hn();ly.startListening({actionCreator:Mu,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=al(n,n.tooltip.settings.shared),a=Rl(n,Ll(r));i==="axis"&&((a==null?void 0:a.activeIndex)!=null?t.dispatch(Ym({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate})):t.dispatch(Hm()))}});function CM(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":t}var Lh={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index"},cy=nt({name:"rootProps",initialState:Lh,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=(r=t.payload.barGap)!==null&&r!==void 0?r:Lh.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className}}}),_M=cy.reducer,{updateOptions:MM}=cy.actions,fy=nt({name:"polarOptions",initialState:null,reducers:{updatePolarOptions:(e,t)=>t.payload}}),{updatePolarOptions:DM}=fy.actions,IM=fy.reducer,dy=tt("keyDown"),hy=tt("focus"),Bl=hn();Bl.startListening({actionCreator:dy,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip,a=e.payload;if(!(a!=="ArrowRight"&&a!=="ArrowLeft"&&a!=="Enter")){var o=Number(ol(i,mr(r))),u=Ct(r);if(a==="Enter"){var l=vi(r,"axis","hover",String(i.index));t.dispatch(wu({active:!i.active,activeIndex:i.index,activeDataKey:i.dataKey,activeCoordinate:l}));return}var c=xS(r),s=c==="left-to-right"?1:-1,f=a==="ArrowRight"?1:-1,d=o+f*s;if(!(u==null||d>=u.length||d<0)){var h=vi(r,"axis","hover",String(d));t.dispatch(wu({active:!0,activeIndex:d.toString(),activeDataKey:void 0,activeCoordinate:h}))}}}}});Bl.startListening({actionCreator:hy,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip;if(!i.active&&i.index==null){var a="0",o=vi(r,"axis","hover",String(a));t.dispatch(wu({activeDataKey:void 0,active:!0,activeIndex:a,activeCoordinate:o}))}}}});var Je=tt("externalEvent"),vy=hn();vy.startListening({actionCreator:Je,effect:(e,t)=>{if(e.payload.handler!=null){var r=t.getState(),n={activeCoordinate:lE(r),activeDataKey:ig(r),activeIndex:Kt(r),activeLabel:ng(r),activeTooltipIndex:Kt(r),isTooltipActive:cE(r)};e.payload.handler(n,e.payload.reactEvent)}}});var NM=S([Lr],e=>e.tooltipItemPayloads),$M=S([NM,On,(e,t,r)=>t,(e,t,r)=>r],(e,t,r,n)=>{var i=e.find(u=>u.settings.dataKey===n);if(i!=null){var{positions:a}=i;if(a!=null){var o=t(a,r);return o}}}),py=tt("touchMove"),my=hn();my.startListening({actionCreator:py,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=al(n,n.tooltip.settings.shared);if(i==="axis"){var a=Rl(n,Ll({clientX:r.touches[0].clientX,clientY:r.touches[0].clientY,currentTarget:r.currentTarget}));(a==null?void 0:a.activeIndex)!=null&&t.dispatch(Ym({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate}))}else if(i==="item"){var o,u=r.touches[0],l=document.elementFromPoint(u.clientX,u.clientY);if(!l||!l.getAttribute)return;var c=l.getAttribute(Jv),s=(o=l.getAttribute(Qv))!==null&&o!==void 0?o:void 0,f=$M(t.getState(),c,s);t.dispatch(Um({activeDataKey:s,activeIndex:c,activeCoordinate:f}))}}});var RM=Av({brush:_C,cartesianAxis:V_,chartData:KE,graphicalItems:wT,layout:Mx,legend:pw,options:NE,polarAxis:aT,polarOptions:IM,referenceElements:LC,rootProps:_M,tooltip:CS}),LM=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Chart";return nx({reducer:RM,preloadedState:t,middleware:n=>n({serializableCheck:!1}).concat([sy.middleware,ly.middleware,Bl.middleware,vy.middleware,my.middleware]),devTools:{serialize:{replacer:CM},name:"recharts-".concat(r)}})};function gy(e){var{preloadedState:t,children:r,reduxStoreName:n}=e,i=Ce(),a=g.useRef(null);if(i)return r;a.current==null&&(a.current=LM(t,n));var o=Ju;return g.createElement(TM,{context:o,store:a.current},r)}function yy(e){var{layout:t,width:r,height:n,margin:i}=e,a=ae(),o=Ce();return g.useEffect(()=>{o||(a(kx(t)),a(Cx({width:r,height:n})),a(Tx(i)))},[a,o,t,r,n,i]),null}function by(e){var t=ae();return g.useEffect(()=>{t(MM(e))},[t,e]),null}var BM=["children"];function KM(e,t){if(e==null)return{};var r,n,i=qM(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=rp(),n=np(),i=up();if(!Sr(r)||!Sr(n))return null;var{children:a,otherAttributes:o,title:u,desc:l}=e,c,s;return typeof o.tabIndex=="number"?c=o.tabIndex:c=i?0:void 0,typeof o.role=="string"?s=o.role:s=i?"application":void 0,g.createElement(Gh,xi({},o,{title:u,desc:l,role:s,tabIndex:c,width:r,height:n,style:zM,ref:t}),a)}),WM=e=>{var{children:t}=e,r=$(Ii);if(!r)return null;var{width:n,height:i,y:a,x:o}=r;return g.createElement(Gh,{width:n,height:i,x:o,y:a},t)},Bh=g.forwardRef((e,t)=>{var{children:r}=e,n=KM(e,BM),i=Ce();return i?g.createElement(WM,null,r):g.createElement(FM,xi({ref:t},n),r)});function UM(){var e=ae(),[t,r]=g.useState(null),n=$(ow);return g.useEffect(()=>{if(t!=null){var i=t.getBoundingClientRect(),a=i.width/t.offsetWidth;Ye(a)&&a!==n&&e(_x(a))}},[t,e,n]),r}function Kh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function HM(e){for(var t=1;t{var{children:r,className:n,height:i,onClick:a,onContextMenu:o,onDoubleClick:u,onMouseDown:l,onMouseEnter:c,onMouseLeave:s,onMouseMove:f,onMouseUp:d,onTouchEnd:h,onTouchMove:v,onTouchStart:p,style:m,width:y}=e,b=ae(),[x,P]=g.useState(null),[w,O]=g.useState(null);FE();var A=UM(),j=g.useCallback(L=>{A(L),typeof t=="function"&&t(L),P(L),O(L)},[A,t,P,O]),T=g.useCallback(L=>{b(uy(L)),b(Je({handler:a,reactEvent:L}))},[b,a]),I=g.useCallback(L=>{b(Mu(L)),b(Je({handler:c,reactEvent:L}))},[b,c]),C=g.useCallback(L=>{b(Hm()),b(Je({handler:s,reactEvent:L}))},[b,s]),_=g.useCallback(L=>{b(Mu(L)),b(Je({handler:f,reactEvent:L}))},[b,f]),R=g.useCallback(()=>{b(hy())},[b]),B=g.useCallback(L=>{b(dy(L.key))},[b]),F=g.useCallback(L=>{b(Je({handler:o,reactEvent:L}))},[b,o]),V=g.useCallback(L=>{b(Je({handler:u,reactEvent:L}))},[b,u]),K=g.useCallback(L=>{b(Je({handler:l,reactEvent:L}))},[b,l]),de=g.useCallback(L=>{b(Je({handler:d,reactEvent:L}))},[b,d]),oe=g.useCallback(L=>{b(Je({handler:p,reactEvent:L}))},[b,p]),Ie=g.useCallback(L=>{b(py(L)),b(Je({handler:v,reactEvent:L}))},[b,v]),Ge=g.useCallback(L=>{b(Je({handler:h,reactEvent:L}))},[b,h]);return g.createElement(cg.Provider,{value:x},g.createElement(Qy.Provider,{value:w},g.createElement("div",{className:H("recharts-wrapper",n),style:HM({position:"relative",cursor:"default",width:y,height:i},m),onClick:T,onContextMenu:F,onDoubleClick:V,onFocus:R,onKeyDown:B,onMouseDown:K,onMouseEnter:I,onMouseLeave:C,onMouseMove:_,onMouseUp:de,onTouchEnd:Ge,onTouchMove:Ie,onTouchStart:oe,ref:j},r)))}),ZM=["children","className","width","height","style","compact","title","desc"];function JM(e,t){if(e==null)return{};var r,n,i=QM(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{children:r,className:n,width:i,height:a,style:o,compact:u,title:l,desc:c}=e,s=JM(e,ZM),f=z(s,!1);return u?g.createElement(Bh,{otherAttributes:f,title:l,desc:c},r):g.createElement(XM,{className:n,style:o,width:i,height:a,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},g.createElement(Bh,{otherAttributes:f,title:l,desc:c,ref:t},g.createElement(KC,null,r)))}),e2=["width","height"];function Du(){return Du=Object.assign?Object.assign.bind():function(e){for(var t=1;tg.createElement(wy,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:a2,tooltipPayloadSearcher:vl,categoricalChartProps:e,ref:t})),u2=["axis","item"],s2=g.forwardRef((e,t)=>g.createElement(wy,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:u2,tooltipPayloadSearcher:vl,categoricalChartProps:e,ref:t}));function l2(e){var t=ae();return g.useEffect(()=>{t(DM(e))},[t,e]),null}var c2=["width","height","layout"];function Iu(){return Iu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=it(e,g2);return g.createElement(p2,{chartName:"PieChart",defaultTooltipEventType:"item",validateTooltipEventTypes:m2,tooltipPayloadSearcher:vl,categoricalChartProps:r,ref:t})});const Kl=(e="line")=>g.useMemo(()=>({...{margin:{top:5,right:30,left:20,bottom:5},gridProps:{strokeDasharray:"3 3",stroke:"#f3f4f6"},axisProps:{stroke:"#6b7280",fontSize:12}},...{line:{strokeWidth:3,dot:{strokeWidth:2,r:4},activeDot:{r:6,strokeWidth:2}},bar:{radius:[4,4,0,0]},pie:{innerRadius:60,outerRadius:80,paddingAngle:5}}[e]}),[e]),b2=({data:e={survived:95.2,lost:4.8}})=>{const t=Kl("pie"),r=[{name:"Survived",value:e.survived,color:"#10b981"},{name:"Lost",value:e.lost,color:"#ef4444"}];return E.jsxs(Nu,{children:[E.jsx($u,{children:E.jsx(Ru,{children:"Tree Survival Rate"})}),E.jsx(Ty,{value:e.survived,label:"Survival Rate"}),E.jsx(ml,{width:"100%",height:200,children:E.jsxs(y2,{children:[E.jsx(jl,{data:r,cx:"50%",cy:"50%",innerRadius:t.innerRadius,outerRadius:t.outerRadius,paddingAngle:t.paddingAngle,dataKey:"value",children:r.map((n,i)=>E.jsx(An,{fill:n.color},`cell-${i}`))}),E.jsx(pl,{content:E.jsx(Lu,{valueFormatter:n=>`${n}%`})})]})}),E.jsx(ky,{data:r})]})},x2=[{month:"Jan",height:1.2},{month:"Feb",height:1.4},{month:"Mar",height:1.6},{month:"Apr",height:1.8},{month:"May",height:2},{month:"Jun",height:2.2},{month:"Jul",height:2.4},{month:"Aug",height:2.6},{month:"Sep",height:2.8},{month:"Oct",height:3},{month:"Nov",height:3.2},{month:"Dec",height:3.4}],w2=({data:e=x2})=>{const t=Kl("line");return E.jsxs(Nu,{children:[E.jsx($u,{children:E.jsx(Ru,{children:"Average Tree Height Over Time"})}),E.jsx(ml,{width:"100%",height:300,children:E.jsxs(o2,{data:e,margin:t.margin,children:[E.jsx(Nl,{...t.gridProps}),E.jsx(ra,{dataKey:"month",...t.axisProps}),E.jsx(na,{...t.axisProps,label:{value:"Height (m)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(pl,{content:E.jsx(Lu,{valueFormatter:r=>`Average Height: ${r}m`})}),E.jsx($l,{type:"monotone",dataKey:"height",stroke:"#10b981",strokeWidth:t.strokeWidth,dot:{fill:"#10b981",...t.dot},activeDot:{r:6,stroke:"#10b981",...t.activeDot}})]})})]})},P2=[{month:"Jan",co2:.8},{month:"Feb",co2:1.2},{month:"Mar",co2:1.6},{month:"Apr",co2:2},{month:"May",co2:2.4},{month:"Jun",co2:2.8},{month:"Jul",co2:3.2},{month:"Aug",co2:3.6},{month:"Sep",co2:4},{month:"Oct",co2:4.4},{month:"Nov",co2:4.8},{month:"Dec",co2:5.2}],O2=({data:e=P2})=>{const t=Kl("bar");return E.jsxs(Nu,{children:[E.jsx($u,{children:E.jsx(Ru,{children:"CO₂ Absorption Over Time"})}),E.jsx(ml,{width:"100%",height:300,children:E.jsxs(s2,{data:e,margin:t.margin,children:[E.jsx(Nl,{...t.gridProps}),E.jsx(ra,{dataKey:"month",...t.axisProps}),E.jsx(na,{...t.axisProps,label:{value:"CO₂ (tons)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(pl,{content:E.jsx(Lu,{valueFormatter:r=>`CO₂ Absorption: ${r} tons`})}),E.jsx(Cl,{dataKey:"co2",fill:"#8b5cf6",radius:t.radius})]})})]})},A2=(e=!1)=>{const[t,r]=g.useState(e),n=g.useCallback(()=>{r(o=>!o)},[]),i=g.useCallback(()=>{r(!0)},[]),a=g.useCallback(()=>{r(!1)},[]);return{sidebarOpen:t,toggleSidebar:n,openSidebar:i,closeSidebar:a}},S2=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],X2=()=>{const{sidebarOpen:e,toggleSidebar:t,closeSidebar:r}=A2(),[n,i]=g.useState({}),a=g.useCallback(c=>{i(c),console.log("Filters changed:",c)},[]),o=()=>{console.log("Export started")},u=(c,s)=>{console.log(`Export completed: ${c} with ${s} records`)},l=c=>{console.error("Export error:",c)};return E.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[E.jsx(Dy,{onToggleSidebar:t}),E.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[E.jsx(Iy,{isOpen:e,onClose:r}),E.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:E.jsxs("div",{className:"max-w-7xl mx-auto",children:[E.jsx("div",{className:"mb-8",children:E.jsxs("div",{className:"flex justify-between items-center mb-4",children:[E.jsxs("div",{children:[E.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome to Nanwa"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Monitor your forests and track tree growth with real-time insights."})]}),E.jsx("div",{className:"flex items-center space-x-4",children:E.jsx(_y,{data:S2,fileName:"dashboard_data",filters:n,onExportStart:o,onExportComplete:u,onExportError:l})})]})}),E.jsx(Cy,{onFiltersChange:a}),E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:[E.jsx(Sn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),title:"Total Trees",value:"10,247",color:"green"}),E.jsx(Sn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Survival Rate",value:"95.2%",color:"blue"}),E.jsx(Sn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"})}),title:"Avg Height",value:"2.4m",color:"yellow"}),E.jsx(Sn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),title:"CO₂ Absorbed",value:"1.2t",color:"purple"})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6 mb-8",children:[E.jsx("div",{className:"lg:col-span-1",children:E.jsx(b2,{})}),E.jsx("div",{className:"lg:col-span-1 xl:col-span-2",children:E.jsx(w2,{})}),E.jsx("div",{className:"lg:col-span-2 xl:col-span-3",children:E.jsx(O2,{})})]}),E.jsx(Ny,{})]})})]})]})};export{X2 as DashboardPage}; diff --git a/frontend/dist/assets/ErrorPages-D4z_BlyV.js b/frontend/dist/assets/ErrorPages-D4z_BlyV.js new file mode 100644 index 0000000000..bee73d7afe --- /dev/null +++ b/frontend/dist/assets/ErrorPages-D4z_BlyV.js @@ -0,0 +1 @@ +import{j as e,f as n,a as k,B as g,o as s}from"./index-DJ39NcK9.js";import"./IconButton-DIc-CK1Q.js";import{B as p}from"./TreeDetailLayout-CKxWzGm5.js";import"./ExportButton-Y3IlBTFt.js";import"./FormElements-5NQybTAT.js";import"./Table-BCdM5JW5.js";import"./ChartComponents-BrntlwBm.js";import"./MapSidebar-yNxbJbqT.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-C5b08Ak3.js";const v=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"9,22 9,12 15,12 15,22"})]}),L=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"23,4 23,10 17,10"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"1,20 1,14 7,14"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.49,9A9,9,0,0,0,5.64,5.64L1,10"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3.51,15A9,9,0,0,0,18.36,18.36L23,14"})]}),w=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("circle",{cx:"11",cy:"11",r:"8",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 21l-4.35-4.35"})]}),y=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6v6"}),e.jsx("circle",{cx:"12",cy:"16",r:"1",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2})]}),f=({className:r,children:o,...t})=>e.jsx("div",{className:n("min-h-screen flex items-center justify-center p-8 bg-gradient-to-br from-blue-500 to-purple-600",r),...t,children:o}),B=({className:r,children:o,...t})=>e.jsx("div",{className:n("bg-white rounded-2xl p-12 max-w-lg w-full text-center shadow-2xl","md:p-8 md:mx-4",r),...t,children:o}),N=({className:r,children:o,...t})=>e.jsx("div",{className:n("mb-8 [&>svg]:w-30 [&>svg]:h-30 [&>svg]:opacity-70","md:[&>svg]:w-20 md:[&>svg]:h-20",r),...t,children:o}),W=({className:r,children:o,...t})=>e.jsx("h1",{className:n("text-6xl font-extrabold text-red-500 m-0 leading-none","md:text-4xl",r),...t,children:o}),E=({className:r,children:o,...t})=>e.jsx("h2",{className:n("text-2xl font-semibold text-gray-800 my-4","md:text-xl",r),...t,children:o}),P=({className:r,children:o,...t})=>e.jsx("p",{className:n("text-lg text-gray-600 leading-relaxed my-6 mb-8",r),...t,children:o}),C=()=>{const r=k();return{goBack:()=>{r(-1)},goHome:()=>{r("/")},reload:()=>{window.location.reload()}}},a=({code:r,title:o,message:t,illustration:i,showBackButton:d=!0,showHomeButton:l=!0,showReloadButton:c=!1,className:x,...u})=>{const{goBack:h,goHome:j,reload:m}=C();return e.jsx(f,{className:x,...u,children:e.jsxs(B,{children:[e.jsx(N,{children:i}),e.jsx(W,{children:r}),e.jsx(E,{children:o}),e.jsx(P,{children:t}),e.jsxs(g,{className:"flex justify-center gap-4 flex-wrap mt-8",children:[d&&e.jsxs(s,{onClick:h,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(p,{className:"w-4 h-4"}),"Go Back"]}),c&&e.jsxs(s,{onClick:m,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(L,{className:"w-4 h-4"}),"Try Again"]}),l&&e.jsxs(s,{onClick:j,variant:"secondary",className:"flex items-center gap-2",children:[e.jsx(v,{className:"w-4 h-4"}),"Go Home"]})]})]})})},b=({className:r="",...o})=>e.jsxs("div",{className:r,...o,children:[e.jsx(w,{className:"text-gray-400"}),e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",className:"absolute inset-0 text-red-500",style:{width:"100%",height:"100%"},children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 8l-8 8"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 8l8 8"})]})]}),I=({className:r="",...o})=>e.jsx("div",{className:r,...o,children:e.jsx(y,{className:"text-gray-400"})}),q=()=>e.jsx(a,{code:"404",title:"Page Not Found",message:"The page you're looking for doesn't exist. It might have been moved, deleted, or you entered the wrong URL.",illustration:e.jsx(b,{}),showBackButton:!0,showHomeButton:!0,showReloadButton:!1}),D=()=>e.jsx(a,{code:"500",title:"Internal Server Error",message:"Something went wrong on our end. We're working to fix it. Please try again in a few moments.",illustration:e.jsx(I,{}),showBackButton:!1,showHomeButton:!0,showReloadButton:!0});export{q as NotFoundPage,D as ServerErrorPage}; diff --git a/frontend/dist/assets/ExportButton-Y3IlBTFt.js b/frontend/dist/assets/ExportButton-Y3IlBTFt.js new file mode 100644 index 0000000000..0a043312b0 --- /dev/null +++ b/frontend/dist/assets/ExportButton-Y3IlBTFt.js @@ -0,0 +1,215 @@ +import{r as Rn,j as Ne,d as et,l as $t}from"./index-DJ39NcK9.js";import{g as Za}from"./vendor-BtP0CW_r.js";var nn={exports:{}};/* @license +Papa Parse +v5.5.3 +https://github.com/mholt/PapaParse +License: MIT +*/var Qa=nn.exports,p0;function es(){return p0||(p0=1,function(e,t){((r,n)=>{e.exports=n()})(Qa,function r(){var n=typeof self<"u"?self:typeof window<"u"?window:n!==void 0?n:{},i,a=!n.document&&!!n.postMessage,s=n.IS_PAPA_WORKER||!1,f={},l=0,o={};function h(T){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},(function(g){var y=z(g);y.chunkSize=parseInt(y.chunkSize),g.step||g.chunk||(y.chunkSize=null),this._handle=new c(y),(this._handle.streamer=this)._config=y}).call(this,T),this.parseChunk=function(g,y){var L=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview),s)n.postMessage({results:P,workerId:o.WORKER_ID,finished:L});else if(k(this._config.chunk)&&!y){if(this._config.chunk(P,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=P=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(P.data),this._completeResults.errors=this._completeResults.errors.concat(P.errors),this._completeResults.meta=P.meta),this._completed||!L||!k(this._config.complete)||P&&P.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),L||P&&P.meta.paused||this._nextChunk(),P}this._halted=!0},this._sendError=function(g){k(this._config.error)?this._config.error(g):s&&this._config.error&&n.postMessage({workerId:o.WORKER_ID,error:g,finished:!1})}}function p(T){var g;(T=T||{}).chunkSize||(T.chunkSize=o.RemoteChunkSize),h.call(this,T),this._nextChunk=a?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(y){this._input=y,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(g=new XMLHttpRequest,this._config.withCredentials&&(g.withCredentials=this._config.withCredentials),a||(g.onload=re(this._chunkLoaded,this),g.onerror=re(this._chunkError,this)),g.open(this._config.downloadRequestBody?"POST":"GET",this._input,!a),this._config.downloadRequestHeaders){var y,L=this._config.downloadRequestHeaders;for(y in L)g.setRequestHeader(y,L[y])}var P;this._config.chunkSize&&(P=this._start+this._config.chunkSize-1,g.setRequestHeader("Range","bytes="+this._start+"-"+P));try{g.send(this._config.downloadRequestBody)}catch(X){this._chunkError(X.message)}a&&g.status===0&&this._chunkError()}},this._chunkLoaded=function(){g.readyState===4&&(g.status<200||400<=g.status?this._chunkError():(this._start+=this._config.chunkSize||g.responseText.length,this._finished=!this._config.chunkSize||this._start>=(y=>(y=y.getResponseHeader("Content-Range"))!==null?parseInt(y.substring(y.lastIndexOf("/")+1)):-1)(g),this.parseChunk(g.responseText)))},this._chunkError=function(y){y=g.statusText||y,this._sendError(new Error(y))}}function x(T){(T=T||{}).chunkSize||(T.chunkSize=o.LocalChunkSize),h.call(this,T);var g,y,L=typeof FileReader<"u";this.stream=function(P){this._input=P,y=P.slice||P.webkitSlice||P.mozSlice,L?((g=new FileReader).onload=re(this._chunkLoaded,this),g.onerror=re(this._chunkError,this)):g=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(P.target.result)},this._chunkError=function(){this._sendError(g.error)}}function d(T){var g;h.call(this,T=T||{}),this.stream=function(y){return g=y,this._nextChunk()},this._nextChunk=function(){var y,L;if(!this._finished)return y=this._config.chunkSize,g=y?(L=g.substring(0,y),g.substring(y)):(L=g,""),this._finished=!g,this.parseChunk(L)}}function E(T){h.call(this,T=T||{});var g=[],y=!0,L=!1;this.pause=function(){h.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){h.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(P){this._input=P,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){L&&g.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),g.length?this.parseChunk(g.shift()):y=!0},this._streamData=re(function(P){try{g.push(typeof P=="string"?P:P.toString(this._config.encoding)),y&&(y=!1,this._checkIsFinished(),this.parseChunk(g.shift()))}catch(X){this._streamError(X)}},this),this._streamError=re(function(P){this._streamCleanUp(),this._sendError(P)},this),this._streamEnd=re(function(){this._streamCleanUp(),L=!0,this._streamData("")},this),this._streamCleanUp=re(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function c(T){var g,y,L,P,X=Math.pow(2,53),ve=-X,xe=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,Fe=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,le=this,Ee=0,oe=0,ye=!1,de=!1,F=[],O={data:[],errors:[],meta:{}};function R(q){return T.skipEmptyLines==="greedy"?q.join("").trim()==="":q.length===1&&q[0].length===0}function C(){if(O&&L&&(ie("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+o.DefaultDelimiter+"'"),L=!1),T.skipEmptyLines&&(O.data=O.data.filter(function(ae){return!R(ae)})),V()){let ae=function(ue,Te){k(T.transformHeader)&&(ue=T.transformHeader(ue,Te)),F.push(ue)};if(O)if(Array.isArray(O.data[0])){for(var q=0;V()&&q(we=>(T.dynamicTypingFunction&&T.dynamicTyping[we]===void 0&&(T.dynamicTyping[we]=T.dynamicTypingFunction(we)),(T.dynamicTyping[we]||T.dynamicTyping)===!0))(ne)?pe==="true"||pe==="TRUE"||pe!=="false"&&pe!=="FALSE"&&((we=>{if(xe.test(we)&&(we=parseFloat(we),ve=F.length?"__parsed_extra":F[he]:_e,ce=T.transform?T.transform(ce,_e):ce);_e==="__parsed_extra"?(Te[_e]=Te[_e]||[],Te[_e].push(ce)):Te[_e]=ce}return T.header&&(he>F.length?ie("FieldMismatch","TooManyFields","Too many fields: expected "+F.length+" fields but parsed "+he,oe+ue):heT.preview?y.abort():(O.data=O.data[0],P(O,le))))}),this.parse=function(q,Y,K){var ae=T.quoteChar||'"',ae=(T.newline||(T.newline=this.guessLineEndings(q,ae)),L=!1,T.delimiter?k(T.delimiter)&&(T.delimiter=T.delimiter(q),O.meta.delimiter=T.delimiter):((ae=((ue,Te,he,_e,ce)=>{var ne,pe,we,rr;ce=ce||[","," ","|",";",o.RECORD_SEP,o.UNIT_SEP];for(var ur=0;ur=K.length/2?`\r +`:"\r"}}function _(T){return T.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function N(T){var g=(T=T||{}).delimiter,y=T.newline,L=T.comments,P=T.step,X=T.preview,ve=T.fastMode,xe=null,Fe=!1,le=T.quoteChar==null?'"':T.quoteChar,Ee=le;if(T.escapeChar!==void 0&&(Ee=T.escapeChar),(typeof g!="string"||-1=X)return Ie(!0);break}K.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:Y.length,index:oe}),pe++}}else if(L&&ae.length===0&&de.substring(oe,oe+ie)===L){if(ce===-1)return Ie();oe=ce+V,ce=de.indexOf(y,oe),_e=de.indexOf(g,oe)}else if(_e!==-1&&(_e=X)return Ie(!0)}return xr();function rr(Be){Y.push(Be),ue=oe}function ur(Be){var Xe=0;return Xe=Be!==-1&&(Be=de.substring(pe+1,Be))&&Be.trim()===""?Be.length:Xe}function xr(Be){return O||(Be===void 0&&(Be=de.substring(oe)),ae.push(Be),oe=R,rr(ae),q&&ar()),Ie()}function Dr(Be){oe=Be,rr(ae),ae=[],ce=de.indexOf(y,oe)}function Ie(Be){if(T.header&&!F&&Y.length&&!Fe){var Xe=Y[0],$e=Object.create(null),Tt=new Set(Xe);let Et=!1;for(let Ir=0;IrL.charCodeAt(0)!==65279?L:L.slice(1))(T),y=new(g.download?p:d)(g)):T.readable===!0&&k(T.read)&&k(T.on)?y=new E(g):(n.File&&T instanceof File||T instanceof Object)&&(y=new x(g)),y.stream(T);(y=(()=>{var L;return!!o.WORKERS_SUPPORTED&&(L=(()=>{var P=n.URL||n.webkitURL||null,X=r.toString();return o.BLOB_URL||(o.BLOB_URL=P.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",X,")();"],{type:"text/javascript"})))})(),(L=new n.Worker(L)).onmessage=I,L.id=l++,f[L.id]=L)})()).userStep=g.step,y.userChunk=g.chunk,y.userComplete=g.complete,y.userError=g.error,g.step=k(g.step),g.chunk=k(g.chunk),g.complete=k(g.complete),g.error=k(g.error),delete g.worker,y.postMessage({input:T,config:g,workerId:y.id})},o.unparse=function(T,g){var y=!1,L=!0,P=",",X=`\r +`,ve='"',xe=ve+ve,Fe=!1,le=null,Ee=!1,oe=((()=>{if(typeof g=="object"){if(typeof g.delimiter!="string"||o.BAD_DELIMITERS.filter(function(F){return g.delimiter.indexOf(F)!==-1}).length||(P=g.delimiter),typeof g.quotes!="boolean"&&typeof g.quotes!="function"&&!Array.isArray(g.quotes)||(y=g.quotes),typeof g.skipEmptyLines!="boolean"&&typeof g.skipEmptyLines!="string"||(Fe=g.skipEmptyLines),typeof g.newline=="string"&&(X=g.newline),typeof g.quoteChar=="string"&&(ve=g.quoteChar),typeof g.header=="boolean"&&(L=g.header),Array.isArray(g.columns)){if(g.columns.length===0)throw new Error("Option columns is empty");le=g.columns}g.escapeChar!==void 0&&(xe=g.escapeChar+ve),g.escapeFormulae instanceof RegExp?Ee=g.escapeFormulae:typeof g.escapeFormulae=="boolean"&&g.escapeFormulae&&(Ee=/^[=+\-@\t\r].*$/)}})(),new RegExp(_(ve),"g"));if(typeof T=="string"&&(T=JSON.parse(T)),Array.isArray(T)){if(!T.length||Array.isArray(T[0]))return ye(null,T,Fe);if(typeof T[0]=="object")return ye(le||Object.keys(T[0]),T,Fe)}else if(typeof T=="object")return typeof T.data=="string"&&(T.data=JSON.parse(T.data)),Array.isArray(T.data)&&(T.fields||(T.fields=T.meta&&T.meta.fields||le),T.fields||(T.fields=Array.isArray(T.data[0])?T.fields:typeof T.data[0]=="object"?Object.keys(T.data[0]):[]),Array.isArray(T.data[0])||typeof T.data[0]=="object"||(T.data=[T.data])),ye(T.fields||[],T.data||[],Fe);throw new Error("Unable to serialize unrecognized input");function ye(F,O,R){var C="",V=(typeof F=="string"&&(F=JSON.parse(F)),typeof O=="string"&&(O=JSON.parse(O)),Array.isArray(F)&&0{for(var q=0;q>2,n=e.charCodeAt(o++),s=(r&3)<<4|n>>4,i=e.charCodeAt(o++),f=(n&15)<<2|i>>6,l=i&63,isNaN(n)?f=l=64:isNaN(i)&&(l=64),t+=Vr.charAt(a)+Vr.charAt(s)+Vr.charAt(f)+Vr.charAt(l);return t}function Br(e){var t="",r=0,n=0,i=0,a=0,s=0,f=0,l=0;e=e.replace(/[^\w\+\/\=]/g,"");for(var o=0;o>4,t+=String.fromCharCode(r),f=Vr.indexOf(e.charAt(o++)),n=(s&15)<<4|f>>2,f!==64&&(t+=String.fromCharCode(n)),l=Vr.indexOf(e.charAt(o++)),i=(f&3)<<6|l,l!==64&&(t+=String.fromCharCode(i));return t}var Ae=function(){return typeof Buffer<"u"&&typeof process<"u"&&typeof process.versions<"u"&&!!process.versions.node}(),Ur=function(){if(typeof Buffer<"u"){var e=!Buffer.from;if(!e)try{Buffer.from("foo","utf8")}catch{e=!0}return e?function(t,r){return r?new Buffer(t,r):new Buffer(t)}:Buffer.from.bind(Buffer)}return function(){}}();function qr(e){return Ae?Buffer.alloc?Buffer.alloc(e):new Buffer(e):typeof Uint8Array<"u"?new Uint8Array(e):new Array(e)}function g0(e){return Ae?Buffer.allocUnsafe?Buffer.allocUnsafe(e):new Buffer(e):typeof Uint8Array<"u"?new Uint8Array(e):new Array(e)}var Fr=function(t){return Ae?Ur(t,"binary"):t.split("").map(function(r){return r.charCodeAt(0)&255})};function Tn(e){if(typeof ArrayBuffer>"u")return Fr(e);for(var t=new ArrayBuffer(e.length),r=new Uint8Array(t),n=0;n!=e.length;++n)r[n]=e.charCodeAt(n)&255;return t}function Ht(e){if(Array.isArray(e))return e.map(function(n){return String.fromCharCode(n)}).join("");for(var t=[],r=0;r"u")throw new Error("Unsupported");return new Uint8Array(e)}var qe=Ae?function(e){return Buffer.concat(e.map(function(t){return Buffer.isBuffer(t)?t:Ur(t)}))}:function(e){if(typeof Uint8Array<"u"){var t=0,r=0;for(t=0;t>6&31,i[r++]=128|s&63;else if(s>=55296&&s<57344){s=(s&1023)+64;var f=e.charCodeAt(++a)&1023;i[r++]=240|s>>8&7,i[r++]=128|s>>2&63,i[r++]=128|f>>6&15|(s&3)<<4,i[r++]=128|f&63}else i[r++]=224|s>>12&15,i[r++]=128|s>>6&63,i[r++]=128|s&63;r>n&&(t.push(i.slice(0,r)),r=0,i=qr(65535),n=65530)}return t.push(i.slice(0,r)),qe(t)}var Ot=/\u0000/g,Jt=/[\u0001-\u0006]/g;function ct(e){for(var t="",r=e.length-1;r>=0;)t+=e.charAt(r--);return t}function yr(e,t){var r=""+e;return r.length>=t?r:be("0",t-r.length)+r}function Xn(e,t){var r=""+e;return r.length>=t?r:be(" ",t-r.length)+r}function fn(e,t){var r=""+e;return r.length>=t?r:r+be(" ",t-r.length)}function os(e,t){var r=""+Math.round(e);return r.length>=t?r:be("0",t-r.length)+r}function ls(e,t){var r=""+e;return r.length>=t?r:be("0",t-r.length)+r}var m0=Math.pow(2,32);function st(e,t){if(e>m0||e<-m0)return os(e,t);var r=Math.round(e);return ls(r,t)}function on(e,t){return t=t||0,e.length>=7+t&&(e.charCodeAt(t)|32)===103&&(e.charCodeAt(t+1)|32)===101&&(e.charCodeAt(t+2)|32)===110&&(e.charCodeAt(t+3)|32)===101&&(e.charCodeAt(t+4)|32)===114&&(e.charCodeAt(t+5)|32)===97&&(e.charCodeAt(t+6)|32)===108}var _0=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],Dn=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function hs(e){return e||(e={}),e[0]="General",e[1]="0",e[2]="0.00",e[3]="#,##0",e[4]="#,##0.00",e[9]="0%",e[10]="0.00%",e[11]="0.00E+00",e[12]="# ?/?",e[13]="# ??/??",e[14]="m/d/yy",e[15]="d-mmm-yy",e[16]="d-mmm",e[17]="mmm-yy",e[18]="h:mm AM/PM",e[19]="h:mm:ss AM/PM",e[20]="h:mm",e[21]="h:mm:ss",e[22]="m/d/yy h:mm",e[37]="#,##0 ;(#,##0)",e[38]="#,##0 ;[Red](#,##0)",e[39]="#,##0.00;(#,##0.00)",e[40]="#,##0.00;[Red](#,##0.00)",e[45]="mm:ss",e[46]="[h]:mm:ss",e[47]="mmss.0",e[48]="##0.0E+0",e[49]="@",e[56]='"上午/下午 "hh"時"mm"分"ss"秒 "',e}var Ue={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "'},T0={5:37,6:38,7:39,8:40,23:0,24:0,25:0,26:0,27:14,28:14,29:14,30:14,31:14,50:14,51:14,52:14,53:14,54:14,55:14,56:14,57:14,58:14,59:1,60:2,61:3,62:4,67:9,68:10,69:12,70:13,71:14,72:14,73:15,74:16,75:17,76:20,77:21,78:22,79:45,80:46,81:47,82:0},cs={5:'"$"#,##0_);\\("$"#,##0\\)',63:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',41:'_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'};function ln(e,t,r){for(var n=e<0?-1:1,i=e*n,a=0,s=1,f=0,l=1,o=0,h=0,p=Math.floor(i);ot&&(o>t?(h=l,f=a):(h=o,f=s)),!r)return[0,n*f,h];var x=Math.floor(n*f/h);return[x,n*f-x*h,h]}function qt(e,t,r){if(e>2958465||e<0)return null;var n=e|0,i=Math.floor(86400*(e-n)),a=0,s=[],f={D:n,T:i,u:86400*(e-n)-i,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(f.u)<1e-6&&(f.u=0),t&&t.date1904&&(n+=1462),f.u>.9999&&(f.u=0,++i==86400&&(f.T=i=0,++n,++f.D)),n===60)s=r?[1317,10,29]:[1900,2,29],a=3;else if(n===0)s=r?[1317,8,29]:[1900,1,0],a=6;else{n>60&&--n;var l=new Date(1900,0,1);l.setDate(l.getDate()+n-1),s=[l.getFullYear(),l.getMonth()+1,l.getDate()],a=l.getDay(),n<60&&(a=(a+6)%7),r&&(a=ms(l,s))}return f.y=s[0],f.m=s[1],f.d=s[2],f.S=i%60,i=Math.floor(i/60),f.M=i%60,i=Math.floor(i/60),f.H=i,f.q=a,f}var ai=new Date(1899,11,31,0,0,0),us=ai.getTime(),xs=new Date(1900,2,1,0,0,0);function si(e,t){var r=e.getTime();return t?r-=1461*24*60*60*1e3:e>=xs&&(r+=24*60*60*1e3),(r-(us+(e.getTimezoneOffset()-ai.getTimezoneOffset())*6e4))/(24*60*60*1e3)}function jn(e){return e.indexOf(".")==-1?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)$/,"$1")}function ds(e){return e.indexOf("E")==-1?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,"$1E").replace(/(E[+-])(\d)$/,"$10$2")}function ps(e){var t=e<0?12:11,r=jn(e.toFixed(12));return r.length<=t||(r=e.toPrecision(10),r.length<=t)?r:e.toExponential(5)}function vs(e){var t=jn(e.toFixed(11));return t.length>(e<0?12:11)||t==="0"||t==="-0"?e.toPrecision(6):t}function gs(e){var t=Math.floor(Math.log(Math.abs(e))*Math.LOG10E),r;return t>=-4&&t<=-1?r=e.toPrecision(10+t):Math.abs(t)<=9?r=ps(e):t===10?r=e.toFixed(10).substr(0,12):r=vs(e),jn(ds(r.toUpperCase()))}function Wn(e,t){switch(typeof e){case"string":return e;case"boolean":return e?"TRUE":"FALSE";case"number":return(e|0)===e?e.toString(10):gs(e);case"undefined":return"";case"object":if(e==null)return"";if(e instanceof Date)return Xr(14,si(e,t&&t.date1904),t)}throw new Error("unsupported value in General format: "+e)}function ms(e,t){t[0]-=581;var r=e.getDay();return e<60&&(r=(r+6)%7),r}function _s(e,t,r,n){var i="",a=0,s=0,f=r.y,l,o=0;switch(e){case 98:f=r.y+543;case 121:switch(t.length){case 1:case 2:l=f%100,o=2;break;default:l=f%1e4,o=4;break}break;case 109:switch(t.length){case 1:case 2:l=r.m,o=t.length;break;case 3:return Dn[r.m-1][1];case 5:return Dn[r.m-1][0];default:return Dn[r.m-1][2]}break;case 100:switch(t.length){case 1:case 2:l=r.d,o=t.length;break;case 3:return _0[r.q][0];default:return _0[r.q][1]}break;case 104:switch(t.length){case 1:case 2:l=1+(r.H+11)%12,o=t.length;break;default:throw"bad hour format: "+t}break;case 72:switch(t.length){case 1:case 2:l=r.H,o=t.length;break;default:throw"bad hour format: "+t}break;case 77:switch(t.length){case 1:case 2:l=r.M,o=t.length;break;default:throw"bad minute format: "+t}break;case 115:if(t!="s"&&t!="ss"&&t!=".0"&&t!=".00"&&t!=".000")throw"bad second format: "+t;return r.u===0&&(t=="s"||t=="ss")?yr(r.S,t.length):(n>=2?s=n===3?1e3:100:s=n===1?10:1,a=Math.round(s*(r.S+r.u)),a>=60*s&&(a=0),t==="s"?a===0?"0":""+a/s:(i=yr(a,2+n),t==="ss"?i.substr(0,2):"."+i.substr(2,t.length-1)));case 90:switch(t){case"[h]":case"[hh]":l=r.D*24+r.H;break;case"[m]":case"[mm]":l=(r.D*24+r.H)*60+r.M;break;case"[s]":case"[ss]":l=((r.D*24+r.H)*60+r.M)*60+Math.round(r.S+r.u);break;default:throw"bad abstime format: "+t}o=t.length===3?1:2;break;case 101:l=f,o=1;break}var h=o>0?yr(l,o):"";return h}function Gr(e){var t=3;if(e.length<=t)return e;for(var r=e.length%t,n=e.substr(0,r);r!=e.length;r+=t)n+=(n.length>0?",":"")+e.substr(r,t);return n}var fi=/%/g;function Ts(e,t,r){var n=t.replace(fi,""),i=t.length-n.length;return Lr(e,n,r*Math.pow(10,2*i))+be("%",i)}function Es(e,t,r){for(var n=t.length-1;t.charCodeAt(n-1)===44;)--n;return Lr(e,t.substr(0,n),r/Math.pow(10,3*(t.length-n)))}function oi(e,t){var r,n=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(t==0)return"0.0E+0";if(t<0)return"-"+oi(e,-t);var i=e.indexOf(".");i===-1&&(i=e.indexOf("E"));var a=Math.floor(Math.log(t)*Math.LOG10E)%i;if(a<0&&(a+=i),r=(t/Math.pow(10,a)).toPrecision(n+1+(i+a)%i),r.indexOf("e")===-1){var s=Math.floor(Math.log(t)*Math.LOG10E);for(r.indexOf(".")===-1?r=r.charAt(0)+"."+r.substr(1)+"E+"+(s-r.length+a):r+="E+"+(s-a);r.substr(0,2)==="0.";)r=r.charAt(0)+r.substr(2,i)+"."+r.substr(2+i),r=r.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function(f,l,o,h){return l+o+h.substr(0,(i+a)%i)+"."+h.substr(a)+"E"})}else r=t.toExponential(n);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}var li=/# (\?+)( ?)\/( ?)(\d+)/;function ws(e,t,r){var n=parseInt(e[4],10),i=Math.round(t*n),a=Math.floor(i/n),s=i-a*n,f=n;return r+(a===0?"":""+a)+" "+(s===0?be(" ",e[1].length+1+e[4].length):Xn(s,e[1].length)+e[2]+"/"+e[3]+yr(f,e[4].length))}function Ss(e,t,r){return r+(t===0?"":""+t)+be(" ",e[1].length+2+e[4].length)}var hi=/^#*0*\.([0#]+)/,ci=/\).*[0#]/,ui=/\(###\) ###\\?-####/;function sr(e){for(var t="",r,n=0;n!=e.length;++n)switch(r=e.charCodeAt(n)){case 35:break;case 63:t+=" ";break;case 48:t+="0";break;default:t+=String.fromCharCode(r)}return t}function E0(e,t){var r=Math.pow(10,t);return""+Math.round(e*r)/r}function w0(e,t){var r=e-Math.floor(e),n=Math.pow(10,t);return t<(""+Math.round(r*n)).length?0:Math.round(r*n)}function As(e,t){return t<(""+Math.round((e-Math.floor(e))*Math.pow(10,t))).length?1:0}function Fs(e){return e<2147483647&&e>-2147483648?""+(e>=0?e|0:e-1|0):""+Math.floor(e)}function Tr(e,t,r){if(e.charCodeAt(0)===40&&!t.match(ci)){var n=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?Tr("n",n,r):"("+Tr("n",n,-r)+")"}if(t.charCodeAt(t.length-1)===44)return Es(e,t,r);if(t.indexOf("%")!==-1)return Ts(e,t,r);if(t.indexOf("E")!==-1)return oi(t,r);if(t.charCodeAt(0)===36)return"$"+Tr(e,t.substr(t.charAt(1)==" "?2:1),r);var i,a,s,f,l=Math.abs(r),o=r<0?"-":"";if(t.match(/^00+$/))return o+st(l,t.length);if(t.match(/^[#?]+$/))return i=st(r,0),i==="0"&&(i=""),i.length>t.length?i:sr(t.substr(0,t.length-i.length))+i;if(a=t.match(li))return ws(a,l,o);if(t.match(/^#+0+$/))return o+st(l,t.length-t.indexOf("0"));if(a=t.match(hi))return i=E0(r,a[1].length).replace(/^([^\.]+)$/,"$1."+sr(a[1])).replace(/\.$/,"."+sr(a[1])).replace(/\.(\d*)$/,function(E,c){return"."+c+be("0",sr(a[1]).length-c.length)}),t.indexOf("0.")!==-1?i:i.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),a=t.match(/^(0*)\.(#*)$/))return o+E0(l,a[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,a[1].length?"0.":".");if(a=t.match(/^#{1,3},##0(\.?)$/))return o+Gr(st(l,0));if(a=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+Tr(e,t,-r):Gr(""+(Math.floor(r)+As(r,a[1].length)))+"."+yr(w0(r,a[1].length),a[1].length);if(a=t.match(/^#,#*,#0/))return Tr(e,t.replace(/^#,#*,/,""),r);if(a=t.match(/^([0#]+)(\\?-([0#]+))+$/))return i=ct(Tr(e,t.replace(/[\\-]/g,""),r)),s=0,ct(ct(t.replace(/\\/g,"")).replace(/[0#]/g,function(E){return s=0?Or("n",n,r):"("+Or("n",n,-r)+")"}if(t.charCodeAt(t.length-1)===44)return ys(e,t,r);if(t.indexOf("%")!==-1)return Cs(e,t,r);if(t.indexOf("E")!==-1)return xi(t,r);if(t.charCodeAt(0)===36)return"$"+Or(e,t.substr(t.charAt(1)==" "?2:1),r);var i,a,s,f,l=Math.abs(r),o=r<0?"-":"";if(t.match(/^00+$/))return o+yr(l,t.length);if(t.match(/^[#?]+$/))return i=""+r,r===0&&(i=""),i.length>t.length?i:sr(t.substr(0,t.length-i.length))+i;if(a=t.match(li))return Ss(a,l,o);if(t.match(/^#+0+$/))return o+yr(l,t.length-t.indexOf("0"));if(a=t.match(hi))return i=(""+r).replace(/^([^\.]+)$/,"$1."+sr(a[1])).replace(/\.$/,"."+sr(a[1])),i=i.replace(/\.(\d*)$/,function(E,c){return"."+c+be("0",sr(a[1]).length-c.length)}),t.indexOf("0.")!==-1?i:i.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),a=t.match(/^(0*)\.(#*)$/))return o+(""+l).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,a[1].length?"0.":".");if(a=t.match(/^#{1,3},##0(\.?)$/))return o+Gr(""+l);if(a=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+Or(e,t,-r):Gr(""+r)+"."+be("0",a[1].length);if(a=t.match(/^#,#*,#0/))return Or(e,t.replace(/^#,#*,/,""),r);if(a=t.match(/^([0#]+)(\\?-([0#]+))+$/))return i=ct(Or(e,t.replace(/[\\-]/g,""),r)),s=0,ct(ct(t.replace(/\\/g,"")).replace(/[0#]/g,function(E){return s-1||r=="\\"&&e.charAt(t+1)=="-"&&"0#".indexOf(e.charAt(t+2))>-1););break;case"?":for(;e.charAt(++t)===r;);break;case"*":++t,(e.charAt(t)==" "||e.charAt(t)=="*")&&++t;break;case"(":case")":++t;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(;t-1;);break;case" ":++t;break;default:++t;break}return!1}function ks(e,t,r,n){for(var i=[],a="",s=0,f="",l="t",o,h,p,x="H";s=12?"P":"A"),c.t="T",x="h",s+=3):e.substr(s,5).toUpperCase()==="AM/PM"?(o!=null&&(c.v=o.H>=12?"PM":"AM"),c.t="T",s+=5,x="h"):e.substr(s,5).toUpperCase()==="上午/下午"?(o!=null&&(c.v=o.H>=12?"下午":"上午"),c.t="T",s+=5,x="h"):(c.t="t",++s),o==null&&c.t==="T")return"";i[i.length]=c,l=f;break;case"[":for(a=f;e.charAt(s++)!=="]"&&s-1&&(a=(a.match(/\$([^-\[\]]*)/)||[])[1]||"$",pi(e)||(i[i.length]={t:"t",v:a}));break;case".":if(o!=null){for(a=f;++s-1;)a+=f;i[i.length]={t:"n",v:a};break;case"?":for(a=f;e.charAt(++s)===f;)a+=f;i[i.length]={t:f,v:a},l=f;break;case"*":++s,(e.charAt(s)==" "||e.charAt(s)=="*")&&++s;break;case"(":case")":i[i.length]={t:n===1?"t":f,v:f},++s;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(a=f;s-1;)a+=e.charAt(s);i[i.length]={t:"D",v:a};break;case" ":i[i.length]={t:f,v:f},++s;break;case"$":i[i.length]={t:"t",v:"$"},++s;break;default:if(",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(f)===-1)throw new Error("unrecognized character "+f+" in "+e);i[i.length]={t:"t",v:f},++s;break}var _=0,N=0,I;for(s=i.length-1,l="t";s>=0;--s)switch(i[s].t){case"h":case"H":i[s].t=x,l="h",_<1&&(_=1);break;case"s":(I=i[s].v.match(/\.0+$/))&&(N=Math.max(N,I[0].length-1)),_<3&&(_=3);case"d":case"y":case"M":case"e":l=i[s].t;break;case"m":l==="s"&&(i[s].t="M",_<2&&(_=2));break;case"X":break;case"Z":_<1&&i[s].v.match(/[Hh]/)&&(_=1),_<2&&i[s].v.match(/[Mm]/)&&(_=2),_<3&&i[s].v.match(/[Ss]/)&&(_=3)}switch(_){case 0:break;case 1:o.u>=.5&&(o.u=0,++o.S),o.S>=60&&(o.S=0,++o.M),o.M>=60&&(o.M=0,++o.H);break;case 2:o.u>=.5&&(o.u=0,++o.S),o.S>=60&&(o.S=0,++o.M);break}var D="",W;for(s=0;s0){D.charCodeAt(0)==40?(re=t<0&&D.charCodeAt(0)===45?-t:t,k=Lr("n",D,re)):(re=t<0&&n>1?-t:t,k=Lr("n",D,re),re<0&&i[0]&&i[0].t=="t"&&(k=k.substr(1),i[0].v="-"+i[0].v)),W=k.length-1;var T=i.length;for(s=0;s-1){T=s;break}var g=i.length;if(T===i.length&&k.indexOf("E")===-1){for(s=i.length-1;s>=0;--s)i[s]==null||"n?".indexOf(i[s].t)===-1||(W>=i[s].v.length-1?(W-=i[s].v.length,i[s].v=k.substr(W+1,i[s].v.length)):W<0?i[s].v="":(i[s].v=k.substr(0,W+1),W=-1),i[s].t="t",g=s);W>=0&&g=0;--s)if(!(i[s]==null||"n?".indexOf(i[s].t)===-1)){for(h=i[s].v.indexOf(".")>-1&&s===T?i[s].v.indexOf(".")-1:i[s].v.length-1,z=i[s].v.substr(h+1);h>=0;--h)W>=0&&(i[s].v.charAt(h)==="0"||i[s].v.charAt(h)==="#")&&(z=k.charAt(W--)+z);i[s].v=z,i[s].t="t",g=s}for(W>=0&&g-1&&s===T?i[s].v.indexOf(".")+1:0,z=i[s].v.substr(0,h);h-1&&(re=n>1&&t<0&&s>0&&i[s-1].v==="-"?-t:t,i[s].v=Lr(i[s].t,i[s].v,re),i[s].t="t");var y="";for(s=0;s!==i.length;++s)i[s]!=null&&(y+=i[s].v);return y}var S0=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function A0(e,t){if(t==null)return!1;var r=parseFloat(t[2]);switch(t[1]){case"=":if(e==r)return!0;break;case">":if(e>r)return!0;break;case"<":if(e":if(e!=r)return!0;break;case">=":if(e>=r)return!0;break;case"<=":if(e<=r)return!0;break}return!1}function Rs(e,t){var r=Os(e),n=r.length,i=r[n-1].indexOf("@");if(n<4&&i>-1&&--n,r.length>4)throw new Error("cannot find right format for |"+r.join("|")+"|");if(typeof t!="number")return[4,r.length===4||i>-1?r[r.length-1]:"@"];switch(r.length){case 1:r=i>-1?["General","General","General",r[0]]:[r[0],r[0],r[0],"@"];break;case 2:r=i>-1?[r[0],r[0],r[0],r[1]]:[r[0],r[1],r[0],"@"];break;case 3:r=i>-1?[r[0],r[1],r[0],r[2]]:[r[0],r[1],r[2],"@"];break}var a=t>0?r[0]:t<0?r[1]:r[2];if(r[0].indexOf("[")===-1&&r[1].indexOf("[")===-1)return[n,a];if(r[0].match(/\[[=<>]/)!=null||r[1].match(/\[[=<>]/)!=null){var s=r[0].match(S0),f=r[1].match(S0);return A0(t,s)?[n,r[0]]:A0(t,f)?[n,r[1]]:[n,r[s!=null&&f!=null?2:1]]}return[n,a]}function Xr(e,t,r){r==null&&(r={});var n="";switch(typeof e){case"string":e=="m/d/yy"&&r.dateNF?n=r.dateNF:n=e;break;case"number":e==14&&r.dateNF?n=r.dateNF:n=(r.table!=null?r.table:Ue)[e],n==null&&(n=r.table&&r.table[T0[e]]||Ue[T0[e]]),n==null&&(n=cs[e]||"General");break}if(on(n,0))return Wn(t,r);t instanceof Date&&(t=si(t,r.date1904));var i=Rs(n,t);if(on(i[1]))return Wn(t,r);if(t===!0)t="TRUE";else if(t===!1)t="FALSE";else if(t===""||t==null)return"";return ks(i[1],t,r,i[0])}function vi(e,t){if(typeof t!="number"){t=+t||-1;for(var r=0;r<392;++r){if(Ue[r]==null){t<0&&(t=r);continue}if(Ue[r]==e){t=r;break}}t<0&&(t=391)}return Ue[t]=e,t}function En(e){for(var t=0;t!=392;++t)e[t]!==void 0&&vi(e[t],t)}function wn(){Ue=hs()}var gi=/[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;function Ds(e){var t=typeof e=="number"?Ue[e]:e;return t=t.replace(gi,"(\\d+)"),new RegExp("^"+t+"$")}function Is(e,t,r){var n=-1,i=-1,a=-1,s=-1,f=-1,l=-1;(t.match(gi)||[]).forEach(function(p,x){var d=parseInt(r[x+1],10);switch(p.toLowerCase().charAt(0)){case"y":n=d;break;case"d":a=d;break;case"h":s=d;break;case"s":l=d;break;case"m":s>=0?f=d:i=d;break}}),l>=0&&f==-1&&i>=0&&(f=i,i=-1);var o=(""+(n>=0?n:new Date().getFullYear())).slice(-4)+"-"+("00"+(i>=1?i:1)).slice(-2)+"-"+("00"+(a>=1?a:1)).slice(-2);o.length==7&&(o="0"+o),o.length==8&&(o="20"+o);var h=("00"+(s>=0?s:0)).slice(-2)+":"+("00"+(f>=0?f:0)).slice(-2)+":"+("00"+(l>=0?l:0)).slice(-2);return s==-1&&f==-1&&l==-1?o:n==-1&&i==-1&&a==-1?h:o+"T"+h}var Ns=function(){var e={};e.version="1.2.0";function t(){for(var k=0,T=new Array(256),g=0;g!=256;++g)k=g,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,T[g]=k;return typeof Int32Array<"u"?new Int32Array(T):T}var r=t();function n(k){var T=0,g=0,y=0,L=typeof Int32Array<"u"?new Int32Array(4096):new Array(4096);for(y=0;y!=256;++y)L[y]=k[y];for(y=0;y!=256;++y)for(g=k[y],T=256+y;T<4096;T+=256)g=L[T]=g>>>8^k[g&255];var P=[];for(y=1;y!=16;++y)P[y-1]=typeof Int32Array<"u"?L.subarray(y*256,y*256+256):L.slice(y*256,y*256+256);return P}var i=n(r),a=i[0],s=i[1],f=i[2],l=i[3],o=i[4],h=i[5],p=i[6],x=i[7],d=i[8],E=i[9],c=i[10],_=i[11],N=i[12],I=i[13],D=i[14];function W(k,T){for(var g=T^-1,y=0,L=k.length;y>>8^r[(g^k.charCodeAt(y++))&255];return~g}function z(k,T){for(var g=T^-1,y=k.length-15,L=0;L>8&255]^N[k[L++]^g>>16&255]^_[k[L++]^g>>>24]^c[k[L++]]^E[k[L++]]^d[k[L++]]^x[k[L++]]^p[k[L++]]^h[k[L++]]^o[k[L++]]^l[k[L++]]^f[k[L++]]^s[k[L++]]^a[k[L++]]^r[k[L++]];for(y+=15;L>>8^r[(g^k[L++])&255];return~g}function re(k,T){for(var g=T^-1,y=0,L=k.length,P=0,X=0;y>>8^r[(g^P)&255]:P<2048?(g=g>>>8^r[(g^(192|P>>6&31))&255],g=g>>>8^r[(g^(128|P&63))&255]):P>=55296&&P<57344?(P=(P&1023)+64,X=k.charCodeAt(y++)&1023,g=g>>>8^r[(g^(240|P>>8&7))&255],g=g>>>8^r[(g^(128|P>>2&63))&255],g=g>>>8^r[(g^(128|X>>6&15|(P&3)<<4))&255],g=g>>>8^r[(g^(128|X&63))&255]):(g=g>>>8^r[(g^(224|P>>12&15))&255],g=g>>>8^r[(g^(128|P>>6&63))&255],g=g>>>8^r[(g^(128|P&63))&255]);return~g}return e.table=r,e.bstr=W,e.buf=z,e.str=re,e}(),De=function(){var t={};t.version="1.2.1";function r(u,w){for(var v=u.split("/"),m=w.split("/"),S=0,A=0,B=Math.min(v.length,m.length);S>>1,u.write_shift(2,v);var m=w.getFullYear()-1980;m=m<<4|w.getMonth()+1,m=m<<5|w.getDate(),u.write_shift(2,m)}function s(u){var w=u.read_shift(2)&65535,v=u.read_shift(2)&65535,m=new Date,S=v&31;v>>>=5;var A=v&15;v>>>=4,m.setMilliseconds(0),m.setFullYear(v+1980),m.setMonth(A-1),m.setDate(S);var B=w&31;w>>>=5;var G=w&63;return w>>>=6,m.setHours(w),m.setMinutes(G),m.setSeconds(B<<1),m}function f(u){vr(u,0);for(var w={},v=0;u.l<=u.length-4;){var m=u.read_shift(2),S=u.read_shift(2),A=u.l+S,B={};switch(m){case 21589:v=u.read_shift(1),v&1&&(B.mtime=u.read_shift(4)),S>5&&(v&2&&(B.atime=u.read_shift(4)),v&4&&(B.ctime=u.read_shift(4))),B.mtime&&(B.mt=new Date(B.mtime*1e3));break}u.l=A,w[m]=B}return w}var l;function o(){return l||(l={})}function h(u,w){if(u[0]==80&&u[1]==75)return d0(u,w);if((u[0]|32)==109&&(u[1]|32)==105)return za(u,w);if(u.length<512)throw new Error("CFB file size "+u.length+" < 512");var v=3,m=512,S=0,A=0,B=0,G=0,M=0,b=[],U=u.slice(0,512);vr(U,0);var J=p(U);switch(v=J[0],v){case 3:m=512;break;case 4:m=4096;break;case 0:if(J[1]==0)return d0(u,w);default:throw new Error("Major Version: Expected 3 or 4 saw "+v)}m!==512&&(U=u.slice(0,m),vr(U,28));var te=u.slice(0,m);x(U,v);var fe=U.read_shift(4,"i");if(v===3&&fe!==0)throw new Error("# Directory Sectors: Expected 0 saw "+fe);U.l+=4,B=U.read_shift(4,"i"),U.l+=4,U.chk("00100000","Mini Stream Cutoff Size: "),G=U.read_shift(4,"i"),S=U.read_shift(4,"i"),M=U.read_shift(4,"i"),A=U.read_shift(4,"i");for(var Z=-1,se=0;se<109&&(Z=U.read_shift(4,"i"),!(Z<0));++se)b[se]=Z;var ge=d(u,m);_(M,A,ge,m,b);var Pe=I(ge,B,b,m);Pe[B].name="!Directory",S>0&&G!==X&&(Pe[G].name="!MiniFAT"),Pe[b[0]].name="!FAT",Pe.fat_addrs=b,Pe.ssz=m;var Me={},tr=[],St=[],At=[];D(B,Pe,ge,tr,S,Me,St,G),E(St,At,tr),tr.shift();var Ft={FileIndex:St,FullPaths:At};return w&&w.raw&&(Ft.raw={header:te,sectors:ge}),Ft}function p(u){if(u[u.l]==80&&u[u.l+1]==75)return[0,0];u.chk(ve,"Header Signature: "),u.l+=16;var w=u.read_shift(2,"u");return[u.read_shift(2,"u"),w]}function x(u,w){var v=9;switch(u.l+=2,v=u.read_shift(2)){case 9:if(w!=3)throw new Error("Sector Shift: Expected 9 saw "+v);break;case 12:if(w!=4)throw new Error("Sector Shift: Expected 12 saw "+v);break;default:throw new Error("Sector Shift: Expected 9 or 12 saw "+v)}u.chk("0600","Mini Sector Shift: "),u.chk("000000000000","Reserved: ")}function d(u,w){for(var v=Math.ceil(u.length/w)-1,m=[],S=1;S0&&B>=0;)A.push(w.slice(B*P,B*P+P)),S-=P,B=Yr(v,B*4);return A.length===0?H(0):qe(A).slice(0,u.size)}function _(u,w,v,m,S){var A=X;if(u===X){if(w!==0)throw new Error("DIFAT chain shorter than expected")}else if(u!==-1){var B=v[u],G=(m>>>2)-1;if(!B)return;for(var M=0;M=0;){S[M]=!0,A[A.length]=M,B.push(u[M]);var U=v[Math.floor(M*4/m)];if(b=M*4&G,m<4+b)throw new Error("FAT boundary crossed: "+M+" 4 "+m);if(!u[U])break;M=Yr(u[U],b)}return{nodes:A,data:I0([B])}}function I(u,w,v,m){var S=u.length,A=[],B=[],G=[],M=[],b=m-1,U=0,J=0,te=0,fe=0;for(U=0;U=S&&(te-=S),!B[te]){M=[];var Z=[];for(J=te;J>=0;){Z[J]=!0,B[J]=!0,G[G.length]=J,M.push(u[J]);var se=v[Math.floor(J*4/m)];if(fe=J*4&b,m<4+fe)throw new Error("FAT boundary crossed: "+J+" 4 "+m);if(!u[se]||(J=Yr(u[se],fe),Z[J]))break}A[te]={nodes:G,data:I0([M])}}return A}function D(u,w,v,m,S,A,B,G){for(var M=0,b=m.length?2:0,U=w[u].data,J=0,te=0,fe;J0&&M!==X&&(w[M].name="!StreamData")):se.size>=4096?(se.storage="fat",w[se.start]===void 0&&(w[se.start]=N(v,se.start,w.fat_addrs,w.ssz)),w[se.start].name=se.name,se.content=w[se.start].data.slice(0,se.size)):(se.storage="minifat",se.size<0?se.size=0:M!==X&&se.start!==X&&w[M]&&(se.content=c(se,w[M].data,(w[G]||{}).data))),se.content&&vr(se.content,0),A[fe]=se,B.push(se)}}function W(u,w){return new Date((mr(u,w+4)/1e7*Math.pow(2,32)+mr(u,w)/1e7-11644473600)*1e3)}function z(u,w){return o(),h(l.readFileSync(u),w)}function re(u,w){var v=w&&w.type;switch(v||Ae&&Buffer.isBuffer(u)&&(v="buffer"),v||"base64"){case"file":return z(u,w);case"base64":return h(Fr(Br(u)),w);case"binary":return h(Fr(u),w)}return h(u,w)}function k(u,w){var v=w||{},m=v.root||"Root Entry";if(u.FullPaths||(u.FullPaths=[]),u.FileIndex||(u.FileIndex=[]),u.FullPaths.length!==u.FileIndex.length)throw new Error("inconsistent CFB structure");u.FullPaths.length===0&&(u.FullPaths[0]=m+"/",u.FileIndex[0]={name:m,type:5}),v.CLSID&&(u.FileIndex[0].clsid=v.CLSID),T(u)}function T(u){var w="Sh33tJ5";if(!De.find(u,"/"+w)){var v=H(4);v[0]=55,v[1]=v[3]=50,v[2]=54,u.FileIndex.push({name:w,type:2,content:v,size:4,L:69,R:69,C:69}),u.FullPaths.push(u.FullPaths[0]+w),g(u)}}function g(u,w){k(u);for(var v=!1,m=!1,S=u.FullPaths.length-1;S>=0;--S){var A=u.FileIndex[S];switch(A.type){case 0:m?v=!0:(u.FileIndex.pop(),u.FullPaths.pop());break;case 1:case 2:case 5:m=!0,isNaN(A.R*A.L*A.C)&&(v=!0),A.R>-1&&A.L>-1&&A.R==A.L&&(v=!0);break;default:v=!0;break}}if(!(!v&&!w)){var B=new Date(1987,1,19),G=0,M=Object.create?Object.create(null):{},b=[];for(S=0;S1?1:-1,J.size=0,J.type=5;else if(te.slice(-1)=="/"){for(G=S+1;G=b.length?-1:G,G=S+1;G=b.length?-1:G,J.type=1}else n(u.FullPaths[S+1]||"")==n(te)&&(J.R=S+1),J.type=2}}}function y(u,w){var v=w||{};if(v.fileType=="mad")return Ka(u,v);switch(g(u),v.fileType){case"zip":return Wa(u,v)}var m=function(fe){for(var Z=0,se=0,ge=0;ge0&&(Me<4096?Z+=Me+63>>6:se+=Me+511>>9)}}for(var tr=fe.FullPaths.length+3>>2,St=Z+7>>3,At=Z+127>>7,Ft=St+se+tr+At,$r=Ft+127>>7,kn=$r<=109?0:Math.ceil(($r-109)/127);Ft+$r+kn+127>>7>$r;)kn=++$r<=109?0:Math.ceil(($r-109)/127);var Nr=[1,kn,$r,At,tr,se,Z,0];return fe.FileIndex[0].size=Z<<6,Nr[7]=(fe.FileIndex[0].start=Nr[0]+Nr[1]+Nr[2]+Nr[3]+Nr[4]+Nr[5])+(Nr[6]+7>>3),Nr}(u),S=H(m[7]<<9),A=0,B=0;{for(A=0;A<8;++A)S.write_shift(1,xe[A]);for(A=0;A<8;++A)S.write_shift(2,0);for(S.write_shift(2,62),S.write_shift(2,3),S.write_shift(2,65534),S.write_shift(2,9),S.write_shift(2,6),A=0;A<3;++A)S.write_shift(2,0);for(S.write_shift(4,0),S.write_shift(4,m[2]),S.write_shift(4,m[0]+m[1]+m[2]+m[3]-1),S.write_shift(4,0),S.write_shift(4,4096),S.write_shift(4,m[3]?m[0]+m[1]+m[2]-1:X),S.write_shift(4,m[3]),S.write_shift(-4,m[1]?m[0]-1:X),S.write_shift(4,m[1]),A=0;A<109;++A)S.write_shift(-4,A>9)));for(G(m[6]+7>>3);S.l&511;)S.write_shift(-4,le.ENDOFCHAIN);for(B=A=0,M=0;M=4096)&&(U.start=B,G(b+63>>6)));for(;S.l&511;)S.write_shift(-4,le.ENDOFCHAIN);for(A=0;A=4096)if(S.l=U.start+1<<9,Ae&&Buffer.isBuffer(U.content))U.content.copy(S,S.l,0,U.size),S.l+=U.size+511&-512;else{for(M=0;M0&&U.size<4096)if(Ae&&Buffer.isBuffer(U.content))U.content.copy(S,S.l,0,U.size),S.l+=U.size+63&-64;else{for(M=0;M>16|w>>8|w)&255}for(var Y=typeof Uint8Array<"u",K=Y?new Uint8Array(256):[],ae=0;ae<256;++ae)K[ae]=q(ae);function ue(u,w){var v=K[u&255];return w<=8?v>>>8-w:(v=v<<8|K[u>>8&255],w<=16?v>>>16-w:(v=v<<8|K[u>>16&255],v>>>24-w))}function Te(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=6?0:u[m+1]<<8))>>>v&3}function he(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=5?0:u[m+1]<<8))>>>v&7}function _e(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=4?0:u[m+1]<<8))>>>v&15}function ce(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=3?0:u[m+1]<<8))>>>v&31}function ne(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=1?0:u[m+1]<<8))>>>v&127}function pe(u,w,v){var m=w&7,S=w>>>3,A=(1<>>m;return v<8-m||(B|=u[S+1]<<8-m,v<16-m)||(B|=u[S+2]<<16-m,v<24-m)||(B|=u[S+3]<<24-m),B&A}function we(u,w,v){var m=w&7,S=w>>>3;return m<=5?u[S]|=(v&7)<>8-m),w+3}function rr(u,w,v){var m=w&7,S=w>>>3;return v=(v&1)<>>3;return v<<=m,u[S]|=v&255,v>>>=8,u[S+1]=v,w+8}function xr(u,w,v){var m=w&7,S=w>>>3;return v<<=m,u[S]|=v&255,v>>>=8,u[S+1]=v&255,u[S+2]=v>>>8,w+16}function Dr(u,w){var v=u.length,m=2*v>w?2*v:w+5,S=0;if(v>=w)return u;if(Ae){var A=g0(m);if(u.copy)u.copy(A);else for(;S>m-J,B=(1<=0;--B)w[G|B<0;)M[M.l++]=G[b++]}return M.l}function B(G,M){for(var b=0,U=0,J=Y?new Uint16Array(32768):[];U0;)M[M.l++]=G[U++];b=M.l*8;continue}b=we(M,b,+(U+te==G.length)+2);for(var fe=0;te-- >0;){var Z=G[U];fe=(fe<<5^Z)&32767;var se=-1,ge=0;if((se=J[fe])&&(se|=U&-32768,se>U&&(se-=32768),se2){Z=S[ge],Z<=22?b=ur(M,b,K[Z+1]>>1)-1:(ur(M,b,3),b+=5,ur(M,b,K[Z-23]>>5),b+=3);var Pe=Z<8?0:Z-4>>2;Pe>0&&(xr(M,b,ge-V[Z]),b+=Pe),Z=w[U-se],b=ur(M,b,K[Z]>>3),b-=3;var Me=Z<4?0:Z-2>>1;Me>0&&(xr(M,b,U-se-ie[Z]),b+=Me);for(var tr=0;tr>8-Z;for(var se=(1<<7-Z)-1;se>=0;--se)Wr[fe|se<>>=3){case 16:for(A=3+Te(u,w),w+=2,fe=ge[ge.length-1];A-- >0;)ge.push(fe);break;case 17:for(A=3+he(u,w),w+=3;A-- >0;)ge.push(0);break;case 18:for(A=11+ne(u,w),w+=7;A-- >0;)ge.push(0);break;default:ge.push(fe),M>>0,G=0,M=0;(m&1)==0;){if(m=he(u,v),v+=3,m>>>1)m>>1==1?(G=9,M=5):(v=Ba(u,v),G=wt,M=c0);else{v&7&&(v+=8-(v&7));var b=u[v>>>3]|u[(v>>>3)+1]<<8;if(v+=32,b>0)for(!w&&B0;)S[A++]=u[v>>>3],v+=8;continue}for(;;){!w&&B>>1==1?Be[U]:Ir[U];if(v+=J&15,J>>>=4,(J>>>8&255)===0)S[A++]=J;else{if(J==256)break;J-=257;var te=J<8?0:J-4>>2;te>5&&(te=0);var fe=A+V[J];te>0&&(fe+=pe(u,v,te),v+=te),U=pe(u,v,M),J=m>>>1==1?Xe[U]:dr[U],v+=J&15,J>>>=4;var Z=J<4?0:J-2>>1,se=ie[J];for(Z>0&&(se+=pe(u,v,Z),v+=Z),!w&&B>>3]:[S.slice(0,A),v+7>>>3]}function u0(u,w){var v=u.slice(u.l||0),m=ba(v,w);return u.l+=m[1],m[0]}function x0(u,w){if(u)typeof console<"u"&&console.error(w);else throw new Error(w)}function d0(u,w){var v=u;vr(v,0);var m=[],S=[],A={FileIndex:m,FullPaths:S};k(A,{root:w.root});for(var B=v.length-4;(v[B]!=80||v[B+1]!=75||v[B+2]!=5||v[B+3]!=6)&&B>=0;)--B;v.l=B+4,v.l+=4;var G=v.read_shift(2);v.l+=6;var M=v.read_shift(4);for(v.l=M,B=0;B0&&(v=v.slice(0,v.length-1),v=v.slice(0,v.lastIndexOf("/")+1),A.slice(0,v.length)!=v););var B=(m[1]||"").match(/boundary="(.*?)"/);if(!B)throw new Error("MAD cannot find boundary");var G="--"+(B[1]||""),M=[],b=[],U={FileIndex:M,FullPaths:b};k(U);var J,te=0;for(S=0;S=32&&fe<128&&++J;var se=J>=te*4/5;S.push(m),S.push("Content-Location: "+(v.root||"file:///C:/SheetJS/")+B),S.push("Content-Transfer-Encoding: "+(se?"quoted-printable":"base64")),S.push("Content-Type: "+Ha(G,B)),S.push(""),S.push(se?Ga(U):Va(U))}return S.push(m+`--\r +`),S.join(`\r +`)}function $a(u){var w={};return k(w,u),w}function On(u,w,v,m){var S=m&&m.unsafe;S||k(u);var A=!S&&De.find(u,w);if(!A){var B=u.FullPaths[0];w.slice(0,B.length)==B?B=w:(B.slice(-1)!="/"&&(B+="/"),B=(B+w).replace("//","/")),A={name:i(w),type:2},u.FileIndex.push(A),u.FullPaths.push(B),S||De.utils.cfb_gc(u)}return A.content=v,A.size=v?v.length:0,m&&(m.CLSID&&(A.clsid=m.CLSID),m.mt&&(A.mt=m.mt),m.ct&&(A.ct=m.ct)),A}function Ya(u,w){k(u);var v=De.find(u,w);if(v){for(var m=0;m0?r.setTime(r.getTime()+r.getTimezoneOffset()*60*1e3):t<0&&r.setTime(r.getTime()-r.getTimezoneOffset()*60*1e3),r;if(e instanceof Date)return e;if(Ti.getFullYear()==1917&&!isNaN(r.getFullYear())){var n=r.getFullYear();return e.indexOf(""+n)>-1||r.setFullYear(r.getFullYear()+100),r}var i=e.match(/\d+/g)||["2017","2","19","0","0","0"],a=new Date(+i[0],+i[1]-1,+i[2],+i[3]||0,+i[4]||0,+i[5]||0);return e.indexOf("Z")>-1&&(a=new Date(a.getTime()-a.getTimezoneOffset()*60*1e3)),a}function An(e,t){if(Ae&&Buffer.isBuffer(e))return e.toString("binary");if(typeof TextDecoder<"u")try{var r={"€":"€","‚":"‚",ƒ:"ƒ","„":"„","…":"…","†":"†","‡":"‡","ˆ":"ˆ","‰":"‰",Š:"Š","‹":"‹",Œ:"Œ",Ž:"Ž","‘":"‘","’":"’","“":"“","”":"”","•":"•","–":"–","—":"—","˜":"˜","™":"™",š:"š","›":"›",œ:"œ",ž:"ž",Ÿ:"Ÿ"};return Array.isArray(e)&&(e=new Uint8Array(e)),new TextDecoder("latin1").decode(e).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g,function(a){return r[a]||a})}catch{}for(var n=[],i=0;i!=e.length;++i)n.push(String.fromCharCode(e[i]));return n.join("")}function cr(e){if(typeof JSON<"u"&&!Array.isArray(e))return JSON.parse(JSON.stringify(e));if(typeof e!="object"||e==null)return e;if(e instanceof Date)return new Date(e.getTime());var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=cr(e[r]));return t}function be(e,t){for(var r="";r.length3&&bs.indexOf(s)==-1)return r}else if(s.match(/[a-z]/))return r;return n<0||n>8099?r:(i>0||a>1)&&n!=101?t:e.match(/[^-0-9:,\/\\]/)?r:t}function me(e,t,r){if(e.FullPaths){if(typeof r=="string"){var n;return Ae?n=Ur(r):n=fs(r),De.utils.cfb_add(e,t,n)}De.utils.cfb_add(e,t,r)}else e.file(t,r)}function Kn(){return De.utils.cfb_new()}var Ve=`\r +`,Us={""":'"',"'":"'",">":">","<":"<","&":"&"},$n=zn(Us),Yn=/[&<>'"]/g,Ws=/[\u0000-\u0008\u000b-\u001f]/g;function ke(e){var t=e+"";return t.replace(Yn,function(r){return $n[r]}).replace(Ws,function(r){return"_x"+("000"+r.charCodeAt(0).toString(16)).slice(-4)+"_"})}function O0(e){return ke(e).replace(/ /g,"_x0020_")}var Ei=/[\u0000-\u001f]/g;function Hs(e){var t=e+"";return t.replace(Yn,function(r){return $n[r]}).replace(/\n/g,"
").replace(Ei,function(r){return"&#x"+("000"+r.charCodeAt(0).toString(16)).slice(-4)+";"})}function Vs(e){var t=e+"";return t.replace(Yn,function(r){return $n[r]}).replace(Ei,function(r){return"&#x"+r.charCodeAt(0).toString(16).toUpperCase()+";"})}function Gs(e){return e.replace(/(\r\n|[\r\n])/g," ")}function Xs(e){switch(e){case 1:case!0:case"1":case"true":case"TRUE":return!0;default:return!1}}function In(e){for(var t="",r=0,n=0,i=0,a=0,s=0,f=0;r191&&n<224){s=(n&31)<<6,s|=i&63,t+=String.fromCharCode(s);continue}if(a=e.charCodeAt(r++),n<240){t+=String.fromCharCode((n&15)<<12|(i&63)<<6|a&63);continue}s=e.charCodeAt(r++),f=((n&7)<<18|(i&63)<<12|(a&63)<<6|s&63)-65536,t+=String.fromCharCode(55296+(f>>>10&1023)),t+=String.fromCharCode(56320+(f&1023))}return t}function k0(e){var t=qr(2*e.length),r,n,i=1,a=0,s=0,f;for(n=0;n>>10&1023),r=56320+(r&1023)),s!==0&&(t[a++]=s&255,t[a++]=s>>>8,s=0),t[a++]=r%256,t[a++]=r>>>8;return t.slice(0,a).toString("ucs2")}function R0(e){return Ur(e,"binary").toString("utf8")}var Zt="foo bar baz☃🍣",kt=Ae&&(R0(Zt)==In(Zt)&&R0||k0(Zt)==In(Zt)&&k0)||In,Bt=Ae?function(e){return Ur(e,"utf8").toString("binary")}:function(e){for(var t=[],r=0,n=0,i=0;r>6))),t.push(String.fromCharCode(128+(n&63)));break;case(n>=55296&&n<57344):n-=55296,i=e.charCodeAt(r++)-56320+(n<<10),t.push(String.fromCharCode(240+(i>>18&7))),t.push(String.fromCharCode(144+(i>>12&63))),t.push(String.fromCharCode(128+(i>>6&63))),t.push(String.fromCharCode(128+(i&63)));break;default:t.push(String.fromCharCode(224+(n>>12))),t.push(String.fromCharCode(128+(n>>6&63))),t.push(String.fromCharCode(128+(n&63)))}return t.join("")},js=function(){var e=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map(function(t){return[new RegExp("&"+t[0]+";","ig"),t[1]]});return function(r){for(var n=r.replace(/^[\t\n\r ]+/,"").replace(/[\t\n\r ]+$/,"").replace(/>\s+/g,">").replace(/\s+/g,` +`).replace(/<[^>]*>/g,""),i=0;i"+t+""}function bt(e){return er(e).map(function(t){return" "+t+'="'+e[t]+'"'}).join("")}function Q(e,t,r){return"<"+e+(r!=null?bt(r):"")+(t!=null?(t.match(wi)?' xml:space="preserve"':"")+">"+t+""}function Hn(e,t){try{return e.toISOString().replace(/\.\d*/,"")}catch(r){if(t)throw r}return""}function zs(e,t){switch(typeof e){case"string":var r=Q("vt:lpwstr",ke(e));return r=r.replace(/"/g,"_x0022_"),r;case"number":return Q((e|0)==e?"vt:i4":"vt:r8",ke(String(e)));case"boolean":return Q("vt:bool",e?"true":"false")}if(e instanceof Date)return Q("vt:filetime",Hn(e));throw new Error("Unable to serialize "+e)}var je={CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",CT:"http://schemas.openxmlformats.org/package/2006/content-types",RELS:"http://schemas.openxmlformats.org/package/2006/relationships",TCMNT:"http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"},vt=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"],gr={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};function Ks(e,t){for(var r=1-2*(e[t+7]>>>7),n=((e[t+7]&127)<<4)+(e[t+6]>>>4&15),i=e[t+6]&15,a=5;a>=0;--a)i=i*256+e[t+a];return n==2047?i==0?r*(1/0):NaN:(n==0?n=-1022:(n-=1023,i+=Math.pow(2,52)),r*Math.pow(2,n-52)*i)}function $s(e,t,r){var n=(t<0||1/t==-1/0?1:0)<<7,i=0,a=0,s=n?-t:t;isFinite(s)?s==0?i=a=0:(i=Math.floor(Math.log(s)/Math.LN2),a=s*Math.pow(2,52-i),i<=-1023&&(!isFinite(a)||a>4|n}var D0=function(e){for(var t=[],r=10240,n=0;n0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0].map(function(t){return Buffer.isBuffer(t)?t:Ur(t)})):D0(e)}:D0,N0=function(e,t,r){for(var n=[],i=t;i0?Gt(e,t+4,t+4+r-1):""},Fi=Ai,yi=function(e,t){var r=mr(e,t);return r>0?Gt(e,t+4,t+4+r-1):""},Ci=yi,Oi=function(e,t){var r=2*mr(e,t);return r>0?Gt(e,t+4,t+4+r-1):""},ki=Oi,Ri=function(t,r){var n=mr(t,r);return n>0?Jn(t,r+4,r+4+n):""},Di=Ri,Ii=function(e,t){var r=mr(e,t);return r>0?Gt(e,t+4,t+4+r):""},Ni=Ii,Li=function(e,t){return Ks(e,t)},cn=Li,qn=function(t){return Array.isArray(t)||typeof Uint8Array<"u"&&t instanceof Uint8Array};Ae&&(Fi=function(t,r){if(!Buffer.isBuffer(t))return Ai(t,r);var n=t.readUInt32LE(r);return n>0?t.toString("utf8",r+4,r+4+n-1):""},Ci=function(t,r){if(!Buffer.isBuffer(t))return yi(t,r);var n=t.readUInt32LE(r);return n>0?t.toString("utf8",r+4,r+4+n-1):""},ki=function(t,r){if(!Buffer.isBuffer(t))return Oi(t,r);var n=2*t.readUInt32LE(r);return t.toString("utf16le",r+4,r+4+n-1)},Di=function(t,r){if(!Buffer.isBuffer(t))return Ri(t,r);var n=t.readUInt32LE(r);return t.toString("utf16le",r+4,r+4+n)},Ni=function(t,r){if(!Buffer.isBuffer(t))return Ii(t,r);var n=t.readUInt32LE(r);return t.toString("utf8",r+4,r+4+n)},cn=function(t,r){return Buffer.isBuffer(t)?t.readDoubleLE(r):Li(t,r)},qn=function(t){return Buffer.isBuffer(t)||Array.isArray(t)||typeof Uint8Array<"u"&&t instanceof Uint8Array});var lt=function(e,t){return e[t]},Ct=function(e,t){return e[t+1]*256+e[t]},Ys=function(e,t){var r=e[t+1]*256+e[t];return r<32768?r:(65535-r+1)*-1},mr=function(e,t){return e[t+3]*(1<<24)+(e[t+2]<<16)+(e[t+1]<<8)+e[t]},Yr=function(e,t){return e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]},Js=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};function Rt(e,t){var r="",n,i,a=[],s,f,l,o;switch(t){case"dbcs":if(o=this.l,Ae&&Buffer.isBuffer(this))r=this.slice(this.l,this.l+2*e).toString("utf16le");else for(l=0;l0?Yr:Js)(this,this.l),this.l+=4,n):(i=mr(this,this.l),this.l+=4,i);case 8:case-8:if(t==="f")return e==8?i=cn(this,this.l):i=cn([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,i;e=8;case 16:r=Si(this,this.l,e);break}}return this.l+=e,r}var qs=function(e,t,r){e[r]=t&255,e[r+1]=t>>>8&255,e[r+2]=t>>>16&255,e[r+3]=t>>>24&255},Zs=function(e,t,r){e[r]=t&255,e[r+1]=t>>8&255,e[r+2]=t>>16&255,e[r+3]=t>>24&255},Qs=function(e,t,r){e[r]=t&255,e[r+1]=t>>>8&255};function ef(e,t,r){var n=0,i=0;if(r==="dbcs"){for(i=0;i!=t.length;++i)Qs(this,t.charCodeAt(i),this.l+2*i);n=2*t.length}else if(r==="sbcs"){for(t=t.replace(/[^\x00-\x7F]/g,"_"),i=0;i!=t.length;++i)this[this.l+i]=t.charCodeAt(i)&255;n=t.length}else if(r==="hex"){for(;i>8}for(;this.l>>=8,this[this.l+1]=t&255;break;case 3:n=3,this[this.l]=t&255,t>>>=8,this[this.l+1]=t&255,t>>>=8,this[this.l+2]=t&255;break;case 4:n=4,qs(this,t,this.l);break;case 8:if(n=8,r==="f"){$s(this,t,this.l);break}case 16:break;case-4:n=4,Zs(this,t,this.l);break}return this.l+=n,this}function Pi(e,t){var r=Si(this,this.l,e.length>>1);if(r!==e)throw new Error(t+"Expected "+e+" saw "+r);this.l+=e.length>>1}function vr(e,t){e.l=t,e.read_shift=Rt,e.chk=Pi,e.write_shift=ef}function Rr(e,t){e.l+=t}function H(e){var t=qr(e);return vr(t,0),t}function lr(){var e=[],t=Ae?256:2048,r=function(o){var h=H(o);return vr(h,0),h},n=r(t),i=function(){n&&(n.length>n.l&&(n=n.slice(0,n.l),n.l=n.length),n.length>0&&e.push(n),n=null)},a=function(o){return n&&o=128?1:0)+1,n>=128&&++a,n>=16384&&++a,n>=2097152&&++a;var s=e.next(a);i<=127?s.write_shift(1,i):(s.write_shift(1,(i&127)+128),s.write_shift(1,i>>7));for(var f=0;f!=4;++f)if(n>=128)s.write_shift(1,(n&127)+128),n>>=7;else{s.write_shift(1,n);break}n>0&&qn(r)&&e.push(r)}}function Dt(e,t,r){var n=cr(e);if(t.s?(n.cRel&&(n.c+=t.s.c),n.rRel&&(n.r+=t.s.r)):(n.cRel&&(n.c+=t.c),n.rRel&&(n.r+=t.r)),!r||r.biff<12){for(;n.c>=256;)n.c-=256;for(;n.r>=65536;)n.r-=65536}return n}function M0(e,t,r){var n=cr(e);return n.s=Dt(n.s,t.s,r),n.e=Dt(n.e,t.s,r),n}function It(e,t){if(e.cRel&&e.c<0)for(e=cr(e);e.c<0;)e.c+=t>8?16384:256;if(e.rRel&&e.r<0)for(e=cr(e);e.r<0;)e.r+=t>8?1048576:t>5?65536:16384;var r=Re(e);return!e.cRel&&e.cRel!=null&&(r=nf(r)),!e.rRel&&e.rRel!=null&&(r=rf(r)),r}function Nn(e,t){return e.s.r==0&&!e.s.rRel&&e.e.r==(t.biff>=12?1048575:t.biff>=8?65536:16384)&&!e.e.rRel?(e.s.cRel?"":"$")+nr(e.s.c)+":"+(e.e.cRel?"":"$")+nr(e.e.c):e.s.c==0&&!e.s.cRel&&e.e.c==(t.biff>=12?16383:255)&&!e.e.cRel?(e.s.rRel?"":"$")+Qe(e.s.r)+":"+(e.e.rRel?"":"$")+Qe(e.e.r):It(e.s,t.biff)+":"+It(e.e,t.biff)}function Zn(e){return parseInt(tf(e),10)-1}function Qe(e){return""+(e+1)}function rf(e){return e.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function tf(e){return e.replace(/\$(\d+)$/,"$1")}function Qn(e){for(var t=af(e),r=0,n=0;n!==t.length;++n)r=26*r+t.charCodeAt(n)-64;return r-1}function nr(e){if(e<0)throw new Error("invalid column "+e);var t="";for(++e;e;e=Math.floor((e-1)/26))t=String.fromCharCode((e-1)%26+65)+t;return t}function nf(e){return e.replace(/^([A-Z])/,"$$$1")}function af(e){return e.replace(/^\$([A-Z])/,"$1")}function sf(e){return e.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function ze(e){for(var t=0,r=0,n=0;n=48&&i<=57?t=10*t+(i-48):i>=65&&i<=90&&(r=26*r+(i-64))}return{c:r-1,r:t-1}}function Re(e){for(var t=e.c+1,r="";t;t=(t-1)/26|0)r=String.fromCharCode((t-1)%26+65)+r;return r+(e.r+1)}function _r(e){var t=e.indexOf(":");return t==-1?{s:ze(e),e:ze(e)}:{s:ze(e.slice(0,t)),e:ze(e.slice(t+1))}}function He(e,t){return typeof t>"u"||typeof t=="number"?He(e.s,e.e):(typeof e!="string"&&(e=Re(e)),typeof t!="string"&&(t=Re(t)),e==t?e:e+":"+t)}function Le(e){var t={s:{c:0,r:0},e:{c:0,r:0}},r=0,n=0,i=0,a=e.length;for(r=0;n26);++n)r=26*r+i;for(t.s.c=--r,r=0;n9);++n)r=10*r+i;if(t.s.r=--r,n===a||i!=10)return t.e.c=t.s.c,t.e.r=t.s.r,t;for(++n,r=0;n!=a&&!((i=e.charCodeAt(n)-64)<1||i>26);++n)r=26*r+i;for(t.e.c=--r,r=0;n!=a&&!((i=e.charCodeAt(n)-48)<0||i>9);++n)r=10*r+i;return t.e.r=--r,t}function B0(e,t){var r=e.t=="d"&&t instanceof Date;if(e.z!=null)try{return e.w=Xr(e.z,r?hr(t):t)}catch{}try{return e.w=Xr((e.XF||{}).numFmtId||(r?14:0),r?hr(t):t)}catch{return""+t}}function br(e,t,r){return e==null||e.t==null||e.t=="z"?"":e.w!==void 0?e.w:(e.t=="d"&&!e.z&&r&&r.dateNF&&(e.z=r.dateNF),e.t=="e"?Xt[e.v]||e.v:t==null?B0(e,e.v):B0(e,t))}function rt(e,t){var r=t&&t.sheet?t.sheet:"Sheet1",n={};return n[r]=e,{SheetNames:[r],Sheets:n}}function Mi(e,t,r){var n=r||{},i=e?Array.isArray(e):n.dense,a=e||(i?[]:{}),s=0,f=0;if(a&&n.origin!=null){if(typeof n.origin=="number")s=n.origin;else{var l=typeof n.origin=="string"?ze(n.origin):n.origin;s=l.r,f=l.c}a["!ref"]||(a["!ref"]="A1:A1")}var o={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(a["!ref"]){var h=Le(a["!ref"]);o.s.c=h.s.c,o.s.r=h.s.r,o.e.c=Math.max(o.e.c,h.e.c),o.e.r=Math.max(o.e.r,h.e.r),s==-1&&(o.e.r=s=h.e.r+1)}for(var p=0;p!=t.length;++p)if(t[p]){if(!Array.isArray(t[p]))throw new Error("aoa_to_sheet expects an array of arrays");for(var x=0;x!=t[p].length;++x)if(!(typeof t[p][x]>"u")){var d={v:t[p][x]},E=s+p,c=f+x;if(o.s.r>E&&(o.s.r=E),o.s.c>c&&(o.s.c=c),o.e.r0&&t.write_shift(0,e,"dbcs"),r?t.slice(0,t.l):t}function of(e){return{ich:e.read_shift(2),ifnt:e.read_shift(2)}}function lf(e,t){return t||(t=H(4)),t.write_shift(2,0),t.write_shift(2,0),t}function e0(e,t){var r=e.l,n=e.read_shift(1),i=ir(e),a=[],s={t:i,h:i};if((n&1)!==0){for(var f=e.read_shift(4),l=0;l!=f;++l)a.push(of(e));s.r=a}else s.r=[{ich:0,ifnt:0}];return e.l=r+t,s}function hf(e,t){var r=!1;return t==null&&(r=!0,t=H(15+4*e.t.length)),t.write_shift(1,0),Ke(e.t,t),r?t.slice(0,t.l):t}var cf=e0;function uf(e,t){var r=!1;return t==null&&(r=!0,t=H(23+4*e.t.length)),t.write_shift(1,1),Ke(e.t,t),t.write_shift(4,1),lf({},t),r?t.slice(0,t.l):t}function wr(e){var t=e.read_shift(4),r=e.read_shift(2);return r+=e.read_shift(1)<<16,e.l++,{c:t,iStyleRef:r}}function tt(e,t){return t==null&&(t=H(8)),t.write_shift(-4,e.c),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}function nt(e){var t=e.read_shift(2);return t+=e.read_shift(1)<<16,e.l++,{c:-1,iStyleRef:t}}function it(e,t){return t==null&&(t=H(4)),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}var xf=ir,Bi=Ke;function r0(e){var t=e.read_shift(4);return t===0||t===4294967295?"":e.read_shift(t,"dbcs")}function un(e,t){var r=!1;return t==null&&(r=!0,t=H(127)),t.write_shift(4,e.length>0?e.length:4294967295),e.length>0&&t.write_shift(0,e,"dbcs"),r?t.slice(0,t.l):t}var df=ir,Vn=r0,t0=un;function bi(e){var t=e.slice(e.l,e.l+4),r=t[0]&1,n=t[0]&2;e.l+=4;var i=n===0?cn([0,0,0,0,t[0]&252,t[1],t[2],t[3]],0):Yr(t,0)>>2;return r?i/100:i}function Ui(e,t){t==null&&(t=H(4));var r=0,n=0,i=e*100;if(e==(e|0)&&e>=-536870912&&e<1<<29?n=1:i==(i|0)&&i>=-536870912&&i<1<<29&&(n=1,r=1),n)t.write_shift(-4,((r?i:e)<<2)+(r+2));else throw new Error("unsupported RkNumber "+e)}function Wi(e){var t={s:{},e:{}};return t.s.r=e.read_shift(4),t.e.r=e.read_shift(4),t.s.c=e.read_shift(4),t.e.c=e.read_shift(4),t}function pf(e,t){return t||(t=H(16)),t.write_shift(4,e.s.r),t.write_shift(4,e.e.r),t.write_shift(4,e.s.c),t.write_shift(4,e.e.c),t}var at=Wi,mt=pf;function _t(e){if(e.length-e.l<8)throw"XLS Xnum Buffer underflow";return e.read_shift(8,"f")}function Zr(e,t){return(t||H(8)).write_shift(8,e,"f")}function vf(e){var t={},r=e.read_shift(1),n=r>>>1,i=e.read_shift(1),a=e.read_shift(2,"i"),s=e.read_shift(1),f=e.read_shift(1),l=e.read_shift(1);switch(e.l++,n){case 0:t.auto=1;break;case 1:t.index=i;var o=Ff[i];o&&(t.rgb=$0(o));break;case 2:t.rgb=$0([s,f,l]);break;case 3:t.theme=i;break}return a!=0&&(t.tint=a>0?a/32767:a/32768),t}function xn(e,t){if(t||(t=H(8)),!e||e.auto)return t.write_shift(4,0),t.write_shift(4,0),t;e.index!=null?(t.write_shift(1,2),t.write_shift(1,e.index)):e.theme!=null?(t.write_shift(1,6),t.write_shift(1,e.theme)):(t.write_shift(1,5),t.write_shift(1,0));var r=e.tint||0;if(r>0?r*=32767:r<0&&(r*=32768),t.write_shift(2,r),!e.rgb||e.theme!=null)t.write_shift(2,0),t.write_shift(1,0),t.write_shift(1,0);else{var n=e.rgb||"FFFFFF";typeof n=="number"&&(n=("000000"+n.toString(16)).slice(-6)),t.write_shift(1,parseInt(n.slice(0,2),16)),t.write_shift(1,parseInt(n.slice(2,4),16)),t.write_shift(1,parseInt(n.slice(4,6),16)),t.write_shift(1,255)}return t}function gf(e){var t=e.read_shift(1);e.l++;var r={fBold:t&1,fItalic:t&2,fUnderline:t&4,fStrikeout:t&8,fOutline:t&16,fShadow:t&32,fCondense:t&64,fExtend:t&128};return r}function mf(e,t){t||(t=H(2));var r=(e.italic?2:0)|(e.strike?8:0)|(e.outline?16:0)|(e.shadow?32:0)|(e.condense?64:0)|(e.extend?128:0);return t.write_shift(1,r),t.write_shift(1,0),t}var Hi=2,pr=3,Qt=11,dn=19,en=64,_f=65,Tf=71,Ef=4108,wf=4126,Je=80,b0={1:{n:"CodePage",t:Hi},2:{n:"Category",t:Je},3:{n:"PresentationFormat",t:Je},4:{n:"ByteCount",t:pr},5:{n:"LineCount",t:pr},6:{n:"ParagraphCount",t:pr},7:{n:"SlideCount",t:pr},8:{n:"NoteCount",t:pr},9:{n:"HiddenCount",t:pr},10:{n:"MultimediaClipCount",t:pr},11:{n:"ScaleCrop",t:Qt},12:{n:"HeadingPairs",t:Ef},13:{n:"TitlesOfParts",t:wf},14:{n:"Manager",t:Je},15:{n:"Company",t:Je},16:{n:"LinksUpToDate",t:Qt},17:{n:"CharacterCount",t:pr},19:{n:"SharedDoc",t:Qt},22:{n:"HyperlinksChanged",t:Qt},23:{n:"AppVersion",t:pr,p:"version"},24:{n:"DigSig",t:_f},26:{n:"ContentType",t:Je},27:{n:"ContentStatus",t:Je},28:{n:"Language",t:Je},29:{n:"Version",t:Je},255:{},2147483648:{n:"Locale",t:dn},2147483651:{n:"Behavior",t:dn},1919054434:{}},U0={1:{n:"CodePage",t:Hi},2:{n:"Title",t:Je},3:{n:"Subject",t:Je},4:{n:"Author",t:Je},5:{n:"Keywords",t:Je},6:{n:"Comments",t:Je},7:{n:"Template",t:Je},8:{n:"LastAuthor",t:Je},9:{n:"RevNumber",t:Je},10:{n:"EditTime",t:en},11:{n:"LastPrinted",t:en},12:{n:"CreatedDate",t:en},13:{n:"ModifiedDate",t:en},14:{n:"PageCount",t:pr},15:{n:"WordCount",t:pr},16:{n:"CharCount",t:pr},17:{n:"Thumbnail",t:Tf},18:{n:"Application",t:Je},19:{n:"DocSecurity",t:pr},255:{},2147483648:{n:"Locale",t:dn},2147483651:{n:"Behavior",t:dn},1919054434:{}};function Sf(e){return e.map(function(t){return[t>>16&255,t>>8&255,t&255]})}var Af=Sf([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Ff=cr(Af),Xt={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"},yf={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.sheet.macroEnabled.main+xml":"workbooks","application/vnd.ms-excel.sheet.binary.macroEnabled.main":"workbooks","application/vnd.ms-excel.addin.macroEnabled.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets","application/vnd.ms-excel.worksheet":"sheets","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"charts","application/vnd.ms-excel.chartsheet":"charts","application/vnd.ms-excel.macrosheet+xml":"macros","application/vnd.ms-excel.macrosheet":"macros","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"dialogs","application/vnd.ms-excel.dialogsheet":"dialogs","application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml":"strs","application/vnd.ms-excel.sharedStrings":"strs","application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles","application/vnd.ms-excel.styles":"styles","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.comments":"comments","application/vnd.ms-excel.threadedcomments+xml":"threadedcomments","application/vnd.ms-excel.person+xml":"people","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"metadata","application/vnd.ms-excel.sheetMetadata":"metadata","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-office.chartex+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"links","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"links","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"TODO","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"},rn={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xlam:"application/vnd.ms-excel.addin.macroEnabled.main+xml",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},metadata:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",xlsb:"application/vnd.ms-excel.sheetMetadata"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};function Vi(){return{workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""}}function Gi(e,t){var r=Ps(yf),n=[],i;n[n.length]=Ve,n[n.length]=Q("Types",null,{xmlns:je.CT,"xmlns:xsd":je.xsd,"xmlns:xsi":je.xsi}),n=n.concat([["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["data","application/vnd.openxmlformats-officedocument.model+data"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels","application/vnd.openxmlformats-package.relationships+xml"]].map(function(l){return Q("Default",null,{Extension:l[0],ContentType:l[1]})}));var a=function(l){e[l]&&e[l].length>0&&(i=e[l][0],n[n.length]=Q("Override",null,{PartName:(i[0]=="/"?"":"/")+i,ContentType:rn[l][t.bookType]||rn[l].xlsx}))},s=function(l){(e[l]||[]).forEach(function(o){n[n.length]=Q("Override",null,{PartName:(o[0]=="/"?"":"/")+o,ContentType:rn[l][t.bookType]||rn[l].xlsx})})},f=function(l){(e[l]||[]).forEach(function(o){n[n.length]=Q("Override",null,{PartName:(o[0]=="/"?"":"/")+o,ContentType:r[l][0]})})};return a("workbooks"),s("sheets"),s("charts"),f("themes"),["strs","styles"].forEach(a),["coreprops","extprops","custprops"].forEach(f),f("vba"),f("comments"),f("threadedcomments"),f("drawings"),s("metadata"),f("people"),n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}var Se={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",CMNT:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",SST:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",STY:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",THEME:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",WS:["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"],DRAW:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",XLMETA:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",TCMNT:"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",PEOPLE:"http://schemas.microsoft.com/office/2017/10/relationships/person",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function Xi(e){var t=e.lastIndexOf("/");return e.slice(0,t+1)+"_rels/"+e.slice(t+1)+".rels"}function ut(e){var t=[Ve,Q("Relationships",null,{xmlns:je.RELS})];return er(e["!id"]).forEach(function(r){t[t.length]=Q("Relationship",null,e["!id"][r])}),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function Oe(e,t,r,n,i,a){if(i||(i={}),e["!id"]||(e["!id"]={}),e["!idx"]||(e["!idx"]=1),t<0)for(t=e["!idx"];e["!id"]["rId"+t];++t);if(e["!idx"]=t+1,i.Id="rId"+t,i.Type=n,i.Target=r,[Se.HLINK,Se.XPATH,Se.XMISS].indexOf(i.Type)>-1&&(i.TargetMode="External"),e["!id"][i.Id])throw new Error("Cannot rewrite rId "+t);return e["!id"][i.Id]=i,e[("/"+i.Target).replace("//","/")]=i,t}function Cf(e){var t=[Ve];t.push(` +`),t.push(` +`);for(var r=0;r +`);return t.push(""),t.join("")}function W0(e,t,r){return[' +`,' +`,` +`].join("")}function Of(e,t){return[' +`,' +`,` +`].join("")}function kf(e){var t=[Ve];t.push(` +`);for(var r=0;r!=e.length;++r)t.push(W0(e[r][0],e[r][1])),t.push(Of("",e[r][0]));return t.push(W0("","Document","pkg")),t.push(""),t.join("")}function ji(){return'SheetJS '+an.version+""}var Jr=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];function Ln(e,t,r,n,i){i[e]!=null||t==null||t===""||(i[e]=t,t=ke(t),n[n.length]=r?Q(e,t,r):Ze(e,t))}function zi(e,t){var r=t||{},n=[Ve,Q("cp:coreProperties",null,{"xmlns:cp":je.CORE_PROPS,"xmlns:dc":je.dc,"xmlns:dcterms":je.dcterms,"xmlns:dcmitype":je.dcmitype,"xmlns:xsi":je.xsi})],i={};if(!e&&!r.Props)return n.join("");e&&(e.CreatedDate!=null&&Ln("dcterms:created",typeof e.CreatedDate=="string"?e.CreatedDate:Hn(e.CreatedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,i),e.ModifiedDate!=null&&Ln("dcterms:modified",typeof e.ModifiedDate=="string"?e.ModifiedDate:Hn(e.ModifiedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,i));for(var a=0;a!=Jr.length;++a){var s=Jr[a],f=r.Props&&r.Props[s[1]]!=null?r.Props[s[1]]:e?e[s[1]]:null;f===!0?f="1":f===!1?f="0":typeof f=="number"&&(f=String(f)),f!=null&&Ln(s[0],f,null,n,i)}return n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}var xt=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]],Ki=["Worksheets","SheetNames","NamedRanges","DefinedNames","Chartsheets","ChartNames"];function $i(e){var t=[],r=Q;return e||(e={}),e.Application="SheetJS",t[t.length]=Ve,t[t.length]=Q("Properties",null,{xmlns:je.EXT_PROPS,"xmlns:vt":je.vt}),xt.forEach(function(n){if(e[n[1]]!==void 0){var i;switch(n[2]){case"string":i=ke(String(e[n[1]]));break;case"bool":i=e[n[1]]?"true":"false";break}i!==void 0&&(t[t.length]=r(n[0],i))}}),t[t.length]=r("HeadingPairs",r("vt:vector",r("vt:variant","Worksheets")+r("vt:variant",r("vt:i4",String(e.Worksheets))),{size:2,baseType:"variant"})),t[t.length]=r("TitlesOfParts",r("vt:vector",e.SheetNames.map(function(n){return""+ke(n)+""}).join(""),{size:e.Worksheets,baseType:"lpstr"})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function Yi(e){var t=[Ve,Q("Properties",null,{xmlns:je.CUST_PROPS,"xmlns:vt":je.vt})];if(!e)return t.join("");var r=1;return er(e).forEach(function(i){++r,t[t.length]=Q("property",zs(e[i]),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:r,name:ke(i)})}),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var H0={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"};function Rf(e,t){var r=[];return er(H0).map(function(n){for(var i=0;i'+i.join("")+""}function If(e){var t=typeof e=="string"?new Date(Date.parse(e)):e,r=t.getTime()/1e3+11644473600,n=r%Math.pow(2,32),i=(r-n)/Math.pow(2,32);n*=1e7,i*=1e7;var a=n/Math.pow(2,32)|0;a>0&&(n=n%Math.pow(2,32),i+=a);var s=H(8);return s.write_shift(4,n),s.write_shift(4,i),s}function V0(e,t){var r=H(4),n=H(4);switch(r.write_shift(4,e==80?31:e),e){case 3:n.write_shift(-4,t);break;case 5:n=H(8),n.write_shift(8,t,"f");break;case 11:n.write_shift(4,t?1:0);break;case 64:n=If(t);break;case 31:case 80:for(n=H(4+2*(t.length+1)+(t.length%2?0:2)),n.write_shift(4,t.length+1),n.write_shift(0,t,"dbcs");n.l!=n.length;)n.write_shift(1,0);break;default:throw new Error("TypedPropertyValue unrecognized type "+e+" "+t)}return qe([r,n])}var Ji=["CodePage","Thumbnail","_PID_LINKBASE","_PID_HLINKS","SystemIdentifier","FMTID"];function Nf(e){switch(typeof e){case"boolean":return 11;case"number":return(e|0)==e?3:5;case"string":return 31;case"object":if(e instanceof Date)return 64;break}return-1}function G0(e,t,r){var n=H(8),i=[],a=[],s=8,f=0,l=H(8),o=H(8);if(l.write_shift(4,2),l.write_shift(4,1200),o.write_shift(4,1),a.push(l),i.push(o),s+=8+l.length,!t){o=H(8),o.write_shift(4,0),i.unshift(o);var h=[H(4)];for(h[0].write_shift(4,e.length),f=0;f-1||Ki.indexOf(e[f][0])>-1)&&e[f][1]!=null){var x=e[f][1],d=0;if(t){d=+t[e[f][0]];var E=r[d];if(E.p=="version"&&typeof x=="string"){var c=x.split(".");x=(+c[0]<<16)+(+c[1]||0)}l=V0(E.t,x)}else{var _=Nf(x);_==-1&&(_=31,x=String(x)),l=V0(_,x)}a.push(l),o=H(8),o.write_shift(4,t?d:2+f),i.push(o),s+=8+l.length}var N=8*(a.length+1);for(f=0;f=12?2:1),i="sbcs-cont";if(r&&r.biff>=8,!r||r.biff==8){var a=e.read_shift(1);a&&(i="dbcs-cont")}else r.biff==12&&(i="wstr");r.biff>=2&&r.biff<=5&&(i="cpstr");var s=n?e.read_shift(n,i):"";return s}function Mf(e){var t=e.t||"",r=H(3);r.write_shift(2,t.length),r.write_shift(1,1);var n=H(2*t.length);n.write_shift(2*t.length,t,"utf16le");var i=[r,n];return qe(i)}function Bf(e,t,r){var n;if(r){if(r.biff>=2&&r.biff<=5)return e.read_shift(t,"cpstr");if(r.biff>=12)return e.read_shift(t,"dbcs-cont")}var i=e.read_shift(1);return i===0?n=e.read_shift(t,"sbcs-cont"):n=e.read_shift(t,"dbcs-cont"),n}function bf(e,t,r){var n=e.read_shift(r&&r.biff==2?1:2);return n===0?(e.l++,""):Bf(e,n,r)}function Uf(e,t,r){if(r.biff>5)return bf(e,t,r);var n=e.read_shift(1);return n===0?(e.l++,""):e.read_shift(n,r.biff<=4||!e.lens?"cpstr":"sbcs-cont")}function ea(e,t,r){return r||(r=H(3+2*e.length)),r.write_shift(2,e.length),r.write_shift(1,1),r.write_shift(31,e,"utf16le"),r}function j0(e,t){t||(t=H(6+e.length*2)),t.write_shift(4,1+e.length);for(var r=0;r-1?31:23;switch(n.charAt(0)){case"#":a=28;break;case".":a&=-3;break}t.write_shift(4,2),t.write_shift(4,a);var s=[8,6815827,6619237,4849780,83];for(r=0;r-1?n.slice(0,i):n;for(t.write_shift(4,2*(f.length+1)),r=0;r-1?n.slice(i+1):"",t)}else{for(s="03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" "),r=0;r8?4:2,i=e.read_shift(n),a=e.read_shift(n,"i"),s=e.read_shift(n,"i");return[i,a,s]}function Vf(e){var t=e.read_shift(2),r=e.read_shift(2),n=e.read_shift(2),i=e.read_shift(2);return{s:{c:n,r:t},e:{c:i,r}}}function ra(e,t){return t||(t=H(8)),t.write_shift(2,e.s.r),t.write_shift(2,e.e.r),t.write_shift(2,e.s.c),t.write_shift(2,e.e.c),t}function n0(e,t,r){var n=1536,i=16;switch(r.bookType){case"biff8":break;case"biff5":n=1280,i=8;break;case"biff4":n=4,i=6;break;case"biff3":n=3,i=6;break;case"biff2":n=2,i=4;break;case"xla":break;default:throw new Error("unsupported BIFF version")}var a=H(i);return a.write_shift(2,n),a.write_shift(2,t),i>4&&a.write_shift(2,29282),i>6&&a.write_shift(2,1997),i>8&&(a.write_shift(2,49161),a.write_shift(2,1),a.write_shift(2,1798),a.write_shift(2,0)),a}function Gf(e,t){var r=!t||t.biff==8,n=H(r?112:54);for(n.write_shift(t.biff==8?2:1,7),r&&n.write_shift(1,0),n.write_shift(4,859007059),n.write_shift(4,5458548|(r?0:536870912));n.l=8?2:1,n=H(8+r*e.name.length);n.write_shift(4,e.pos),n.write_shift(1,e.hs||0),n.write_shift(1,e.dt),n.write_shift(1,e.name.length),t.biff>=8&&n.write_shift(1,1),n.write_shift(r*e.name.length,e.name,t.biff<8?"sbcs":"utf16le");var i=n.slice(0,n.l);return i.l=n.l,i}function jf(e,t){var r=H(8);r.write_shift(4,e.Count),r.write_shift(4,e.Unique);for(var n=[],i=0;in.l?n.slice(0,n.l):n;return a.l==null&&(a.l=a.length),a}function Zf(e,t){var r=t.biff==8||!t.biff?4:2,n=H(2*r+6);return n.write_shift(r,e.s.r),n.write_shift(r,e.e.r+1),n.write_shift(2,e.s.c),n.write_shift(2,e.e.c+1),n.write_shift(2,0),n}function z0(e,t,r,n){var i=r&&r.biff==5;n||(n=H(i?16:20)),n.write_shift(2,0),e.style?(n.write_shift(2,e.numFmtId||0),n.write_shift(2,65524)):(n.write_shift(2,e.numFmtId||0),n.write_shift(2,t<<4));var a=0;return e.numFmtId>0&&i&&(a|=1024),n.write_shift(4,a),n.write_shift(4,0),i||n.write_shift(4,0),n.write_shift(2,0),n}function Qf(e){var t=H(8);return t.write_shift(4,0),t.write_shift(2,0),t.write_shift(2,0),t}function eo(e,t,r,n,i,a){var s=H(8);return Qr(e,t,n,s),Zi(r,a,s),s}function ro(e,t,r,n){var i=H(14);return Qr(e,t,n,i),Zr(r,i),i}function to(e,t,r){if(r.biff<8)return no(e,t,r);for(var n=[],i=e.l+t,a=e.read_shift(r.biff>8?4:2);a--!==0;)n.push(Hf(e,r.biff>8?12:6,r));if(e.l!=i)throw new Error("Bad ExternSheet: "+e.l+" != "+i);return n}function no(e,t,r){e[e.l+1]==3&&e[e.l]++;var n=Qi(e,t,r);return n.charCodeAt(0)==3?n.slice(1):n}function io(e){var t=H(2+e.length*8);t.write_shift(2,e.length);for(var r=0;r=12?4:2,i=e.read_shift(n),a=e.read_shift(n),s=e.read_shift(n),f=e.read_shift(n),l=e.read_shift(2);n==2&&(e.l+=2);var o={s:i,e:a,w:s,ixfe:f,flags:l};return(r.biff>=5||!r.biff)&&(o.level=l>>8&7),o}function lo(e,t){var r=H(12);r.write_shift(2,t),r.write_shift(2,t),r.write_shift(2,e.width*256),r.write_shift(2,0);var n=0;return e.hidden&&(n|=1),r.write_shift(1,n),n=e.level||0,r.write_shift(1,n),r.write_shift(2,0),r}function ho(e){for(var t=H(2*e),r=0;r1048576&&(c=1e6),p!=2&&(_=h.read_shift(2));var N=h.read_shift(2),I=l.codepage||1252;p!=2&&(h.l+=16,h.read_shift(1),h[h.l]!==0&&(I=e[h[h.l]]),h.l+=1,h.l+=2),E&&(h.l+=36);for(var D=[],W={},z=Math.min(h.length,p==2?521:_-10-(d?264:0)),re=E?32:11;h.l0;){if(h[h.l]===42){h.l+=N;continue}for(++h.l,o[++k]=[],T=0,T=0;T!=D.length;++T){var g=h.slice(h.l,h.l+D[T].len);h.l+=D[T].len,vr(g,0);var y=sn.utils.decode(I,g);switch(D[T].type){case"C":y.trim().length&&(o[k][T]=y.replace(/\s+$/,""));break;case"D":y.length===8?o[k][T]=new Date(+y.slice(0,4),+y.slice(4,6)-1,+y.slice(6,8)):o[k][T]=y;break;case"F":o[k][T]=parseFloat(y.trim());break;case"+":case"I":o[k][T]=E?g.read_shift(-4,"i")^2147483648:g.read_shift(4,"i");break;case"L":switch(y.trim().toUpperCase()){case"Y":case"T":o[k][T]=!0;break;case"N":case"F":o[k][T]=!1;break;case"":case"?":break;default:throw new Error("DBF Unrecognized L:|"+y+"|")}break;case"M":if(!x)throw new Error("DBF Unexpected MEMO for type "+p.toString(16));o[k][T]="##MEMO##"+(E?parseInt(y.trim(),10):g.read_shift(4));break;case"N":y=y.replace(/\u0000/g,"").trim(),y&&y!="."&&(o[k][T]=+y||0);break;case"@":o[k][T]=new Date(g.read_shift(-8,"f")-621356832e5);break;case"T":o[k][T]=new Date((g.read_shift(4)-2440588)*864e5+g.read_shift(4));break;case"Y":o[k][T]=g.read_shift(4,"i")/1e4+g.read_shift(4,"i")/1e4*Math.pow(2,32);break;case"O":o[k][T]=-g.read_shift(-8,"f");break;case"B":if(d&&D[T].len==8){o[k][T]=g.read_shift(8,"f");break}case"G":case"P":g.l+=D[T].len;break;case"0":if(D[T].name==="_NullFlags")break;default:throw new Error("DBF Unsupported data type "+D[T].type)}}}if(p!=2&&h.l=0&&Lt(+o.codepage),o.type=="string")throw new Error("Cannot write DBF to JS string");var h=lr(),p=_n(f,{header:1,raw:!0,cellDates:!0}),x=p[0],d=p.slice(1),E=f["!cols"]||[],c=0,_=0,N=0,I=1;for(c=0;c250&&(g=250),T=((E[c]||{}).DBF||{}).type,T=="C"&&E[c].DBF.len>g&&(g=E[c].DBF.len),k=="B"&&T=="N"&&(k="N",re[c]=E[c].DBF.dec,g=E[c].DBF.len),z[c]=k=="C"||T=="N"?g:a[k]||0,I+=z[c],W[c]=k}var L=h.next(32);for(L.write_shift(4,318902576),L.write_shift(4,d.length),L.write_shift(2,296+32*N),L.write_shift(2,I),c=0;c<4;++c)L.write_shift(4,0);for(L.write_shift(4,0|(+t[ni]||3)<<8),c=0,_=0;c":190,"?":191,"{":223},t=new RegExp("\x1BN("+er(e).join("|").replace(/\|\|\|/,"|\\||").replace(/([?()+])/g,"\\$1")+"|\\|)","gm"),r=function(x,d){var E=e[d];return typeof E=="number"?v0(E):E},n=function(x,d,E){var c=d.charCodeAt(0)-32<<4|E.charCodeAt(0)-48;return c==59?x:v0(c)};e["|"]=254;function i(x,d){switch(d.type){case"base64":return a(Br(x),d);case"binary":return a(x,d);case"buffer":return a(Ae&&Buffer.isBuffer(x)?x.toString("binary"):Ht(x),d);case"array":return a(An(x),d)}throw new Error("Unrecognized type "+d.type)}function a(x,d){var E=x.split(/[\n\r]+/),c=-1,_=-1,N=0,I=0,D=[],W=[],z=null,re={},k=[],T=[],g=[],y=0,L;for(+d.codepage>=0&&Lt(+d.codepage);N!==E.length;++N){y=0;var P=E[N].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g,n).replace(t,r),X=P.replace(/;;/g,"\0").split(";").map(function(C){return C.replace(/\u0000/g,";")}),ve=X[0],xe;if(P.length>0)switch(ve){case"ID":break;case"E":break;case"B":break;case"O":break;case"W":break;case"P":X[1].charAt(0)=="P"&&W.push(P.slice(3).replace(/;;/g,";"));break;case"C":var Fe=!1,le=!1,Ee=!1,oe=!1,ye=-1,de=-1;for(I=1;I-1&&D[ye][de];if(!O||!O[1])throw new Error("SYLK shared formula cannot find base");D[c][_][1]=dl(O[1],{r:c-ye,c:_-de})}break;case"F":var R=0;for(I=1;I0?(k[c].hpt=y,k[c].hpx=sa(y)):y===0&&(k[c].hidden=!0);break;default:if(d&&d.WTF)throw new Error("SYLK bad record "+P)}R<1&&(z=null);break;default:if(d&&d.WTF)throw new Error("SYLK bad record "+P)}}return k.length>0&&(re["!rows"]=k),T.length>0&&(re["!cols"]=T),d&&d.sheetRows&&(D=D.slice(0,d.sheetRows)),[D,re]}function s(x,d){var E=i(x,d),c=E[0],_=E[1],N=gt(c,d);return er(_).forEach(function(I){N[I]=_[I]}),N}function f(x,d){return rt(s(x,d),d)}function l(x,d,E,c){var _="C;Y"+(E+1)+";X"+(c+1)+";K";switch(x.t){case"n":_+=x.v||0,x.f&&!x.F&&(_+=";E"+s0(x.f,{r:E,c}));break;case"b":_+=x.v?"TRUE":"FALSE";break;case"e":_+=x.w||x.v;break;case"d":_+='"'+(x.w||x.v)+'"';break;case"s":_+='"'+x.v.replace(/"/g,"").replace(/;/g,";;")+'"';break}return _}function o(x,d){d.forEach(function(E,c){var _="F;W"+(c+1)+" "+(c+1)+" ";E.hidden?_+="0":(typeof E.width=="number"&&!E.wpx&&(E.wpx=pn(E.width)),typeof E.wpx=="number"&&!E.wch&&(E.wch=vn(E.wpx)),typeof E.wch=="number"&&(_+=Math.round(E.wch))),_.charAt(_.length-1)!=" "&&x.push(_)})}function h(x,d){d.forEach(function(E,c){var _="F;";E.hidden?_+="M0;":E.hpt?_+="M"+20*E.hpt+";":E.hpx&&(_+="M"+20*gn(E.hpx)+";"),_.length>2&&x.push(_+"R"+(c+1))})}function p(x,d){var E=["ID;PWXL;N;E"],c=[],_=Le(x["!ref"]),N,I=Array.isArray(x),D=`\r +`;E.push("P;PGeneral"),E.push("F;P0;DG0G8;M255"),x["!cols"]&&o(E,x["!cols"]),x["!rows"]&&h(E,x["!rows"]),E.push("B;Y"+(_.e.r-_.s.r+1)+";X"+(_.e.c-_.s.c+1)+";D"+[_.s.c,_.s.r,_.e.c,_.e.r].join(" "));for(var W=_.s.r;W<=_.e.r;++W)for(var z=_.s.c;z<=_.e.c;++z){var re=Re({r:W,c:z});N=I?(x[W]||[])[z]:x[re],!(!N||N.v==null&&(!N.f||N.F))&&c.push(l(N,x,W,z))}return E.join(D)+D+c.join(D)+D+"E"+D}return{to_workbook:f,to_sheet:s,from_sheet:p}}(),vo=function(){function e(a,s){switch(s.type){case"base64":return t(Br(a),s);case"binary":return t(a,s);case"buffer":return t(Ae&&Buffer.isBuffer(a)?a.toString("binary"):Ht(a),s);case"array":return t(An(a),s)}throw new Error("Unrecognized type "+s.type)}function t(a,s){for(var f=a.split(` +`),l=-1,o=-1,h=0,p=[];h!==f.length;++h){if(f[h].trim()==="BOT"){p[++l]=[],o=0;continue}if(!(l<0)){var x=f[h].trim().split(","),d=x[0],E=x[1];++h;for(var c=f[h]||"";(c.match(/["]/g)||[]).length&1&&h=0&&E[c].length===0;)--c;for(var _=10,N=0,I=0;I<=c;++I)N=E[I].indexOf(" "),N==-1?N=E[I].length:N++,_=Math.max(_,N);for(I=0;I<=c;++I){d[I]=[];var D=0;for(e(E[I].slice(0,_).trim(),d,I,D,x),D=1;D<=(E[I].length-_)/10+1;++D)e(E[I].slice(_+(D-1)*10,_+D*10).trim(),d,I,D,x)}return x.sheetRows&&(d=d.slice(0,x.sheetRows)),d}var r={44:",",9:" ",59:";",124:"|"},n={44:3,9:2,59:1,124:0};function i(h){for(var p={},x=!1,d=0,E=0;d0&&y(),E["!ref"]=He(c),E}function s(h,p){return!(p&&p.PRN)||p.FS||h.slice(0,4)=="sep="||h.indexOf(" ")>=0||h.indexOf(",")>=0||h.indexOf(";")>=0?a(h,p):gt(t(h,p),p)}function f(h,p){var x="",d=p.type=="string"?[0,0,0,0]:k1(h,p);switch(p.type){case"base64":x=Br(h);break;case"binary":x=h;break;case"buffer":p.codepage==65001?x=h.toString("utf8"):p.codepage&&typeof sn<"u"||(x=Ae&&Buffer.isBuffer(h)?h.toString("binary"):Ht(h));break;case"array":x=An(h);break;case"string":x=h;break;default:throw new Error("Unrecognized type "+p.type)}return d[0]==239&&d[1]==187&&d[2]==191?x=kt(x.slice(3)):p.type!="string"&&p.type!="buffer"&&p.codepage==65001?x=kt(x):p.type=="binary"&&typeof sn<"u",x.slice(0,19)=="socialcalc:version:"?ta.to_sheet(p.type=="string"?x:kt(x),p):s(x,p)}function l(h,p){return rt(f(h,p),p)}function o(h){for(var p=[],x=Le(h["!ref"]),d,E=Array.isArray(h),c=x.s.r;c<=x.e.r;++c){for(var _=[],N=x.s.c;N<=x.e.c;++N){var I=Re({r:c,c:N});if(d=E?(h[c]||[])[N]:h[I],!d||d.v==null){_.push(" ");continue}for(var D=(d.w||(br(d),d.w)||"").slice(0,10);D.length<10;)D+=" ";_.push(D+(N===0?" ":""))}p.push(_.join(""))}return p.join(` +`)}return{to_workbook:l,to_sheet:f,from_sheet:o}}(),K0=function(){function e(F,O,R){if(F){vr(F,F.l||0);for(var C=R.Enum||ye;F.l=16&&F[14]==5&&F[15]===108)throw new Error("Unsupported Works 3 for Mac file");if(F[2]==2)R.Enum=ye,e(F,function(ne,pe,we){switch(we){case 0:R.vers=ne,ne>=4096&&(R.qpro=!0);break;case 6:ue=ne;break;case 204:ne&&(ie=ne);break;case 222:ie=ne;break;case 15:case 51:R.qpro||(ne[1].v=ne[1].v.slice(1));case 13:case 14:case 16:we==14&&(ne[2]&112)==112&&(ne[2]&15)>1&&(ne[2]&15)<15&&(ne[1].z=R.dateNF||Ue[14],R.cellDates&&(ne[1].t="d",ne[1].v=_i(ne[1].v))),R.qpro&&ne[3]>q&&(C["!ref"]=He(ue),Y[V]=C,K.push(V),C=R.dense?[]:{},ue={s:{r:0,c:0},e:{r:0,c:0}},q=ne[3],V=ie||"Sheet"+(q+1),ie="");var rr=R.dense?(C[ne[0].r]||[])[ne[0].c]:C[Re(ne[0])];if(rr){rr.t=ne[1].t,rr.v=ne[1].v,ne[1].z!=null&&(rr.z=ne[1].z),ne[1].f!=null&&(rr.f=ne[1].f);break}R.dense?(C[ne[0].r]||(C[ne[0].r]=[]),C[ne[0].r][ne[0].c]=ne[1]):C[Re(ne[0])]=ne[1];break}},R);else if(F[2]==26||F[2]==14)R.Enum=de,F[2]==14&&(R.qpro=!0,F.l=0),e(F,function(ne,pe,we){switch(we){case 204:V=ne;break;case 22:ne[1].v=ne[1].v.slice(1);case 23:case 24:case 25:case 37:case 39:case 40:if(ne[3]>q&&(C["!ref"]=He(ue),Y[V]=C,K.push(V),C=R.dense?[]:{},ue={s:{r:0,c:0},e:{r:0,c:0}},q=ne[3],V="Sheet"+(q+1)),Te>0&&ne[0].r>=Te)break;R.dense?(C[ne[0].r]||(C[ne[0].r]=[]),C[ne[0].r][ne[0].c]=ne[1]):C[Re(ne[0])]=ne[1],ue.e.c=0&&Lt(+R.codepage),R.type=="string")throw new Error("Cannot write WK1 to JS string");var C=lr(),V=Le(F["!ref"]),ie=Array.isArray(F),q=[];ee(C,0,a(1030)),ee(C,6,l(V));for(var Y=Math.min(V.e.r,8191),K=V.s.r;K<=Y;++K)for(var ae=Qe(K),ue=V.s.c;ue<=V.e.c;++ue){K===V.s.r&&(q[ue]=nr(ue));var Te=q[ue]+ae,he=ie?(F[K]||[])[ue]:F[Te];if(!(!he||he.t=="z"))if(he.t=="n")(he.v|0)==he.v&&he.v>=-32768&&he.v<=32767?ee(C,13,d(K,ue,he.v)):ee(C,14,c(K,ue,he.v));else{var _e=br(he);ee(C,15,p(K,ue,_e.slice(0,239)))}}return ee(C,1),C.end()}function i(F,O){var R=O||{};if(+R.codepage>=0&&Lt(+R.codepage),R.type=="string")throw new Error("Cannot write WK3 to JS string");var C=lr();ee(C,0,s(F));for(var V=0,ie=0;V8191&&(R=8191),O.write_shift(2,R),O.write_shift(1,V),O.write_shift(1,C),O.write_shift(2,0),O.write_shift(2,0),O.write_shift(1,1),O.write_shift(1,2),O.write_shift(4,0),O.write_shift(4,0),O}function f(F,O,R){var C={s:{c:0,r:0},e:{c:0,r:0}};return O==8&&R.qpro?(C.s.c=F.read_shift(1),F.l++,C.s.r=F.read_shift(2),C.e.c=F.read_shift(1),F.l++,C.e.r=F.read_shift(2),C):(C.s.c=F.read_shift(2),C.s.r=F.read_shift(2),O==12&&R.qpro&&(F.l+=2),C.e.c=F.read_shift(2),C.e.r=F.read_shift(2),O==12&&R.qpro&&(F.l+=2),C.s.c==65535&&(C.s.c=C.e.c=C.s.r=C.e.r=0),C)}function l(F){var O=H(8);return O.write_shift(2,F.s.c),O.write_shift(2,F.s.r),O.write_shift(2,F.e.c),O.write_shift(2,F.e.r),O}function o(F,O,R){var C=[{c:0,r:0},{t:"n",v:0},0,0];return R.qpro&&R.vers!=20768?(C[0].c=F.read_shift(1),C[3]=F.read_shift(1),C[0].r=F.read_shift(2),F.l+=2):(C[2]=F.read_shift(1),C[0].c=F.read_shift(2),C[0].r=F.read_shift(2)),C}function h(F,O,R){var C=F.l+O,V=o(F,O,R);if(V[1].t="s",R.vers==20768){F.l++;var ie=F.read_shift(1);return V[1].v=F.read_shift(ie,"utf8"),V}return R.qpro&&F.l++,V[1].v=F.read_shift(C-F.l,"cstr"),V}function p(F,O,R){var C=H(7+R.length);C.write_shift(1,255),C.write_shift(2,O),C.write_shift(2,F),C.write_shift(1,39);for(var V=0;V=128?95:ie)}return C.write_shift(1,0),C}function x(F,O,R){var C=o(F,O,R);return C[1].v=F.read_shift(2,"i"),C}function d(F,O,R){var C=H(7);return C.write_shift(1,255),C.write_shift(2,O),C.write_shift(2,F),C.write_shift(2,R,"i"),C}function E(F,O,R){var C=o(F,O,R);return C[1].v=F.read_shift(8,"f"),C}function c(F,O,R){var C=H(13);return C.write_shift(1,255),C.write_shift(2,O),C.write_shift(2,F),C.write_shift(8,R,"f"),C}function _(F,O,R){var C=F.l+O,V=o(F,O,R);if(V[1].v=F.read_shift(8,"f"),R.qpro)F.l=C;else{var ie=F.read_shift(2);W(F.slice(F.l,F.l+ie),V),F.l+=ie}return V}function N(F,O,R){var C=O&32768;return O&=-32769,O=(C?F:0)+(O>=8192?O-16384:O),(C?"":"$")+(R?nr(O):Qe(O))}var I={51:["FALSE",0],52:["TRUE",0],70:["LEN",1],80:["SUM",69],81:["AVERAGEA",69],82:["COUNTA",69],83:["MINA",69],84:["MAXA",69],111:["T",1]},D=["","","","","","","","","","+","-","*","/","^","=","<>","<=",">=","<",">","","","","","&","","","","","","",""];function W(F,O){vr(F,0);for(var R=[],C=0,V="",ie="",q="",Y="";F.lR.length){console.error("WK1 bad formula parse 0x"+K.toString(16)+":|"+R.join("|")+"|");return}var he=R.slice(-C);R.length-=C,R.push(I[K][0]+"("+he.join(",")+")")}else return K<=7?console.error("WK1 invalid opcode "+K.toString(16)):K<=24?console.error("WK1 unsupported op "+K.toString(16)):K<=30?console.error("WK1 invalid opcode "+K.toString(16)):K<=115?console.error("WK1 unsupported function opcode "+K.toString(16)):console.error("WK1 unrecognized opcode "+K.toString(16))}}R.length==1?O[1].f=""+R[0]:console.error("WK1 bad formula parse |"+R.join("|")+"|")}function z(F){var O=[{c:0,r:0},{t:"n",v:0},0];return O[0].r=F.read_shift(2),O[3]=F[F.l++],O[0].c=F[F.l++],O}function re(F,O){var R=z(F);return R[1].t="s",R[1].v=F.read_shift(O-4,"cstr"),R}function k(F,O,R,C){var V=H(6+C.length);V.write_shift(2,F),V.write_shift(1,R),V.write_shift(1,O),V.write_shift(1,39);for(var ie=0;ie=128?95:q)}return V.write_shift(1,0),V}function T(F,O){var R=z(F);R[1].v=F.read_shift(2);var C=R[1].v>>1;if(R[1].v&1)switch(C&7){case 0:C=(C>>3)*5e3;break;case 1:C=(C>>3)*500;break;case 2:C=(C>>3)/20;break;case 3:C=(C>>3)/200;break;case 4:C=(C>>3)/2e3;break;case 5:C=(C>>3)/2e4;break;case 6:C=(C>>3)/16;break;case 7:C=(C>>3)/64;break}return R[1].v=C,R}function g(F,O){var R=z(F),C=F.read_shift(4),V=F.read_shift(4),ie=F.read_shift(2);if(ie==65535)return C===0&&V===3221225472?(R[1].t="e",R[1].v=15):C===0&&V===3489660928?(R[1].t="e",R[1].v=42):R[1].v=0,R;var q=ie&32768;return ie=(ie&32767)-16446,R[1].v=(1-q*2)*(V*Math.pow(2,ie+32)+C*Math.pow(2,ie)),R}function y(F,O,R,C){var V=H(14);if(V.write_shift(2,F),V.write_shift(1,R),V.write_shift(1,O),C==0)return V.write_shift(4,0),V.write_shift(4,0),V.write_shift(2,65535),V;var ie=0,q=0,Y=0,K=0;return C<0&&(ie=1,C=-C),q=Math.log2(C)|0,C/=Math.pow(2,q-31),K=C>>>0,(K&2147483648)==0&&(C/=2,++q,K=C>>>0),C-=K,K|=2147483648,K>>>=0,C*=Math.pow(2,32),Y=C>>>0,V.write_shift(4,Y),V.write_shift(4,K),q+=16383+(ie?32768:0),V.write_shift(2,q),V}function L(F,O){var R=g(F);return F.l+=O-14,R}function P(F,O){var R=z(F),C=F.read_shift(4);return R[1].v=C>>6,R}function X(F,O){var R=z(F),C=F.read_shift(8,"f");return R[1].v=C,R}function ve(F,O){var R=X(F);return F.l+=O-10,R}function xe(F,O){return F[F.l+O-1]==0?F.read_shift(O,"cstr"):""}function Fe(F,O){var R=F[F.l++];R>O-1&&(R=O-1);for(var C="";C.length127?95:V}return R[R.l++]=0,R}var ye={0:{n:"BOF",f:qi},1:{n:"EOF"},2:{n:"CALCMODE"},3:{n:"CALCORDER"},4:{n:"SPLIT"},5:{n:"SYNC"},6:{n:"RANGE",f},7:{n:"WINDOW1"},8:{n:"COLW1"},9:{n:"WINTWO"},10:{n:"COLW2"},11:{n:"NAME"},12:{n:"BLANK"},13:{n:"INTEGER",f:x},14:{n:"NUMBER",f:E},15:{n:"LABEL",f:h},16:{n:"FORMULA",f:_},24:{n:"TABLE"},25:{n:"ORANGE"},26:{n:"PRANGE"},27:{n:"SRANGE"},28:{n:"FRANGE"},29:{n:"KRANGE1"},32:{n:"HRANGE"},35:{n:"KRANGE2"},36:{n:"PROTEC"},37:{n:"FOOTER"},38:{n:"HEADER"},39:{n:"SETUP"},40:{n:"MARGINS"},41:{n:"LABELFMT"},42:{n:"TITLES"},43:{n:"SHEETJS"},45:{n:"GRAPH"},46:{n:"NGRAPH"},47:{n:"CALCCOUNT"},48:{n:"UNFORMATTED"},49:{n:"CURSORW12"},50:{n:"WINDOW"},51:{n:"STRING",f:h},55:{n:"PASSWORD"},56:{n:"LOCKED"},60:{n:"QUERY"},61:{n:"QUERYNAME"},62:{n:"PRINT"},63:{n:"PRINTNAME"},64:{n:"GRAPH2"},65:{n:"GRAPHNAME"},66:{n:"ZOOM"},67:{n:"SYMSPLIT"},68:{n:"NSROWS"},69:{n:"NSCOLS"},70:{n:"RULER"},71:{n:"NNAME"},72:{n:"ACOMM"},73:{n:"AMACRO"},74:{n:"PARSE"},102:{n:"PRANGES??"},103:{n:"RRANGES??"},104:{n:"FNAME??"},105:{n:"MRANGES??"},204:{n:"SHEETNAMECS",f:xe},222:{n:"SHEETNAMELP",f:Fe},65535:{n:""}},de={0:{n:"BOF"},1:{n:"EOF"},2:{n:"PASSWORD"},3:{n:"CALCSET"},4:{n:"WINDOWSET"},5:{n:"SHEETCELLPTR"},6:{n:"SHEETLAYOUT"},7:{n:"COLUMNWIDTH"},8:{n:"HIDDENCOLUMN"},9:{n:"USERRANGE"},10:{n:"SYSTEMRANGE"},11:{n:"ZEROFORCE"},12:{n:"SORTKEYDIR"},13:{n:"FILESEAL"},14:{n:"DATAFILLNUMS"},15:{n:"PRINTMAIN"},16:{n:"PRINTSTRING"},17:{n:"GRAPHMAIN"},18:{n:"GRAPHSTRING"},19:{n:"??"},20:{n:"ERRCELL"},21:{n:"NACELL"},22:{n:"LABEL16",f:re},23:{n:"NUMBER17",f:g},24:{n:"NUMBER18",f:T},25:{n:"FORMULA19",f:L},26:{n:"FORMULA1A"},27:{n:"XFORMAT",f:Ee},28:{n:"DTLABELMISC"},29:{n:"DTLABELCELL"},30:{n:"GRAPHWINDOW"},31:{n:"CPA"},32:{n:"LPLAUTO"},33:{n:"QUERY"},34:{n:"HIDDENSHEET"},35:{n:"??"},37:{n:"NUMBER25",f:P},38:{n:"??"},39:{n:"NUMBER27",f:X},40:{n:"FORMULA28",f:ve},142:{n:"??"},147:{n:"??"},150:{n:"??"},151:{n:"??"},152:{n:"??"},153:{n:"??"},154:{n:"??"},155:{n:"??"},156:{n:"??"},163:{n:"??"},174:{n:"??"},175:{n:"??"},176:{n:"??"},177:{n:"??"},184:{n:"??"},185:{n:"??"},186:{n:"??"},187:{n:"??"},188:{n:"??"},195:{n:"??"},201:{n:"??"},204:{n:"SHEETNAMECS",f:xe},205:{n:"??"},206:{n:"??"},207:{n:"??"},208:{n:"??"},256:{n:"??"},259:{n:"??"},260:{n:"??"},261:{n:"??"},262:{n:"??"},263:{n:"??"},265:{n:"??"},266:{n:"??"},267:{n:"??"},268:{n:"??"},270:{n:"??"},271:{n:"??"},384:{n:"??"},389:{n:"??"},390:{n:"??"},393:{n:"??"},396:{n:"??"},512:{n:"??"},514:{n:"??"},513:{n:"??"},516:{n:"??"},517:{n:"??"},640:{n:"??"},641:{n:"??"},642:{n:"??"},643:{n:"??"},644:{n:"??"},645:{n:"??"},646:{n:"??"},647:{n:"??"},648:{n:"??"},658:{n:"??"},659:{n:"??"},660:{n:"??"},661:{n:"??"},662:{n:"??"},665:{n:"??"},666:{n:"??"},768:{n:"??"},772:{n:"??"},1537:{n:"SHEETINFOQP",f:le},1600:{n:"??"},1602:{n:"??"},1793:{n:"??"},1794:{n:"??"},1795:{n:"??"},1796:{n:"??"},1920:{n:"??"},2048:{n:"??"},2049:{n:"??"},2052:{n:"??"},2688:{n:"??"},10998:{n:"??"},12849:{n:"??"},28233:{n:"??"},28484:{n:"??"},65535:{n:""}};return{sheet_to_wk1:n,book_to_wk3:i,to_workbook:t}}(),mo=/^\s|\s$|[\t\n\r]/;function na(e,t){if(!t.bookSST)return"";var r=[Ve];r[r.length]=Q("sst",null,{xmlns:vt[0],count:e.Count,uniqueCount:e.Unique});for(var n=0;n!=e.length;++n)if(e[n]!=null){var i=e[n],a="";i.r?a+=i.r:(a+=""),a+="",r[r.length]=a}return r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}function _o(e){return[e.read_shift(4),e.read_shift(4)]}function To(e,t){return t||(t=H(8)),t.write_shift(4,e.Count),t.write_shift(4,e.Unique),t}var Eo=hf;function wo(e){var t=lr();j(t,159,To(e));for(var r=0;r=0;--a)s=r[a],f=(t&16384)===0?0:1,l=t<<1&32767,o=f|l,t=o^s;return t^52811}var Ao=function(){function e(i,a){switch(a.type){case"base64":return t(Br(i),a);case"binary":return t(i,a);case"buffer":return t(Ae&&Buffer.isBuffer(i)?i.toString("binary"):Ht(i),a);case"array":return t(An(i),a)}throw new Error("Unrecognized type "+a.type)}function t(i,a){var s=a||{},f=s.dense?[]:{},l=i.match(/\\trowd.*?\\row\b/g);if(!l.length)throw new Error("RTF missing table");var o={s:{c:0,r:0},e:{c:0,r:l.length-1}};return l.forEach(function(h,p){Array.isArray(f)&&(f[p]=[]);for(var x=/\\\w+\b/g,d=0,E,c=-1;E=x.exec(h);){switch(E[0]){case"\\cell":var _=h.slice(d,x.lastIndex-E[0].length);if(_[0]==" "&&(_=_.slice(1)),++c,_.length){var N={v:_,t:"s"};Array.isArray(f)?f[p][c]=N:f[Re({r:p,c})]=N}break}d=x.lastIndex}c>o.e.c&&(o.e.c=c)}),f["!ref"]=He(o),f}function r(i,a){return rt(e(i,a),a)}function n(i){for(var a=["{\\rtf1\\ansi"],s=Le(i["!ref"]),f,l=Array.isArray(i),o=s.s.r;o<=s.e.r;++o){a.push("\\trowd\\trautofit1");for(var h=s.s.c;h<=s.e.c;++h)a.push("\\cellx"+(h+1));for(a.push("\\pard\\intbl"),h=s.s.c;h<=s.e.c;++h){var p=Re({r:o,c:h});f=l?(i[o]||[])[h]:i[p],!(!f||f.v==null&&(!f.f||f.F))&&(a.push(" "+(f.w||(br(f),f.w))),a.push("\\cell"))}a.push("\\pard\\intbl\\row")}return a.join("")+"}"}return{to_workbook:r,to_sheet:e,from_sheet:n}}();function $0(e){for(var t=0,r=1;t!=3;++t)r=r*256+(e[t]>255?255:e[t]<0?0:e[t]);return r.toString(16).toUpperCase().slice(1)}var Fo=6,Mr=Fo;function pn(e){return Math.floor((e+Math.round(128/Mr)/256)*Mr)}function vn(e){return Math.floor((e-5)/Mr*100+.5)/100}function Gn(e){return Math.round((e*Mr+5)/Mr*256)/256}function i0(e){e.width?(e.wpx=pn(e.width),e.wch=vn(e.wpx),e.MDW=Mr):e.wpx?(e.wch=vn(e.wpx),e.width=Gn(e.wch),e.MDW=Mr):typeof e.wch=="number"&&(e.width=Gn(e.wch),e.wpx=pn(e.width),e.MDW=Mr),e.customWidth&&delete e.customWidth}var yo=96,aa=yo;function gn(e){return e*96/aa}function sa(e){return e*aa/96}function Co(e){var t=[""];return[[5,8],[23,26],[41,44],[50,392]].forEach(function(r){for(var n=r[0];n<=r[1];++n)e[n]!=null&&(t[t.length]=Q("numFmt",null,{numFmtId:n,formatCode:ke(e[n])}))}),t.length===1?"":(t[t.length]="",t[0]=Q("numFmts",null,{count:t.length-2}).replace("/>",">"),t.join(""))}function Oo(e){var t=[];return t[t.length]=Q("cellXfs",null),e.forEach(function(r){t[t.length]=Q("xf",null,r)}),t[t.length]="",t.length===2?"":(t[0]=Q("cellXfs",null,{count:t.length-2}).replace("/>",">"),t.join(""))}function fa(e,t){var r=[Ve,Q("styleSheet",null,{xmlns:vt[0],"xmlns:vt":je.vt})],n;return e.SSF&&(n=Co(e.SSF))!=null&&(r[r.length]=n),r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',(n=Oo(t.cellXfs))&&(r[r.length]=n),r[r.length]='',r[r.length]='',r[r.length]='',r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}function ko(e,t){var r=e.read_shift(2),n=ir(e);return[r,n]}function Ro(e,t,r){r||(r=H(6+4*t.length)),r.write_shift(2,e),Ke(t,r);var n=r.length>r.l?r.slice(0,r.l):r;return r.l==null&&(r.l=r.length),n}function Do(e,t,r){var n={};n.sz=e.read_shift(2)/20;var i=gf(e);i.fItalic&&(n.italic=1),i.fCondense&&(n.condense=1),i.fExtend&&(n.extend=1),i.fShadow&&(n.shadow=1),i.fOutline&&(n.outline=1),i.fStrikeout&&(n.strike=1);var a=e.read_shift(2);switch(a===700&&(n.bold=1),e.read_shift(2)){case 1:n.vertAlign="superscript";break;case 2:n.vertAlign="subscript";break}var s=e.read_shift(1);s!=0&&(n.underline=s);var f=e.read_shift(1);f>0&&(n.family=f);var l=e.read_shift(1);switch(l>0&&(n.charset=l),e.l++,n.color=vf(e),e.read_shift(1)){case 1:n.scheme="major";break;case 2:n.scheme="minor";break}return n.name=ir(e),n}function Io(e,t){t||(t=H(25+4*32)),t.write_shift(2,e.sz*20),mf(e,t),t.write_shift(2,e.bold?700:400);var r=0;e.vertAlign=="superscript"?r=1:e.vertAlign=="subscript"&&(r=2),t.write_shift(2,r),t.write_shift(1,e.underline||0),t.write_shift(1,e.family||0),t.write_shift(1,e.charset||0),t.write_shift(1,0),xn(e.color,t);var n=0;return n=2,t.write_shift(1,n),Ke(e.name,t),t.length>t.l?t.slice(0,t.l):t}var No=["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"],Pn,Lo=Rr;function Y0(e,t){t||(t=H(4*3+8*7+16*1)),Pn||(Pn=zn(No));var r=Pn[e.patternType];r==null&&(r=40),t.write_shift(4,r);var n=0;if(r!=40)for(xn({auto:1},t),xn({auto:1},t);n<12;++n)t.write_shift(4,0);else{for(;n<4;++n)t.write_shift(4,0);for(;n<12;++n)t.write_shift(4,0)}return t.length>t.l?t.slice(0,t.l):t}function Po(e,t){var r=e.l+t,n=e.read_shift(2),i=e.read_shift(2);return e.l=r,{ixfe:n,numFmtId:i}}function oa(e,t,r){r||(r=H(16)),r.write_shift(2,t||0),r.write_shift(2,e.numFmtId||0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(1,0),r.write_shift(1,0);var n=0;return r.write_shift(1,n),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r}function yt(e,t){return t||(t=H(10)),t.write_shift(1,0),t.write_shift(1,0),t.write_shift(4,0),t.write_shift(4,0),t}var Mo=Rr;function Bo(e,t){return t||(t=H(51)),t.write_shift(1,0),yt(null,t),yt(null,t),yt(null,t),yt(null,t),yt(null,t),t.length>t.l?t.slice(0,t.l):t}function bo(e,t){return t||(t=H(12+4*10)),t.write_shift(4,e.xfId),t.write_shift(2,1),t.write_shift(1,0),t.write_shift(1,0),un(e.name||"",t),t.length>t.l?t.slice(0,t.l):t}function Uo(e,t,r){var n=H(2052);return n.write_shift(4,e),un(t,n),un(r,n),n.length>n.l?n.slice(0,n.l):n}function Wo(e,t){if(t){var r=0;[[5,8],[23,26],[41,44],[50,392]].forEach(function(n){for(var i=n[0];i<=n[1];++i)t[i]!=null&&++r}),r!=0&&(j(e,615,Cr(r)),[[5,8],[23,26],[41,44],[50,392]].forEach(function(n){for(var i=n[0];i<=n[1];++i)t[i]!=null&&j(e,44,Ro(i,t[i]))}),j(e,616))}}function Ho(e){var t=1;j(e,611,Cr(t)),j(e,43,Io({sz:12,color:{theme:1},name:"Calibri",family:2})),j(e,612)}function Vo(e){var t=2;j(e,603,Cr(t)),j(e,45,Y0({patternType:"none"})),j(e,45,Y0({patternType:"gray125"})),j(e,604)}function Go(e){var t=1;j(e,613,Cr(t)),j(e,46,Bo()),j(e,614)}function Xo(e){var t=1;j(e,626,Cr(t)),j(e,47,oa({numFmtId:0},65535)),j(e,627)}function jo(e,t){j(e,617,Cr(t.length)),t.forEach(function(r){j(e,47,oa(r,0))}),j(e,618)}function zo(e){var t=1;j(e,619,Cr(t)),j(e,48,bo({xfId:0,name:"Normal"})),j(e,620)}function Ko(e){var t=0;j(e,505,Cr(t)),j(e,506)}function $o(e){var t=0;j(e,508,Uo(t,"TableStyleMedium9","PivotStyleMedium4")),j(e,509)}function Yo(e,t){var r=lr();return j(r,278),Wo(r,e.SSF),Ho(r),Vo(r),Go(r),Xo(r),jo(r,t.cellXfs),zo(r),Ko(r),$o(r),j(r,279),r.end()}function la(e,t){if(t&&t.themeXLSX)return t.themeXLSX;if(e&&typeof e.raw=="string")return e.raw;var r=[Ve];return r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r.join("")}function Jo(e,t){return{flags:e.read_shift(4),version:e.read_shift(4),name:ir(e)}}function qo(e){var t=H(12+2*e.name.length);return t.write_shift(4,e.flags),t.write_shift(4,e.version),Ke(e.name,t),t.slice(0,t.l)}function Zo(e){for(var t=[],r=e.read_shift(4);r-- >0;)t.push([e.read_shift(4),e.read_shift(4)]);return t}function Qo(e){var t=H(4+8*e.length);t.write_shift(4,e.length);for(var r=0;r + + + + + + + + + + + + + + + + + +`),e.join("")}function il(e){var t={};t.i=e.read_shift(4);var r={};r.r=e.read_shift(4),r.c=e.read_shift(4),t.r=Re(r);var n=e.read_shift(1);return n&2&&(t.l="1"),n&8&&(t.a="1"),t}var ht=1024;function ca(e,t){for(var r=[21600,21600],n=["m0,0l0",r[1],r[0],r[1],r[0],"0xe"].join(","),i=[Q("xml",null,{"xmlns:v":gr.v,"xmlns:o":gr.o,"xmlns:x":gr.x,"xmlns:mv":gr.mv}).replace(/\/>/,">"),Q("o:shapelayout",Q("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"}),Q("v:shapetype",[Q("v:stroke",null,{joinstyle:"miter"}),Q("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:r.join(","),path:n})];ht",o,Q("v:shadow",null,h),Q("v:path",null,{"o:connecttype":"none"}),'
','',"","",Ze("x:Anchor",[s.c+1,0,s.r+1,0,s.c+3,20,s.r+5,20].join(",")),Ze("x:AutoFill","False"),Ze("x:Row",String(s.r)),Ze("x:Column",String(s.c)),a[1].hidden?"":"","",""])}),i.push(""),i.join("")}function ua(e){var t=[Ve,Q("comments",null,{xmlns:vt[0]})],r=[];return t.push(""),e.forEach(function(n){n[1].forEach(function(i){var a=ke(i.a);r.indexOf(a)==-1&&(r.push(a),t.push(""+a+"")),i.T&&i.ID&&r.indexOf("tc="+i.ID)==-1&&(r.push("tc="+i.ID),t.push("tc="+i.ID+""))})}),r.length==0&&(r.push("SheetJ5"),t.push("SheetJ5")),t.push(""),t.push(""),e.forEach(function(n){var i=0,a=[];if(n[1][0]&&n[1][0].T&&n[1][0].ID?i=r.indexOf("tc="+n[1][0].ID):n[1].forEach(function(l){l.a&&(i=r.indexOf(ke(l.a))),a.push(l.t||"")}),t.push(''),a.length<=1)t.push(Ze("t",ke(a[0]||"")));else{for(var s=`Comment: + `+a[0]+` +`,f=1;f")}),t.push(""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function al(e,t,r){var n=[Ve,Q("ThreadedComments",null,{xmlns:je.TCMNT}).replace(/[\/]>/,">")];return e.forEach(function(i){var a="";(i[1]||[]).forEach(function(s,f){if(!s.T){delete s.ID;return}s.a&&t.indexOf(s.a)==-1&&t.push(s.a);var l={ref:i[0],id:"{54EE7951-7262-4200-6969-"+("000000000000"+r.tcid++).slice(-12)+"}"};f==0?a=l.id:l.parentId=a,s.ID=l.id,s.a&&(l.personId="{54EE7950-7262-4200-6969-"+("000000000000"+t.indexOf(s.a)).slice(-12)+"}"),n.push(Q("threadedComment",Ze("text",s.t||""),l))})}),n.push(""),n.join("")}function sl(e){var t=[Ve,Q("personList",null,{xmlns:je.TCMNT,"xmlns:x":vt[0]}).replace(/[\/]>/,">")];return e.forEach(function(r,n){t.push(Q("person",null,{displayName:r,id:"{54EE7950-7262-4200-6969-"+("000000000000"+n).slice(-12)+"}",userId:r,providerId:"None"}))}),t.push(""),t.join("")}function fl(e){var t={};t.iauthor=e.read_shift(4);var r=at(e);return t.rfx=r.s,t.ref=Re(r.s),e.l+=16,t}function ol(e,t){return t==null&&(t=H(36)),t.write_shift(4,e[1].iauthor),mt(e[0],t),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t}var ll=ir;function hl(e){return Ke(e.slice(0,54))}function cl(e){var t=lr(),r=[];return j(t,628),j(t,630),e.forEach(function(n){n[1].forEach(function(i){r.indexOf(i.a)>-1||(r.push(i.a.slice(0,54)),j(t,632,hl(i.a)))})}),j(t,631),j(t,633),e.forEach(function(n){n[1].forEach(function(i){i.iauthor=r.indexOf(i.a);var a={s:ze(n[0]),e:ze(n[0])};j(t,635,ol([a,i])),i.t&&i.t.length>0&&j(t,637,uf(i)),j(t,636),delete i.iauthor})}),j(t,634),j(t,629),t.end()}function ul(e,t){t.FullPaths.forEach(function(r,n){if(n!=0){var i=r.replace(/[^\/]*[\/]/,"/_VBA_PROJECT_CUR/");i.slice(-1)!=="/"&&De.utils.cfb_add(e,i,t.FileIndex[n].content)}})}var xa=["xlsb","xlsm","xlam","biff8","xla"],xl=function(){var e=/(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g,t={r:0,c:0};function r(n,i,a,s){var f=!1,l=!1;a.length==0?l=!0:a.charAt(0)=="["&&(l=!0,a=a.slice(1,-1)),s.length==0?f=!0:s.charAt(0)=="["&&(f=!0,s=s.slice(1,-1));var o=a.length>0?parseInt(a,10)|0:0,h=s.length>0?parseInt(s,10)|0:0;return f?h+=t.c:--h,l?o+=t.r:--o,i+(f?"":"$")+nr(h)+(l?"":"$")+Qe(o)}return function(i,a){return t=a,i.replace(e,r)}}(),a0=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g,s0=function(){return function(t,r){return t.replace(a0,function(n,i,a,s,f,l){var o=Qn(s)-(a?0:r.c),h=Zn(l)-(f?0:r.r),p=h==0?"":f?h+1:"["+h+"]",x=o==0?"":a?o+1:"["+o+"]";return i+"R"+p+"C"+x})}}();function dl(e,t){return e.replace(a0,function(r,n,i,a,s,f){return n+(i=="$"?i+a:nr(Qn(a)+t.c))+(s=="$"?s+f:Qe(Zn(f)+t.r))})}function pl(e){return e.length!=1}function We(e){e.l+=1}function jr(e,t){var r=e.read_shift(2);return[r&16383,r>>14&1,r>>15&1]}function da(e,t,r){var n=2;if(r){if(r.biff>=2&&r.biff<=5)return pa(e);r.biff==12&&(n=4)}var i=e.read_shift(n),a=e.read_shift(n),s=jr(e),f=jr(e);return{s:{r:i,c:s[0],cRel:s[1],rRel:s[2]},e:{r:a,c:f[0],cRel:f[1],rRel:f[2]}}}function pa(e){var t=jr(e),r=jr(e),n=e.read_shift(1),i=e.read_shift(1);return{s:{r:t[0],c:n,cRel:t[1],rRel:t[2]},e:{r:r[0],c:i,cRel:r[1],rRel:r[2]}}}function vl(e,t,r){if(r.biff<8)return pa(e);var n=e.read_shift(r.biff==12?4:2),i=e.read_shift(r.biff==12?4:2),a=jr(e),s=jr(e);return{s:{r:n,c:a[0],cRel:a[1],rRel:a[2]},e:{r:i,c:s[0],cRel:s[1],rRel:s[2]}}}function va(e,t,r){if(r&&r.biff>=2&&r.biff<=5)return gl(e);var n=e.read_shift(r&&r.biff==12?4:2),i=jr(e);return{r:n,c:i[0],cRel:i[1],rRel:i[2]}}function gl(e){var t=jr(e),r=e.read_shift(1);return{r:t[0],c:r,cRel:t[1],rRel:t[2]}}function ml(e){var t=e.read_shift(2),r=e.read_shift(2);return{r:t,c:r&255,fQuoted:!!(r&16384),cRel:r>>15,rRel:r>>15}}function _l(e,t,r){var n=r&&r.biff?r.biff:8;if(n>=2&&n<=5)return Tl(e);var i=e.read_shift(n>=12?4:2),a=e.read_shift(2),s=(a&16384)>>14,f=(a&32768)>>15;if(a&=16383,f==1)for(;i>524287;)i-=1048576;if(s==1)for(;a>8191;)a=a-16384;return{r:i,c:a,cRel:s,rRel:f}}function Tl(e){var t=e.read_shift(2),r=e.read_shift(1),n=(t&32768)>>15,i=(t&16384)>>14;return t&=16383,n==1&&t>=8192&&(t=t-16384),i==1&&r>=128&&(r=r-256),{r:t,c:r,cRel:i,rRel:n}}function El(e,t,r){var n=(e[e.l++]&96)>>5,i=da(e,r.biff>=2&&r.biff<=5?6:8,r);return[n,i]}function wl(e,t,r){var n=(e[e.l++]&96)>>5,i=e.read_shift(2,"i"),a=8;if(r)switch(r.biff){case 5:e.l+=12,a=6;break;case 12:a=12;break}var s=da(e,a,r);return[n,i,s]}function Sl(e,t,r){var n=(e[e.l++]&96)>>5;return e.l+=r&&r.biff>8?12:r.biff<8?6:8,[n]}function Al(e,t,r){var n=(e[e.l++]&96)>>5,i=e.read_shift(2),a=8;if(r)switch(r.biff){case 5:e.l+=12,a=6;break;case 12:a=12;break}return e.l+=a,[n,i]}function Fl(e,t,r){var n=(e[e.l++]&96)>>5,i=vl(e,t-1,r);return[n,i]}function yl(e,t,r){var n=(e[e.l++]&96)>>5;return e.l+=r.biff==2?6:r.biff==12?14:7,[n]}function J0(e){var t=e[e.l+1]&1,r=1;return e.l+=4,[t,r]}function Cl(e,t,r){e.l+=2;for(var n=e.read_shift(r&&r.biff==2?1:2),i=[],a=0;a<=n;++a)i.push(e.read_shift(r&&r.biff==2?1:2));return i}function Ol(e,t,r){var n=e[e.l+1]&255?1:0;return e.l+=2,[n,e.read_shift(r&&r.biff==2?1:2)]}function kl(e,t,r){var n=e[e.l+1]&255?1:0;return e.l+=2,[n,e.read_shift(r&&r.biff==2?1:2)]}function Rl(e){var t=e[e.l+1]&255?1:0;return e.l+=2,[t,e.read_shift(2)]}function Dl(e,t,r){var n=e[e.l+1]&255?1:0;return e.l+=r&&r.biff==2?3:4,[n]}function ga(e){var t=e.read_shift(1),r=e.read_shift(1);return[t,r]}function Il(e){return e.read_shift(2),ga(e)}function Nl(e){return e.read_shift(2),ga(e)}function Ll(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=va(e,0,r);return[n,i]}function Pl(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=_l(e,0,r);return[n,i]}function Ml(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=e.read_shift(2);r&&r.biff==5&&(e.l+=12);var a=va(e,0,r);return[n,i,a]}function Bl(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=e.read_shift(r&&r.biff<=3?1:2);return[Bh[i],Ta[i],n]}function bl(e,t,r){var n=e[e.l++],i=e.read_shift(1),a=r&&r.biff<=3?[n==88?-1:0,e.read_shift(1)]:Ul(e);return[i,(a[0]===0?Ta:Mh)[a[1]]]}function Ul(e){return[e[e.l+1]>>7,e.read_shift(2)&32767]}function Wl(e,t,r){e.l+=r&&r.biff==2?3:4}function Hl(e,t,r){if(e.l++,r&&r.biff==12)return[e.read_shift(4,"i"),0];var n=e.read_shift(2),i=e.read_shift(r&&r.biff==2?1:2);return[n,i]}function Vl(e){return e.l++,Xt[e.read_shift(1)]}function Gl(e){return e.l++,e.read_shift(2)}function Xl(e){return e.l++,e.read_shift(1)!==0}function jl(e){return e.l++,_t(e)}function zl(e,t,r){return e.l++,Qi(e,t-1,r)}function Kl(e,t){var r=[e.read_shift(1)];if(t==12)switch(r[0]){case 2:r[0]=4;break;case 4:r[0]=16;break;case 0:r[0]=1;break;case 1:r[0]=2;break}switch(r[0]){case 4:r[1]=Pf(e,1)?"TRUE":"FALSE",t!=12&&(e.l+=7);break;case 37:case 16:r[1]=Xt[e[e.l]],e.l+=t==12?4:8;break;case 0:e.l+=8;break;case 1:r[1]=_t(e);break;case 2:r[1]=Uf(e,0,{biff:t>0&&t<8?2:t});break;default:throw new Error("Bad SerAr: "+r[0])}return r}function $l(e,t,r){for(var n=e.read_shift(r.biff==12?4:2),i=[],a=0;a!=n;++a)i.push((r.biff==12?at:Vf)(e));return i}function Yl(e,t,r){var n=0,i=0;r.biff==12?(n=e.read_shift(4),i=e.read_shift(4)):(i=1+e.read_shift(1),n=1+e.read_shift(2)),r.biff>=2&&r.biff<8&&(--n,--i==0&&(i=256));for(var a=0,s=[];a!=n&&(s[a]=[]);++a)for(var f=0;f!=i;++f)s[a][f]=Kl(e,r.biff);return s}function Jl(e,t,r){var n=e.read_shift(1)>>>5&3,i=!r||r.biff>=8?4:2,a=e.read_shift(i);switch(r.biff){case 2:e.l+=5;break;case 3:case 4:e.l+=8;break;case 5:e.l+=12;break}return[n,0,a]}function ql(e,t,r){if(r.biff==5)return Zl(e);var n=e.read_shift(1)>>>5&3,i=e.read_shift(2),a=e.read_shift(4);return[n,i,a]}function Zl(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2,"i");e.l+=8;var n=e.read_shift(2);return e.l+=12,[t,r,n]}function Ql(e,t,r){var n=e.read_shift(1)>>>5&3;e.l+=r&&r.biff==2?3:4;var i=e.read_shift(r&&r.biff==2?1:2);return[n,i]}function eh(e,t,r){var n=e.read_shift(1)>>>5&3,i=e.read_shift(r&&r.biff==2?1:2);return[n,i]}function rh(e,t,r){var n=e.read_shift(1)>>>5&3;return e.l+=4,r.biff<8&&e.l--,r.biff==12&&(e.l+=2),[n]}function th(e,t,r){var n=(e[e.l++]&96)>>5,i=e.read_shift(2),a=4;if(r)switch(r.biff){case 5:a=15;break;case 12:a=6;break}return e.l+=a,[n,i]}var nh=Rr,ih=Rr,ah=Rr;function jt(e,t,r){return e.l+=2,[ml(e)]}function f0(e){return e.l+=6,[]}var sh=jt,fh=f0,oh=f0,lh=jt;function ma(e){return e.l+=2,[qi(e),e.read_shift(2)&1]}var hh=jt,ch=ma,uh=f0,xh=jt,dh=jt,ph=["Data","All","Headers","??","?Data2","??","?DataHeaders","??","Totals","??","??","??","?DataTotals","??","??","??","?Current"];function vh(e){e.l+=2;var t=e.read_shift(2),r=e.read_shift(2),n=e.read_shift(4),i=e.read_shift(2),a=e.read_shift(2),s=ph[r>>2&31];return{ixti:t,coltype:r&3,rt:s,idx:n,c:i,C:a}}function gh(e){return e.l+=2,[e.read_shift(4)]}function mh(e,t,r){return e.l+=5,e.l+=2,e.l+=r.biff==2?1:4,["PTGSHEET"]}function _h(e,t,r){return e.l+=r.biff==2?4:5,["PTGENDSHEET"]}function Th(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2);return[t,r]}function Eh(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2);return[t,r]}function wh(e){return e.l+=4,[0,0]}var q0={1:{n:"PtgExp",f:Hl},2:{n:"PtgTbl",f:ah},3:{n:"PtgAdd",f:We},4:{n:"PtgSub",f:We},5:{n:"PtgMul",f:We},6:{n:"PtgDiv",f:We},7:{n:"PtgPower",f:We},8:{n:"PtgConcat",f:We},9:{n:"PtgLt",f:We},10:{n:"PtgLe",f:We},11:{n:"PtgEq",f:We},12:{n:"PtgGe",f:We},13:{n:"PtgGt",f:We},14:{n:"PtgNe",f:We},15:{n:"PtgIsect",f:We},16:{n:"PtgUnion",f:We},17:{n:"PtgRange",f:We},18:{n:"PtgUplus",f:We},19:{n:"PtgUminus",f:We},20:{n:"PtgPercent",f:We},21:{n:"PtgParen",f:We},22:{n:"PtgMissArg",f:We},23:{n:"PtgStr",f:zl},26:{n:"PtgSheet",f:mh},27:{n:"PtgEndSheet",f:_h},28:{n:"PtgErr",f:Vl},29:{n:"PtgBool",f:Xl},30:{n:"PtgInt",f:Gl},31:{n:"PtgNum",f:jl},32:{n:"PtgArray",f:yl},33:{n:"PtgFunc",f:Bl},34:{n:"PtgFuncVar",f:bl},35:{n:"PtgName",f:Jl},36:{n:"PtgRef",f:Ll},37:{n:"PtgArea",f:El},38:{n:"PtgMemArea",f:Ql},39:{n:"PtgMemErr",f:nh},40:{n:"PtgMemNoMem",f:ih},41:{n:"PtgMemFunc",f:eh},42:{n:"PtgRefErr",f:rh},43:{n:"PtgAreaErr",f:Sl},44:{n:"PtgRefN",f:Pl},45:{n:"PtgAreaN",f:Fl},46:{n:"PtgMemAreaN",f:Th},47:{n:"PtgMemNoMemN",f:Eh},57:{n:"PtgNameX",f:ql},58:{n:"PtgRef3d",f:Ml},59:{n:"PtgArea3d",f:wl},60:{n:"PtgRefErr3d",f:th},61:{n:"PtgAreaErr3d",f:Al},255:{}},Sh={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61},Ah={1:{n:"PtgElfLel",f:ma},2:{n:"PtgElfRw",f:xh},3:{n:"PtgElfCol",f:sh},6:{n:"PtgElfRwV",f:dh},7:{n:"PtgElfColV",f:lh},10:{n:"PtgElfRadical",f:hh},11:{n:"PtgElfRadicalS",f:uh},13:{n:"PtgElfColS",f:fh},15:{n:"PtgElfColSV",f:oh},16:{n:"PtgElfRadicalLel",f:ch},25:{n:"PtgList",f:vh},29:{n:"PtgSxName",f:gh},255:{}},Fh={0:{n:"PtgAttrNoop",f:wh},1:{n:"PtgAttrSemi",f:Dl},2:{n:"PtgAttrIf",f:kl},4:{n:"PtgAttrChoose",f:Cl},8:{n:"PtgAttrGoto",f:Ol},16:{n:"PtgAttrSum",f:Wl},32:{n:"PtgAttrBaxcel",f:J0},33:{n:"PtgAttrBaxcel",f:J0},64:{n:"PtgAttrSpace",f:Il},65:{n:"PtgAttrSpaceSemi",f:Nl},128:{n:"PtgAttrIfError",f:Rl},255:{}};function yh(e,t,r,n){if(n.biff<8)return Rr(e,t);for(var i=e.l+t,a=[],s=0;s!==r.length;++s)switch(r[s][0]){case"PtgArray":r[s][1]=Yl(e,0,n),a.push(r[s][1]);break;case"PtgMemArea":r[s][2]=$l(e,r[s][1],n),a.push(r[s][2]);break;case"PtgExp":n&&n.biff==12&&(r[s][1][1]=e.read_shift(4),a.push(r[s][1]));break;case"PtgList":case"PtgElfRadicalS":case"PtgElfColS":case"PtgElfColSV":throw"Unsupported "+r[s][0]}return t=i-e.l,t!==0&&a.push(Rr(e,t)),a}function Ch(e,t,r){for(var n=e.l+t,i,a,s=[];n!=e.l;)t=n-e.l,a=e[e.l],i=q0[a]||q0[Sh[a]],(a===24||a===25)&&(i=(a===24?Ah:Fh)[e[e.l+1]]),!i||!i.f?Rr(e,t):s.push([i.n,i.f(e,t,r)]);return s}function Oh(e){for(var t=[],r=0;r=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function Rh(e,t){if(!e&&!(t&&t.biff<=5&&t.biff>=2))throw new Error("empty sheet name");return/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(e)?"'"+e+"'":e}function _a(e,t,r){if(!e)return"SH33TJSERR0";if(r.biff>8&&(!e.XTI||!e.XTI[t]))return e.SheetNames[t];if(!e.XTI)return"SH33TJSERR6";var n=e.XTI[t];if(r.biff<8)return t>1e4&&(t-=65536),t<0&&(t=-t),t==0?"":e.XTI[t-1];if(!n)return"SH33TJSERR1";var i="";if(r.biff>8)switch(e[n[0]][0]){case 357:return i=n[1]==-1?"#REF":e.SheetNames[n[1]],n[1]==n[2]?i:i+":"+e.SheetNames[n[2]];case 358:return r.SID!=null?e.SheetNames[r.SID]:"SH33TJSSAME"+e[n[0]][0];case 355:default:return"SH33TJSSRC"+e[n[0]][0]}switch(e[n[0]][0][0]){case 1025:return i=n[1]==-1?"#REF":e.SheetNames[n[1]]||"SH33TJSERR3",n[1]==n[2]?i:i+":"+e.SheetNames[n[2]];case 14849:return e[n[0]].slice(1).map(function(a){return a.Name}).join(";;");default:return e[n[0]][0][3]?(i=n[1]==-1?"#REF":e[n[0]][0][3][n[1]]||"SH33TJSERR4",n[1]==n[2]?i:i+":"+e[n[0]][0][3][n[2]]):"SH33TJSERR2"}}function Z0(e,t,r){var n=_a(e,t,r);return n=="#REF"?n:Rh(n,r)}function pt(e,t,r,n,i){var a=i&&i.biff||8,s={s:{c:0,r:0}},f=[],l,o,h,p=0,x=0,d,E="";if(!e[0]||!e[0][0])return"";for(var c=-1,_="",N=0,I=e[0].length;N=0){switch(e[0][c][1][0]){case 0:_=be(" ",e[0][c][1][1]);break;case 1:_=be("\r",e[0][c][1][1]);break;default:if(_="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][c][1][0])}o=o+_,c=-1}f.push(o+kh[D[0]]+l);break;case"PtgIsect":l=f.pop(),o=f.pop(),f.push(o+" "+l);break;case"PtgUnion":l=f.pop(),o=f.pop(),f.push(o+","+l);break;case"PtgRange":l=f.pop(),o=f.pop(),f.push(o+":"+l);break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgAttrIfError":break;case"PtgRef":h=Dt(D[1][1],s,i),f.push(It(h,a));break;case"PtgRefN":h=r?Dt(D[1][1],r,i):D[1][1],f.push(It(h,a));break;case"PtgRef3d":p=D[1][1],h=Dt(D[1][2],s,i),E=Z0(n,p,i),f.push(E+"!"+It(h,a));break;case"PtgFunc":case"PtgFuncVar":var W=D[1][0],z=D[1][1];W||(W=0),W&=127;var re=W==0?[]:f.slice(-W);f.length-=W,z==="User"&&(z=re.shift()),f.push(z+"("+re.join(",")+")");break;case"PtgBool":f.push(D[1]?"TRUE":"FALSE");break;case"PtgInt":f.push(D[1]);break;case"PtgNum":f.push(String(D[1]));break;case"PtgStr":f.push('"'+D[1].replace(/"/g,'""')+'"');break;case"PtgErr":f.push(D[1]);break;case"PtgAreaN":d=M0(D[1][1],r?{s:r}:s,i),f.push(Nn(d,i));break;case"PtgArea":d=M0(D[1][1],s,i),f.push(Nn(d,i));break;case"PtgArea3d":p=D[1][1],d=D[1][2],E=Z0(n,p,i),f.push(E+"!"+Nn(d,i));break;case"PtgAttrSum":f.push("SUM("+f.pop()+")");break;case"PtgAttrBaxcel":case"PtgAttrSemi":break;case"PtgName":x=D[1][2];var k=(n.names||[])[x-1]||(n[0]||[])[x],T=k?k.Name:"SH33TJSNAME"+String(x);T&&T.slice(0,6)=="_xlfn."&&!i.xlfn&&(T=T.slice(6)),f.push(T);break;case"PtgNameX":var g=D[1][1];x=D[1][2];var y;if(i.biff<=5)g<0&&(g=-g),n[g]&&(y=n[g][x]);else{var L="";if(((n[g]||[])[0]||[])[0]==14849||(((n[g]||[])[0]||[])[0]==1025?n[g][x]&&n[g][x].itab>0&&(L=n.SheetNames[n[g][x].itab-1]+"!"):L=n.SheetNames[x-1]+"!"),n[g]&&n[g][x])L+=n[g][x].Name;else if(n[0]&&n[0][x])L+=n[0][x].Name;else{var P=(_a(n,g,i)||"").split(";;");P[x-1]?L=P[x-1]:L+="SH33TJSERRX"}f.push(L);break}y||(y={Name:"SH33TJSERRY"}),f.push(y.Name);break;case"PtgParen":var X="(",ve=")";if(c>=0){switch(_="",e[0][c][1][0]){case 2:X=be(" ",e[0][c][1][1])+X;break;case 3:X=be("\r",e[0][c][1][1])+X;break;case 4:ve=be(" ",e[0][c][1][1])+ve;break;case 5:ve=be("\r",e[0][c][1][1])+ve;break;default:if(i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][c][1][0])}c=-1}f.push(X+f.pop()+ve);break;case"PtgRefErr":f.push("#REF!");break;case"PtgRefErr3d":f.push("#REF!");break;case"PtgExp":h={c:D[1][1],r:D[1][0]};var xe={c:r.c,r:r.r};if(n.sharedf[Re(h)]){var Fe=n.sharedf[Re(h)];f.push(pt(Fe,s,xe,n,i))}else{var le=!1;for(l=0;l!=n.arrayf.length;++l)if(o=n.arrayf[l],!(h.co[0].e.c)&&!(h.ro[0].e.r)){f.push(pt(o[1],s,xe,n,i)),le=!0;break}le||f.push(D[1])}break;case"PtgArray":f.push("{"+Oh(D[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":c=N;break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":f.push("");break;case"PtgAreaErr":f.push("#REF!");break;case"PtgAreaErr3d":f.push("#REF!");break;case"PtgList":f.push("Table"+D[1].idx+"[#"+D[1].rt+"]");break;case"PtgMemAreaN":case"PtgMemNoMemN":case"PtgAttrNoop":case"PtgSheet":case"PtgEndSheet":break;case"PtgMemFunc":break;case"PtgMemNoMem":break;case"PtgElfCol":case"PtgElfColS":case"PtgElfColSV":case"PtgElfColV":case"PtgElfLel":case"PtgElfRadical":case"PtgElfRadicalLel":case"PtgElfRadicalS":case"PtgElfRw":case"PtgElfRwV":throw new Error("Unsupported ELFs");case"PtgSxName":throw new Error("Unrecognized Formula Token: "+String(D));default:throw new Error("Unrecognized Formula Token: "+String(D))}var Ee=["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"];if(i.biff!=3&&c>=0&&Ee.indexOf(e[0][N][0])==-1){D=e[0][c];var oe=!0;switch(D[1][0]){case 4:oe=!1;case 0:_=be(" ",D[1][1]);break;case 5:oe=!1;case 1:_=be("\r",D[1][1]);break;default:if(_="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+D[1][0])}f.push((oe?_:"")+f.pop()+(oe?"":_)),c=-1}}if(f.length>1&&i.WTF)throw new Error("bad formula stack");return f[0]}function Dh(e){if(e==null){var t=H(8);return t.write_shift(1,3),t.write_shift(1,0),t.write_shift(2,0),t.write_shift(2,0),t.write_shift(2,65535),t}else if(typeof e=="number")return Zr(e);return Zr(0)}function Ih(e,t,r,n,i){var a=Qr(t,r,i),s=Dh(e.v),f=H(6),l=33;f.write_shift(2,l),f.write_shift(4,0);for(var o=H(e.bf.length),h=0;h0?yh(e,a,i,r):null;return[i,s]}var Nh=Fn,yn=Fn,Lh=Fn,Ph=Fn,Mh={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"},Ta={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"},Bh={2:1,3:1,10:0,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,34:0,35:0,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,63:0,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,74:0,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,89:0,90:1,94:0,95:0,97:2,98:1,99:1,101:3,102:3,105:1,106:1,108:2,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,161:1,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,186:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,225:0,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0};function bh(e){var t="of:="+e.replace(a0,"$1[.$2$3$4$5]").replace(/\]:\[/g,":");return t.replace(/;/g,"|").replace(/,/g,";")}function Uh(e){return e.replace(/\./,"!")}var Nt=typeof Map<"u";function o0(e,t,r){var n=0,i=e.length;if(r){if(Nt?r.has(t):Object.prototype.hasOwnProperty.call(r,t)){for(var a=Nt?r.get(t):r[t];n-1?(r.width=Gn(n),r.customWidth=1):t.width!=null&&(r.width=t.width),t.hidden&&(r.hidden=!0),t.level!=null&&(r.outlineLevel=r.level=t.level),r}function Ea(e,t){if(e){var r=[.7,.7,.75,.75,.3,.3];e.left==null&&(e.left=r[0]),e.right==null&&(e.right=r[1]),e.top==null&&(e.top=r[2]),e.bottom==null&&(e.bottom=r[3]),e.header==null&&(e.header=r[4]),e.footer==null&&(e.footer=r[5])}}function Kr(e,t,r){var n=r.revssf[t.z!=null?t.z:"General"],i=60,a=e.length;if(n==null&&r.ssf){for(;i<392;++i)if(r.ssf[i]==null){vi(t.z,i),r.ssf[i]=t.z,r.revssf[t.z]=n=i;break}}for(i=0;i!=a;++i)if(e[i].numFmtId===n)return i;return e[a]={numFmtId:n,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},a}function Wh(e,t,r){if(e&&e["!ref"]){var n=Le(e["!ref"]);if(n.e.c',r=0;r!=e.length;++r)t+='';return t+""}function Vh(e,t,r,n,i){var a=!1,s={},f=null;if(n.bookType!=="xlsx"&&t.vbaraw){var l=t.SheetNames[r];try{t.Workbook&&(l=t.Workbook.Sheets[r].CodeName||l)}catch{}a=!0,s.codeName=Bt(ke(l))}if(e&&e["!outline"]){var o={summaryBelow:1,summaryRight:1};e["!outline"].above&&(o.summaryBelow=0),e["!outline"].left&&(o.summaryRight=0),f=(f||"")+Q("outlinePr",null,o)}!a&&!f||(i[i.length]=Q("sheetPr",f,s))}var Gh=["objects","scenarios","selectLockedCells","selectUnlockedCells"],Xh=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"];function jh(e){var t={sheet:1};return Gh.forEach(function(r){e[r]!=null&&e[r]&&(t[r]="1")}),Xh.forEach(function(r){e[r]!=null&&!e[r]&&(t[r]="0")}),e.password&&(t.password=ia(e.password).toString(16).toUpperCase()),Q("sheetProtection",null,t)}function zh(e){return Ea(e),Q("pageMargins",null,e)}function Kh(e,t){for(var r=[""],n,i=0;i!=t.length;++i)(n=t[i])&&(r[r.length]=Q("col",null,Cn(i,n)));return r[r.length]="",r.join("")}function $h(e,t,r,n){var i=typeof e.ref=="string"?e.ref:He(e.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var a=r.Workbook.Names,s=_r(i);s.s.r==s.e.r&&(s.e.r=_r(t["!ref"]).e.r,i=He(s));for(var f=0;f"u"&&(e.z=Ue[14]);break;default:i=e.v;break}var f=Ze("v",ke(i)),l={r:t},o=Kr(n.cellXfs,e,n);switch(o!==0&&(l.s=o),e.t){case"n":break;case"d":l.t="d";break;case"b":l.t="b";break;case"e":l.t="e";break;case"z":break;default:if(e.v==null){delete e.t;break}if(e.v.length>32767)throw new Error("Text length must not exceed 32767 characters");if(n&&n.bookSST){f=Ze("v",""+o0(n.Strings,e.v,n.revStrings)),l.t="s";break}l.t="str";break}if(e.t!=a&&(e.t=a,e.v=s),typeof e.f=="string"&&e.f){var h=e.F&&e.F.slice(0,t.length)==t?{t:"array",ref:e.F}:null;f=Q("f",ke(e.f),h)+(e.v!=null?f:"")}return e.l&&r["!links"].push([t,e.l]),e.D&&(l.cm=1),Q("c",f,l)}function qh(e,t,r,n){var i=[],a=[],s=Le(e["!ref"]),f="",l,o="",h=[],p=0,x=0,d=e["!rows"],E=Array.isArray(e),c={r:o},_,N=-1;for(x=s.s.c;x<=s.e.c;++x)h[x]=nr(x);for(p=s.s.r;p<=s.e.r;++p){for(a=[],o=Qe(p),x=s.s.c;x<=s.e.c;++x){l=h[x]+o;var I=E?(e[p]||[])[x]:e[l];I!==void 0&&(f=Jh(I,l,e,t))!=null&&a.push(f)}(a.length>0||d&&d[p])&&(c={r:o},d&&d[p]&&(_=d[p],_.hidden&&(c.hidden=1),N=-1,_.hpx?N=gn(_.hpx):_.hpt&&(N=_.hpt),N>-1&&(c.ht=N,c.customHeight=1),_.level&&(c.outlineLevel=_.level)),i[i.length]=Q("row",a.join(""),c))}if(d)for(;p-1&&(c.ht=N,c.customHeight=1),_.level&&(c.outlineLevel=_.level),i[i.length]=Q("row","",c));return i.join("")}function wa(e,t,r,n){var i=[Ve,Q("worksheet",null,{xmlns:vt[0],"xmlns:r":je.r})],a=r.SheetNames[e],s=0,f="",l=r.Sheets[a];l==null&&(l={});var o=l["!ref"]||"A1",h=Le(o);if(h.e.c>16383||h.e.r>1048575){if(t.WTF)throw new Error("Range "+o+" exceeds format limit A1:XFD1048576");h.e.c=Math.min(h.e.c,16383),h.e.r=Math.min(h.e.c,1048575),o=He(h)}n||(n={}),l["!comments"]=[];var p=[];Vh(l,r,e,t,i),i[i.length]=Q("dimension",null,{ref:o}),i[i.length]=Yh(l,t,e,r),t.sheetFormat&&(i[i.length]=Q("sheetFormatPr",null,{defaultRowHeight:t.sheetFormat.defaultRowHeight||"16",baseColWidth:t.sheetFormat.baseColWidth||"10",outlineLevelRow:t.sheetFormat.outlineLevelRow||"7"})),l["!cols"]!=null&&l["!cols"].length>0&&(i[i.length]=Kh(l,l["!cols"])),i[s=i.length]="",l["!links"]=[],l["!ref"]!=null&&(f=qh(l,t),f.length>0&&(i[i.length]=f)),i.length>s+1&&(i[i.length]="",i[s]=i[s].replace("/>",">")),l["!protect"]&&(i[i.length]=jh(l["!protect"])),l["!autofilter"]!=null&&(i[i.length]=$h(l["!autofilter"],l,r,e)),l["!merges"]!=null&&l["!merges"].length>0&&(i[i.length]=Hh(l["!merges"]));var x=-1,d,E=-1;return l["!links"].length>0&&(i[i.length]="",l["!links"].forEach(function(c){c[1].Target&&(d={ref:c[0]},c[1].Target.charAt(0)!="#"&&(E=Oe(n,-1,ke(c[1].Target).replace(/#.*$/,""),Se.HLINK),d["r:id"]="rId"+E),(x=c[1].Target.indexOf("#"))>-1&&(d.location=ke(c[1].Target.slice(x+1))),c[1].Tooltip&&(d.tooltip=ke(c[1].Tooltip)),i[i.length]=Q("hyperlink",null,d))}),i[i.length]=""),delete l["!links"],l["!margins"]!=null&&(i[i.length]=zh(l["!margins"])),(!t||t.ignoreEC||t.ignoreEC==null)&&(i[i.length]=Ze("ignoredErrors",Q("ignoredError",null,{numberStoredAsText:1,sqref:o}))),p.length>0&&(E=Oe(n,-1,"../drawings/drawing"+(e+1)+".xml",Se.DRAW),i[i.length]=Q("drawing",null,{"r:id":"rId"+E}),l["!drawing"]=p),l["!comments"].length>0&&(E=Oe(n,-1,"../drawings/vmlDrawing"+(e+1)+".vml",Se.VML),i[i.length]=Q("legacyDrawing",null,{"r:id":"rId"+E}),l["!legacy"]=E),i.length>1&&(i[i.length]="",i[1]=i[1].replace("/>",">")),i.join("")}function Zh(e,t){var r={},n=e.l+t;r.r=e.read_shift(4),e.l+=4;var i=e.read_shift(2);e.l+=1;var a=e.read_shift(1);return e.l=n,a&7&&(r.level=a&7),a&16&&(r.hidden=!0),a&32&&(r.hpt=i/20),r}function Qh(e,t,r){var n=H(145),i=(r["!rows"]||[])[e]||{};n.write_shift(4,e),n.write_shift(4,0);var a=320;i.hpx?a=gn(i.hpx)*20:i.hpt&&(a=i.hpt*20),n.write_shift(2,a),n.write_shift(1,0);var s=0;i.level&&(s|=i.level),i.hidden&&(s|=16),(i.hpx||i.hpt)&&(s|=32),n.write_shift(1,s),n.write_shift(1,0);var f=0,l=n.l;n.l+=4;for(var o={r:e,c:0},h=0;h<16;++h)if(!(t.s.c>h+1<<10||t.e.cn.l?n.slice(0,n.l):n}function ec(e,t,r,n){var i=Qh(n,r,t);(i.length>17||(t["!rows"]||[])[n])&&j(e,0,i)}var rc=at,tc=mt;function nc(){}function ic(e,t){var r={},n=e[e.l];return++e.l,r.above=!(n&64),r.left=!(n&128),e.l+=18,r.name=xf(e),r}function ac(e,t,r){r==null&&(r=H(84+4*e.length));var n=192;t&&(t.above&&(n&=-65),t.left&&(n&=-129)),r.write_shift(1,n);for(var i=1;i<3;++i)r.write_shift(1,0);return xn({auto:1},r),r.write_shift(-4,-1),r.write_shift(-4,-1),Bi(e,r),r.slice(0,r.l)}function sc(e){var t=wr(e);return[t]}function fc(e,t,r){return r==null&&(r=H(8)),tt(t,r)}function oc(e){var t=nt(e);return[t]}function lc(e,t,r){return r==null&&(r=H(4)),it(t,r)}function hc(e){var t=wr(e),r=e.read_shift(1);return[t,r,"b"]}function cc(e,t,r){return r==null&&(r=H(9)),tt(t,r),r.write_shift(1,e.v?1:0),r}function uc(e){var t=nt(e),r=e.read_shift(1);return[t,r,"b"]}function xc(e,t,r){return r==null&&(r=H(5)),it(t,r),r.write_shift(1,e.v?1:0),r}function dc(e){var t=wr(e),r=e.read_shift(1);return[t,r,"e"]}function pc(e,t,r){return r==null&&(r=H(9)),tt(t,r),r.write_shift(1,e.v),r}function vc(e){var t=nt(e),r=e.read_shift(1);return[t,r,"e"]}function gc(e,t,r){return r==null&&(r=H(8)),it(t,r),r.write_shift(1,e.v),r.write_shift(2,0),r.write_shift(1,0),r}function mc(e){var t=wr(e),r=e.read_shift(4);return[t,r,"s"]}function _c(e,t,r){return r==null&&(r=H(12)),tt(t,r),r.write_shift(4,t.v),r}function Tc(e){var t=nt(e),r=e.read_shift(4);return[t,r,"s"]}function Ec(e,t,r){return r==null&&(r=H(8)),it(t,r),r.write_shift(4,t.v),r}function wc(e){var t=wr(e),r=_t(e);return[t,r,"n"]}function Sc(e,t,r){return r==null&&(r=H(16)),tt(t,r),Zr(e.v,r),r}function Ac(e){var t=nt(e),r=_t(e);return[t,r,"n"]}function Fc(e,t,r){return r==null&&(r=H(12)),it(t,r),Zr(e.v,r),r}function yc(e){var t=wr(e),r=bi(e);return[t,r,"n"]}function Cc(e,t,r){return r==null&&(r=H(12)),tt(t,r),Ui(e.v,r),r}function Oc(e){var t=nt(e),r=bi(e);return[t,r,"n"]}function kc(e,t,r){return r==null&&(r=H(8)),it(t,r),Ui(e.v,r),r}function Rc(e){var t=wr(e),r=e0(e);return[t,r,"is"]}function Dc(e){var t=wr(e),r=ir(e);return[t,r,"str"]}function Ic(e,t,r){return r==null&&(r=H(12+4*e.v.length)),tt(t,r),Ke(e.v,r),r.length>r.l?r.slice(0,r.l):r}function Nc(e){var t=nt(e),r=ir(e);return[t,r,"str"]}function Lc(e,t,r){return r==null&&(r=H(8+4*e.v.length)),it(t,r),Ke(e.v,r),r.length>r.l?r.slice(0,r.l):r}function Pc(e,t,r){var n=e.l+t,i=wr(e);i.r=r["!row"];var a=e.read_shift(1),s=[i,a,"b"];if(r.cellFormula){e.l+=2;var f=yn(e,n-e.l,r);s[3]=pt(f,null,i,r.supbooks,r)}else e.l=n;return s}function Mc(e,t,r){var n=e.l+t,i=wr(e);i.r=r["!row"];var a=e.read_shift(1),s=[i,a,"e"];if(r.cellFormula){e.l+=2;var f=yn(e,n-e.l,r);s[3]=pt(f,null,i,r.supbooks,r)}else e.l=n;return s}function Bc(e,t,r){var n=e.l+t,i=wr(e);i.r=r["!row"];var a=_t(e),s=[i,a,"n"];if(r.cellFormula){e.l+=2;var f=yn(e,n-e.l,r);s[3]=pt(f,null,i,r.supbooks,r)}else e.l=n;return s}function bc(e,t,r){var n=e.l+t,i=wr(e);i.r=r["!row"];var a=ir(e),s=[i,a,"str"];if(r.cellFormula){e.l+=2;var f=yn(e,n-e.l,r);s[3]=pt(f,null,i,r.supbooks,r)}else e.l=n;return s}var Uc=at,Wc=mt;function Hc(e,t){return t==null&&(t=H(4)),t.write_shift(4,e),t}function Vc(e,t){var r=e.l+t,n=at(e),i=r0(e),a=ir(e),s=ir(e),f=ir(e);e.l=r;var l={rfx:n,relId:i,loc:a,display:f};return s&&(l.Tooltip=s),l}function Gc(e,t){var r=H(50+4*(e[1].Target.length+(e[1].Tooltip||"").length));mt({s:ze(e[0]),e:ze(e[0])},r),t0("rId"+t,r);var n=e[1].Target.indexOf("#"),i=n==-1?"":e[1].Target.slice(n+1);return Ke(i||"",r),Ke(e[1].Tooltip||"",r),Ke("",r),r.slice(0,r.l)}function Xc(){}function jc(e,t,r){var n=e.l+t,i=Wi(e),a=e.read_shift(1),s=[i];if(s[2]=a,r.cellFormula){var f=Nh(e,n-e.l,r);s[1]=f}else e.l=n;return s}function zc(e,t,r){var n=e.l+t,i=at(e),a=[i];if(r.cellFormula){var s=Ph(e,n-e.l,r);a[1]=s,e.l=n}else e.l=n;return a}function Kc(e,t,r){r==null&&(r=H(18));var n=Cn(e,t);r.write_shift(-4,e),r.write_shift(-4,e),r.write_shift(4,(n.width||10)*256),r.write_shift(4,0);var i=0;return t.hidden&&(i|=1),typeof n.width=="number"&&(i|=2),t.level&&(i|=t.level<<8),r.write_shift(2,i),r}var Sa=["left","right","top","bottom","header","footer"];function $c(e){var t={};return Sa.forEach(function(r){t[r]=_t(e)}),t}function Yc(e,t){return t==null&&(t=H(6*8)),Ea(e),Sa.forEach(function(r){Zr(e[r],t)}),t}function Jc(e){var t=e.read_shift(2);return e.l+=28,{RTL:t&32}}function qc(e,t,r){r==null&&(r=H(30));var n=924;return(((t||{}).Views||[])[0]||{}).RTL&&(n|=32),r.write_shift(2,n),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(2,0),r.write_shift(2,100),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(4,0),r}function Zc(e){var t=H(24);return t.write_shift(4,4),t.write_shift(4,1),mt(e,t),t}function Qc(e,t){return t==null&&(t=H(16*4+2)),t.write_shift(2,e.password?ia(e.password):0),t.write_shift(4,1),[["objects",!1],["scenarios",!1],["formatCells",!0],["formatColumns",!0],["formatRows",!0],["insertColumns",!0],["insertRows",!0],["insertHyperlinks",!0],["deleteColumns",!0],["deleteRows",!0],["selectLockedCells",!1],["sort",!0],["autoFilter",!0],["pivotTables",!0],["selectUnlockedCells",!1]].forEach(function(r){r[1]?t.write_shift(4,e[r[0]]!=null&&!e[r[0]]?1:0):t.write_shift(4,e[r[0]]!=null&&e[r[0]]?0:1)}),t}function eu(){}function ru(){}function tu(e,t,r,n,i,a,s){if(t.v===void 0)return!1;var f="";switch(t.t){case"b":f=t.v?"1":"0";break;case"d":t=cr(t),t.z=t.z||Ue[14],t.v=hr(or(t.v)),t.t="n";break;case"n":case"e":f=""+t.v;break;default:f=t.v;break}var l={r,c:n};switch(l.s=Kr(i.cellXfs,t,i),t.l&&a["!links"].push([Re(l),t.l]),t.c&&a["!comments"].push([Re(l),t.c]),t.t){case"s":case"str":return i.bookSST?(f=o0(i.Strings,t.v,i.revStrings),l.t="s",l.v=f,s?j(e,18,Ec(t,l)):j(e,7,_c(t,l))):(l.t="str",s?j(e,17,Lc(t,l)):j(e,6,Ic(t,l))),!0;case"n":return t.v==(t.v|0)&&t.v>-1e3&&t.v<1e3?s?j(e,13,kc(t,l)):j(e,2,Cc(t,l)):s?j(e,16,Fc(t,l)):j(e,5,Sc(t,l)),!0;case"b":return l.t="b",s?j(e,15,xc(t,l)):j(e,4,cc(t,l)),!0;case"e":return l.t="e",s?j(e,14,gc(t,l)):j(e,3,pc(t,l)),!0}return s?j(e,12,lc(t,l)):j(e,1,fc(t,l)),!0}function nu(e,t,r,n){var i=Le(t["!ref"]||"A1"),a,s="",f=[];j(e,145);var l=Array.isArray(t),o=i.e.r;t["!rows"]&&(o=Math.max(i.e.r,t["!rows"].length-1));for(var h=i.s.r;h<=o;++h){s=Qe(h),ec(e,t,i,h);var p=!1;if(h<=i.e.r)for(var x=i.s.c;x<=i.e.c;++x){h===i.s.r&&(f[x]=nr(x)),a=f[x]+s;var d=l?(t[h]||[])[x]:t[a];if(!d){p=!1;continue}p=tu(e,d,h,x,n,t,p)}}j(e,146)}function iu(e,t){!t||!t["!merges"]||(j(e,177,Hc(t["!merges"].length)),t["!merges"].forEach(function(r){j(e,176,Wc(r))}),j(e,178))}function au(e,t){!t||!t["!cols"]||(j(e,390),t["!cols"].forEach(function(r,n){r&&j(e,60,Kc(n,r))}),j(e,391))}function su(e,t){!t||!t["!ref"]||(j(e,648),j(e,649,Zc(Le(t["!ref"]))),j(e,650))}function fu(e,t,r){t["!links"].forEach(function(n){if(n[1].Target){var i=Oe(r,-1,n[1].Target.replace(/#.*$/,""),Se.HLINK);j(e,494,Gc(n,i))}}),delete t["!links"]}function ou(e,t,r,n){if(t["!comments"].length>0){var i=Oe(n,-1,"../drawings/vmlDrawing"+(r+1)+".vml",Se.VML);j(e,551,t0("rId"+i)),t["!legacy"]=i}}function lu(e,t,r,n){if(t["!autofilter"]){var i=t["!autofilter"],a=typeof i.ref=="string"?i.ref:He(i.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var s=r.Workbook.Names,f=_r(a);f.s.r==f.e.r&&(f.e.r=_r(t["!ref"]).e.r,a=He(f));for(var l=0;l16383||l.e.r>1048575){if(t.WTF)throw new Error("Range "+(s["!ref"]||"A1")+" exceeds format limit A1:XFD1048576");l.e.c=Math.min(l.e.c,16383),l.e.r=Math.min(l.e.c,1048575)}return s["!links"]=[],s["!comments"]=[],j(i,129),(r.vbaraw||s["!outline"])&&j(i,147,ac(f,s["!outline"])),j(i,148,tc(l)),hu(i,s,r.Workbook),au(i,s),nu(i,s,e,t),cu(i,s),lu(i,s,r,e),iu(i,s),fu(i,s,n),s["!margins"]&&j(i,476,Yc(s["!margins"])),(!t||t.ignoreEC||t.ignoreEC==null)&&su(i,s),ou(i,s,e,n),j(i,130),i.end()}function xu(e,t){e.l+=10;var r=ir(e);return{name:r}}var du=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]];function pu(e){return!e.Workbook||!e.Workbook.WBProps?"false":Xs(e.Workbook.WBProps.date1904)?"true":"false"}var vu="][*?/\\".split("");function Aa(e,t){if(e.length>31)throw new Error("Sheet names cannot exceed 31 chars");var r=!0;return vu.forEach(function(n){if(e.indexOf(n)!=-1)throw new Error("Sheet name cannot contain : \\ / ? * [ ]")}),r}function gu(e,t,r){e.forEach(function(n,i){Aa(n);for(var a=0;a22)throw new Error("Bad Code Name: Worksheet"+s)}})}function mu(e){if(!e||!e.SheetNames||!e.Sheets)throw new Error("Invalid Workbook");if(!e.SheetNames.length)throw new Error("Workbook is empty");var t=e.Workbook&&e.Workbook.Sheets||[];gu(e.SheetNames,t,!!e.vbaraw);for(var r=0;r0,n={codeName:"ThisWorkbook"};e.Workbook&&e.Workbook.WBProps&&(du.forEach(function(f){e.Workbook.WBProps[f[0]]!=null&&e.Workbook.WBProps[f[0]]!=f[1]&&(n[f[0]]=e.Workbook.WBProps[f[0]])}),e.Workbook.WBProps.CodeName&&(n.codeName=e.Workbook.WBProps.CodeName,delete n.CodeName)),t[t.length]=Q("workbookPr",null,n);var i=e.Workbook&&e.Workbook.Sheets||[],a=0;if(i&&i[0]&&i[0].Hidden){for(t[t.length]="",a=0;a!=e.SheetNames.length&&!(!i[a]||!i[a].Hidden);++a);a==e.SheetNames.length&&(a=0),t[t.length]='',t[t.length]=""}for(t[t.length]="",a=0;a!=e.SheetNames.length;++a){var s={name:ke(e.SheetNames[a].slice(0,31))};if(s.sheetId=""+(a+1),s["r:id"]="rId"+(a+1),i[a])switch(i[a].Hidden){case 1:s.state="hidden";break;case 2:s.state="veryHidden";break}t[t.length]=Q("sheet",null,s)}return t[t.length]="",r&&(t[t.length]="",e.Workbook&&e.Workbook.Names&&e.Workbook.Names.forEach(function(f){var l={name:f.Name};f.Comment&&(l.comment=f.Comment),f.Sheet!=null&&(l.localSheetId=""+f.Sheet),f.Hidden&&(l.hidden="1"),f.Ref&&(t[t.length]=Q("definedName",ke(f.Ref),l))}),t[t.length]=""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function _u(e,t){var r={};return r.Hidden=e.read_shift(4),r.iTabID=e.read_shift(4),r.strRelID=Vn(e),r.name=ir(e),r}function Tu(e,t){return t||(t=H(127)),t.write_shift(4,e.Hidden),t.write_shift(4,e.iTabID),t0(e.strRelID,t),Ke(e.name.slice(0,31),t),t.length>t.l?t.slice(0,t.l):t}function Eu(e,t){var r={},n=e.read_shift(4);r.defaultThemeVersion=e.read_shift(4);var i=t>8?ir(e):"";return i.length>0&&(r.CodeName=i),r.autoCompressPictures=!!(n&65536),r.backupFile=!!(n&64),r.checkCompatibility=!!(n&4096),r.date1904=!!(n&1),r.filterPrivacy=!!(n&8),r.hidePivotFieldList=!!(n&1024),r.promptedSolutions=!!(n&16),r.publishItems=!!(n&2048),r.refreshAllConnections=!!(n&262144),r.saveExternalLinkValues=!!(n&128),r.showBorderUnselectedTables=!!(n&4),r.showInkAnnotation=!!(n&32),r.showObjects=["all","placeholders","none"][n>>13&3],r.showPivotChartFilter=!!(n&32768),r.updateLinks=["userSet","never","always"][n>>8&3],r}function wu(e,t){t||(t=H(72));var r=0;return e&&e.filterPrivacy&&(r|=8),t.write_shift(4,r),t.write_shift(4,0),Bi(e&&e.CodeName||"ThisWorkbook",t),t.slice(0,t.l)}function Su(e,t,r){var n=e.l+t;e.l+=4,e.l+=1;var i=e.read_shift(4),a=df(e),s=Lh(e,0,r),f=r0(e);e.l=n;var l={Name:a,Ptg:s};return i<268435455&&(l.Sheet=i),f&&(l.Comment=f),l}function Au(e,t){j(e,143);for(var r=0;r!=t.SheetNames.length;++r){var n=t.Workbook&&t.Workbook.Sheets&&t.Workbook.Sheets[r]&&t.Workbook.Sheets[r].Hidden||0,i={Hidden:n,iTabID:r+1,strRelID:"rId"+(r+1),name:t.SheetNames[r]};j(e,156,Tu(i))}j(e,144)}function Fu(e,t){t||(t=H(127));for(var r=0;r!=4;++r)t.write_shift(4,0);return Ke("SheetJS",t),Ke(an.version,t),Ke(an.version,t),Ke("7262",t),t.length>t.l?t.slice(0,t.l):t}function yu(e,t){t||(t=H(29)),t.write_shift(-4,0),t.write_shift(-4,460),t.write_shift(4,28800),t.write_shift(4,17600),t.write_shift(4,500),t.write_shift(4,e),t.write_shift(4,e);var r=120;return t.write_shift(1,r),t.length>t.l?t.slice(0,t.l):t}function Cu(e,t){if(!(!t.Workbook||!t.Workbook.Sheets)){for(var r=t.Workbook.Sheets,n=0,i=-1,a=-1;ni||(j(e,135),j(e,158,yu(i)),j(e,136))}}function Ou(e,t){var r=lr();return j(r,131),j(r,128,Fu()),j(r,153,wu(e.Workbook&&e.Workbook.WBProps||null)),Cu(r,e),Au(r,e),j(r,132),r.end()}function ku(e,t,r){return(t.slice(-4)===".bin"?Ou:Fa)(e)}function Ru(e,t,r,n,i){return(t.slice(-4)===".bin"?uu:wa)(e,r,n,i)}function Du(e,t,r){return(t.slice(-4)===".bin"?Yo:fa)(e,r)}function Iu(e,t,r){return(t.slice(-4)===".bin"?wo:na)(e,r)}function Nu(e,t,r){return(t.slice(-4)===".bin"?cl:ua)(e)}function Lu(e){return(e.slice(-4)===".bin"?nl:ha)()}function Pu(e,t){var r=[];return e.Props&&r.push(Rf(e.Props,t)),e.Custprops&&r.push(Df(e.Props,e.Custprops)),r.join("")}function Mu(){return""}function Bu(e,t){var r=[''];return t.cellXfs.forEach(function(n,i){var a=[];a.push(Q("NumberFormat",null,{"ss:Format":ke(Ue[n.numFmtId])}));var s={"ss:ID":"s"+(21+i)};r.push(Q("Style",a.join(""),s))}),Q("Styles",r.join(""))}function ya(e){return Q("NamedRange",null,{"ss:Name":e.Name,"ss:RefersTo":"="+s0(e.Ref,{r:0,c:0})})}function bu(e){if(!((e||{}).Workbook||{}).Names)return"";for(var t=e.Workbook.Names,r=[],n=0;n"),e["!margins"].header&&i.push(Q("Header",null,{"x:Margin":e["!margins"].header})),e["!margins"].footer&&i.push(Q("Footer",null,{"x:Margin":e["!margins"].footer})),i.push(Q("PageMargins",null,{"x:Bottom":e["!margins"].bottom||"0.75","x:Left":e["!margins"].left||"0.7","x:Right":e["!margins"].right||"0.7","x:Top":e["!margins"].top||"0.75"})),i.push("")),n&&n.Workbook&&n.Workbook.Sheets&&n.Workbook.Sheets[r])if(n.Workbook.Sheets[r].Hidden)i.push(Q("Visible",n.Workbook.Sheets[r].Hidden==1?"SheetHidden":"SheetVeryHidden",{}));else{for(var a=0;a")}return((((n||{}).Workbook||{}).Views||[])[0]||{}).RTL&&i.push(""),e["!protect"]&&(i.push(Ze("ProtectContents","True")),e["!protect"].objects&&i.push(Ze("ProtectObjects","True")),e["!protect"].scenarios&&i.push(Ze("ProtectScenarios","True")),e["!protect"].selectLockedCells!=null&&!e["!protect"].selectLockedCells?i.push(Ze("EnableSelection","NoSelection")):e["!protect"].selectUnlockedCells!=null&&!e["!protect"].selectUnlockedCells&&i.push(Ze("EnableSelection","UnlockedCells")),[["formatCells","AllowFormatCells"],["formatColumns","AllowSizeCols"],["formatRows","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach(function(s){e["!protect"][s[0]]&&i.push("<"+s[1]+"/>")})),i.length==0?"":Q("WorksheetOptions",i.join(""),{xmlns:gr.x})}function Hu(e){return e.map(function(t){var r=Gs(t.t||""),n=Q("ss:Data",r,{xmlns:"http://www.w3.org/TR/REC-html40"});return Q("Comment",n,{"ss:Author":t.a})}).join("")}function Vu(e,t,r,n,i,a,s){if(!e||e.v==null&&e.f==null)return"";var f={};if(e.f&&(f["ss:Formula"]="="+ke(s0(e.f,s))),e.F&&e.F.slice(0,t.length)==t){var l=ze(e.F.slice(t.length+1));f["ss:ArrayRange"]="RC:R"+(l.r==s.r?"":"["+(l.r-s.r)+"]")+"C"+(l.c==s.c?"":"["+(l.c-s.c)+"]")}if(e.l&&e.l.Target&&(f["ss:HRef"]=ke(e.l.Target),e.l.Tooltip&&(f["x:HRefScreenTip"]=ke(e.l.Tooltip))),r["!merges"])for(var o=r["!merges"],h=0;h!=o.length;++h)o[h].s.c!=s.c||o[h].s.r!=s.r||(o[h].e.c>o[h].s.c&&(f["ss:MergeAcross"]=o[h].e.c-o[h].s.c),o[h].e.r>o[h].s.r&&(f["ss:MergeDown"]=o[h].e.r-o[h].s.r));var p="",x="";switch(e.t){case"z":if(!n.sheetStubs)return"";break;case"n":p="Number",x=String(e.v);break;case"b":p="Boolean",x=e.v?"1":"0";break;case"e":p="Error",x=Xt[e.v];break;case"d":p="DateTime",x=new Date(e.v).toISOString(),e.z==null&&(e.z=e.z||Ue[14]);break;case"s":p="String",x=Vs(e.v||"");break}var d=Kr(n.cellXfs,e,n);f["ss:StyleID"]="s"+(21+d),f["ss:Index"]=s.c+1;var E=e.v!=null?x:"",c=e.t=="z"?"":''+E+"";return(e.c||[]).length>0&&(c+=Hu(e.c)),Q("Cell",c,f)}function Gu(e,t){var r='"}function Xu(e,t,r,n){if(!e["!ref"])return"";var i=Le(e["!ref"]),a=e["!merges"]||[],s=0,f=[];e["!cols"]&&e["!cols"].forEach(function(_,N){i0(_);var I=!!_.width,D=Cn(N,_),W={"ss:Index":N+1};I&&(W["ss:Width"]=pn(D.width)),_.hidden&&(W["ss:Hidden"]="1"),f.push(Q("Column",null,W))});for(var l=Array.isArray(e),o=i.s.r;o<=i.e.r;++o){for(var h=[Gu(o,(e["!rows"]||[])[o])],p=i.s.c;p<=i.e.c;++p){var x=!1;for(s=0;s!=a.length;++s)if(!(a[s].s.c>p)&&!(a[s].s.r>o)&&!(a[s].e.c"),h.length>2&&f.push(h.join(""))}return f.join("")}function ju(e,t,r){var n=[],i=r.SheetNames[e],a=r.Sheets[i],s=a?Uu(a,t,e,r):"";return s.length>0&&n.push(""+s+""),s=a?Xu(a,t,e,r):"",s.length>0&&n.push(""+s+"
"),n.push(Wu(a,t,e,r)),n.join("")}function zu(e,t){t||(t={}),e.SSF||(e.SSF=cr(Ue)),e.SSF&&(wn(),En(e.SSF),t.revssf=Sn(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF,t.cellXfs=[],Kr(t.cellXfs,{},{revssf:{General:0}}));var r=[];r.push(Pu(e,t)),r.push(Mu()),r.push(""),r.push("");for(var n=0;n-1||Ki.indexOf(i[a][0])>-1||i[a][1]!=null&&o.push(i[a]);n.length&&De.utils.cfb_add(t,"/SummaryInformation",X0(n,Mn.SI,l,U0)),(r.length||o.length)&&De.utils.cfb_add(t,"/DocumentSummaryInformation",X0(r,Mn.DSI,f,b0,o.length?o:null,Mn.UDI))}function $u(e,t){var r=t||{},n=De.utils.cfb_new({root:"R"}),i="/Workbook";switch(r.bookType||"xls"){case"xls":r.bookType="biff8";case"xla":r.bookType||(r.bookType="xla");case"biff8":i="/Workbook",r.biff=8;break;case"biff5":i="/Book",r.biff=5;break;default:throw new Error("invalid type "+r.bookType+" for XLS CFB")}return De.utils.cfb_add(n,i,Ca(e,r)),r.biff==8&&(e.Props||e.Custprops)&&Ku(e,n),r.biff==8&&e.vbaraw&&ul(n,De.read(e.vbaraw,{type:typeof e.vbaraw=="string"?"binary":"buffer"})),n}var Yu={0:{f:Zh},1:{f:sc},2:{f:yc},3:{f:dc},4:{f:hc},5:{f:wc},6:{f:Dc},7:{f:mc},8:{f:bc},9:{f:Bc},10:{f:Pc},11:{f:Mc},12:{f:oc},13:{f:Oc},14:{f:vc},15:{f:uc},16:{f:Ac},17:{f:Nc},18:{f:Tc},19:{f:e0},20:{},21:{},22:{},23:{},24:{},25:{},26:{},27:{},28:{},29:{},30:{},31:{},32:{},33:{},34:{},35:{T:1},36:{T:-1},37:{T:1},38:{T:-1},39:{f:Su},40:{},42:{},43:{f:Do},44:{f:ko},45:{f:Lo},46:{f:Mo},47:{f:Po},48:{},49:{f:ff},50:{},51:{f:Zo},52:{T:1},53:{T:-1},54:{T:1},55:{T:-1},56:{T:1},57:{T:-1},58:{},59:{},60:{f:oo},62:{f:Rc},63:{f:il},64:{f:eu},65:{},66:{},67:{},68:{},69:{},70:{},128:{},129:{T:1},130:{T:-1},131:{T:1,f:Rr,p:0},132:{T:-1},133:{T:1},134:{T:-1},135:{T:1},136:{T:-1},137:{T:1,f:Jc},138:{T:-1},139:{T:1},140:{T:-1},141:{T:1},142:{T:-1},143:{T:1},144:{T:-1},145:{T:1},146:{T:-1},147:{f:ic},148:{f:rc,p:16},151:{f:Xc},152:{},153:{f:Eu},154:{},155:{},156:{f:_u},157:{},158:{},159:{T:1,f:_o},160:{T:-1},161:{T:1,f:at},162:{T:-1},163:{T:1},164:{T:-1},165:{T:1},166:{T:-1},167:{},168:{},169:{},170:{},171:{},172:{T:1},173:{T:-1},174:{},175:{},176:{f:Uc},177:{T:1},178:{T:-1},179:{T:1},180:{T:-1},181:{T:1},182:{T:-1},183:{T:1},184:{T:-1},185:{T:1},186:{T:-1},187:{T:1},188:{T:-1},189:{T:1},190:{T:-1},191:{T:1},192:{T:-1},193:{T:1},194:{T:-1},195:{T:1},196:{T:-1},197:{T:1},198:{T:-1},199:{T:1},200:{T:-1},201:{T:1},202:{T:-1},203:{T:1},204:{T:-1},205:{T:1},206:{T:-1},207:{T:1},208:{T:-1},209:{T:1},210:{T:-1},211:{T:1},212:{T:-1},213:{T:1},214:{T:-1},215:{T:1},216:{T:-1},217:{T:1},218:{T:-1},219:{T:1},220:{T:-1},221:{T:1},222:{T:-1},223:{T:1},224:{T:-1},225:{T:1},226:{T:-1},227:{T:1},228:{T:-1},229:{T:1},230:{T:-1},231:{T:1},232:{T:-1},233:{T:1},234:{T:-1},235:{T:1},236:{T:-1},237:{T:1},238:{T:-1},239:{T:1},240:{T:-1},241:{T:1},242:{T:-1},243:{T:1},244:{T:-1},245:{T:1},246:{T:-1},247:{T:1},248:{T:-1},249:{T:1},250:{T:-1},251:{T:1},252:{T:-1},253:{T:1},254:{T:-1},255:{T:1},256:{T:-1},257:{T:1},258:{T:-1},259:{T:1},260:{T:-1},261:{T:1},262:{T:-1},263:{T:1},264:{T:-1},265:{T:1},266:{T:-1},267:{T:1},268:{T:-1},269:{T:1},270:{T:-1},271:{T:1},272:{T:-1},273:{T:1},274:{T:-1},275:{T:1},276:{T:-1},277:{},278:{T:1},279:{T:-1},280:{T:1},281:{T:-1},282:{T:1},283:{T:1},284:{T:-1},285:{T:1},286:{T:-1},287:{T:1},288:{T:-1},289:{T:1},290:{T:-1},291:{T:1},292:{T:-1},293:{T:1},294:{T:-1},295:{T:1},296:{T:-1},297:{T:1},298:{T:-1},299:{T:1},300:{T:-1},301:{T:1},302:{T:-1},303:{T:1},304:{T:-1},305:{T:1},306:{T:-1},307:{T:1},308:{T:-1},309:{T:1},310:{T:-1},311:{T:1},312:{T:-1},313:{T:-1},314:{T:1},315:{T:-1},316:{T:1},317:{T:-1},318:{T:1},319:{T:-1},320:{T:1},321:{T:-1},322:{T:1},323:{T:-1},324:{T:1},325:{T:-1},326:{T:1},327:{T:-1},328:{T:1},329:{T:-1},330:{T:1},331:{T:-1},332:{T:1},333:{T:-1},334:{T:1},335:{f:Jo},336:{T:-1},337:{f:rl,T:1},338:{T:-1},339:{T:1},340:{T:-1},341:{T:1},342:{T:-1},343:{T:1},344:{T:-1},345:{T:1},346:{T:-1},347:{T:1},348:{T:-1},349:{T:1},350:{T:-1},351:{},352:{},353:{T:1},354:{T:-1},355:{f:Vn},357:{},358:{},359:{},360:{T:1},361:{},362:{f:to},363:{},364:{},366:{},367:{},368:{},369:{},370:{},371:{},372:{T:1},373:{T:-1},374:{T:1},375:{T:-1},376:{T:1},377:{T:-1},378:{T:1},379:{T:-1},380:{T:1},381:{T:-1},382:{T:1},383:{T:-1},384:{T:1},385:{T:-1},386:{T:1},387:{T:-1},388:{T:1},389:{T:-1},390:{T:1},391:{T:-1},392:{T:1},393:{T:-1},394:{T:1},395:{T:-1},396:{},397:{},398:{},399:{},400:{},401:{T:1},403:{},404:{},405:{},406:{},407:{},408:{},409:{},410:{},411:{},412:{},413:{},414:{},415:{},416:{},417:{},418:{},419:{},420:{},421:{},422:{T:1},423:{T:1},424:{T:-1},425:{T:-1},426:{f:jc},427:{f:zc},428:{},429:{T:1},430:{T:-1},431:{T:1},432:{T:-1},433:{T:1},434:{T:-1},435:{T:1},436:{T:-1},437:{T:1},438:{T:-1},439:{T:1},440:{T:-1},441:{T:1},442:{T:-1},443:{T:1},444:{T:-1},445:{T:1},446:{T:-1},447:{T:1},448:{T:-1},449:{T:1},450:{T:-1},451:{T:1},452:{T:-1},453:{T:1},454:{T:-1},455:{T:1},456:{T:-1},457:{T:1},458:{T:-1},459:{T:1},460:{T:-1},461:{T:1},462:{T:-1},463:{T:1},464:{T:-1},465:{T:1},466:{T:-1},467:{T:1},468:{T:-1},469:{T:1},470:{T:-1},471:{},472:{},473:{T:1},474:{T:-1},475:{},476:{f:$c},477:{},478:{},479:{T:1},480:{T:-1},481:{T:1},482:{T:-1},483:{T:1},484:{T:-1},485:{f:nc},486:{T:1},487:{T:-1},488:{T:1},489:{T:-1},490:{T:1},491:{T:-1},492:{T:1},493:{T:-1},494:{f:Vc},495:{T:1},496:{T:-1},497:{T:1},498:{T:-1},499:{},500:{T:1},501:{T:-1},502:{T:1},503:{T:-1},504:{},505:{T:1},506:{T:-1},507:{},508:{T:1},509:{T:-1},510:{T:1},511:{T:-1},512:{},513:{},514:{T:1},515:{T:-1},516:{T:1},517:{T:-1},518:{T:1},519:{T:-1},520:{T:1},521:{T:-1},522:{},523:{},524:{},525:{},526:{},527:{},528:{T:1},529:{T:-1},530:{T:1},531:{T:-1},532:{T:1},533:{T:-1},534:{},535:{},536:{},537:{},538:{T:1},539:{T:-1},540:{T:1},541:{T:-1},542:{T:1},548:{},549:{},550:{f:Vn},551:{},552:{},553:{},554:{T:1},555:{T:-1},556:{T:1},557:{T:-1},558:{T:1},559:{T:-1},560:{T:1},561:{T:-1},562:{},564:{},565:{T:1},566:{T:-1},569:{T:1},570:{T:-1},572:{},573:{T:1},574:{T:-1},577:{},578:{},579:{},580:{},581:{},582:{},583:{},584:{},585:{},586:{},587:{},588:{T:-1},589:{},590:{T:1},591:{T:-1},592:{T:1},593:{T:-1},594:{T:1},595:{T:-1},596:{},597:{T:1},598:{T:-1},599:{T:1},600:{T:-1},601:{T:1},602:{T:-1},603:{T:1},604:{T:-1},605:{T:1},606:{T:-1},607:{},608:{T:1},609:{T:-1},610:{},611:{T:1},612:{T:-1},613:{T:1},614:{T:-1},615:{T:1},616:{T:-1},617:{T:1},618:{T:-1},619:{T:1},620:{T:-1},625:{},626:{T:1},627:{T:-1},628:{T:1},629:{T:-1},630:{T:1},631:{T:-1},632:{f:ll},633:{T:1},634:{T:-1},635:{T:1,f:fl},636:{T:-1},637:{f:cf},638:{T:1},639:{},640:{T:-1},641:{T:1},642:{T:-1},643:{T:1},644:{},645:{T:-1},646:{T:1},648:{T:1},649:{},650:{T:-1},651:{f:xu},652:{},653:{T:1},654:{T:-1},655:{T:1},656:{T:-1},657:{T:1},658:{T:-1},659:{},660:{T:1},661:{},662:{T:-1},663:{},664:{T:1},665:{},666:{T:-1},667:{},668:{},669:{},671:{T:1},672:{T:-1},673:{T:1},674:{T:-1},675:{},676:{},677:{},678:{},679:{},680:{},681:{},1024:{},1025:{},1026:{T:1},1027:{T:-1},1028:{T:1},1029:{T:-1},1030:{},1031:{T:1},1032:{T:-1},1033:{T:1},1034:{T:-1},1035:{},1036:{},1037:{},1038:{T:1},1039:{T:-1},1040:{},1041:{T:1},1042:{T:-1},1043:{},1044:{},1045:{},1046:{T:1},1047:{T:-1},1048:{T:1},1049:{T:-1},1050:{},1051:{T:1},1052:{T:1},1053:{f:ru},1054:{T:1},1055:{},1056:{T:1},1057:{T:-1},1058:{T:1},1059:{T:-1},1061:{},1062:{T:1},1063:{T:-1},1064:{T:1},1065:{T:-1},1066:{T:1},1067:{T:-1},1068:{T:1},1069:{T:-1},1070:{T:1},1071:{T:-1},1072:{T:1},1073:{T:-1},1075:{T:1},1076:{T:-1},1077:{T:1},1078:{T:-1},1079:{T:1},1080:{T:-1},1081:{T:1},1082:{T:-1},1083:{T:1},1084:{T:-1},1085:{},1086:{T:1},1087:{T:-1},1088:{T:1},1089:{T:-1},1090:{T:1},1091:{T:-1},1092:{T:1},1093:{T:-1},1094:{T:1},1095:{T:-1},1096:{},1097:{T:1},1098:{},1099:{T:-1},1100:{T:1},1101:{T:-1},1102:{},1103:{},1104:{},1105:{},1111:{},1112:{},1113:{T:1},1114:{T:-1},1115:{T:1},1116:{T:-1},1117:{},1118:{T:1},1119:{T:-1},1120:{T:1},1121:{T:-1},1122:{T:1},1123:{T:-1},1124:{T:1},1125:{T:-1},1126:{},1128:{T:1},1129:{T:-1},1130:{},1131:{T:1},1132:{T:-1},1133:{T:1},1134:{T:-1},1135:{T:1},1136:{T:-1},1137:{T:1},1138:{T:-1},1139:{T:1},1140:{T:-1},1141:{},1142:{T:1},1143:{T:-1},1144:{T:1},1145:{T:-1},1146:{},1147:{T:1},1148:{T:-1},1149:{T:1},1150:{T:-1},1152:{T:1},1153:{T:-1},1154:{T:-1},1155:{T:-1},1156:{T:-1},1157:{T:1},1158:{T:-1},1159:{T:1},1160:{T:-1},1161:{T:1},1162:{T:-1},1163:{T:1},1164:{T:-1},1165:{T:1},1166:{T:-1},1167:{T:1},1168:{T:-1},1169:{T:1},1170:{T:-1},1171:{},1172:{T:1},1173:{T:-1},1177:{},1178:{T:1},1180:{},1181:{},1182:{},2048:{T:1},2049:{T:-1},2050:{},2051:{T:1},2052:{T:-1},2053:{},2054:{},2055:{T:1},2056:{T:-1},2057:{T:1},2058:{T:-1},2060:{},2067:{},2068:{T:1},2069:{T:-1},2070:{},2071:{},2072:{T:1},2073:{T:-1},2075:{},2076:{},2077:{T:1},2078:{T:-1},2079:{},2080:{T:1},2081:{T:-1},2082:{},2083:{T:1},2084:{T:-1},2085:{T:1},2086:{T:-1},2087:{T:1},2088:{T:-1},2089:{T:1},2090:{T:-1},2091:{},2092:{},2093:{T:1},2094:{T:-1},2095:{},2096:{T:1},2097:{T:-1},2098:{T:1},2099:{T:-1},2100:{T:1},2101:{T:-1},2102:{},2103:{T:1},2104:{T:-1},2105:{},2106:{T:1},2107:{T:-1},2108:{},2109:{T:1},2110:{T:-1},2111:{T:1},2112:{T:-1},2113:{T:1},2114:{T:-1},2115:{},2116:{},2117:{},2118:{T:1},2119:{T:-1},2120:{},2121:{T:1},2122:{T:-1},2123:{T:1},2124:{T:-1},2125:{},2126:{T:1},2127:{T:-1},2128:{},2129:{T:1},2130:{T:-1},2131:{T:1},2132:{T:-1},2133:{T:1},2134:{},2135:{},2136:{},2137:{T:1},2138:{T:-1},2139:{T:1},2140:{T:-1},2141:{},3072:{},3073:{},4096:{T:1},4097:{T:-1},5002:{T:1},5003:{T:-1},5081:{T:1},5082:{T:-1},5083:{},5084:{T:1},5085:{T:-1},5086:{T:1},5087:{T:-1},5088:{},5089:{},5090:{},5092:{T:1},5093:{T:-1},5094:{},5095:{T:1},5096:{T:-1},5097:{},5099:{},65535:{n:""}};function ee(e,t,r,n){var i=t;if(!isNaN(i)){var a=n||(r||[]).length||0,s=e.next(4);s.write_shift(2,i),s.write_shift(2,a),a>0&&qn(r)&&e.push(r)}}function Ju(e,t,r,n){var i=(r||[]).length||0;if(i<=8224)return ee(e,t,r,i);var a=t;if(!isNaN(a)){for(var s=r.parts||[],f=0,l=0,o=0;o+(s[f]||8224)<=8224;)o+=s[f]||8224,f++;var h=e.next(4);for(h.write_shift(2,a),h.write_shift(2,o),e.push(r.slice(l,l+o)),l+=o;l=0&&i<65536?ee(e,2,uo(r,n,i)):ee(e,3,co(r,n,i));return;case"b":case"e":ee(e,5,qu(r,n,t.v,t.t));return;case"s":case"str":ee(e,4,Zu(r,n,(t.v||"").slice(0,255)));return}ee(e,1,zt(null,r,n))}function e1(e,t,r,n){var i=Array.isArray(t),a=Le(t["!ref"]||"A1"),s,f="",l=[];if(a.e.c>255||a.e.r>16383){if(n.WTF)throw new Error("Range "+(t["!ref"]||"A1")+" exceeds format limit A1:IV16384");a.e.c=Math.min(a.e.c,255),a.e.r=Math.min(a.e.c,16383),s=He(a)}for(var o=a.s.r;o<=a.e.r;++o){f=Qe(o);for(var h=a.s.c;h<=a.e.c;++h){o===a.s.r&&(l[h]=nr(h)),s=l[h]+f;var p=i?(t[o]||[])[h]:t[s];p&&Qu(e,p,o,h)}}}function r1(e,t){for(var r=t||{},n=lr(),i=0,a=0;a255||d.e.r>=E){if(t.WTF)throw new Error("Range "+(a["!ref"]||"A1")+" exceeds format limit A1:IV16384");d.e.c=Math.min(d.e.c,255),d.e.r=Math.min(d.e.c,E-1)}ee(n,2057,n0(r,16,t)),ee(n,13,Er(1)),ee(n,12,Er(100)),ee(n,15,fr(!0)),ee(n,17,fr(!1)),ee(n,16,Zr(.001)),ee(n,95,fr(!0)),ee(n,42,fr(!1)),ee(n,43,fr(!1)),ee(n,130,Er(1)),ee(n,128,Qf()),ee(n,131,fr(!1)),ee(n,132,fr(!1)),o&&f1(n,a["!cols"]),ee(n,512,Zf(d,t)),o&&(a["!links"]=[]);for(var c=d.s.r;c<=d.e.r;++c){p=Qe(c);for(var _=d.s.c;_<=d.e.c;++_){c===d.s.r&&(x[_]=nr(_)),h=x[_]+p;var N=l?(a[c]||[])[_]:a[h];N&&(o1(n,N,c,_,t),o&&N.l&&a["!links"].push([h,N.l]))}}var I=f.CodeName||f.name||i;return o&&ee(n,574,Kf((s.Views||[])[0])),o&&(a["!merges"]||[]).length&&ee(n,229,io(a["!merges"])),o&&s1(n,a),ee(n,442,ea(I)),o&&i1(n,a),ee(n,10),n.end()}function h1(e,t,r){var n=lr(),i=(e||{}).Workbook||{},a=i.Sheets||[],s=i.WBProps||{},f=r.biff==8,l=r.biff==5;if(ee(n,2057,n0(e,5,r)),r.bookType=="xla"&&ee(n,135),ee(n,225,f?Er(1200):null),ee(n,193,Lf(2)),l&&ee(n,191),l&&ee(n,192),ee(n,226),ee(n,92,Gf("SheetJS",r)),ee(n,66,Er(f?1200:1252)),f&&ee(n,353,Er(0)),f&&ee(n,448),ee(n,317,ho(e.SheetNames.length)),f&&e.vbaraw&&ee(n,211),f&&e.vbaraw){var o=s.CodeName||"ThisWorkbook";ee(n,442,ea(o))}ee(n,156,Er(17)),ee(n,25,fr(!1)),ee(n,18,fr(!1)),ee(n,19,Er(0)),f&&ee(n,431,fr(!1)),f&&ee(n,444,Er(0)),ee(n,61,zf()),ee(n,64,fr(!1)),ee(n,141,Er(0)),ee(n,34,fr(pu(e)=="true")),ee(n,14,fr(!0)),f&&ee(n,439,fr(!1)),ee(n,218,Er(0)),t1(n,e,r),n1(n,e.SSF,r),a1(n,r),f&&ee(n,352,fr(!1));var h=n.end(),p=lr();f&&ee(p,140,fo()),f&&r.Strings&&Ju(p,252,jf(r.Strings)),ee(p,10);var x=p.end(),d=lr(),E=0,c=0;for(c=0;c255&&typeof console<"u"&&console.error&&console.error("Worksheet '"+e.SheetNames[r]+"' extends beyond column IV (255). Data may be lost.")}}var a=t||{};switch(a.biff||2){case 8:case 5:return c1(e,t);case 4:case 3:case 2:return r1(e,t)}throw new Error("invalid type "+a.bookType+" for BIFF")}function u1(e,t,r,n){for(var i=e["!merges"]||[],a=[],s=t.s.c;s<=t.e.c;++s){for(var f=0,l=0,o=0;or||i[o].s.c>s)&&!(i[o].e.r1&&(d.rowspan=f),l>1&&(d.colspan=l),n.editable?x=''+x+"":p&&(d["data-t"]=p&&p.t||"z",p.v!=null&&(d["data-v"]=p.v),p.z!=null&&(d["data-z"]=p.z),p.l&&(p.l.Target||"#").charAt(0)!="#"&&(x=''+x+"")),d.id=(n.id||"sjs")+"-"+h,a.push(Q("td",x,d))}}var E="";return E+a.join("")+""}var x1='SheetJS Table Export',d1="";function p1(e,t,r){var n=[];return n.join("")+""}function Oa(e,t){var r=t||{},n=r.header!=null?r.header:x1,i=r.footer!=null?r.footer:d1,a=[n],s=_r(e["!ref"]);r.dense=Array.isArray(e),a.push(p1(e,s,r));for(var f=s.s.r;f<=s.e.r;++f)a.push(u1(e,s,f,r));return a.push(""+i),a.join("")}function ka(e,t,r){var n=r||{},i=0,a=0;if(n.origin!=null)if(typeof n.origin=="number")i=n.origin;else{var s=typeof n.origin=="string"?ze(n.origin):n.origin;i=s.r,a=s.c}var f=t.getElementsByTagName("tr"),l=Math.min(n.sheetRows||1e7,f.length),o={s:{r:0,c:0},e:{r:i,c:a}};if(e["!ref"]){var h=_r(e["!ref"]);o.s.r=Math.min(o.s.r,h.s.r),o.s.c=Math.min(o.s.c,h.s.c),o.e.r=Math.max(o.e.r,h.e.r),o.e.c=Math.max(o.e.c,h.e.c),i==-1&&(o.e.r=i=h.e.r+1)}var p=[],x=0,d=e["!rows"]||(e["!rows"]=[]),E=0,c=0,_=0,N=0,I=0,D=0;for(e["!cols"]||(e["!cols"]=[]);E1||D>1)&&p.push({s:{r:c+i,c:N+a},e:{r:c+i+(I||1)-1,c:N+a+(D||1)-1}});var y={t:"s",v:k},L=re.getAttribute("data-t")||re.getAttribute("t")||"";k!=null&&(k.length==0?y.t=L||"z":n.raw||k.trim().length==0||L=="s"||(k==="TRUE"?y={t:"b",v:!0}:k==="FALSE"?y={t:"b",v:!1}:isNaN(Pr(k))?isNaN(Mt(k).getDate())||(y={t:"d",v:or(k)},n.cellDates||(y={t:"n",v:hr(y.v)}),y.z=n.dateNF||Ue[14]):y={t:"n",v:Pr(k)})),y.z===void 0&&T!=null&&(y.z=T);var P="",X=re.getElementsByTagName("A");if(X&&X.length)for(var ve=0;ve=l&&(e["!fullref"]=He((o.e.r=f.length-E+c-1+i,o))),e}function Ra(e,t){var r=t||{},n=r.dense?[]:{};return ka(n,e,t)}function v1(e,t){return rt(Ra(e,t),t)}function Q0(e){var t="",r=g1(e);return r&&(t=r(e).getPropertyValue("display")),t||(t=e.style&&e.style.display),t==="none"}function g1(e){return e.ownerDocument.defaultView&&typeof e.ownerDocument.defaultView.getComputedStyle=="function"?e.ownerDocument.defaultView.getComputedStyle:typeof getComputedStyle=="function"?getComputedStyle:null}var m1=function(){var e=["",'',"",'',"",'',"",""].join(""),t=""+e+"";return function(){return Ve+t}}(),ei=function(){var e=function(a){return ke(a).replace(/ +/g,function(s){return''}).replace(/\t/g,"").replace(/\n/g,"").replace(/^ /,"").replace(/ $/,"")},t=` +`,r=` +`,n=function(a,s,f){var l=[];l.push(' +`);var o=0,h=0,p=_r(a["!ref"]||"A1"),x=a["!merges"]||[],d=0,E=Array.isArray(a);if(a["!cols"])for(h=0;h<=p.e.c;++h)l.push(" +`);var c="",_=a["!rows"]||[];for(o=0;o +`);for(;o<=p.e.r;++o){for(c=_[o]?' table:style-name="ro'+_[o].ods+'"':"",l.push(" +`),h=0;hh)&&!(x[d].s.r>o)&&!(x[d].e.c +`)}return l.push(` +`),l.join("")},i=function(a,s){a.push(` +`),a.push(` +`),a.push(` +`),a.push(` / +`),a.push(` +`),a.push(` / +`),a.push(` +`),a.push(` +`);var f=0;s.SheetNames.map(function(o){return s.Sheets[o]}).forEach(function(o){if(o&&o["!cols"]){for(var h=0;h +`),a.push(' +`),a.push(` +`),++f}}});var l=0;s.SheetNames.map(function(o){return s.Sheets[o]}).forEach(function(o){if(o&&o["!rows"]){for(var h=0;h +`),a.push(' +`),a.push(` +`),++l}}}),a.push(` +`),a.push(` +`),a.push(` +`),a.push(` +`),a.push(` +`)};return function(s,f){var l=[Ve],o=bt({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),h=bt({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});f.bookType=="fods"?(l.push(" +`),l.push(ji().replace(/office:document-meta/g,"office:meta"))):l.push(" +`),i(l,s),l.push(` +`),l.push(` +`);for(var p=0;p!=s.SheetNames.length;++p)l.push(n(s.Sheets[s.SheetNames[p]],s,p));return l.push(` +`),l.push(` +`),f.bookType=="fods"?l.push(""):l.push(""),l.join("")}}();function Da(e,t){if(t.bookType=="fods")return ei(e,t);var r=Kn(),n="",i=[],a=[];return n="mimetype",me(r,n,"application/vnd.oasis.opendocument.spreadsheet"),n="content.xml",me(r,n,ei(e,t)),i.push([n,"text/xml"]),a.push([n,"ContentFile"]),n="styles.xml",me(r,n,m1(e,t)),i.push([n,"text/xml"]),a.push([n,"StylesFile"]),n="meta.xml",me(r,n,Ve+ji()),i.push([n,"text/xml"]),a.push([n,"MetadataFile"]),n="manifest.rdf",me(r,n,kf(a)),i.push([n,"application/rdf+xml"]),n="META-INF/manifest.xml",me(r,n,Cf(i)),r}/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */function mn(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function _1(e){return typeof TextEncoder<"u"?new TextEncoder().encode(e):Fr(Bt(e))}function T1(e,t){e:for(var r=0;r<=e.length-t.length;++r){for(var n=0;n>7,e[t+14]|=(n&127)<<1;for(var a=0;i>=1;++a,i/=256)e[t+a]=i&255;e[t+15]|=r>=0?0:128}function Ut(e,t){var r=t?t[0]:0,n=e[r]&127;e:if(e[r++]>=128&&(n|=(e[r]&127)<<7,e[r++]<128||(n|=(e[r]&127)<<14,e[r++]<128)||(n|=(e[r]&127)<<21,e[r++]<128)||(n+=(e[r]&127)*Math.pow(2,28),++r,e[r++]<128)||(n+=(e[r]&127)*Math.pow(2,35),++r,e[r++]<128)||(n+=(e[r]&127)*Math.pow(2,42),++r,e[r++]<128)))break e;return t&&(t[0]=r),n}function Ce(e){var t=new Uint8Array(7);t[0]=e&127;var r=1;e:if(e>127){if(t[r-1]|=128,t[r]=e>>7&127,++r,e<=16383||(t[r-1]|=128,t[r]=e>>14&127,++r,e<=2097151)||(t[r-1]|=128,t[r]=e>>21&127,++r,e<=268435455)||(t[r-1]|=128,t[r]=e/256>>>21&127,++r,e<=34359738367)||(t[r-1]|=128,t[r]=e/65536>>>21&127,++r,e<=4398046511103))break e;t[r-1]|=128,t[r]=e/16777216>>>21&127,++r}return t.slice(0,r)}function dt(e){var t=0,r=e[t]&127;e:if(e[t++]>=128){if(r|=(e[t]&127)<<7,e[t++]<128||(r|=(e[t]&127)<<14,e[t++]<128)||(r|=(e[t]&127)<<21,e[t++]<128))break e;r|=(e[t]&127)<<28}return r}function Ge(e){for(var t=[],r=[0];r[0]=128;);f=e.slice(l,r[0])}break;case 5:s=4,f=e.slice(r[0],r[0]+s),r[0]+=s;break;case 1:s=8,f=e.slice(r[0],r[0]+s),r[0]+=s;break;case 2:s=Ut(e,r),f=e.slice(r[0],r[0]+s),r[0]+=s;break;case 3:case 4:default:throw new Error("PB Type ".concat(a," for Field ").concat(i," at offset ").concat(n))}var o={data:f,type:a};t[i]==null?t[i]=[o]:t[i].push(o)}return t}function Ye(e){var t=[];return e.forEach(function(r,n){r.forEach(function(i){i.data&&(t.push(Ce(n*8+i.type)),i.type==2&&t.push(Ce(i.data.length)),t.push(i.data))})}),zr(t)}function Sr(e){for(var t,r=[],n=[0];n[0]>>0>0),r.push(s)}return r}function ft(e){var t=[];return e.forEach(function(r){var n=[];n[1]=[{data:Ce(r.id),type:0}],n[2]=[],r.merge!=null&&(n[3]=[{data:Ce(+!!r.merge),type:0}]);var i=[];r.messages.forEach(function(s){i.push(s.data),s.meta[3]=[{type:0,data:Ce(s.data.length)}],n[2].push({data:Ye(s.meta),type:2})});var a=Ye(n);t.push(Ce(a.length)),t.push(a),i.forEach(function(s){return t.push(s)})}),zr(t)}function w1(e,t){if(e!=0)throw new Error("Unexpected Snappy chunk type ".concat(e));for(var r=[0],n=Ut(t,r),i=[];r[0]>2;if(s<60)++s;else{var f=s-59;s=t[r[0]],f>1&&(s|=t[r[0]+1]<<8),f>2&&(s|=t[r[0]+2]<<16),f>3&&(s|=t[r[0]+3]<<24),s>>>=0,s++,r[0]+=f}i.push(t.slice(r[0],r[0]+s)),r[0]+=s;continue}else{var l=0,o=0;if(a==1?(o=(t[r[0]]>>2&7)+4,l=(t[r[0]++]&224)<<3,l|=t[r[0]++]):(o=(t[r[0]++]>>2)+1,a==2?(l=t[r[0]]|t[r[0]+1]<<8,r[0]+=2):(l=(t[r[0]]|t[r[0]+1]<<8|t[r[0]+2]<<16|t[r[0]+3]<<24)>>>0,r[0]+=4)),i=[zr(i)],l==0)throw new Error("Invalid offset 0");if(l>i[0].length)throw new Error("Invalid offset beyond length");if(o>=l)for(i.push(i[0].slice(-l)),o-=l;o>=i[i.length-1].length;)i.push(i[i.length-1]),o-=i[i.length-1].length;i.push(i[0].slice(-l,-l+o))}}var h=zr(i);if(h.length!=n)throw new Error("Unexpected length: ".concat(h.length," != ").concat(n));return h}function Ar(e){for(var t=[],r=0;r>8&255]))):n<=16777216?(s+=4,t.push(new Uint8Array([248,n-1&255,n-1>>8&255,n-1>>16&255]))):n<=4294967296&&(s+=5,t.push(new Uint8Array([252,n-1&255,n-1>>8&255,n-1>>16&255,n-1>>>24&255]))),t.push(e.slice(r,r+n)),s+=n,i[0]=0,i[1]=s&255,i[2]=s>>8&255,i[3]=s>>16&255,r+=n}return zr(t)}function Bn(e,t){var r=new Uint8Array(32),n=mn(r),i=12,a=0;switch(r[0]=5,e.t){case"n":r[1]=2,E1(r,i,e.v),a|=1,i+=16;break;case"b":r[1]=6,n.setFloat64(i,e.v?1:0,!0),a|=2,i+=8;break;case"s":if(t.indexOf(e.v)==-1)throw new Error("Value ".concat(e.v," missing from SST!"));r[1]=3,n.setUint32(i,t.indexOf(e.v),!0),a|=8,i+=4;break;default:throw"unsupported cell type "+e.t}return n.setUint32(8,a,!0),r.slice(0,i)}function bn(e,t){var r=new Uint8Array(32),n=mn(r),i=12,a=0;switch(r[0]=3,e.t){case"n":r[2]=2,n.setFloat64(i,e.v,!0),a|=32,i+=8;break;case"b":r[2]=6,n.setFloat64(i,e.v?1:0,!0),a|=32,i+=8;break;case"s":if(t.indexOf(e.v)==-1)throw new Error("Value ".concat(e.v," missing from SST!"));r[2]=3,n.setUint32(i,t.indexOf(e.v),!0),a|=16,i+=4;break;default:throw"unsupported cell type "+e.t}return n.setUint32(4,a,!0),r.slice(0,i)}function Hr(e){var t=Ge(e);return Ut(t[1][0].data)}function S1(e,t,r){var n,i,a,s;if(!((n=e[6])!=null&&n[0])||!((i=e[7])!=null&&i[0]))throw"Mutation only works on post-BNC storages!";var f=((s=(a=e[8])==null?void 0:a[0])==null?void 0:s.data)&&dt(e[8][0].data)>0||!1;if(f)throw"Math only works with normal offsets";for(var l=0,o=mn(e[7][0].data),h=0,p=[],x=mn(e[4][0].data),d=0,E=[],c=0;c1&&console.error("The Numbers writer currently writes only the first table");var n=_r(r["!ref"]);n.s.r=n.s.c=0;var i=!1;n.e.c>9&&(i=!0,n.e.c=9),n.e.r>49&&(i=!0,n.e.r=49),i&&console.error("The Numbers writer is currently limited to ".concat(He(n)));var a=_n(r,{range:n,header:1}),s=["~Sh33tJ5~"];a.forEach(function(O){return O.forEach(function(R){typeof R=="string"&&s.push(R)})});var f={},l=[],o=De.read(t.numbers,{type:"base64"});o.FileIndex.map(function(O,R){return[O,o.FullPaths[R]]}).forEach(function(O){var R=O[0],C=O[1];if(R.type==2&&R.name.match(/\.iwa/)){var V=R.content,ie=Ar(V),q=Sr(ie);q.forEach(function(Y){l.push(Y.id),f[Y.id]={deps:[],location:C,type:dt(Y.messages[0].meta[1][0].data)}})}}),l.sort(function(O,R){return O-R});var h=l.filter(function(O){return O>1}).map(function(O){return[O,Ce(O)]});o.FileIndex.map(function(O,R){return[O,o.FullPaths[R]]}).forEach(function(O){var R=O[0];if(O[1],!!R.name.match(/\.iwa/)){var C=Sr(Ar(R.content));C.forEach(function(V){V.messages.forEach(function(ie){h.forEach(function(q){V.messages.some(function(Y){return dt(Y.meta[1][0].data)!=11006&&T1(Y.data,q[1])})&&f[q[0]].deps.push(V.id)})})})}});for(var p=De.find(o,f[1].location),x=Sr(Ar(p.content)),d,E=0;E-1,i=Vi();l0(t=t||{});var a=Kn(),s="",f=0;if(t.cellXfs=[],Kr(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),s="docProps/core.xml",me(a,s,zi(e.Props,t)),i.coreprops.push(s),Oe(t.rels,2,s,Se.CORE_PROPS),s="docProps/app.xml",!(e.Props&&e.Props.SheetNames))if(!e.Workbook||!e.Workbook.Sheets)e.Props.SheetNames=e.SheetNames;else{for(var l=[],o=0;o0&&(s="docProps/custom.xml",me(a,s,Yi(e.Custprops)),i.custprops.push(s),Oe(t.rels,4,s,Se.CUST_PROPS)),f=1;f<=e.SheetNames.length;++f){var h={"!id":{}},p=e.Sheets[e.SheetNames[f-1]],x=(p||{})["!type"]||"sheet";switch(x){case"chart":default:s="xl/worksheets/sheet"+f+"."+r,me(a,s,Ru(f-1,s,t,e,h)),i.sheets.push(s),Oe(t.wbrels,-1,"worksheets/sheet"+f+"."+r,Se.WS[0])}if(p){var d=p["!comments"],E=!1,c="";d&&d.length>0&&(c="xl/comments"+f+"."+r,me(a,c,Nu(d,c)),i.comments.push(c),Oe(h,-1,"../comments"+f+"."+r,Se.CMNT),E=!0),p["!legacy"]&&E&&me(a,"xl/drawings/vmlDrawing"+f+".vml",ca(f,p["!comments"])),delete p["!comments"],delete p["!legacy"]}h["!id"].rId1&&me(a,Xi(s),ut(h))}return t.Strings!=null&&t.Strings.length>0&&(s="xl/sharedStrings."+r,me(a,s,Iu(t.Strings,s,t)),i.strs.push(s),Oe(t.wbrels,-1,"sharedStrings."+r,Se.SST)),s="xl/workbook."+r,me(a,s,ku(e,s)),i.workbooks.push(s),Oe(t.rels,1,s,Se.WB),s="xl/theme/theme1.xml",me(a,s,la(e.Themes,t)),i.themes.push(s),Oe(t.wbrels,-1,"theme/theme1.xml",Se.THEME),s="xl/styles."+r,me(a,s,Du(e,s,t)),i.styles.push(s),Oe(t.wbrels,-1,"styles."+r,Se.STY),e.vbaraw&&n&&(s="xl/vbaProject.bin",me(a,s,e.vbaraw),i.vba.push(s),Oe(t.wbrels,-1,"vbaProject.bin",Se.VBA)),s="xl/metadata."+r,me(a,s,Lu(s)),i.metadata.push(s),Oe(t.wbrels,-1,"metadata."+r,Se.XLMETA),me(a,"[Content_Types].xml",Gi(i,t)),me(a,"_rels/.rels",ut(t.rels)),me(a,"xl/_rels/workbook."+r+".rels",ut(t.wbrels)),delete t.revssf,delete t.ssf,a}function O1(e,t){ht=1024,e&&!e.SSF&&(e.SSF=cr(Ue)),e&&e.SSF&&(wn(),En(e.SSF),t.revssf=Sn(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF),t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,Nt?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var r="xml",n=xa.indexOf(t.bookType)>-1,i=Vi();l0(t=t||{});var a=Kn(),s="",f=0;if(t.cellXfs=[],Kr(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),s="docProps/core.xml",me(a,s,zi(e.Props,t)),i.coreprops.push(s),Oe(t.rels,2,s,Se.CORE_PROPS),s="docProps/app.xml",!(e.Props&&e.Props.SheetNames))if(!e.Workbook||!e.Workbook.Sheets)e.Props.SheetNames=e.SheetNames;else{for(var l=[],o=0;o0&&(s="docProps/custom.xml",me(a,s,Yi(e.Custprops)),i.custprops.push(s),Oe(t.rels,4,s,Se.CUST_PROPS));var h=["SheetJ5"];for(t.tcid=0,f=1;f<=e.SheetNames.length;++f){var p={"!id":{}},x=e.Sheets[e.SheetNames[f-1]],d=(x||{})["!type"]||"sheet";switch(d){case"chart":default:s="xl/worksheets/sheet"+f+"."+r,me(a,s,wa(f-1,t,e,p)),i.sheets.push(s),Oe(t.wbrels,-1,"worksheets/sheet"+f+"."+r,Se.WS[0])}if(x){var E=x["!comments"],c=!1,_="";if(E&&E.length>0){var N=!1;E.forEach(function(I){I[1].forEach(function(D){D.T==!0&&(N=!0)})}),N&&(_="xl/threadedComments/threadedComment"+f+"."+r,me(a,_,al(E,h,t)),i.threadedcomments.push(_),Oe(p,-1,"../threadedComments/threadedComment"+f+"."+r,Se.TCMNT)),_="xl/comments"+f+"."+r,me(a,_,ua(E)),i.comments.push(_),Oe(p,-1,"../comments"+f+"."+r,Se.CMNT),c=!0}x["!legacy"]&&c&&me(a,"xl/drawings/vmlDrawing"+f+".vml",ca(f,x["!comments"])),delete x["!comments"],delete x["!legacy"]}p["!id"].rId1&&me(a,Xi(s),ut(p))}return t.Strings!=null&&t.Strings.length>0&&(s="xl/sharedStrings."+r,me(a,s,na(t.Strings,t)),i.strs.push(s),Oe(t.wbrels,-1,"sharedStrings."+r,Se.SST)),s="xl/workbook."+r,me(a,s,Fa(e)),i.workbooks.push(s),Oe(t.rels,1,s,Se.WB),s="xl/theme/theme1.xml",me(a,s,la(e.Themes,t)),i.themes.push(s),Oe(t.wbrels,-1,"theme/theme1.xml",Se.THEME),s="xl/styles."+r,me(a,s,fa(e,t)),i.styles.push(s),Oe(t.wbrels,-1,"styles."+r,Se.STY),e.vbaraw&&n&&(s="xl/vbaProject.bin",me(a,s,e.vbaraw),i.vba.push(s),Oe(t.wbrels,-1,"vbaProject.bin",Se.VBA)),s="xl/metadata."+r,me(a,s,ha()),i.metadata.push(s),Oe(t.wbrels,-1,"metadata."+r,Se.XLMETA),h.length>1&&(s="xl/persons/person.xml",me(a,s,sl(h)),i.people.push(s),Oe(t.wbrels,-1,"persons/person.xml",Se.PEOPLE)),me(a,"[Content_Types].xml",Gi(i,t)),me(a,"_rels/.rels",ut(t.rels)),me(a,"xl/_rels/workbook."+r+".rels",ut(t.wbrels)),delete t.revssf,delete t.ssf,a}function k1(e,t){var r="";switch((t||{}).type||"base64"){case"buffer":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];case"base64":r=Br(e.slice(0,12));break;case"binary":r=e;break;case"array":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];default:throw new Error("Unrecognized type "+(t&&t.type||"undefined"))}return[r.charCodeAt(0),r.charCodeAt(1),r.charCodeAt(2),r.charCodeAt(3),r.charCodeAt(4),r.charCodeAt(5),r.charCodeAt(6),r.charCodeAt(7)]}function Ia(e,t){switch(t.type){case"base64":case"binary":break;case"buffer":case"array":t.type="";break;case"file":return Vt(t.file,De.write(e,{type:Ae?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");default:throw new Error("Unrecognized type "+t.type)}return De.write(e,t)}function R1(e,t){var r=cr(t||{}),n=y1(e,r);return D1(n,r)}function D1(e,t){var r={},n=Ae?"nodebuffer":typeof Uint8Array<"u"?"array":"string";if(t.compression&&(r.compression="DEFLATE"),t.password)r.type=n;else switch(t.type){case"base64":r.type="base64";break;case"binary":r.type="string";break;case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");case"buffer":case"file":r.type=n;break;default:throw new Error("Unrecognized type "+t.type)}var i=e.FullPaths?De.write(e,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[r.type]||r.type,compression:!!t.compression}):e.generate(r);if(typeof Deno<"u"&&typeof i=="string"){if(t.type=="binary"||t.type=="base64")return i;i=new Uint8Array(Tn(i))}return t.password&&typeof encrypt_agile<"u"?Ia(encrypt_agile(i,t.password),t):t.type==="file"?Vt(t.file,i):t.type=="string"?kt(i):i}function I1(e,t){var r=t||{},n=$u(e,r);return Ia(n,r)}function kr(e,t,r){r||(r="");var n=r+e;switch(t.type){case"base64":return Pt(Bt(n));case"binary":return Bt(n);case"string":return e;case"file":return Vt(t.file,n,"utf8");case"buffer":return Ae?Ur(n,"utf8"):typeof TextEncoder<"u"?new TextEncoder().encode(n):kr(n,{type:"binary"}).split("").map(function(i){return i.charCodeAt(0)})}throw new Error("Unrecognized type "+t.type)}function N1(e,t){switch(t.type){case"base64":return Pt(e);case"binary":return e;case"string":return e;case"file":return Vt(t.file,e,"binary");case"buffer":return Ae?Ur(e,"binary"):e.split("").map(function(r){return r.charCodeAt(0)})}throw new Error("Unrecognized type "+t.type)}function tn(e,t){switch(t.type){case"string":case"base64":case"binary":for(var r="",n=0;n0&&(i=0);var p=Qe(l.s.r),x=[],d=[],E=0,c=0,_=Array.isArray(e),N=l.s.r,I=0,D={};_&&!e[N]&&(e[N]=[]);var W=o.skipHidden&&e["!cols"]||[],z=o.skipHidden&&e["!rows"]||[];for(I=l.s.c;I<=l.e.c;++I)if(!(W[I]||{}).hidden)switch(x[I]=nr(I),r=_?e[N][I]:e[x[I]+p],n){case 1:a[I]=I-l.s.c;break;case 2:a[I]=x[I];break;case 3:a[I]=o.header[I-l.s.c];break;default:if(r==null&&(r={w:"__EMPTY",t:"s"}),f=s=br(r,null,o),c=D[s]||0,!c)D[s]=1;else{do f=s+"_"+c++;while(D[f]);D[s]=c,D[f]=1}a[I]=f}for(N=l.s.r+i;N<=l.e.r;++N)if(!(z[N]||{}).hidden){var re=M1(e,l,N,x,n,a,_,o);(re.isempty===!1||(n===1?o.blankrows!==!1:o.blankrows))&&(d[E++]=re.row)}return d.length=E,d}var ri=/"/g;function B1(e,t,r,n,i,a,s,f){for(var l=!0,o=[],h="",p=Qe(r),x=t.s.c;x<=t.e.c;++x)if(n[x]){var d=f.dense?(e[r]||[])[x]:e[n[x]+p];if(d==null)h="";else if(d.v!=null){l=!1,h=""+(f.rawNumbers&&d.t=="n"?d.v:br(d,null,f));for(var E=0,c=0;E!==h.length;++E)if((c=h.charCodeAt(E))===i||c===a||c===34||f.forceQuotes){h='"'+h.replace(ri,'""')+'"';break}h=="ID"&&(h='"ID"')}else d.f!=null&&!d.F?(l=!1,h="="+d.f,h.indexOf(",")>=0&&(h='"'+h.replace(ri,'""')+'"')):h="";o.push(h)}return f.blankrows===!1&&l?null:o.join(s)}function h0(e,t){var r=[],n=t??{};if(e==null||e["!ref"]==null)return"";var i=Le(e["!ref"]),a=n.FS!==void 0?n.FS:",",s=a.charCodeAt(0),f=n.RS!==void 0?n.RS:` +`,l=f.charCodeAt(0),o=new RegExp((a=="|"?"\\|":a)+"+$"),h="",p=[];n.dense=Array.isArray(e);for(var x=n.skipHidden&&e["!cols"]||[],d=n.skipHidden&&e["!rows"]||[],E=i.s.c;E<=i.e.c;++E)(x[E]||{}).hidden||(p[E]=nr(E));for(var c=0,_=i.s.r;_<=i.e.r;++_)(d[_]||{}).hidden||(h=B1(e,i,_,p,s,l,a,n),h!=null&&(n.strip&&(h=h.replace(o,"")),(h||n.blankrows!==!1)&&r.push((c++?f:"")+h)));return delete n.dense,r.join("")}function La(e,t){t||(t={}),t.FS=" ",t.RS=` +`;var r=h0(e,t);return r}function b1(e){var t="",r,n="";if(e==null||e["!ref"]==null)return[];var i=Le(e["!ref"]),a="",s=[],f,l=[],o=Array.isArray(e);for(f=i.s.c;f<=i.e.c;++f)s[f]=nr(f);for(var h=i.s.r;h<=i.e.r;++h)for(a=Qe(h),f=i.s.c;f<=i.e.c;++f)if(t=s[f]+a,r=o?(e[h]||[])[f]:e[t],n="",r!==void 0){if(r.F!=null){if(t=r.F,!r.f)continue;n=r.f,t.indexOf(":")==-1&&(t=t+":"+t)}if(r.f!=null)n=r.f;else{if(r.t=="z")continue;if(r.t=="n"&&r.v!=null)n=""+r.v;else if(r.t=="b")n=r.v?"TRUE":"FALSE";else if(r.w!==void 0)n="'"+r.w;else{if(r.v===void 0)continue;r.t=="s"?n="'"+r.v:n=""+r.v}}l[l.length]=t+"="+n}return l}function Pa(e,t,r){var n=r||{},i=+!n.skipHeader,a=e||{},s=0,f=0;if(a&&n.origin!=null)if(typeof n.origin=="number")s=n.origin;else{var l=typeof n.origin=="string"?ze(n.origin):n.origin;s=l.r,f=l.c}var o,h={s:{c:0,r:0},e:{c:f,r:s+t.length-1+i}};if(a["!ref"]){var p=Le(a["!ref"]);h.e.c=Math.max(h.e.c,p.e.c),h.e.r=Math.max(h.e.r,p.e.r),s==-1&&(s=p.e.r+1,h.e.r=s+t.length-1+i)}else s==-1&&(s=0,h.e.r=t.length-1+i);var x=n.header||[],d=0;t.forEach(function(c,_){er(c).forEach(function(N){(d=x.indexOf(N))==-1&&(x[d=x.length]=N);var I=c[N],D="z",W="",z=Re({c:f+d,r:s+_+i});o=Wt(a,z),I&&typeof I=="object"&&!(I instanceof Date)?a[z]=I:(typeof I=="number"?D="n":typeof I=="boolean"?D="b":typeof I=="string"?D="s":I instanceof Date?(D="d",n.cellDates||(D="n",I=hr(I)),W=n.dateNF||Ue[14]):I===null&&n.nullError&&(D="e",I=0),o?(o.t=D,o.v=I,delete o.w,delete o.R,W&&(o.z=W)):a[z]=o={t:D,v:I},W&&(o.z=W))})}),h.e.c=Math.max(h.e.c,f+x.length-1);var E=Qe(s);if(i)for(d=0;d=0&&e.SheetNames.length>t)return t;throw new Error("Cannot find sheet # "+t)}else if(typeof t=="string"){var r=e.SheetNames.indexOf(t);if(r>-1)return r;throw new Error("Cannot find sheet name |"+t+"|")}else throw new Error("Cannot find sheet |"+t+"|")}function H1(){return{SheetNames:[],Sheets:{}}}function V1(e,t,r,n){var i=1;if(!r)for(;i<=65535&&e.SheetNames.indexOf(r="Sheet"+i)!=-1;++i,r=void 0);if(!r||e.SheetNames.length>=65535)throw new Error("Too many worksheets");if(n&&e.SheetNames.indexOf(r)>=0){var a=r.match(/(^.*?)(\d+)$/);i=a&&+a[2]||0;var s=a&&a[1]||r;for(++i;i<=65535&&e.SheetNames.indexOf(r=s+i)!=-1;++i);}if(Aa(r),e.SheetNames.indexOf(r)>=0)throw new Error("Worksheet with name |"+r+"| already exists!");return e.SheetNames.push(r),e.Sheets[r]=t,r}function G1(e,t,r){e.Workbook||(e.Workbook={}),e.Workbook.Sheets||(e.Workbook.Sheets=[]);var n=W1(e,t);switch(e.Workbook.Sheets[n]||(e.Workbook.Sheets[n]={}),r){case 0:case 1:case 2:break;default:throw new Error("Bad sheet visibility setting "+r)}e.Workbook.Sheets[n].Hidden=r}function X1(e,t){return e.z=t,e}function Ma(e,t,r){return t?(e.l={Target:t},r&&(e.l.Tooltip=r)):delete e.l,e}function j1(e,t,r){return Ma(e,"#"+t,r)}function z1(e,t,r){e.c||(e.c=[]),e.c.push({t,a:r||"SheetJS"})}function K1(e,t,r,n){for(var i=typeof t!="string"?t:Le(t),a=typeof t=="string"?t:He(t),s=i.s.r;s<=i.e.r;++s)for(var f=i.s.c;f<=i.e.c;++f){var l=Wt(e,s,f);l.t="n",l.F=a,delete l.v,s==i.s.r&&f==i.s.c&&(l.f=r,n&&(l.D=!0))}return e}var Un={encode_col:nr,encode_row:Qe,encode_cell:Re,encode_range:He,decode_col:Qn,decode_row:Zn,split_cell:sf,decode_cell:ze,decode_range:_r,format_cell:br,sheet_add_aoa:Mi,sheet_add_json:Pa,sheet_add_dom:ka,aoa_to_sheet:gt,json_to_sheet:U1,table_to_sheet:Ra,table_to_book:v1,sheet_to_csv:h0,sheet_to_txt:La,sheet_to_json:_n,sheet_to_html:Oa,sheet_to_formulae:b1,sheet_to_row_object_array:_n,sheet_get_cell:Wt,book_new:H1,book_append_sheet:V1,book_set_sheet_visibility:G1,cell_set_number_format:X1,cell_set_hyperlink:Ma,cell_set_internal_link:j1,cell_add_comment:z1,sheet_set_array_formula:K1,consts:{SHEET_VISIBLE:0,SHEET_HIDDEN:1,SHEET_VERY_HIDDEN:2}};const $1=et.div` + position: relative; + display: inline-block; +`,Y1=et.button` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1.5rem; + background: #10b981; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #059669; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:disabled { + opacity: 0.6; + cursor: not-allowed; + } +`,J1=et.div` + position: absolute; + top: 100%; + left: 0; + right: 0; + background: white; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + z-index: 50; + margin-top: 0.5rem; + overflow: hidden; +`,ti=et.button` + width: 100%; + padding: 0.75rem 1rem; + text-align: left; + background: none; + border: none; + cursor: pointer; + transition: background-color 0.2s; + display: flex; + align-items: center; + gap: 0.5rem; + + &:hover { + background: #f9fafb; + } + + &:focus { + outline: none; + background: #f0fdf4; + } +`;et.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + display: flex; + align-items: center; + justify-content: center; + border-radius: 0.5rem; +`;const q1=et.div` + width: 20px; + height: 20px; + border: 2px solid #f3f4f6; + border-top: 2px solid #10b981; + border-radius: 50%; + animation: spin 1s linear infinite; + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } +`,Z1=et.div` + position: absolute; + top: 100%; + left: 0; + right: 0; + padding: 0.5rem; + margin-top: 0.5rem; + border-radius: 0.5rem; + font-size: 0.875rem; + z-index: 50; + + ${e=>e.type==="success"&&` + background: #d1fae5; + color: #065f46; + border: 1px solid #a7f3d0; + `} + + ${e=>e.type==="error"&&` + background: #fee2e2; + color: #991b1b; + border: 1px solid #fecaca; + `} +`,rx=({data:e=[],fileName:t="export",filters:r={},onExportStart:n,onExportComplete:i,onExportError:a})=>{const[s,f]=Rn.useState(!1),[l,o]=Rn.useState(!1),[h,p]=Rn.useState(null),x=e.filter(I=>{if(r.selectedForests&&r.selectedForests.length>0){const D=I.id<=4?1:2;if(!r.selectedForests.includes(D))return!1}if(r.dateRange){const D=new Date(2023,I.id%12,I.id%28+1);if(Dr.dateRange.endDate)return!1}return!0}),d=(I,D)=>{p({message:I,type:D}),setTimeout(()=>p(null),3e3)},E=async()=>{f(!1),o(!0);try{n&&n(),await new Promise(k=>setTimeout(k,500));const I=x.map(k=>({"Tree ID":k.name,Species:k.species,"Height (m)":k.height,Health:k.health,Latitude:k.lat,Longitude:k.lng,Forest:k.id<=4?"Forest A":"Forest B","Export Date":$t(new Date)})),D=ts.unparse(I),W=new Blob([D],{type:"text/csv;charset=utf-8;"}),z=document.createElement("a"),re=URL.createObjectURL(W);z.setAttribute("href",re),z.setAttribute("download",`${t}_${$t(new Date)}.csv`),z.style.visibility="hidden",document.body.appendChild(z),z.click(),document.body.removeChild(z),d(`CSV exported successfully (${x.length} records)`,"success"),i&&i("csv",x.length)}catch(I){console.error("CSV export error:",I),d("CSV export failed","error"),a&&a(I)}finally{o(!1)}},c=async()=>{f(!1),o(!0);try{n&&n(),await new Promise(z=>setTimeout(z,500));const I=x.map(z=>({"Tree ID":z.name,Species:z.species,"Height (m)":z.height,Health:z.health,Latitude:z.lat,Longitude:z.lng,Forest:z.id<=4?"Forest A":"Forest B","Export Date":$t(new Date)})),D=Un.book_new(),W=Un.json_to_sheet(I);Un.book_append_sheet(D,W,"Tree Data"),P1(D,`${t}_${$t(new Date)}.xlsx`),d(`XLSX exported successfully (${x.length} records)`,"success"),i&&i("xlsx",x.length)}catch(I){console.error("XLSX export error:",I),d("XLSX export failed","error"),a&&a(I)}finally{o(!1)}},_=()=>{l||f(!s)},N=I=>{I.target.closest(".export-container")||f(!1)};return s?document.addEventListener("click",N):document.removeEventListener("click",N),Ne.jsxs($1,{className:"export-container",children:[Ne.jsx(Y1,{onClick:_,disabled:l,children:l?Ne.jsxs(Ne.Fragment,{children:[Ne.jsx(q1,{}),"Exporting..."]}):Ne.jsxs(Ne.Fragment,{children:[Ne.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:Ne.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Export Data",Ne.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:Ne.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})}),s&&Ne.jsxs(J1,{children:[Ne.jsxs(ti,{onClick:E,children:[Ne.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:Ne.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),Ne.jsxs("div",{children:[Ne.jsx("div",{className:"font-medium",children:"Export as CSV"}),Ne.jsxs("div",{className:"text-xs text-gray-500",children:[x.length," records • Comma-separated values"]})]})]}),Ne.jsxs(ti,{onClick:c,children:[Ne.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:Ne.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),Ne.jsxs("div",{children:[Ne.jsx("div",{className:"font-medium",children:"Export as XLSX"}),Ne.jsxs("div",{className:"text-xs text-gray-500",children:[x.length," records • Excel spreadsheet"]})]})]})]}),h&&Ne.jsx(Z1,{type:h.type,children:h.message})]})};export{rx as E}; diff --git a/frontend/dist/assets/FilterHeader-DdjxYr1F.css b/frontend/dist/assets/FilterHeader-DdjxYr1F.css new file mode 100644 index 0000000000..87be4be039 --- /dev/null +++ b/frontend/dist/assets/FilterHeader-DdjxYr1F.css @@ -0,0 +1 @@ +@charset "UTF-8";.react-datepicker__navigation-icon:before,.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow{border-color:#ccc;border-style:solid;border-width:3px 3px 0 0;content:"";display:block;height:9px;position:absolute;top:6px;width:9px}.react-datepicker-wrapper{display:inline-block;padding:0;border:0}.react-datepicker{font-family:Helvetica Neue,helvetica,arial,sans-serif;font-size:.8rem;background-color:#fff;color:#000;border:1px solid #aeaeae;border-radius:.3rem;display:inline-block;position:relative;line-height:initial}.react-datepicker--time-only .react-datepicker__time-container{border-left:0}.react-datepicker--time-only .react-datepicker__time,.react-datepicker--time-only .react-datepicker__time-box{border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker-popper{z-index:1;line-height:0}.react-datepicker-popper .react-datepicker__triangle{stroke:#aeaeae}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{fill:#f0f0f0;color:#f0f0f0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle{fill:#fff;color:#fff}.react-datepicker__header{text-align:center;background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:.3rem;padding:8px 0;position:relative}.react-datepicker__header--time{padding-bottom:8px;padding-left:5px;padding-right:5px}.react-datepicker__header--time:not(.react-datepicker__header--time--only){border-top-left-radius:0}.react-datepicker__header:not(.react-datepicker__header--has-time-select){border-top-right-radius:.3rem}.react-datepicker__year-dropdown-container--select,.react-datepicker__month-dropdown-container--select,.react-datepicker__month-year-dropdown-container--select,.react-datepicker__year-dropdown-container--scroll,.react-datepicker__month-dropdown-container--scroll,.react-datepicker__month-year-dropdown-container--scroll{display:inline-block;margin:0 15px}.react-datepicker__current-month,.react-datepicker-time__header,.react-datepicker-year-header{margin-top:0;color:#000;font-weight:700;font-size:.944rem}h2.react-datepicker__current-month{padding:0;margin:0}.react-datepicker-time__header{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.react-datepicker__navigation{align-items:center;background:none;display:flex;justify-content:center;text-align:center;cursor:pointer;position:absolute;top:2px;padding:0;border:none;z-index:1;height:32px;width:32px;text-indent:-999em;overflow:hidden}.react-datepicker__navigation--previous{left:2px}.react-datepicker__navigation--next{right:2px}.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:85px}.react-datepicker__navigation--years{position:relative;top:0;display:block;margin-left:auto;margin-right:auto}.react-datepicker__navigation--years-previous{top:4px}.react-datepicker__navigation--years-upcoming{top:-4px}.react-datepicker__navigation:hover *:before{border-color:#a6a6a6}.react-datepicker__navigation-icon{position:relative;top:-1px;font-size:20px;width:0}.react-datepicker__navigation-icon--next{left:-2px}.react-datepicker__navigation-icon--next:before{transform:rotate(45deg);left:-7px}.react-datepicker__navigation-icon--previous{right:-2px}.react-datepicker__navigation-icon--previous:before{transform:rotate(225deg);right:-7px}.react-datepicker__month-container{float:left}.react-datepicker__year{margin:.4rem;text-align:center}.react-datepicker__year-wrapper{display:flex;flex-wrap:wrap;max-width:180px}.react-datepicker__year .react-datepicker__year-text{display:inline-block;width:4rem;margin:2px}.react-datepicker__month{margin:.4rem;text-align:center}.react-datepicker__month .react-datepicker__month-text,.react-datepicker__month .react-datepicker__quarter-text{display:inline-block;width:4rem;margin:2px}.react-datepicker__input-time-container{clear:both;width:100%;float:left;margin:5px 0 10px 15px;text-align:left}.react-datepicker__input-time-container .react-datepicker-time__caption,.react-datepicker__input-time-container .react-datepicker-time__input-container{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input{display:inline-block;margin-left:10px}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input{width:auto}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]{-moz-appearance:textfield}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter{margin-left:5px;display:inline-block}.react-datepicker__time-container{float:right;border-left:1px solid #aeaeae;width:85px}.react-datepicker__time-container--with-today-button{display:inline;border:1px solid #aeaeae;border-radius:.3rem;position:absolute;right:-87px;top:0}.react-datepicker__time-container .react-datepicker__time{position:relative;background:#fff;border-bottom-right-radius:.3rem}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{width:85px;overflow-x:hidden;margin:0 auto;text-align:center;border-bottom-right-radius:.3rem}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list{list-style:none;margin:0;height:calc(195px + .85rem);overflow-y:scroll;padding-right:0;padding-left:0;width:100%;box-sizing:content-box}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item{height:30px;padding:5px 10px;white-space:nowrap}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover{cursor:pointer;background-color:#f0f0f0}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected{background-color:#216ba5;color:#fff;font-weight:700}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover{background-color:#216ba5}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled{color:#ccc}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover{cursor:default;background-color:transparent}.react-datepicker__week-number{color:#ccc;display:inline-block;width:1.7rem;line-height:1.7rem;text-align:center;margin:.166rem}.react-datepicker__week-number.react-datepicker__week-number--clickable{cursor:pointer}.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected):hover{border-radius:.3rem;background-color:#f0f0f0}.react-datepicker__week-number--selected{border-radius:.3rem;background-color:#216ba5;color:#fff}.react-datepicker__week-number--selected:hover{background-color:#1d5d90}.react-datepicker__day-names{white-space:nowrap;margin-bottom:-8px}.react-datepicker__week{white-space:nowrap}.react-datepicker__day-name,.react-datepicker__day,.react-datepicker__time-name{color:#000;display:inline-block;width:1.7rem;line-height:1.7rem;text-align:center;margin:.166rem}.react-datepicker__day,.react-datepicker__month-text,.react-datepicker__quarter-text,.react-datepicker__year-text{cursor:pointer}.react-datepicker__day:not([aria-disabled=true]):hover,.react-datepicker__month-text:not([aria-disabled=true]):hover,.react-datepicker__quarter-text:not([aria-disabled=true]):hover,.react-datepicker__year-text:not([aria-disabled=true]):hover{border-radius:.3rem;background-color:#f0f0f0}.react-datepicker__day--today,.react-datepicker__month-text--today,.react-datepicker__quarter-text--today,.react-datepicker__year-text--today{font-weight:700}.react-datepicker__day--highlighted,.react-datepicker__month-text--highlighted,.react-datepicker__quarter-text--highlighted,.react-datepicker__year-text--highlighted{border-radius:.3rem;background-color:#3dcc4a;color:#fff}.react-datepicker__day--highlighted:not([aria-disabled=true]):hover,.react-datepicker__month-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--highlighted:not([aria-disabled=true]):hover,.react-datepicker__year-text--highlighted:not([aria-disabled=true]):hover{background-color:#32be3f}.react-datepicker__day--highlighted-custom-1,.react-datepicker__month-text--highlighted-custom-1,.react-datepicker__quarter-text--highlighted-custom-1,.react-datepicker__year-text--highlighted-custom-1{color:#f0f}.react-datepicker__day--highlighted-custom-2,.react-datepicker__month-text--highlighted-custom-2,.react-datepicker__quarter-text--highlighted-custom-2,.react-datepicker__year-text--highlighted-custom-2{color:green}.react-datepicker__day--holidays,.react-datepicker__month-text--holidays,.react-datepicker__quarter-text--holidays,.react-datepicker__year-text--holidays{position:relative;border-radius:.3rem;background-color:#ff6803;color:#fff}.react-datepicker__day--holidays .overlay,.react-datepicker__month-text--holidays .overlay,.react-datepicker__quarter-text--holidays .overlay,.react-datepicker__year-text--holidays .overlay{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:4px;border-radius:4px;white-space:nowrap;visibility:hidden;opacity:0;transition:visibility 0s,opacity .3s ease-in-out}.react-datepicker__day--holidays:not([aria-disabled=true]):hover,.react-datepicker__month-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--holidays:not([aria-disabled=true]):hover,.react-datepicker__year-text--holidays:not([aria-disabled=true]):hover{background-color:#cf5300}.react-datepicker__day--holidays:hover .overlay,.react-datepicker__month-text--holidays:hover .overlay,.react-datepicker__quarter-text--holidays:hover .overlay,.react-datepicker__year-text--holidays:hover .overlay{visibility:visible;opacity:1}.react-datepicker__day--selected,.react-datepicker__day--in-selecting-range,.react-datepicker__day--in-range,.react-datepicker__month-text--selected,.react-datepicker__month-text--in-selecting-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--selected,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--selected,.react-datepicker__year-text--in-selecting-range,.react-datepicker__year-text--in-range{border-radius:.3rem;background-color:#216ba5;color:#fff}.react-datepicker__day--selected:not([aria-disabled=true]):hover,.react-datepicker__day--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__day--in-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__month-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--in-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-selecting-range:not([aria-disabled=true]):hover,.react-datepicker__year-text--in-range:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--keyboard-selected,.react-datepicker__month-text--keyboard-selected,.react-datepicker__quarter-text--keyboard-selected,.react-datepicker__year-text--keyboard-selected{border-radius:.3rem;background-color:#bad9f1;color:#000}.react-datepicker__day--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__month-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__quarter-text--keyboard-selected:not([aria-disabled=true]):hover,.react-datepicker__year-text--keyboard-selected:not([aria-disabled=true]):hover{background-color:#1d5d90}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range){background-color:#216ba580}.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range){background-color:#f0f0f0;color:#000}.react-datepicker__day--disabled,.react-datepicker__month-text--disabled,.react-datepicker__quarter-text--disabled,.react-datepicker__year-text--disabled{cursor:default;color:#ccc}.react-datepicker__day--disabled .overlay,.react-datepicker__month-text--disabled .overlay,.react-datepicker__quarter-text--disabled .overlay,.react-datepicker__year-text--disabled .overlay{position:absolute;bottom:70%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:4px;border-radius:4px;white-space:nowrap;visibility:hidden;opacity:0;transition:visibility 0s,opacity .3s ease-in-out}.react-datepicker__input-container{position:relative;display:inline-block;width:100%}.react-datepicker__input-container .react-datepicker__calendar-icon{position:absolute;padding:.5rem;box-sizing:content-box}.react-datepicker__view-calendar-icon input{padding:6px 10px 5px 25px}.react-datepicker__year-read-view,.react-datepicker__month-read-view,.react-datepicker__month-year-read-view{border:1px solid transparent;border-radius:.3rem;position:relative}.react-datepicker__year-read-view:hover,.react-datepicker__month-read-view:hover,.react-datepicker__month-year-read-view:hover{cursor:pointer}.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow{transform:rotate(135deg);right:-16px;top:0}.react-datepicker__year-dropdown,.react-datepicker__month-dropdown,.react-datepicker__month-year-dropdown{background-color:#f0f0f0;position:absolute;width:50%;left:25%;top:30px;z-index:1;text-align:center;border-radius:.3rem;border:1px solid #aeaeae}.react-datepicker__year-dropdown:hover,.react-datepicker__month-dropdown:hover,.react-datepicker__month-year-dropdown:hover{cursor:pointer}.react-datepicker__year-dropdown--scrollable,.react-datepicker__month-dropdown--scrollable,.react-datepicker__month-year-dropdown--scrollable{height:150px;overflow-y:scroll}.react-datepicker__year-option,.react-datepicker__month-option,.react-datepicker__month-year-option{line-height:20px;width:100%;display:block;margin-left:auto;margin-right:auto}.react-datepicker__year-option:first-of-type,.react-datepicker__month-option:first-of-type,.react-datepicker__month-year-option:first-of-type{border-top-left-radius:.3rem;border-top-right-radius:.3rem}.react-datepicker__year-option:last-of-type,.react-datepicker__month-option:last-of-type,.react-datepicker__month-year-option:last-of-type{-webkit-user-select:none;-moz-user-select:none;user-select:none;border-bottom-left-radius:.3rem;border-bottom-right-radius:.3rem}.react-datepicker__year-option:hover,.react-datepicker__month-option:hover,.react-datepicker__month-year-option:hover{background-color:#ccc}.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__year-option--selected,.react-datepicker__month-option--selected,.react-datepicker__month-year-option--selected{position:absolute;left:15px}.react-datepicker__close-icon{cursor:pointer;background-color:transparent;border:0;outline:0;padding:0 6px 0 0;position:absolute;top:0;right:0;height:100%;display:table-cell;vertical-align:middle}.react-datepicker__close-icon:after{cursor:pointer;background-color:#216ba5;color:#fff;border-radius:50%;height:16px;width:16px;padding:2px;font-size:12px;line-height:1;text-align:center;display:table-cell;vertical-align:middle;content:"×"}.react-datepicker__close-icon--disabled{cursor:default}.react-datepicker__close-icon--disabled:after{cursor:default;background-color:#ccc}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;cursor:pointer;text-align:center;font-weight:700;padding:5px 0;clear:left}.react-datepicker__portal{position:fixed;width:100vw;height:100vh;background-color:#000c;left:0;top:0;justify-content:center;align-items:center;display:flex;z-index:2147483647}.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__time-name{width:3rem;line-height:3rem}@media (max-width: 400px),(max-height: 550px){.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__time-name{width:2rem;line-height:2rem}}.react-datepicker__portal .react-datepicker__current-month,.react-datepicker__portal .react-datepicker-time__header{font-size:1.44rem}.react-datepicker__children-container{width:13.8rem;margin:.4rem;padding-right:.2rem;padding-left:.2rem;height:auto}.react-datepicker__aria-live{position:absolute;clip-path:circle(0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;width:1px;white-space:nowrap}.react-datepicker__calendar-icon{width:1em;height:1em;vertical-align:-.125em} diff --git a/frontend/dist/assets/FilterHeader-DzCm_NrU.js b/frontend/dist/assets/FilterHeader-DzCm_NrU.js new file mode 100644 index 0000000000..40dd236a75 --- /dev/null +++ b/frontend/dist/assets/FilterHeader-DzCm_NrU.js @@ -0,0 +1,276 @@ +var ta=Object.defineProperty;var ra=(n,a,t)=>a in n?ta(n,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[a]=t;var M=(n,a,t)=>ra(n,typeof a!="symbol"?a+"":a,t);import{r as D,h as wn,b as na,j as T,R as m,c as re,i as aa,d as H,k as oa,l as Pr}from"./index-DJ39NcK9.js";const ia=(n,a,t)=>{const[e,r]=D.useState(a||new Date(new Date().getFullYear(),0,1)),[o,i]=D.useState(t||new Date),s=D.useRef(n),c=D.useRef(!1);return D.useEffect(()=>{s.current=n},[n]),D.useEffect(()=>{if(!c.current){c.current=!0;return}const f=setTimeout(()=>{s.current&&e&&o&&s.current({startDate:e,endDate:o})},1e3);return()=>clearTimeout(f)},[e,o]),{startDate:e,endDate:o,handleStartDateChange:f=>{r(f),f&&o&&f>o&&i(f)},handleEndDateChange:f=>{i(f),f&&e&&f{const f=new Date(new Date().getFullYear(),0,1),p=new Date;r(f),i(p),s.current&&s.current({startDate:f,endDate:p})}}},Dn=6048e5,sa=864e5,Vt=6e4,qt=36e5,ca=1e3,Tr=Symbol.for("constructDateFrom");function U(n,a){return typeof n=="function"?n(a):n&&typeof n=="object"&&Tr in n?n[Tr](a):n instanceof Date?new n.constructor(a):new Date(a)}function E(n,a){return U(a||n,n)}function pe(n,a,t){const e=E(n,t==null?void 0:t.in);return isNaN(a)?U((t==null?void 0:t.in)||n,NaN):(a&&e.setDate(e.getDate()+a),e)}function he(n,a,t){const e=E(n,t==null?void 0:t.in);if(isNaN(a))return U(n,NaN);if(!a)return e;const r=e.getDate(),o=U(n,e.getTime());o.setMonth(e.getMonth()+a+1,0);const i=o.getDate();return r>=i?o:(e.setFullYear(o.getFullYear(),o.getMonth(),r),e)}function yn(n,a,t){return U(n,+E(n)+a)}function la(n,a,t){return yn(n,a*qt)}let ua={};function qe(){return ua}function Ee(n,a){var s,c,l,u;const t=qe(),e=(a==null?void 0:a.weekStartsOn)??((c=(s=a==null?void 0:a.locale)==null?void 0:s.options)==null?void 0:c.weekStartsOn)??t.weekStartsOn??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.weekStartsOn)??0,r=E(n,a==null?void 0:a.in),o=r.getDay(),i=(o=o.getTime()?e+1:t.getTime()>=s.getTime()?e:e-1}function Ot(n){const a=E(n),t=new Date(Date.UTC(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds()));return t.setUTCFullYear(a.getFullYear()),+n-+t}function Pe(n,...a){const t=U.bind(null,a.find(e=>typeof e=="object"));return a.map(t)}function Qe(n,a){const t=E(n,a==null?void 0:a.in);return t.setHours(0,0,0,0),t}function Xe(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Qe(e),i=Qe(r),s=+o-Ot(o),c=+i-Ot(i);return Math.round((s-c)/sa)}function da(n,a){const t=bn(n,a),e=U(n,0);return e.setFullYear(t,0,4),e.setHours(0,0,0,0),ze(e)}function cr(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setTime(e.getTime()+a*Vt),e}function mr(n,a,t){return he(n,a*3,t)}function fa(n,a,t){return yn(n,a*1e3)}function Rt(n,a,t){return pe(n,a*7,t)}function _e(n,a,t){return he(n,a*12,t)}function Or(n,a){let t,e=a==null?void 0:a.in;return n.forEach(r=>{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=E(r,e);(!t||t{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=E(r,e);(!t||t>o||isNaN(+o))&&(t=o)}),U(e,t||NaN)}function pa(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+Qe(e)==+Qe(r)}function xe(n){return n instanceof Date||typeof n=="object"&&Object.prototype.toString.call(n)==="[object Date]"}function Nt(n){return!(!xe(n)&&typeof n!="number"||isNaN(+E(n)))}function Yt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),i=e.getMonth()-r.getMonth();return o*12+i}function We(n,a){const t=E(n,a==null?void 0:a.in);return Math.trunc(t.getMonth()/3)+1}function Lt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),i=We(e)-We(r);return o*4+i}function Ft(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()-r.getFullYear()}function ha(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Nr(e,r),i=Math.abs(Xe(e,r));e.setDate(e.getDate()-o*i);const s=+(Nr(e,r)===-o),c=o*(i-s);return c===0?0:c}function Nr(n,a){const t=n.getFullYear()-a.getFullYear()||n.getMonth()-a.getMonth()||n.getDate()-a.getDate()||n.getHours()-a.getHours()||n.getMinutes()-a.getMinutes()||n.getSeconds()-a.getSeconds()||n.getMilliseconds()-a.getMilliseconds();return t<0?-1:t>0?1:t}function kn(n,a){const t=E(n,a==null?void 0:a.in);return t.setHours(23,59,59,999),t}function _n(n,a){const t=E(n,a==null?void 0:a.in),e=t.getMonth();return t.setFullYear(t.getFullYear(),e+1,0),t.setHours(23,59,59,999),t}function lr(n,a){const t=E(n,a==null?void 0:a.in),e=t.getMonth(),r=e-e%3;return t.setMonth(r,1),t.setHours(0,0,0,0),t}function xn(n,a){const t=E(n,a==null?void 0:a.in);return t.setDate(1),t.setHours(0,0,0,0),t}function Mn(n,a){const t=E(n,a==null?void 0:a.in),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function Kt(n,a){const t=E(n,a==null?void 0:a.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function ma(n,a){var s,c;const t=qe(),e=t.weekStartsOn??((c=(s=t.locale)==null?void 0:s.options)==null?void 0:c.weekStartsOn)??0,r=E(n,a==null?void 0:a.in),o=r.getDay(),i=(o{let e;const r=ga[n];return typeof r=="string"?e=r:a===1?e=r.one:e=r.other.replace("{{count}}",a.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+e:e+" ago":e};function Jt(n){return(a={})=>{const t=a.width?String(a.width):n.defaultWidth;return n.formats[t]||n.formats[n.defaultWidth]}}const wa={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Da={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},ya={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},ba={date:Jt({formats:wa,defaultWidth:"full"}),time:Jt({formats:Da,defaultWidth:"full"}),dateTime:Jt({formats:ya,defaultWidth:"full"})},ka={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},_a=(n,a,t,e)=>ka[n];function at(n){return(a,t)=>{const e=t!=null&&t.context?String(t.context):"standalone";let r;if(e==="formatting"&&n.formattingValues){const i=n.defaultFormattingWidth||n.defaultWidth,s=t!=null&&t.width?String(t.width):i;r=n.formattingValues[s]||n.formattingValues[i]}else{const i=n.defaultWidth,s=t!=null&&t.width?String(t.width):n.defaultWidth;r=n.values[s]||n.values[i]}const o=n.argumentCallback?n.argumentCallback(a):a;return r[o]}}const xa={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Ma={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Ca={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Sa={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Ea={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Pa={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Ta=(n,a)=>{const t=Number(n),e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},Oa={ordinalNumber:Ta,era:at({values:xa,defaultWidth:"wide"}),quarter:at({values:Ma,defaultWidth:"wide",argumentCallback:n=>n-1}),month:at({values:Ca,defaultWidth:"wide"}),day:at({values:Sa,defaultWidth:"wide"}),dayPeriod:at({values:Ea,defaultWidth:"wide",formattingValues:Pa,defaultFormattingWidth:"wide"})};function ot(n){return(a,t={})=>{const e=t.width,r=e&&n.matchPatterns[e]||n.matchPatterns[n.defaultMatchWidth],o=a.match(r);if(!o)return null;const i=o[0],s=e&&n.parsePatterns[e]||n.parsePatterns[n.defaultParseWidth],c=Array.isArray(s)?Na(s,d=>d.test(i)):Ra(s,d=>d.test(i));let l;l=n.valueCallback?n.valueCallback(c):c,l=t.valueCallback?t.valueCallback(l):l;const u=a.slice(i.length);return{value:l,rest:u}}}function Ra(n,a){for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&a(n[t]))return t}function Na(n,a){for(let t=0;t{const e=a.match(n.matchPattern);if(!e)return null;const r=e[0],o=a.match(n.parsePattern);if(!o)return null;let i=n.valueCallback?n.valueCallback(o[0]):o[0];i=t.valueCallback?t.valueCallback(i):i;const s=a.slice(r.length);return{value:i,rest:s}}}const La=/^(\d+)(th|st|nd|rd)?/i,Fa=/\d+/i,Ia={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Aa={any:[/^b/i,/^(a|c)/i]},Wa={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Ha={any:[/1/i,/2/i,/3/i,/4/i]},Ba={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Qa={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},ja={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Va={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},qa={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Ka={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Ua={ordinalNumber:Ya({matchPattern:La,parsePattern:Fa,valueCallback:n=>parseInt(n,10)}),era:ot({matchPatterns:Ia,defaultMatchWidth:"wide",parsePatterns:Aa,defaultParseWidth:"any"}),quarter:ot({matchPatterns:Wa,defaultMatchWidth:"wide",parsePatterns:Ha,defaultParseWidth:"any",valueCallback:n=>n+1}),month:ot({matchPatterns:Ba,defaultMatchWidth:"wide",parsePatterns:Qa,defaultParseWidth:"any"}),day:ot({matchPatterns:ja,defaultMatchWidth:"wide",parsePatterns:Va,defaultParseWidth:"any"}),dayPeriod:ot({matchPatterns:qa,defaultMatchWidth:"any",parsePatterns:Ka,defaultParseWidth:"any"})},Cn={code:"en-US",formatDistance:va,formatLong:ba,formatRelative:_a,localize:Oa,match:Ua,options:{weekStartsOn:0,firstWeekContainsDate:1}};function $a(n,a){const t=E(n,a==null?void 0:a.in);return Xe(t,Kt(t))+1}function gr(n,a){const t=E(n,a==null?void 0:a.in),e=+ze(t)-+da(t);return Math.round(e/Dn)+1}function vr(n,a){var u,d,f,p;const t=E(n,a==null?void 0:a.in),e=t.getFullYear(),r=qe(),o=(a==null?void 0:a.firstWeekContainsDate)??((d=(u=a==null?void 0:a.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??r.firstWeekContainsDate??((p=(f=r.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,i=U((a==null?void 0:a.in)||n,0);i.setFullYear(e+1,0,o),i.setHours(0,0,0,0);const s=Ee(i,a),c=U((a==null?void 0:a.in)||n,0);c.setFullYear(e,0,o),c.setHours(0,0,0,0);const l=Ee(c,a);return+t>=+s?e+1:+t>=+l?e:e-1}function Ga(n,a){var s,c,l,u;const t=qe(),e=(a==null?void 0:a.firstWeekContainsDate)??((c=(s=a==null?void 0:a.locale)==null?void 0:s.options)==null?void 0:c.firstWeekContainsDate)??t.firstWeekContainsDate??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.firstWeekContainsDate)??1,r=vr(n,a),o=U((a==null?void 0:a.in)||n,0);return o.setFullYear(r,0,e),o.setHours(0,0,0,0),Ee(o,a)}function Sn(n,a){const t=E(n,a==null?void 0:a.in),e=+Ee(t,a)-+Ga(t,a);return Math.round(e/Dn)+1}function K(n,a){const t=n<0?"-":"",e=Math.abs(n).toString().padStart(a,"0");return t+e}const Te={y(n,a){const t=n.getFullYear(),e=t>0?t:1-t;return K(a==="yy"?e%100:e,a.length)},M(n,a){const t=n.getMonth();return a==="M"?String(t+1):K(t+1,2)},d(n,a){return K(n.getDate(),a.length)},a(n,a){const t=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(n,a){return K(n.getHours()%12||12,a.length)},H(n,a){return K(n.getHours(),a.length)},m(n,a){return K(n.getMinutes(),a.length)},s(n,a){return K(n.getSeconds(),a.length)},S(n,a){const t=a.length,e=n.getMilliseconds(),r=Math.trunc(e*Math.pow(10,t-3));return K(r,a.length)}},Ke={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Yr={G:function(n,a,t){const e=n.getFullYear()>0?1:0;switch(a){case"G":case"GG":case"GGG":return t.era(e,{width:"abbreviated"});case"GGGGG":return t.era(e,{width:"narrow"});case"GGGG":default:return t.era(e,{width:"wide"})}},y:function(n,a,t){if(a==="yo"){const e=n.getFullYear(),r=e>0?e:1-e;return t.ordinalNumber(r,{unit:"year"})}return Te.y(n,a)},Y:function(n,a,t,e){const r=vr(n,e),o=r>0?r:1-r;if(a==="YY"){const i=o%100;return K(i,2)}return a==="Yo"?t.ordinalNumber(o,{unit:"year"}):K(o,a.length)},R:function(n,a){const t=bn(n);return K(t,a.length)},u:function(n,a){const t=n.getFullYear();return K(t,a.length)},Q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"Q":return String(e);case"QQ":return K(e,2);case"Qo":return t.ordinalNumber(e,{unit:"quarter"});case"QQQ":return t.quarter(e,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(e,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(e,{width:"wide",context:"formatting"})}},q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"q":return String(e);case"qq":return K(e,2);case"qo":return t.ordinalNumber(e,{unit:"quarter"});case"qqq":return t.quarter(e,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(e,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(e,{width:"wide",context:"standalone"})}},M:function(n,a,t){const e=n.getMonth();switch(a){case"M":case"MM":return Te.M(n,a);case"Mo":return t.ordinalNumber(e+1,{unit:"month"});case"MMM":return t.month(e,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(e,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(e,{width:"wide",context:"formatting"})}},L:function(n,a,t){const e=n.getMonth();switch(a){case"L":return String(e+1);case"LL":return K(e+1,2);case"Lo":return t.ordinalNumber(e+1,{unit:"month"});case"LLL":return t.month(e,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(e,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(e,{width:"wide",context:"standalone"})}},w:function(n,a,t,e){const r=Sn(n,e);return a==="wo"?t.ordinalNumber(r,{unit:"week"}):K(r,a.length)},I:function(n,a,t){const e=gr(n);return a==="Io"?t.ordinalNumber(e,{unit:"week"}):K(e,a.length)},d:function(n,a,t){return a==="do"?t.ordinalNumber(n.getDate(),{unit:"date"}):Te.d(n,a)},D:function(n,a,t){const e=$a(n);return a==="Do"?t.ordinalNumber(e,{unit:"dayOfYear"}):K(e,a.length)},E:function(n,a,t){const e=n.getDay();switch(a){case"E":case"EE":case"EEE":return t.day(e,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(e,{width:"short",context:"formatting"});case"EEEE":default:return t.day(e,{width:"wide",context:"formatting"})}},e:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"e":return String(o);case"ee":return K(o,2);case"eo":return t.ordinalNumber(o,{unit:"day"});case"eee":return t.day(r,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(r,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(r,{width:"short",context:"formatting"});case"eeee":default:return t.day(r,{width:"wide",context:"formatting"})}},c:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"c":return String(o);case"cc":return K(o,a.length);case"co":return t.ordinalNumber(o,{unit:"day"});case"ccc":return t.day(r,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(r,{width:"narrow",context:"standalone"});case"cccccc":return t.day(r,{width:"short",context:"standalone"});case"cccc":default:return t.day(r,{width:"wide",context:"standalone"})}},i:function(n,a,t){const e=n.getDay(),r=e===0?7:e;switch(a){case"i":return String(r);case"ii":return K(r,a.length);case"io":return t.ordinalNumber(r,{unit:"day"});case"iii":return t.day(e,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(e,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(e,{width:"short",context:"formatting"});case"iiii":default:return t.day(e,{width:"wide",context:"formatting"})}},a:function(n,a,t){const r=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(n,a,t){const e=n.getHours();let r;switch(e===12?r=Ke.noon:e===0?r=Ke.midnight:r=e/12>=1?"pm":"am",a){case"b":case"bb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(n,a,t){const e=n.getHours();let r;switch(e>=17?r=Ke.evening:e>=12?r=Ke.afternoon:e>=4?r=Ke.morning:r=Ke.night,a){case"B":case"BB":case"BBB":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(n,a,t){if(a==="ho"){let e=n.getHours()%12;return e===0&&(e=12),t.ordinalNumber(e,{unit:"hour"})}return Te.h(n,a)},H:function(n,a,t){return a==="Ho"?t.ordinalNumber(n.getHours(),{unit:"hour"}):Te.H(n,a)},K:function(n,a,t){const e=n.getHours()%12;return a==="Ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},k:function(n,a,t){let e=n.getHours();return e===0&&(e=24),a==="ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},m:function(n,a,t){return a==="mo"?t.ordinalNumber(n.getMinutes(),{unit:"minute"}):Te.m(n,a)},s:function(n,a,t){return a==="so"?t.ordinalNumber(n.getSeconds(),{unit:"second"}):Te.s(n,a)},S:function(n,a){return Te.S(n,a)},X:function(n,a,t){const e=n.getTimezoneOffset();if(e===0)return"Z";switch(a){case"X":return Fr(e);case"XXXX":case"XX":return Fe(e);case"XXXXX":case"XXX":default:return Fe(e,":")}},x:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"x":return Fr(e);case"xxxx":case"xx":return Fe(e);case"xxxxx":case"xxx":default:return Fe(e,":")}},O:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"O":case"OO":case"OOO":return"GMT"+Lr(e,":");case"OOOO":default:return"GMT"+Fe(e,":")}},z:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"z":case"zz":case"zzz":return"GMT"+Lr(e,":");case"zzzz":default:return"GMT"+Fe(e,":")}},t:function(n,a,t){const e=Math.trunc(+n/1e3);return K(e,a.length)},T:function(n,a,t){return K(+n,a.length)}};function Lr(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=Math.trunc(e/60),o=e%60;return o===0?t+String(r):t+String(r)+a+K(o,2)}function Fr(n,a){return n%60===0?(n>0?"-":"+")+K(Math.abs(n)/60,2):Fe(n,a)}function Fe(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=K(Math.trunc(e/60),2),o=K(e%60,2);return t+r+a+o}const Ir=(n,a)=>{switch(n){case"P":return a.date({width:"short"});case"PP":return a.date({width:"medium"});case"PPP":return a.date({width:"long"});case"PPPP":default:return a.date({width:"full"})}},En=(n,a)=>{switch(n){case"p":return a.time({width:"short"});case"pp":return a.time({width:"medium"});case"ppp":return a.time({width:"long"});case"pppp":default:return a.time({width:"full"})}},za=(n,a)=>{const t=n.match(/(P+)(p+)?/)||[],e=t[1],r=t[2];if(!r)return Ir(n,a);let o;switch(e){case"P":o=a.dateTime({width:"short"});break;case"PP":o=a.dateTime({width:"medium"});break;case"PPP":o=a.dateTime({width:"long"});break;case"PPPP":default:o=a.dateTime({width:"full"});break}return o.replace("{{date}}",Ir(e,a)).replace("{{time}}",En(r,a))},ur={p:En,P:za},Xa=/^D+$/,Za=/^Y+$/,Ja=["D","DD","YY","YYYY"];function eo(n){return Xa.test(n)}function to(n){return Za.test(n)}function ro(n,a,t){const e=no(n,a,t);if(console.warn(e),Ja.includes(n))throw new RangeError(e)}function no(n,a,t){const e=n[0]==="Y"?"years":"days of the month";return`Use \`${n.toLowerCase()}\` instead of \`${n}\` (in \`${a}\`) for formatting ${e} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const ao=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,oo=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,io=/^'([^]*?)'?$/,so=/''/g,co=/[a-zA-Z]/;function Ar(n,a,t){var u,d,f,p,h,v,g,y;const e=qe(),r=(t==null?void 0:t.locale)??e.locale??Cn,o=(t==null?void 0:t.firstWeekContainsDate)??((d=(u=t==null?void 0:t.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??e.firstWeekContainsDate??((p=(f=e.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,i=(t==null?void 0:t.weekStartsOn)??((v=(h=t==null?void 0:t.locale)==null?void 0:h.options)==null?void 0:v.weekStartsOn)??e.weekStartsOn??((y=(g=e.locale)==null?void 0:g.options)==null?void 0:y.weekStartsOn)??0,s=E(n,t==null?void 0:t.in);if(!Nt(s))throw new RangeError("Invalid time value");let c=a.match(oo).map(_=>{const w=_[0];if(w==="p"||w==="P"){const b=ur[w];return b(_,r.formatLong)}return _}).join("").match(ao).map(_=>{if(_==="''")return{isToken:!1,value:"'"};const w=_[0];if(w==="'")return{isToken:!1,value:lo(_)};if(Yr[w])return{isToken:!0,value:_};if(w.match(co))throw new RangeError("Format string contains an unescaped latin alphabet character `"+w+"`");return{isToken:!1,value:_}});r.localize.preprocessor&&(c=r.localize.preprocessor(s,c));const l={firstWeekContainsDate:o,weekStartsOn:i,locale:r};return c.map(_=>{if(!_.isToken)return _.value;const w=_.value;(!(t!=null&&t.useAdditionalWeekYearTokens)&&to(w)||!(t!=null&&t.useAdditionalDayOfYearTokens)&&eo(w))&&ro(w,a,String(n));const b=Yr[w[0]];return b(s,w,r.localize,l)}).join("")}function lo(n){const a=n.match(io);return a?a[1].replace(so,"'"):n}function Wr(n,a){return E(n,a==null?void 0:a.in).getDate()}function uo(n,a){return E(n,a==null?void 0:a.in).getDay()}function fo(n,a){const t=E(n,a==null?void 0:a.in),e=t.getFullYear(),r=t.getMonth(),o=U(t,0);return o.setFullYear(e,r+1,0),o.setHours(0,0,0,0),o.getDate()}function po(){return Object.assign({},qe())}function Me(n,a){return E(n,a==null?void 0:a.in).getHours()}function ho(n,a){const t=E(n,a==null?void 0:a.in).getDay();return t===0?7:t}function Ce(n,a){return E(n,a==null?void 0:a.in).getMinutes()}function ne(n,a){return E(n,a==null?void 0:a.in).getMonth()}function Re(n){return E(n).getSeconds()}function dr(n){return+E(n)}function L(n,a){return E(n,a==null?void 0:a.in).getFullYear()}function Ye(n,a){return+E(n)>+E(a)}function je(n,a){return+E(n)<+E(a)}function mo(n,a){return+E(n)==+E(a)}function go(n,a){const t=vo(a)?new a(0):U(a,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t.setHours(n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()),t}function vo(n){var a;return typeof n=="function"&&((a=n.prototype)==null?void 0:a.constructor)===n}const wo=10;class Pn{constructor(){M(this,"subPriority",0)}validate(a,t){return!0}}class Do extends Pn{constructor(a,t,e,r,o){super(),this.value=a,this.validateValue=t,this.setValue=e,this.priority=r,o&&(this.subPriority=o)}validate(a,t){return this.validateValue(a,this.value,t)}set(a,t,e){return this.setValue(a,t,this.value,e)}}class yo extends Pn{constructor(t,e){super();M(this,"priority",wo);M(this,"subPriority",-1);this.context=t||(r=>U(e,r))}set(t,e){return e.timestampIsSet?t:U(t,go(t,this.context))}}class B{run(a,t,e,r){const o=this.parse(a,t,e,r);return o?{setter:new Do(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(a,t,e){return!0}}class bo extends B{constructor(){super(...arguments);M(this,"priority",140);M(this,"incompatibleTokens",["R","u","t","T"])}parse(t,e,r){switch(e){case"G":case"GG":case"GGG":return r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"});case"GGGGG":return r.era(t,{width:"narrow"});case"GGGG":default:return r.era(t,{width:"wide"})||r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"})}}set(t,e,r){return e.era=r,t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}const Z={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},ve={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function J(n,a){return n&&{value:a(n.value),rest:n.rest}}function z(n,a){const t=a.match(n);return t?{value:parseInt(t[0],10),rest:a.slice(t[0].length)}:null}function we(n,a){const t=a.match(n);if(!t)return null;if(t[0]==="Z")return{value:0,rest:a.slice(1)};const e=t[1]==="+"?1:-1,r=t[2]?parseInt(t[2],10):0,o=t[3]?parseInt(t[3],10):0,i=t[5]?parseInt(t[5],10):0;return{value:e*(r*qt+o*Vt+i*ca),rest:a.slice(t[0].length)}}function Tn(n){return z(Z.anyDigitsSigned,n)}function X(n,a){switch(n){case 1:return z(Z.singleDigit,a);case 2:return z(Z.twoDigits,a);case 3:return z(Z.threeDigits,a);case 4:return z(Z.fourDigits,a);default:return z(new RegExp("^\\d{1,"+n+"}"),a)}}function It(n,a){switch(n){case 1:return z(Z.singleDigitSigned,a);case 2:return z(Z.twoDigitsSigned,a);case 3:return z(Z.threeDigitsSigned,a);case 4:return z(Z.fourDigitsSigned,a);default:return z(new RegExp("^-?\\d{1,"+n+"}"),a)}}function wr(n){switch(n){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function On(n,a){const t=a>0,e=t?a:1-a;let r;if(e<=50)r=n||100;else{const o=e+50,i=Math.trunc(o/100)*100,s=n>=o%100;r=n+i-(s?100:0)}return t?r:1-r}function Rn(n){return n%400===0||n%4===0&&n%100!==0}class ko extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(t,e,r){const o=i=>({year:i,isTwoDigitYear:e==="yy"});switch(e){case"y":return J(X(4,t),o);case"yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r){const o=t.getFullYear();if(r.isTwoDigitYear){const s=On(r.year,o);return t.setFullYear(s,0,1),t.setHours(0,0,0,0),t}const i=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(i,0,1),t.setHours(0,0,0,0),t}}class _o extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(t,e,r){const o=i=>({year:i,isTwoDigitYear:e==="YY"});switch(e){case"Y":return J(X(4,t),o);case"Yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r,o){const i=vr(t,o);if(r.isTwoDigitYear){const c=On(r.year,i);return t.setFullYear(c,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}const s=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(s,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}}class xo extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(t,e){return It(e==="R"?4:e.length,t)}set(t,e,r){const o=U(t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),ze(o)}}class Mo extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(t,e){return It(e==="u"?4:e.length,t)}set(t,e,r){return t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}class Co extends B{constructor(){super(...arguments);M(this,"priority",120);M(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"Q":case"QQ":return X(e.length,t);case"Qo":return r.ordinalNumber(t,{unit:"quarter"});case"QQQ":return r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQ":default:return r.quarter(t,{width:"wide",context:"formatting"})||r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class So extends B{constructor(){super(...arguments);M(this,"priority",120);M(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"q":case"qq":return X(e.length,t);case"qo":return r.ordinalNumber(t,{unit:"quarter"});case"qqq":return r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(t,{width:"narrow",context:"standalone"});case"qqqq":default:return r.quarter(t,{width:"wide",context:"standalone"})||r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class Eo extends B{constructor(){super(...arguments);M(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]);M(this,"priority",110)}parse(t,e,r){const o=i=>i-1;switch(e){case"M":return J(z(Z.month,t),o);case"MM":return J(X(2,t),o);case"Mo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"MMM":return r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(t,{width:"narrow",context:"formatting"});case"MMMM":default:return r.month(t,{width:"wide",context:"formatting"})||r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}class Po extends B{constructor(){super(...arguments);M(this,"priority",110);M(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(t,e,r){const o=i=>i-1;switch(e){case"L":return J(z(Z.month,t),o);case"LL":return J(X(2,t),o);case"Lo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"LLL":return r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(t,{width:"narrow",context:"standalone"});case"LLLL":default:return r.month(t,{width:"wide",context:"standalone"})||r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}function To(n,a,t){const e=E(n,t==null?void 0:t.in),r=Sn(e,t)-a;return e.setDate(e.getDate()-r*7),E(e,t==null?void 0:t.in)}class Oo extends B{constructor(){super(...arguments);M(this,"priority",100);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(t,e,r){switch(e){case"w":return z(Z.week,t);case"wo":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r,o){return Ee(To(t,r,o),o)}}function Ro(n,a,t){const e=E(n,t==null?void 0:t.in),r=gr(e,t)-a;return e.setDate(e.getDate()-r*7),e}class No extends B{constructor(){super(...arguments);M(this,"priority",100);M(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(t,e,r){switch(e){case"I":return z(Z.week,t);case"Io":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r){return ze(Ro(t,r))}}const Yo=[31,28,31,30,31,30,31,31,30,31,30,31],Lo=[31,29,31,30,31,30,31,31,30,31,30,31];class Fo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"subPriority",1);M(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"d":return z(Z.date,t);case"do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear(),o=Rn(r),i=t.getMonth();return o?e>=1&&e<=Lo[i]:e>=1&&e<=Yo[i]}set(t,e,r){return t.setDate(r),t.setHours(0,0,0,0),t}}class Io extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"subpriority",1);M(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(t,e,r){switch(e){case"D":case"DD":return z(Z.dayOfYear,t);case"Do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear();return Rn(r)?e>=1&&e<=366:e>=1&&e<=365}set(t,e,r){return t.setMonth(0,r),t.setHours(0,0,0,0),t}}function Dr(n,a,t){var d,f,p,h;const e=qe(),r=(t==null?void 0:t.weekStartsOn)??((f=(d=t==null?void 0:t.locale)==null?void 0:d.options)==null?void 0:f.weekStartsOn)??e.weekStartsOn??((h=(p=e.locale)==null?void 0:p.options)==null?void 0:h.weekStartsOn)??0,o=E(n,t==null?void 0:t.in),i=o.getDay(),c=(a%7+7)%7,l=7-r,u=a<0||a>6?a-(i+l)%7:(c+l)%7-(i+l)%7;return pe(o,u,t)}class Ao extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"E":case"EE":case"EEE":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEE":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Wo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(t,e,r,o){const i=s=>{const c=Math.floor((s-1)/7)*7;return(s+o.weekStartsOn+6)%7+c};switch(e){case"e":case"ee":return J(X(e.length,t),i);case"eo":return J(r.ordinalNumber(t,{unit:"day"}),i);case"eee":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeeee":return r.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeee":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Ho extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(t,e,r,o){const i=s=>{const c=Math.floor((s-1)/7)*7;return(s+o.weekStartsOn+6)%7+c};switch(e){case"c":case"cc":return J(X(e.length,t),i);case"co":return J(r.ordinalNumber(t,{unit:"day"}),i);case"ccc":return r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"ccccc":return r.day(t,{width:"narrow",context:"standalone"});case"cccccc":return r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"cccc":default:return r.day(t,{width:"wide",context:"standalone"})||r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}function Bo(n,a,t){const e=E(n,t==null?void 0:t.in),r=ho(e,t),o=a-r;return pe(e,o,t)}class Qo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(t,e,r){const o=i=>i===0?7:i;switch(e){case"i":case"ii":return X(e.length,t);case"io":return r.ordinalNumber(t,{unit:"day"});case"iii":return J(r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiii":return J(r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiiii":return J(r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiii":default:return J(r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o)}}validate(t,e){return e>=1&&e<=7}set(t,e,r){return t=Bo(t,r),t.setHours(0,0,0,0),t}}class jo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(t,e,r){switch(e){case"a":case"aa":case"aaa":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaaa":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaa":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Vo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(t,e,r){switch(e){case"b":case"bb":case"bbb":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbbb":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbb":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class qo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["a","b","t","T"])}parse(t,e,r){switch(e){case"B":case"BB":case"BBB":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBBB":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBB":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Ko extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["H","K","k","t","T"])}parse(t,e,r){switch(e){case"h":return z(Z.hour12h,t);case"ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=12}set(t,e,r){const o=t.getHours()>=12;return o&&r<12?t.setHours(r+12,0,0,0):!o&&r===12?t.setHours(0,0,0,0):t.setHours(r,0,0,0),t}}class Uo extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(t,e,r){switch(e){case"H":return z(Z.hour23h,t);case"Ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=23}set(t,e,r){return t.setHours(r,0,0,0),t}}class $o extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["h","H","k","t","T"])}parse(t,e,r){switch(e){case"K":return z(Z.hour11h,t);case"Ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.getHours()>=12&&r<12?t.setHours(r+12,0,0,0):t.setHours(r,0,0,0),t}}class Go extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(t,e,r){switch(e){case"k":return z(Z.hour24h,t);case"ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=24}set(t,e,r){const o=r<=24?r%24:r;return t.setHours(o,0,0,0),t}}class zo extends B{constructor(){super(...arguments);M(this,"priority",60);M(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"m":return z(Z.minute,t);case"mo":return r.ordinalNumber(t,{unit:"minute"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setMinutes(r,0,0),t}}class Xo extends B{constructor(){super(...arguments);M(this,"priority",50);M(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"s":return z(Z.second,t);case"so":return r.ordinalNumber(t,{unit:"second"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setSeconds(r,0),t}}class Zo extends B{constructor(){super(...arguments);M(this,"priority",30);M(this,"incompatibleTokens",["t","T"])}parse(t,e){const r=o=>Math.trunc(o*Math.pow(10,-e.length+3));return J(X(e.length,t),r)}set(t,e,r){return t.setMilliseconds(r),t}}class Jo extends B{constructor(){super(...arguments);M(this,"priority",10);M(this,"incompatibleTokens",["t","T","x"])}parse(t,e){switch(e){case"X":return we(ve.basicOptionalMinutes,t);case"XX":return we(ve.basic,t);case"XXXX":return we(ve.basicOptionalSeconds,t);case"XXXXX":return we(ve.extendedOptionalSeconds,t);case"XXX":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class ei extends B{constructor(){super(...arguments);M(this,"priority",10);M(this,"incompatibleTokens",["t","T","X"])}parse(t,e){switch(e){case"x":return we(ve.basicOptionalMinutes,t);case"xx":return we(ve.basic,t);case"xxxx":return we(ve.basicOptionalSeconds,t);case"xxxxx":return we(ve.extendedOptionalSeconds,t);case"xxx":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class ti extends B{constructor(){super(...arguments);M(this,"priority",40);M(this,"incompatibleTokens","*")}parse(t){return Tn(t)}set(t,e,r){return[U(t,r*1e3),{timestampIsSet:!0}]}}class ri extends B{constructor(){super(...arguments);M(this,"priority",20);M(this,"incompatibleTokens","*")}parse(t){return Tn(t)}set(t,e,r){return[U(t,r),{timestampIsSet:!0}]}}const ni={G:new bo,y:new ko,Y:new _o,R:new xo,u:new Mo,Q:new Co,q:new So,M:new Eo,L:new Po,w:new Oo,I:new No,d:new Fo,D:new Io,E:new Ao,e:new Wo,c:new Ho,i:new Qo,a:new jo,b:new Vo,B:new qo,h:new Ko,H:new Uo,K:new $o,k:new Go,m:new zo,s:new Xo,S:new Zo,X:new Jo,x:new ei,t:new ti,T:new ri},ai=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,oi=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,ii=/^'([^]*?)'?$/,si=/''/g,ci=/\S/,li=/[a-zA-Z]/;function ui(n,a,t,e){var g,y,_,w,b,P,O,C;const r=()=>U((e==null?void 0:e.in)||t,NaN),o=po(),i=(e==null?void 0:e.locale)??o.locale??Cn,s=(e==null?void 0:e.firstWeekContainsDate)??((y=(g=e==null?void 0:e.locale)==null?void 0:g.options)==null?void 0:y.firstWeekContainsDate)??o.firstWeekContainsDate??((w=(_=o.locale)==null?void 0:_.options)==null?void 0:w.firstWeekContainsDate)??1,c=(e==null?void 0:e.weekStartsOn)??((P=(b=e==null?void 0:e.locale)==null?void 0:b.options)==null?void 0:P.weekStartsOn)??o.weekStartsOn??((C=(O=o.locale)==null?void 0:O.options)==null?void 0:C.weekStartsOn)??0;if(!a)return n?r():E(t,e==null?void 0:e.in);const l={firstWeekContainsDate:s,weekStartsOn:c,locale:i},u=[new yo(e==null?void 0:e.in,t)],d=a.match(oi).map(k=>{const S=k[0];if(S in ur){const N=ur[S];return N(k,i.formatLong)}return k}).join("").match(ai),f=[];for(let k of d){const S=k[0],N=ni[S];if(N){const{incompatibleTokens:Q}=N;if(Array.isArray(Q)){const $=f.find(j=>Q.includes(j.token)||j.token===S);if($)throw new RangeError(`The format string mustn't contain \`${$.fullToken}\` and \`${k}\` at the same time`)}else if(N.incompatibleTokens==="*"&&f.length>0)throw new RangeError(`The format string mustn't contain \`${k}\` and any other token at the same time`);f.push({token:S,fullToken:k});const I=N.run(n,k,i.match,l);if(!I)return r();u.push(I.setter),n=I.rest}else{if(S.match(li))throw new RangeError("Format string contains an unescaped latin alphabet character `"+S+"`");if(k==="''"?k="'":S==="'"&&(k=di(k)),n.indexOf(k)===0)n=n.slice(k.length);else return r()}}if(n.length>0&&ci.test(n))return r();const p=u.map(k=>k.priority).sort((k,S)=>S-k).filter((k,S,N)=>N.indexOf(k)===S).map(k=>u.filter(S=>S.priority===k).sort((S,N)=>N.subPriority-S.subPriority)).map(k=>k[0]);let h=E(t,e==null?void 0:e.in);if(isNaN(+h))return r();const v={};for(const k of p){if(!k.validate(h,l))return r();const S=k.set(h,v,l);Array.isArray(S)?(h=S[0],Object.assign(v,S[1])):h=S}return h}function di(n){return n.match(ii)[1].replace(si,"'")}function fi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()&&e.getMonth()===r.getMonth()}function pi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+lr(e)==+lr(r)}function hi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()}function ut(n,a,t){const e=+E(n,t==null?void 0:t.in),[r,o]=[+E(a.start,t==null?void 0:t.in),+E(a.end,t==null?void 0:t.in)].sort((i,s)=>i-s);return e>=r&&e<=o}function mi(n,a,t){return pe(n,-1,t)}function gi(n,a){const t=()=>U(a==null?void 0:a.in,NaN),r=yi(n);let o;if(r.date){const l=bi(r.date,2);o=ki(l.restDateString,l.year)}if(!o||isNaN(+o))return t();const i=+o;let s=0,c;if(r.time&&(s=_i(r.time),isNaN(s)))return t();if(r.timezone){if(c=xi(r.timezone),isNaN(c))return t()}else{const l=new Date(i+s),u=E(0,a==null?void 0:a.in);return u.setFullYear(l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate()),u.setHours(l.getUTCHours(),l.getUTCMinutes(),l.getUTCSeconds(),l.getUTCMilliseconds()),u}return E(i+s+c,a==null?void 0:a.in)}const vt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},vi=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,wi=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Di=/^([+-])(\d{2})(?::?(\d{2}))?$/;function yi(n){const a={},t=n.split(vt.dateTimeDelimiter);let e;if(t.length>2)return a;if(/:/.test(t[0])?e=t[0]:(a.date=t[0],e=t[1],vt.timeZoneDelimiter.test(a.date)&&(a.date=n.split(vt.timeZoneDelimiter)[0],e=n.substr(a.date.length,n.length))),e){const r=vt.timezone.exec(e);r?(a.time=e.replace(r[1],""),a.timezone=r[1]):a.time=e}return a}function bi(n,a){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+a)+"})|(\\d{2}|[+-]\\d{"+(2+a)+"})$)"),e=n.match(t);if(!e)return{year:NaN,restDateString:""};const r=e[1]?parseInt(e[1]):null,o=e[2]?parseInt(e[2]):null;return{year:o===null?r:o*100,restDateString:n.slice((e[1]||e[2]).length)}}function ki(n,a){if(a===null)return new Date(NaN);const t=n.match(vi);if(!t)return new Date(NaN);const e=!!t[4],r=it(t[1]),o=it(t[2])-1,i=it(t[3]),s=it(t[4]),c=it(t[5])-1;if(e)return Pi(a,s,c)?Mi(a,s,c):new Date(NaN);{const l=new Date(0);return!Si(a,o,i)||!Ei(a,r)?new Date(NaN):(l.setUTCFullYear(a,o,Math.max(r,i)),l)}}function it(n){return n?parseInt(n):1}function _i(n){const a=n.match(wi);if(!a)return NaN;const t=er(a[1]),e=er(a[2]),r=er(a[3]);return Ti(t,e,r)?t*qt+e*Vt+r*1e3:NaN}function er(n){return n&&parseFloat(n.replace(",","."))||0}function xi(n){if(n==="Z")return 0;const a=n.match(Di);if(!a)return 0;const t=a[1]==="+"?-1:1,e=parseInt(a[2]),r=a[3]&&parseInt(a[3])||0;return Oi(e,r)?t*(e*qt+r*Vt):NaN}function Mi(n,a,t){const e=new Date(0);e.setUTCFullYear(n,0,4);const r=e.getUTCDay()||7,o=(a-1)*7+t+1-r;return e.setUTCDate(e.getUTCDate()+o),e}const Ci=[31,null,31,30,31,30,31,31,30,31,30,31];function Nn(n){return n%400===0||n%4===0&&n%100!==0}function Si(n,a,t){return a>=0&&a<=11&&t>=1&&t<=(Ci[a]||(Nn(n)?29:28))}function Ei(n,a){return a>=1&&a<=(Nn(n)?366:365)}function Pi(n,a,t){return a>=1&&a<=53&&t>=0&&t<=6}function Ti(n,a,t){return n===24?a===0&&t===0:t>=0&&t<60&&a>=0&&a<60&&n>=0&&n<25}function Oi(n,a){return a>=0&&a<=59}function ce(n,a,t){const e=E(n,t==null?void 0:t.in),r=e.getFullYear(),o=e.getDate(),i=U(n,0);i.setFullYear(r,a,15),i.setHours(0,0,0,0);const s=fo(i);return e.setMonth(a,Math.min(o,s)),e}function xt(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setHours(a),e}function Mt(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setMinutes(a),e}function Ue(n,a,t){const e=E(n,t==null?void 0:t.in),r=Math.trunc(e.getMonth()/3)+1,o=a-r;return ce(e,e.getMonth()+o*3)}function Ct(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setSeconds(a),e}function me(n,a,t){const e=E(n,t==null?void 0:t.in);return isNaN(+e)?U(n,NaN):(e.setFullYear(a),e)}function He(n,a,t){return he(n,-a,t)}function Yn(n,a,t){return mr(n,-1,t)}function Hr(n,a,t){return Rt(n,-1,t)}function Ze(n,a,t){return _e(n,-a,t)}function Ut(){return typeof window<"u"}function nt(n){return Ln(n)?(n.nodeName||"").toLowerCase():"#document"}function ie(n){var a;return(n==null||(a=n.ownerDocument)==null?void 0:a.defaultView)||window}function ke(n){var a;return(a=(Ln(n)?n.ownerDocument:n.document)||window.document)==null?void 0:a.documentElement}function Ln(n){return Ut()?n instanceof Node||n instanceof ie(n).Node:!1}function oe(n){return Ut()?n instanceof Element||n instanceof ie(n).Element:!1}function be(n){return Ut()?n instanceof HTMLElement||n instanceof ie(n).HTMLElement:!1}function Br(n){return!Ut()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof ie(n).ShadowRoot}const Ri=new Set(["inline","contents"]);function pt(n){const{overflow:a,overflowX:t,overflowY:e,display:r}=ue(n);return/auto|scroll|overlay|hidden|clip/.test(a+e+t)&&!Ri.has(r)}const Ni=new Set(["table","td","th"]);function Yi(n){return Ni.has(nt(n))}const Li=[":popover-open",":modal"];function $t(n){return Li.some(a=>{try{return n.matches(a)}catch{return!1}})}const Fi=["transform","translate","scale","rotate","perspective"],Ii=["transform","translate","scale","rotate","perspective","filter"],Ai=["paint","layout","strict","content"];function yr(n){const a=br(),t=oe(n)?ue(n):n;return Fi.some(e=>t[e]?t[e]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!a&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!a&&(t.filter?t.filter!=="none":!1)||Ii.some(e=>(t.willChange||"").includes(e))||Ai.some(e=>(t.contain||"").includes(e))}function Wi(n){let a=Le(n);for(;be(a)&&!Je(a);){if(yr(a))return a;if($t(a))return null;a=Le(a)}return null}function br(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Hi=new Set(["html","body","#document"]);function Je(n){return Hi.has(nt(n))}function ue(n){return ie(n).getComputedStyle(n)}function Gt(n){return oe(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function Le(n){if(nt(n)==="html")return n;const a=n.assignedSlot||n.parentNode||Br(n)&&n.host||ke(n);return Br(a)?a.host:a}function Fn(n){const a=Le(n);return Je(a)?n.ownerDocument?n.ownerDocument.body:n.body:be(a)&&pt(a)?a:Fn(a)}function dt(n,a,t){var e;a===void 0&&(a=[]),t===void 0&&(t=!0);const r=Fn(n),o=r===((e=n.ownerDocument)==null?void 0:e.body),i=ie(r);if(o){const s=fr(i);return a.concat(i,i.visualViewport||[],pt(r)?r:[],s&&t?dt(s):[])}return a.concat(r,dt(r,[],t))}function fr(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}const et=Math.min,Be=Math.max,At=Math.round,wt=Math.floor,ye=n=>({x:n,y:n}),Bi={left:"right",right:"left",bottom:"top",top:"bottom"},Qi={start:"end",end:"start"};function ji(n,a,t){return Be(n,et(a,t))}function zt(n,a){return typeof n=="function"?n(a):n}function tt(n){return n.split("-")[0]}function ht(n){return n.split("-")[1]}function Vi(n){return n==="x"?"y":"x"}function kr(n){return n==="y"?"height":"width"}const qi=new Set(["top","bottom"]);function Ie(n){return qi.has(tt(n))?"y":"x"}function _r(n){return Vi(Ie(n))}function Ki(n,a,t){t===void 0&&(t=!1);const e=ht(n),r=_r(n),o=kr(r);let i=r==="x"?e===(t?"end":"start")?"right":"left":e==="start"?"bottom":"top";return a.reference[o]>a.floating[o]&&(i=Wt(i)),[i,Wt(i)]}function Ui(n){const a=Wt(n);return[pr(n),a,pr(a)]}function pr(n){return n.replace(/start|end/g,a=>Qi[a])}const Qr=["left","right"],jr=["right","left"],$i=["top","bottom"],Gi=["bottom","top"];function zi(n,a,t){switch(n){case"top":case"bottom":return t?a?jr:Qr:a?Qr:jr;case"left":case"right":return a?$i:Gi;default:return[]}}function Xi(n,a,t,e){const r=ht(n);let o=zi(tt(n),t==="start",e);return r&&(o=o.map(i=>i+"-"+r),a&&(o=o.concat(o.map(pr)))),o}function Wt(n){return n.replace(/left|right|bottom|top/g,a=>Bi[a])}function Zi(n){return{top:0,right:0,bottom:0,left:0,...n}}function In(n){return typeof n!="number"?Zi(n):{top:n,right:n,bottom:n,left:n}}function Ht(n){const{x:a,y:t,width:e,height:r}=n;return{width:e,height:r,top:t,left:a,right:a+e,bottom:t+r,x:a,y:t}}var Ji=typeof document<"u",es=function(){},Bt=Ji?D.useLayoutEffect:es;const ts={...wn},rs=ts.useInsertionEffect,ns=rs||(n=>n());function as(n){const a=D.useRef(()=>{});return ns(()=>{a.current=n}),D.useCallback(function(){for(var t=arguments.length,e=new Array(t),r=0;r{const{placement:e="bottom",strategy:r="absolute",middleware:o=[],platform:i}=t,s=o.filter(Boolean),c=await(i.isRTL==null?void 0:i.isRTL(a));let l=await i.getElementRects({reference:n,floating:a,strategy:r}),{x:u,y:d}=Vr(l,e,c),f=e,p={},h=0;for(let v=0;v({name:"arrow",options:n,async fn(a){const{x:t,y:e,placement:r,rects:o,platform:i,elements:s,middlewareData:c}=a,{element:l,padding:u=0}=zt(n,a)||{};if(l==null)return{};const d=In(u),f={x:t,y:e},p=_r(r),h=kr(p),v=await i.getDimensions(l),g=p==="y",y=g?"top":"left",_=g?"bottom":"right",w=g?"clientHeight":"clientWidth",b=o.reference[h]+o.reference[p]-f[p]-o.floating[h],P=f[p]-o.reference[p],O=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l));let C=O?O[w]:0;(!C||!await(i.isElement==null?void 0:i.isElement(O)))&&(C=s.floating[w]||o.floating[h]);const k=b/2-P/2,S=C/2-v[h]/2-1,N=et(d[y],S),Q=et(d[_],S),I=N,$=C-v[h]-Q,j=C/2-v[h]/2+k,q=ji(I,j,$),R=!c.arrow&&ht(r)!=null&&j!==q&&o.reference[h]/2-(jj<=0)){var Q,I;const j=(((Q=o.flip)==null?void 0:Q.index)||0)+1,q=C[j];if(q&&(!(d==="alignment"?_!==Ie(q):!1)||N.every(Y=>Y.overflows[0]>0&&Ie(Y.placement)===_)))return{data:{index:j,overflows:N},reset:{placement:q}};let R=(I=N.filter(F=>F.overflows[0]<=0).sort((F,Y)=>F.overflows[1]-Y.overflows[1])[0])==null?void 0:I.placement;if(!R)switch(p){case"bestFit":{var $;const F=($=N.filter(Y=>{if(O){const ee=Ie(Y.placement);return ee===_||ee==="y"}return!0}).map(Y=>[Y.placement,Y.overflows.filter(ee=>ee>0).reduce((ee,de)=>ee+de,0)]).sort((Y,ee)=>Y[1]-ee[1])[0])==null?void 0:$[0];F&&(R=F);break}case"initialPlacement":R=s;break}if(r!==R)return{reset:{placement:R}}}return{}}}},ls=new Set(["left","top"]);async function us(n,a){const{placement:t,platform:e,elements:r}=n,o=await(e.isRTL==null?void 0:e.isRTL(r.floating)),i=tt(t),s=ht(t),c=Ie(t)==="y",l=ls.has(i)?-1:1,u=o&&c?-1:1,d=zt(a,n);let{mainAxis:f,crossAxis:p,alignmentAxis:h}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof h=="number"&&(p=s==="end"?h*-1:h),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}const ds=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(a){var t,e;const{x:r,y:o,placement:i,middlewareData:s}=a,c=await us(a,n);return i===((t=s.offset)==null?void 0:t.placement)&&(e=s.arrow)!=null&&e.alignmentOffset?{}:{x:r+c.x,y:o+c.y,data:{...c,placement:i}}}}};function An(n){const a=ue(n);let t=parseFloat(a.width)||0,e=parseFloat(a.height)||0;const r=be(n),o=r?n.offsetWidth:t,i=r?n.offsetHeight:e,s=At(t)!==o||At(e)!==i;return s&&(t=o,e=i),{width:t,height:e,$:s}}function xr(n){return oe(n)?n:n.contextElement}function $e(n){const a=xr(n);if(!be(a))return ye(1);const t=a.getBoundingClientRect(),{width:e,height:r,$:o}=An(a);let i=(o?At(t.width):t.width)/e,s=(o?At(t.height):t.height)/r;return(!i||!Number.isFinite(i))&&(i=1),(!s||!Number.isFinite(s))&&(s=1),{x:i,y:s}}const fs=ye(0);function Wn(n){const a=ie(n);return!br()||!a.visualViewport?fs:{x:a.visualViewport.offsetLeft,y:a.visualViewport.offsetTop}}function ps(n,a,t){return a===void 0&&(a=!1),!t||a&&t!==ie(n)?!1:a}function Ve(n,a,t,e){a===void 0&&(a=!1),t===void 0&&(t=!1);const r=n.getBoundingClientRect(),o=xr(n);let i=ye(1);a&&(e?oe(e)&&(i=$e(e)):i=$e(n));const s=ps(o,t,e)?Wn(o):ye(0);let c=(r.left+s.x)/i.x,l=(r.top+s.y)/i.y,u=r.width/i.x,d=r.height/i.y;if(o){const f=ie(o),p=e&&oe(e)?ie(e):e;let h=f,v=fr(h);for(;v&&e&&p!==h;){const g=$e(v),y=v.getBoundingClientRect(),_=ue(v),w=y.left+(v.clientLeft+parseFloat(_.paddingLeft))*g.x,b=y.top+(v.clientTop+parseFloat(_.paddingTop))*g.y;c*=g.x,l*=g.y,u*=g.x,d*=g.y,c+=w,l+=b,h=ie(v),v=fr(h)}}return Ht({width:u,height:d,x:c,y:l})}function Mr(n,a){const t=Gt(n).scrollLeft;return a?a.left+t:Ve(ke(n)).left+t}function Hn(n,a,t){t===void 0&&(t=!1);const e=n.getBoundingClientRect(),r=e.left+a.scrollLeft-(t?0:Mr(n,e)),o=e.top+a.scrollTop;return{x:r,y:o}}function hs(n){let{elements:a,rect:t,offsetParent:e,strategy:r}=n;const o=r==="fixed",i=ke(e),s=a?$t(a.floating):!1;if(e===i||s&&o)return t;let c={scrollLeft:0,scrollTop:0},l=ye(1);const u=ye(0),d=be(e);if((d||!d&&!o)&&((nt(e)!=="body"||pt(i))&&(c=Gt(e)),be(e))){const p=Ve(e);l=$e(e),u.x=p.x+e.clientLeft,u.y=p.y+e.clientTop}const f=i&&!d&&!o?Hn(i,c,!0):ye(0);return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:t.y*l.y-c.scrollTop*l.y+u.y+f.y}}function ms(n){return Array.from(n.getClientRects())}function gs(n){const a=ke(n),t=Gt(n),e=n.ownerDocument.body,r=Be(a.scrollWidth,a.clientWidth,e.scrollWidth,e.clientWidth),o=Be(a.scrollHeight,a.clientHeight,e.scrollHeight,e.clientHeight);let i=-t.scrollLeft+Mr(n);const s=-t.scrollTop;return ue(e).direction==="rtl"&&(i+=Be(a.clientWidth,e.clientWidth)-r),{width:r,height:o,x:i,y:s}}function vs(n,a){const t=ie(n),e=ke(n),r=t.visualViewport;let o=e.clientWidth,i=e.clientHeight,s=0,c=0;if(r){o=r.width,i=r.height;const l=br();(!l||l&&a==="fixed")&&(s=r.offsetLeft,c=r.offsetTop)}return{width:o,height:i,x:s,y:c}}const ws=new Set(["absolute","fixed"]);function Ds(n,a){const t=Ve(n,!0,a==="fixed"),e=t.top+n.clientTop,r=t.left+n.clientLeft,o=be(n)?$e(n):ye(1),i=n.clientWidth*o.x,s=n.clientHeight*o.y,c=r*o.x,l=e*o.y;return{width:i,height:s,x:c,y:l}}function qr(n,a,t){let e;if(a==="viewport")e=vs(n,t);else if(a==="document")e=gs(ke(n));else if(oe(a))e=Ds(a,t);else{const r=Wn(n);e={x:a.x-r.x,y:a.y-r.y,width:a.width,height:a.height}}return Ht(e)}function Bn(n,a){const t=Le(n);return t===a||!oe(t)||Je(t)?!1:ue(t).position==="fixed"||Bn(t,a)}function ys(n,a){const t=a.get(n);if(t)return t;let e=dt(n,[],!1).filter(s=>oe(s)&&nt(s)!=="body"),r=null;const o=ue(n).position==="fixed";let i=o?Le(n):n;for(;oe(i)&&!Je(i);){const s=ue(i),c=yr(i);!c&&s.position==="fixed"&&(r=null),(o?!c&&!r:!c&&s.position==="static"&&!!r&&ws.has(r.position)||pt(i)&&!c&&Bn(n,i))?e=e.filter(u=>u!==i):r=s,i=Le(i)}return a.set(n,e),e}function bs(n){let{element:a,boundary:t,rootBoundary:e,strategy:r}=n;const i=[...t==="clippingAncestors"?$t(a)?[]:ys(a,this._c):[].concat(t),e],s=i[0],c=i.reduce((l,u)=>{const d=qr(a,u,r);return l.top=Be(d.top,l.top),l.right=et(d.right,l.right),l.bottom=et(d.bottom,l.bottom),l.left=Be(d.left,l.left),l},qr(a,s,r));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function ks(n){const{width:a,height:t}=An(n);return{width:a,height:t}}function _s(n,a,t){const e=be(a),r=ke(a),o=t==="fixed",i=Ve(n,!0,o,a);let s={scrollLeft:0,scrollTop:0};const c=ye(0);function l(){c.x=Mr(r)}if(e||!e&&!o)if((nt(a)!=="body"||pt(r))&&(s=Gt(a)),e){const p=Ve(a,!0,o,a);c.x=p.x+a.clientLeft,c.y=p.y+a.clientTop}else r&&l();o&&!e&&r&&l();const u=r&&!e&&!o?Hn(r,s):ye(0),d=i.left+s.scrollLeft-c.x-u.x,f=i.top+s.scrollTop-c.y-u.y;return{x:d,y:f,width:i.width,height:i.height}}function tr(n){return ue(n).position==="static"}function Kr(n,a){if(!be(n)||ue(n).position==="fixed")return null;if(a)return a(n);let t=n.offsetParent;return ke(n)===t&&(t=t.ownerDocument.body),t}function Qn(n,a){const t=ie(n);if($t(n))return t;if(!be(n)){let r=Le(n);for(;r&&!Je(r);){if(oe(r)&&!tr(r))return r;r=Le(r)}return t}let e=Kr(n,a);for(;e&&Yi(e)&&tr(e);)e=Kr(e,a);return e&&Je(e)&&tr(e)&&!yr(e)?t:e||Wi(n)||t}const xs=async function(n){const a=this.getOffsetParent||Qn,t=this.getDimensions,e=await t(n.floating);return{reference:_s(n.reference,await a(n.floating),n.strategy),floating:{x:0,y:0,width:e.width,height:e.height}}};function Ms(n){return ue(n).direction==="rtl"}const Cs={convertOffsetParentRelativeRectToViewportRelativeRect:hs,getDocumentElement:ke,getClippingRect:bs,getOffsetParent:Qn,getElementRects:xs,getClientRects:ms,getDimensions:ks,getScale:$e,isElement:oe,isRTL:Ms};function jn(n,a){return n.x===a.x&&n.y===a.y&&n.width===a.width&&n.height===a.height}function Ss(n,a){let t=null,e;const r=ke(n);function o(){var s;clearTimeout(e),(s=t)==null||s.disconnect(),t=null}function i(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),o();const l=n.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(s||a(),!f||!p)return;const h=wt(d),v=wt(r.clientWidth-(u+f)),g=wt(r.clientHeight-(d+p)),y=wt(u),w={rootMargin:-h+"px "+-v+"px "+-g+"px "+-y+"px",threshold:Be(0,et(1,c))||1};let b=!0;function P(O){const C=O[0].intersectionRatio;if(C!==c){if(!b)return i();C?i(!1,C):e=setTimeout(()=>{i(!1,1e-7)},1e3)}C===1&&!jn(l,n.getBoundingClientRect())&&i(),b=!1}try{t=new IntersectionObserver(P,{...w,root:r.ownerDocument})}catch{t=new IntersectionObserver(P,w)}t.observe(n)}return i(!0),o}function Es(n,a,t,e){e===void 0&&(e={});const{ancestorScroll:r=!0,ancestorResize:o=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:c=!1}=e,l=xr(n),u=r||o?[...l?dt(l):[],...dt(a)]:[];u.forEach(y=>{r&&y.addEventListener("scroll",t,{passive:!0}),o&&y.addEventListener("resize",t)});const d=l&&s?Ss(l,t):null;let f=-1,p=null;i&&(p=new ResizeObserver(y=>{let[_]=y;_&&_.target===l&&p&&(p.unobserve(a),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var w;(w=p)==null||w.observe(a)})),t()}),l&&!c&&p.observe(l),p.observe(a));let h,v=c?Ve(n):null;c&&g();function g(){const y=Ve(n);v&&!jn(v,y)&&t(),v=y,h=requestAnimationFrame(g)}return t(),()=>{var y;u.forEach(_=>{r&&_.removeEventListener("scroll",t),o&&_.removeEventListener("resize",t)}),d==null||d(),(y=p)==null||y.disconnect(),p=null,c&&cancelAnimationFrame(h)}}const Ps=ds,Ts=cs,Ur=ss,Os=(n,a,t)=>{const e=new Map,r={platform:Cs,...t},o={...r.platform,_c:e};return os(n,a,{...r,platform:o})};var Rs=typeof document<"u",Ns=function(){},St=Rs?D.useLayoutEffect:Ns;function Qt(n,a){if(n===a)return!0;if(typeof n!=typeof a)return!1;if(typeof n=="function"&&n.toString()===a.toString())return!0;let t,e,r;if(n&&a&&typeof n=="object"){if(Array.isArray(n)){if(t=n.length,t!==a.length)return!1;for(e=t;e--!==0;)if(!Qt(n[e],a[e]))return!1;return!0}if(r=Object.keys(n),t=r.length,t!==Object.keys(a).length)return!1;for(e=t;e--!==0;)if(!{}.hasOwnProperty.call(a,r[e]))return!1;for(e=t;e--!==0;){const o=r[e];if(!(o==="_owner"&&n.$$typeof)&&!Qt(n[o],a[o]))return!1}return!0}return n!==n&&a!==a}function Vn(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function $r(n,a){const t=Vn(n);return Math.round(a*t)/t}function rr(n){const a=D.useRef(n);return St(()=>{a.current=n}),a}function Ys(n){n===void 0&&(n={});const{placement:a="bottom",strategy:t="absolute",middleware:e=[],platform:r,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:c,open:l}=n,[u,d]=D.useState({x:0,y:0,strategy:t,placement:a,middlewareData:{},isPositioned:!1}),[f,p]=D.useState(e);Qt(f,e)||p(e);const[h,v]=D.useState(null),[g,y]=D.useState(null),_=D.useCallback(Y=>{Y!==O.current&&(O.current=Y,v(Y))},[]),w=D.useCallback(Y=>{Y!==C.current&&(C.current=Y,y(Y))},[]),b=o||h,P=i||g,O=D.useRef(null),C=D.useRef(null),k=D.useRef(u),S=c!=null,N=rr(c),Q=rr(r),I=rr(l),$=D.useCallback(()=>{if(!O.current||!C.current)return;const Y={placement:a,strategy:t,middleware:f};Q.current&&(Y.platform=Q.current),Os(O.current,C.current,Y).then(ee=>{const de={...ee,isPositioned:I.current!==!1};j.current&&!Qt(k.current,de)&&(k.current=de,na.flushSync(()=>{d(de)}))})},[f,a,t,Q,I]);St(()=>{l===!1&&k.current.isPositioned&&(k.current.isPositioned=!1,d(Y=>({...Y,isPositioned:!1})))},[l]);const j=D.useRef(!1);St(()=>(j.current=!0,()=>{j.current=!1}),[]),St(()=>{if(b&&(O.current=b),P&&(C.current=P),b&&P){if(N.current)return N.current(b,P,$);$()}},[b,P,$,N,S]);const q=D.useMemo(()=>({reference:O,floating:C,setReference:_,setFloating:w}),[_,w]),R=D.useMemo(()=>({reference:b,floating:P}),[b,P]),F=D.useMemo(()=>{const Y={position:t,left:0,top:0};if(!R.floating)return Y;const ee=$r(R.floating,u.x),de=$r(R.floating,u.y);return s?{...Y,transform:"translate("+ee+"px, "+de+"px)",...Vn(R.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:ee,top:de}},[t,s,R.floating,u.x,u.y]);return D.useMemo(()=>({...u,update:$,refs:q,elements:R,floatingStyles:F}),[u,$,q,R,F])}const Ls=n=>{function a(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:n,fn(t){const{element:e,padding:r}=typeof n=="function"?n(t):n;return e&&a(e)?e.current!=null?Ur({element:e.current,padding:r}).fn(t):{}:e?Ur({element:e,padding:r}).fn(t):{}}}},Fs=(n,a)=>({...Ps(n),options:[n,a]}),Is=(n,a)=>({...Ts(n),options:[n,a]}),As=(n,a)=>({...Ls(n),options:[n,a]}),Ws={...wn};let Gr=!1,Hs=0;const zr=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Hs++;function Bs(){const[n,a]=D.useState(()=>Gr?zr():void 0);return Bt(()=>{n==null&&a(zr())},[]),D.useEffect(()=>{Gr=!0},[]),n}const Qs=Ws.useId,qn=Qs||Bs,js=D.forwardRef(function(a,t){const{context:{placement:e,elements:{floating:r},middlewareData:{arrow:o,shift:i}},width:s=14,height:c=7,tipRadius:l=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h,...v}={},...g}=a,y=qn(),[_,w]=D.useState(!1);if(Bt(()=>{if(!r)return;ue(r).direction==="rtl"&&w(!0)},[r]),!r)return null;const[b,P]=e.split("-"),O=b==="top"||b==="bottom";let C=d;(O&&i!=null&&i.x||!O&&i!=null&&i.y)&&(C=null);const k=u*2,S=k/2,N=s/2*(l/-8+1),Q=c/2*l/4,I=!!p,$=C&&P==="end"?"bottom":"top";let j=C&&P==="end"?"right":"left";C&&_&&(j=P==="end"?"left":"right");const q=(o==null?void 0:o.x)!=null?C||o.x:"",R=(o==null?void 0:o.y)!=null?C||o.y:"",F=p||"M0,0"+(" H"+s)+(" L"+(s-N)+","+(c-Q))+(" Q"+s/2+","+c+" "+N+","+(c-Q))+" Z",Y={top:I?"rotate(180deg)":"",left:I?"rotate(90deg)":"rotate(-90deg)",bottom:I?"":"rotate(180deg)",right:I?"rotate(-90deg)":"rotate(90deg)"}[b];return T.jsxs("svg",{...g,"aria-hidden":!0,ref:t,width:I?s:s+k,height:s,viewBox:"0 0 "+s+" "+(c>s?c:s),style:{position:"absolute",pointerEvents:"none",[j]:q,[$]:R,[b]:O||I?"100%":"calc(100% - "+k/2+"px)",transform:[Y,h].filter(ee=>!!ee).join(" "),...v},children:[k>0&&T.jsx("path",{clipPath:"url(#"+y+")",fill:"none",stroke:f,strokeWidth:k+(p?0:1),d:F}),T.jsx("path",{stroke:k&&!p?g.fill:"none",d:F}),T.jsx("clipPath",{id:y,children:T.jsx("rect",{x:-S,y:S*(I?-1:1),width:s+k,height:s})})]})});function Vs(){const n=new Map;return{emit(a,t){var e;(e=n.get(a))==null||e.forEach(r=>r(t))},on(a,t){n.has(a)||n.set(a,new Set),n.get(a).add(t)},off(a,t){var e;(e=n.get(a))==null||e.delete(t)}}}const qs=D.createContext(null),Ks=D.createContext(null),Us=()=>{var n;return((n=D.useContext(qs))==null?void 0:n.id)||null},$s=()=>D.useContext(Ks);function Gs(n){const{open:a=!1,onOpenChange:t,elements:e}=n,r=qn(),o=D.useRef({}),[i]=D.useState(()=>Vs()),s=Us()!=null,[c,l]=D.useState(e.reference),u=as((p,h,v)=>{o.current.openEvent=p?h:void 0,i.emit("openchange",{open:p,event:h,reason:v,nested:s}),t==null||t(p,h,v)}),d=D.useMemo(()=>({setPositionReference:l}),[]),f=D.useMemo(()=>({reference:c||e.reference||null,floating:e.floating||null,domReference:e.reference}),[c,e.reference,e.floating]);return D.useMemo(()=>({dataRef:o,open:a,onOpenChange:u,elements:f,events:i,floatingId:r,refs:d}),[a,u,f,i,r,d])}function zs(n){n===void 0&&(n={});const{nodeId:a}=n,t=Gs({...n,elements:{reference:null,floating:null,...n.elements}}),e=n.rootContext||t,r=e.elements,[o,i]=D.useState(null),[s,c]=D.useState(null),u=(r==null?void 0:r.domReference)||o,d=D.useRef(null),f=$s();Bt(()=>{u&&(d.current=u)},[u]);const p=Ys({...n,elements:{...r,...s&&{reference:s}}}),h=D.useCallback(w=>{const b=oe(w)?{getBoundingClientRect:()=>w.getBoundingClientRect(),getClientRects:()=>w.getClientRects(),contextElement:w}:w;c(b),p.refs.setReference(b)},[p.refs]),v=D.useCallback(w=>{(oe(w)||w===null)&&(d.current=w,i(w)),(oe(p.refs.reference.current)||p.refs.reference.current===null||w!==null&&!oe(w))&&p.refs.setReference(w)},[p.refs]),g=D.useMemo(()=>({...p.refs,setReference:v,setPositionReference:h,domReference:d}),[p.refs,v,h]),y=D.useMemo(()=>({...p.elements,domReference:u}),[p.elements,u]),_=D.useMemo(()=>({...p,...e,refs:g,elements:y,nodeId:a}),[p,g,y,a,e]);return Bt(()=>{e.dataRef.current.floatingContext=_;const w=f==null?void 0:f.nodesRef.current.find(b=>b.id===a);w&&(w.context=_)}),D.useMemo(()=>({...p,context:_,refs:g,elements:y}),[p,g,y,_])}/*! + react-datepicker v8.4.0 + https://github.com/Hacker0x01/react-datepicker + Released under the MIT License. +*/var hr=function(a,t){return hr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])},hr(a,t)};function te(n,a){if(typeof a!="function"&&a!==null)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");hr(n,a);function t(){this.constructor=n}n.prototype=a===null?Object.create(a):(t.prototype=a.prototype,new t)}var W=function(){return W=Object.assign||function(t){for(var e,r=1,o=arguments.length;r0?t[0]:t;return n&&G(n,r,e)||""}var Un=" - ";function Js(n,a,t){if(!n)return"";var e=se(n,t),r=a?se(a,t):"";return"".concat(e).concat(Un).concat(r)}function ec(n,a){if(!(n!=null&&n.length))return"";var t=n[0]?se(n[0],a):"";if(n.length===1)return t;if(n.length===2&&n[1]){var e=se(n[1],a);return"".concat(t,", ").concat(e)}var r=n.length-1;return"".concat(t," (+").concat(r,")")}function ar(n,a){var t=a.hour,e=t===void 0?0:t,r=a.minute,o=r===void 0?0:r,i=a.second,s=i===void 0?0:i;return xt(Mt(Ct(n,s),o),e)}function tc(n){return gr(n)}function rc(n,a){return G(n,"ddd",a)}function Et(n){return Qe(n)}function Ne(n,a,t){var e=rt(a||Cr());return Ee(n,{locale:e,weekStartsOn:t})}function Se(n){return xn(n)}function ct(n){return Kt(n)}function Xr(n){return lr(n)}function Zr(){return Qe(V())}function Jr(n){return kn(n)}function nc(n){return ma(n)}function ac(n){return _n(n)}function ge(n,a){return n&&a?hi(n,a):!n&&!a}function ae(n,a){return n&&a?fi(n,a):!n&&!a}function jt(n,a){return n&&a?pi(n,a):!n&&!a}function A(n,a){return n&&a?pa(n,a):!n&&!a}function Ae(n,a){return n&&a?mo(n,a):!n&&!a}function lt(n,a,t){var e,r=Qe(a),o=kn(t);try{e=ut(n,{start:r,end:o})}catch{e=!1}return e}function Cr(){var n=Kn();return n.__localeId__}function rt(n){if(typeof n=="string"){var a=Kn();return a.__localeData__?a.__localeData__[n]:void 0}else return n}function oc(n,a,t){return a(G(n,"EEEE",t))}function ic(n,a){return G(n,"EEEEEE",a)}function sc(n,a){return G(n,"EEE",a)}function Sr(n,a){return G(ce(V(),n),"LLLL",a)}function $n(n,a){return G(ce(V(),n),"LLL",a)}function cc(n,a){return G(Ue(V(),n),"QQQ",a)}function le(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.excludeDateIntervals,s=t.includeDates,c=t.includeDateIntervals,l=t.filterDate;return gt(n,{minDate:e,maxDate:r})||o&&o.some(function(u){return u instanceof Date?A(n,u):A(n,u.date)})||i&&i.some(function(u){var d=u.start,f=u.end;return ut(n,{start:d,end:f})})||s&&!s.some(function(u){return A(n,u)})||c&&!c.some(function(u){var d=u.start,f=u.end;return ut(n,{start:d,end:f})})||l&&!l(V(n))||!1}function Er(n,a){var t=a===void 0?{}:a,e=t.excludeDates,r=t.excludeDateIntervals;return r&&r.length>0?r.some(function(o){var i=o.start,s=o.end;return ut(n,{start:i,end:s})}):e&&e.some(function(o){var i;return o instanceof Date?A(n,o):A(n,(i=o.date)!==null&&i!==void 0?i:new Date)})||!1}function Gn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.includeDates,s=t.filterDate;return gt(n,{minDate:e?xn(e):void 0,maxDate:r?_n(r):void 0})||(o==null?void 0:o.some(function(c){return ae(n,c instanceof Date?c:c.date)}))||i&&!i.some(function(c){return ae(n,c)})||s&&!s(V(n))||!1}function Dt(n,a,t,e){var r=L(n),o=ne(n),i=L(a),s=ne(a),c=L(e);return r===i&&r===c?o<=t&&t<=s:r=t||cr:!1}function lc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.includeDates;return gt(n,{minDate:e,maxDate:r})||o&&o.some(function(s){return ae(s instanceof Date?s:s.date,n)})||i&&!i.some(function(s){return ae(s,n)})||!1}function yt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.includeDates,s=t.filterDate;return gt(n,{minDate:e,maxDate:r})||(o==null?void 0:o.some(function(c){return jt(n,c instanceof Date?c:c.date)}))||i&&!i.some(function(c){return jt(n,c)})||s&&!s(V(n))||!1}function bt(n,a,t){if(!a||!t||!Nt(a)||!Nt(t))return!1;var e=L(a),r=L(t);return e<=n&&r>=n}function Pt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.includeDates,s=t.filterDate,c=new Date(n,0,1);return gt(c,{minDate:e?Kt(e):void 0,maxDate:r?Mn(r):void 0})||(o==null?void 0:o.some(function(l){return ge(c,l instanceof Date?l:l.date)}))||i&&!i.some(function(l){return ge(c,l)})||s&&!s(V(c))||!1}function kt(n,a,t,e){var r=L(n),o=We(n),i=L(a),s=We(a),c=L(e);return r===i&&r===c?o<=t&&t<=s:r=t||cr:!1}function gt(n,a){var t,e=a===void 0?{}:a,r=e.minDate,o=e.maxDate;return(t=r&&Xe(n,r)<0||o&&Xe(n,o)>0)!==null&&t!==void 0?t:!1}function en(n,a){return a.some(function(t){return Me(t)===Me(n)&&Ce(t)===Ce(n)&&Re(t)===Re(n)})}function tn(n,a){var t=a===void 0?{}:a,e=t.excludeTimes,r=t.includeTimes,o=t.filterTime;return e&&en(n,e)||r&&!en(n,r)||o&&!o(n)||!1}function rn(n,a){var t=a.minTime,e=a.maxTime;if(!t||!e)throw new Error("Both minTime and maxTime props required");var r=V();r=xt(r,Me(n)),r=Mt(r,Ce(n)),r=Ct(r,Re(n));var o=V();o=xt(o,Me(t)),o=Mt(o,Ce(t)),o=Ct(o,Re(t));var i=V();i=xt(i,Me(e)),i=Mt(i,Ce(e)),i=Ct(i,Re(e));var s;try{s=!ut(r,{start:o,end:i})}catch{s=!1}return s}function nn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=He(n,1);return e&&Yt(e,o)>0||r&&r.every(function(i){return Yt(i,o)>0})||!1}function an(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=he(n,1);return e&&Yt(o,e)>0||r&&r.every(function(i){return Yt(o,i)>0})||!1}function uc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=Kt(n),i=Yn(o);return e&&Lt(e,i)>0||r&&r.every(function(s){return Lt(s,i)>0})||!1}function dc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=Mn(n),i=mr(o,1);return e&&Lt(i,e)>0||r&&r.every(function(s){return Lt(i,s)>0})||!1}function on(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=Ze(n,1);return e&&Ft(e,o)>0||r&&r.every(function(i){return Ft(i,o)>0})||!1}function fc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.yearItemNumber,o=r===void 0?mt:r,i=ct(Ze(n,o)),s=Oe(i,o).endPeriod,c=e&&L(e);return c&&c>s||!1}function sn(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=_e(n,1);return e&&Ft(o,e)>0||r&&r.every(function(i){return Ft(o,i)>0})||!1}function pc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.yearItemNumber,o=r===void 0?mt:r,i=_e(n,o),s=Oe(i,o).startPeriod,c=e&&L(e);return c&&c=0});return Rr(e)}else return t?Rr(t):a}function Xn(n){var a=n.maxDate,t=n.includeDates;if(t&&a){var e=t.filter(function(r){return Xe(r,a)<=0});return Or(e)}else return t?Or(t):a}function cn(n,a){var t;n===void 0&&(n=[]),a===void 0&&(a="react-datepicker__day--highlighted");for(var e=new Map,r=0,o=n.length;r=_c,p=!r&&!t.isWeekInMonth(s);if(f||p)if(t.props.peekNextMonth)i=!0;else break}return e},t.onMonthClick=function(e,r){var o=t.isMonthDisabledForLabelDate(r),i=o.isDisabled,s=o.labelDate;i||t.handleDayClick(Se(s),e)},t.onMonthMouseEnter=function(e){var r=t.isMonthDisabledForLabelDate(e),o=r.isDisabled,i=r.labelDate;o||t.handleDayMouseEnter(Se(i))},t.handleMonthNavigation=function(e,r){var o,i,s,c;(i=(o=t.props).setPreSelection)===null||i===void 0||i.call(o,r),(c=(s=t.MONTH_REFS[e])===null||s===void 0?void 0:s.current)===null||c===void 0||c.focus()},t.handleKeyboardNavigation=function(e,r,o){var i,s=t.props,c=s.selected,l=s.preSelection,u=s.setPreSelection,d=s.minDate,f=s.maxDate,p=s.showFourColumnMonthYearPicker,h=s.showTwoColumnMonthYearPicker;if(l){var v=pn(p,h),g=t.getVerticalOffset(v),y=(i=or[v])===null||i===void 0?void 0:i.grid,_=function(C,k,S){var N,Q,I=k,$=S;switch(C){case x.ArrowRight:I=he(k,_t),$=S===11?0:S+_t;break;case x.ArrowLeft:I=He(k,_t),$=S===0?11:S-_t;break;case x.ArrowUp:I=He(k,g),$=!((N=y==null?void 0:y[0])===null||N===void 0)&&N.includes(S)?S+12-g:S-g;break;case x.ArrowDown:I=he(k,g),$=!((Q=y==null?void 0:y[y.length-1])===null||Q===void 0)&&Q.includes(S)?S-12+g:S+g;break}return{newCalculatedDate:I,newCalculatedMonth:$}},w=function(C,k,S){for(var N=40,Q=C,I=!1,$=0,j=_(Q,k,S),q=j.newCalculatedDate,R=j.newCalculatedMonth;!I;){if($>=N){q=k,R=S;break}if(d&&qf){Q=x.ArrowLeft;var F=_(Q,q,R);q=F.newCalculatedDate,R=F.newCalculatedMonth}if(lc(q,t.props)){var F=_(Q,q,R);q=F.newCalculatedDate,R=F.newCalculatedMonth}else I=!0;$++}return{newCalculatedDate:q,newCalculatedMonth:R}};if(r===x.Enter){t.isMonthDisabled(o)||(t.onMonthClick(e,o),u==null||u(c));return}var b=w(r,l,o),P=b.newCalculatedDate,O=b.newCalculatedMonth;switch(r){case x.ArrowRight:case x.ArrowLeft:case x.ArrowUp:case x.ArrowDown:t.handleMonthNavigation(O,P);break}}},t.getVerticalOffset=function(e){var r,o;return(o=(r=or[e])===null||r===void 0?void 0:r.verticalNavigationOffset)!==null&&o!==void 0?o:0},t.onMonthKeyDown=function(e,r){var o=t.props,i=o.disabledKeyboardNavigation,s=o.handleOnMonthKeyDown,c=e.key;c!==x.Tab&&e.preventDefault(),i||t.handleKeyboardNavigation(e,c,r),s&&s(e)},t.onQuarterClick=function(e,r){var o=Ue(t.props.day,r);yt(o,t.props)||t.handleDayClick(Xr(o),e)},t.onQuarterMouseEnter=function(e){var r=Ue(t.props.day,e);yt(r,t.props)||t.handleDayMouseEnter(Xr(r))},t.handleQuarterNavigation=function(e,r){var o,i,s,c;t.isDisabled(r)||t.isExcluded(r)||((i=(o=t.props).setPreSelection)===null||i===void 0||i.call(o,r),(c=(s=t.QUARTER_REFS[e-1])===null||s===void 0?void 0:s.current)===null||c===void 0||c.focus())},t.onQuarterKeyDown=function(e,r){var o,i,s=e.key;if(!t.props.disabledKeyboardNavigation)switch(s){case x.Enter:t.onQuarterClick(e,r),(i=(o=t.props).setPreSelection)===null||i===void 0||i.call(o,t.props.selected);break;case x.ArrowRight:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===4?1:r+1,mr(t.props.preSelection,1));break;case x.ArrowLeft:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===1?4:r-1,Yn(t.props.preSelection));break}},t.isMonthDisabledForLabelDate=function(e){var r,o=t.props,i=o.day,s=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=ce(i,e);return{isDisabled:(r=(s||c||l||u)&&Gn(d,t.props))!==null&&r!==void 0?r:!1,labelDate:d}},t.isMonthDisabled=function(e){var r=t.isMonthDisabledForLabelDate(e).isDisabled;return r},t.getMonthClassNames=function(e){var r=t.props,o=r.day,i=r.startDate,s=r.endDate,c=r.preSelection,l=r.monthClassName,u=l?l(ce(o,e)):void 0,d=t.getSelection();return re("react-datepicker__month-text","react-datepicker__month-".concat(e),u,{"react-datepicker__month-text--disabled":t.isMonthDisabled(e),"react-datepicker__month-text--selected":d?t.isSelectMonthInList(o,e,d):void 0,"react-datepicker__month-text--keyboard-selected":!t.props.disabledKeyboardNavigation&&c&&t.isSelectedMonth(o,e,c)&&!t.isMonthSelected()&&!t.isMonthDisabled(e),"react-datepicker__month-text--in-selecting-range":t.isInSelectingRangeMonth(e),"react-datepicker__month-text--in-range":i&&s?Dt(i,s,e,o):void 0,"react-datepicker__month-text--range-start":t.isRangeStartMonth(e),"react-datepicker__month-text--range-end":t.isRangeEndMonth(e),"react-datepicker__month-text--selecting-range-start":t.isSelectingMonthRangeStart(e),"react-datepicker__month-text--selecting-range-end":t.isSelectingMonthRangeEnd(e),"react-datepicker__month-text--today":t.isCurrentMonth(o,e)})},t.getTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=ne(t.props.preSelection),o=t.isMonthDisabledForLabelDate(r).isDisabled,i=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return i},t.getQuarterTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=We(t.props.preSelection),o=yt(t.props.day,t.props),i=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return i},t.getAriaLabel=function(e){var r=t.props,o=r.chooseDayAriaLabelPrefix,i=o===void 0?"Choose":o,s=r.disabledDayAriaLabelPrefix,c=s===void 0?"Not available":s,l=r.day,u=r.locale,d=ce(l,e),f=t.isDisabled(d)||t.isExcluded(d)?c:i;return"".concat(f," ").concat(G(d,"MMMM yyyy",u))},t.getQuarterClassNames=function(e){var r=t.props,o=r.day,i=r.startDate,s=r.endDate,c=r.selected,l=r.minDate,u=r.maxDate,d=r.excludeDates,f=r.includeDates,p=r.filterDate,h=r.preSelection,v=r.disabledKeyboardNavigation,g=(l||u||d||f||p)&&yt(Ue(o,e),t.props);return re("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter-text--disabled":g,"react-datepicker__quarter-text--selected":c?t.isSelectedQuarter(o,e,c):void 0,"react-datepicker__quarter-text--keyboard-selected":!v&&h&&t.isSelectedQuarter(o,e,h)&&!g,"react-datepicker__quarter-text--in-selecting-range":t.isInSelectingRangeQuarter(e),"react-datepicker__quarter-text--in-range":i&&s?kt(i,s,e,o):void 0,"react-datepicker__quarter-text--range-start":t.isRangeStartQuarter(e),"react-datepicker__quarter-text--range-end":t.isRangeEndQuarter(e),"react-datepicker__quarter-text--today":t.isCurrentQuarter(o,e)})},t.getMonthContent=function(e){var r=t.props,o=r.showFullMonthYearPicker,i=r.renderMonthContent,s=r.locale,c=r.day,l=$n(e,s),u=Sr(e,s);return i?i(e,l,u,c):o?u:l},t.getQuarterContent=function(e){var r,o=t.props,i=o.renderQuarterContent,s=o.locale,c=cc(e,s);return(r=i==null?void 0:i(e,c))!==null&&r!==void 0?r:c},t.renderMonths=function(){var e,r=t.props,o=r.showTwoColumnMonthYearPicker,i=r.showFourColumnMonthYearPicker,s=r.day,c=r.selected,l=(e=or[pn(i,o)])===null||e===void 0?void 0:e.grid;return l==null?void 0:l.map(function(u,d){return m.createElement("div",{className:"react-datepicker__month-wrapper",key:d},u.map(function(f,p){return m.createElement("div",{ref:t.MONTH_REFS[f],key:p,onClick:function(h){t.onMonthClick(h,f)},onKeyDown:function(h){Zn(h)&&(h.preventDefault(),h.key=x.Enter),t.onMonthKeyDown(h,f)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onMonthMouseEnter(f)},onPointerEnter:t.props.usePointerEvent?function(){return t.onMonthMouseEnter(f)}:void 0,tabIndex:Number(t.getTabIndex(f)),className:t.getMonthClassNames(f),"aria-disabled":t.isMonthDisabled(f),role:"option","aria-label":t.getAriaLabel(f),"aria-current":t.isCurrentMonth(s,f)?"date":void 0,"aria-selected":c?t.isSelectedMonth(s,f,c):void 0},t.getMonthContent(f))}))})},t.renderQuarters=function(){var e=t.props,r=e.day,o=e.selected,i=[1,2,3,4];return m.createElement("div",{className:"react-datepicker__quarter-wrapper"},i.map(function(s,c){return m.createElement("div",{key:c,ref:t.QUARTER_REFS[c],role:"option",onClick:function(l){t.onQuarterClick(l,s)},onKeyDown:function(l){t.onQuarterKeyDown(l,s)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onQuarterMouseEnter(s)},onPointerEnter:t.props.usePointerEvent?function(){return t.onQuarterMouseEnter(s)}:void 0,className:t.getQuarterClassNames(s),"aria-selected":o?t.isSelectedQuarter(r,s,o):void 0,tabIndex:Number(t.getQuarterTabIndex(s)),"aria-current":t.isCurrentQuarter(r,s)?"date":void 0},t.getQuarterContent(s))}))},t.getClassNames=function(){var e=t.props,r=e.selectingDate,o=e.selectsStart,i=e.selectsEnd,s=e.showMonthYearPicker,c=e.showQuarterYearPicker,l=e.showWeekPicker;return re("react-datepicker__month",{"react-datepicker__month--selecting-range":r&&(o||i)},{"react-datepicker__monthPicker":s},{"react-datepicker__quarterPicker":c},{"react-datepicker__weekPicker":l})},t}return a.prototype.getSelection=function(){var t=this.props,e=t.selected,r=t.selectedDates,o=t.selectsMultiple;if(o)return r;if(e)return[e]},a.prototype.render=function(){var t=this.props,e=t.showMonthYearPicker,r=t.showQuarterYearPicker,o=t.day,i=t.ariaLabelPrefix,s=i===void 0?"Month ":i,c=s?s.trim()+" ":"";return m.createElement("div",{className:this.getClassNames(),onMouseLeave:this.props.usePointerEvent?void 0:this.handleMouseLeave,onPointerLeave:this.props.usePointerEvent?this.handleMouseLeave:void 0,"aria-label":"".concat(c).concat(G(o,"MMMM, yyyy",this.props.locale)),role:"listbox"},e?this.renderMonths():r?this.renderQuarters():this.renderWeeks())},a}(D.Component),Mc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.isSelectedMonth=function(e){return t.props.month===e},t.renderOptions=function(){return t.props.monthNames.map(function(e,r){return m.createElement("div",{className:t.isSelectedMonth(r)?"react-datepicker__month-option react-datepicker__month-option--selected_month":"react-datepicker__month-option",key:e,onClick:t.onChange.bind(t,r),"aria-selected":t.isSelectedMonth(r)?"true":void 0},t.isSelectedMonth(r)?m.createElement("span",{className:"react-datepicker__month-option--selected"},"✓"):"",e)})},t.onChange=function(e){return t.props.onChange(e)},t.handleClickOutside=function(){return t.props.onCancel()},t}return a.prototype.render=function(){return m.createElement(Xt,{className:"react-datepicker__month-dropdown",onClickOutside:this.handleClickOutside},this.renderOptions())},a}(D.Component),Cc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(e){return e.map(function(r,o){return m.createElement("option",{key:r,value:o},r)})},t.renderSelectMode=function(e){return m.createElement("select",{value:t.props.month,className:"react-datepicker__month-select",onChange:function(r){return t.onChange(parseInt(r.target.value))}},t.renderSelectOptions(e))},t.renderReadView=function(e,r){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-read-view--selected-month"},r[t.props.month]))},t.renderDropdown=function(e){return m.createElement(Mc,W({key:"dropdown"},t.props,{monthNames:e,onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(e){var r=t.state.dropdownVisible,o=[t.renderReadView(!r,e)];return r&&o.unshift(t.renderDropdown(e)),o},t.onChange=function(e){t.toggleDropdown(),e!==t.props.month&&t.props.onChange(e)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t=this,e=[0,1,2,3,4,5,6,7,8,9,10,11].map(this.props.useShortMonthInDropdown?function(o){return $n(o,t.props.locale)}:function(o){return Sr(o,t.props.locale)}),r;switch(this.props.dropdownMode){case"scroll":r=this.renderScrollMode(e);break;case"select":r=this.renderSelectMode(e);break}return m.createElement("div",{className:"react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode)},r)},a}(D.Component);function Sc(n,a){for(var t=[],e=Se(n),r=Se(a);!Ye(e,r);)t.push(V(e)),e=he(e,1);return t}var Ec=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.renderOptions=function(){return e.state.monthYearsList.map(function(r){var o=dr(r),i=ge(e.props.date,r)&&ae(e.props.date,r);return m.createElement("div",{className:i?"react-datepicker__month-year-option--selected_month-year":"react-datepicker__month-year-option",key:o,onClick:e.onChange.bind(e,o),"aria-selected":i?"true":void 0},i?m.createElement("span",{className:"react-datepicker__month-year-option--selected"},"✓"):"",G(r,e.props.dateFormat,e.props.locale))})},e.onChange=function(r){return e.props.onChange(r)},e.handleClickOutside=function(){e.props.onCancel()},e.state={monthYearsList:Sc(e.props.minDate,e.props.maxDate)},e}return a.prototype.render=function(){var t=re({"react-datepicker__month-year-dropdown":!0,"react-datepicker__month-year-dropdown--scrollable":this.props.scrollableMonthYearDropdown});return m.createElement(Xt,{className:t,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(D.Component),Pc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=Se(t.props.minDate),r=Se(t.props.maxDate),o=[];!Ye(e,r);){var i=dr(e);o.push(m.createElement("option",{key:i,value:i},G(e,t.props.dateFormat,t.props.locale))),e=he(e,1)}return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:dr(Se(t.props.date)),className:"react-datepicker__month-year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){var r=G(t.props.date,t.props.dateFormat,t.props.locale);return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-year-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-year-read-view--selected-month-year"},r))},t.renderDropdown=function(){return m.createElement(Ec,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown();var r=V(e);ge(t.props.date,r)&&ae(t.props.date,r)||t.props.onChange(r)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(D.Component),Tc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={height:null},t.scrollToTheSelectedTime=function(){requestAnimationFrame(function(){var e,r,o;t.list&&(t.list.scrollTop=(o=t.centerLi&&a.calcCenterPosition(t.props.monthRef?t.props.monthRef.clientHeight-((r=(e=t.header)===null||e===void 0?void 0:e.clientHeight)!==null&&r!==void 0?r:0):t.list.clientHeight,t.centerLi))!==null&&o!==void 0?o:0)})},t.handleClick=function(e){var r,o;(t.props.minTime||t.props.maxTime)&&rn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&tn(e,t.props)||(o=(r=t.props).onChange)===null||o===void 0||o.call(r,e)},t.isSelectedTime=function(e){return t.props.selected&&wc(t.props.selected,e)},t.isDisabledTime=function(e){return(t.props.minTime||t.props.maxTime)&&rn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&tn(e,t.props)},t.liClasses=function(e){var r,o=["react-datepicker__time-list-item",t.props.timeClassName?t.props.timeClassName(e):void 0];return t.isSelectedTime(e)&&o.push("react-datepicker__time-list-item--selected"),t.isDisabledTime(e)&&o.push("react-datepicker__time-list-item--disabled"),t.props.injectTimes&&(Me(e)*3600+Ce(e)*60+Re(e))%(((r=t.props.intervals)!==null&&r!==void 0?r:a.defaultProps.intervals)*60)!==0&&o.push("react-datepicker__time-list-item--injected"),o.join(" ")},t.handleOnKeyDown=function(e,r){var o,i;e.key===x.Space&&(e.preventDefault(),e.key=x.Enter),(e.key===x.ArrowUp||e.key===x.ArrowLeft)&&e.target instanceof HTMLElement&&e.target.previousSibling&&(e.preventDefault(),e.target.previousSibling instanceof HTMLElement&&e.target.previousSibling.focus()),(e.key===x.ArrowDown||e.key===x.ArrowRight)&&e.target instanceof HTMLElement&&e.target.nextSibling&&(e.preventDefault(),e.target.nextSibling instanceof HTMLElement&&e.target.nextSibling.focus()),e.key===x.Enter&&t.handleClick(r),(i=(o=t.props).handleOnKeyDown)===null||i===void 0||i.call(o,e)},t.renderTimes=function(){for(var e,r=[],o=typeof t.props.format=="string"?t.props.format:"p",i=(e=t.props.intervals)!==null&&e!==void 0?e:a.defaultProps.intervals,s=t.props.selected||t.props.openToDate||V(),c=Et(s),l=t.props.injectTimes&&t.props.injectTimes.sort(function(g,y){return g.getTime()-y.getTime()}),u=60*vc(s),d=u/i,f=0;f=f?e.updateFocusOnPaginate(Math.abs(f-(r-p))):(l=(c=e.YEAR_REFS[r-p])===null||c===void 0?void 0:c.current)===null||l===void 0||l.focus())}},e.isSameDay=function(r,o){return A(r,o)},e.isCurrentYear=function(r){return r===L(V())},e.isRangeStart=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.startDate)},e.isRangeEnd=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.endDate)},e.isInRange=function(r){return bt(r,e.props.startDate,e.props.endDate)},e.isInSelectingRange=function(r){var o=e.props,i=o.selectsStart,s=o.selectsEnd,c=o.selectsRange,l=o.startDate,u=o.endDate;return!(i||s||c)||!e.selectingDate()?!1:i&&u?bt(r,e.selectingDate(),u):s&&l||c&&l&&!u?bt(r,l,e.selectingDate()):!1},e.isSelectingRangeStart=function(r){var o;if(!e.isInSelectingRange(r))return!1;var i=e.props,s=i.startDate,c=i.selectsStart,l=me(V(),r);return c?ge(l,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(l,s??null)},e.isSelectingRangeEnd=function(r){var o;if(!e.isInSelectingRange(r))return!1;var i=e.props,s=i.endDate,c=i.selectsEnd,l=i.selectsRange,u=me(V(),r);return c||l?ge(u,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(u,s??null)},e.isKeyboardSelected=function(r){if(!(e.props.date===void 0||e.props.selected==null||e.props.preSelection==null)){var o=e.props,i=o.minDate,s=o.maxDate,c=o.excludeDates,l=o.includeDates,u=o.filterDate,d=ct(me(e.props.date,r)),f=(i||s||c||l||u)&&Pt(r,e.props);return!e.props.disabledKeyboardNavigation&&!e.props.inline&&!A(d,ct(e.props.selected))&&A(d,ct(e.props.preSelection))&&!f}},e.isSelectedYear=function(r){var o=e.props,i=o.selectsMultiple,s=o.selected,c=o.selectedDates;return i?c==null?void 0:c.some(function(l){return r===L(l)}):!!s&&r===L(s)},e.onYearClick=function(r,o){var i=e.props.date;i!==void 0&&e.handleYearClick(ct(me(i,o)),r)},e.onYearKeyDown=function(r,o){var i,s,c=r.key,l=e.props,u=l.date,d=l.yearItemNumber,f=l.handleOnKeyDown;if(c!==x.Tab&&r.preventDefault(),!e.props.disabledKeyboardNavigation)switch(c){case x.Enter:if(e.props.selected==null)break;e.onYearClick(r,o),(s=(i=e.props).setPreSelection)===null||s===void 0||s.call(i,e.props.selected);break;case x.ArrowRight:if(e.props.preSelection==null)break;e.handleYearNavigation(o+1,_e(e.props.preSelection,1));break;case x.ArrowLeft:if(e.props.preSelection==null)break;e.handleYearNavigation(o-1,Ze(e.props.preSelection,1));break;case x.ArrowUp:{if(u===void 0||d===void 0||e.props.preSelection==null)break;var p=Oe(u,d).startPeriod,h=hn,v=o-h;if(v=p&&oy){var g=d%h;o<=y&&o>y-g?h=g:h+=g,v=o+h}e.handleYearNavigation(v,_e(e.props.preSelection,h));break}}f&&f(r)},e.getYearClassNames=function(r){var o=e.props,i=o.date,s=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=o.filterDate,f=o.yearClassName;return re("react-datepicker__year-text","react-datepicker__year-".concat(r),i?f==null?void 0:f(me(i,r)):void 0,{"react-datepicker__year-text--selected":e.isSelectedYear(r),"react-datepicker__year-text--disabled":(s||c||l||u||d)&&Pt(r,e.props),"react-datepicker__year-text--keyboard-selected":e.isKeyboardSelected(r),"react-datepicker__year-text--range-start":e.isRangeStart(r),"react-datepicker__year-text--range-end":e.isRangeEnd(r),"react-datepicker__year-text--in-range":e.isInRange(r),"react-datepicker__year-text--in-selecting-range":e.isInSelectingRange(r),"react-datepicker__year-text--selecting-range-start":e.isSelectingRangeStart(r),"react-datepicker__year-text--selecting-range-end":e.isSelectingRangeEnd(r),"react-datepicker__year-text--today":e.isCurrentYear(r)})},e.getYearTabIndex=function(r){if(e.props.disabledKeyboardNavigation||e.props.preSelection==null)return"-1";var o=L(e.props.preSelection),i=Pt(r,e.props);return r===o&&!i?"0":"-1"},e.getYearContent=function(r){return e.props.renderYearContent?e.props.renderYearContent(r):r},e}return a.prototype.render=function(){var t=this,e=[],r=this.props,o=r.date,i=r.yearItemNumber,s=r.onYearMouseEnter,c=r.onYearMouseLeave;if(o===void 0)return null;for(var l=Oe(o,i),u=l.startPeriod,d=l.endPeriod,f=function(v){e.push(m.createElement("div",{ref:p.YEAR_REFS[v-u],onClick:function(g){t.onYearClick(g,v)},onKeyDown:function(g){Zn(g)&&(g.preventDefault(),g.key=x.Enter),t.onYearKeyDown(g,v)},tabIndex:Number(p.getYearTabIndex(v)),className:p.getYearClassNames(v),onMouseEnter:p.props.usePointerEvent?void 0:function(g){return s(g,v)},onPointerEnter:p.props.usePointerEvent?function(g){return s(g,v)}:void 0,onMouseLeave:p.props.usePointerEvent?void 0:function(g){return c(g,v)},onPointerLeave:p.props.usePointerEvent?function(g){return c(g,v)}:void 0,key:v,"aria-current":p.isCurrentYear(v)?"date":void 0},p.getYearContent(v)))},p=this,h=u;h<=d;h++)f(h);return m.createElement("div",{className:"react-datepicker__year"},m.createElement("div",{className:"react-datepicker__year-wrapper",onMouseLeave:this.props.usePointerEvent?void 0:this.props.clearSelectingDate,onPointerLeave:this.props.usePointerEvent?this.props.clearSelectingDate:void 0},e))},a}(D.Component);function Rc(n,a,t,e){for(var r=[],o=0;o<2*a+1;o++){var i=n+a-o,s=!0;t&&(s=L(t)<=i),e&&s&&(s=L(e)>=i),s&&r.push(i)}return r}var Nc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;e.renderOptions=function(){var s=e.props.year,c=e.state.yearsList.map(function(d){return m.createElement("div",{className:s===d?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:d,onClick:e.onChange.bind(e,d),"aria-selected":s===d?"true":void 0},s===d?m.createElement("span",{className:"react-datepicker__year-option--selected"},"✓"):"",d)}),l=e.props.minDate?L(e.props.minDate):null,u=e.props.maxDate?L(e.props.maxDate):null;return(!u||!e.state.yearsList.find(function(d){return d===u}))&&c.unshift(m.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:e.incrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),(!l||!e.state.yearsList.find(function(d){return d===l}))&&c.push(m.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:e.decrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),c},e.onChange=function(s){e.props.onChange(s)},e.handleClickOutside=function(){e.props.onCancel()},e.shiftYears=function(s){var c=e.state.yearsList.map(function(l){return l+s});e.setState({yearsList:c})},e.incrementYears=function(){return e.shiftYears(1)},e.decrementYears=function(){return e.shiftYears(-1)};var r=t.yearDropdownItemNumber,o=t.scrollableYearDropdown,i=r||(o?10:5);return e.state={yearsList:Rc(e.props.year,i,e.props.minDate,e.props.maxDate)},e.dropdownRef=D.createRef(),e}return a.prototype.componentDidMount=function(){var t=this.dropdownRef.current;if(t){var e=t.children?Array.from(t.children):null,r=e?e.find(function(o){return o.ariaSelected}):null;t.scrollTop=r&&r instanceof HTMLElement?r.offsetTop+(r.clientHeight-t.clientHeight)/2:(t.scrollHeight-t.clientHeight)/2}},a.prototype.render=function(){var t=re({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return m.createElement(Xt,{className:t,containerRef:this.dropdownRef,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(D.Component),Yc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=t.props.minDate?L(t.props.minDate):1900,r=t.props.maxDate?L(t.props.maxDate):2100,o=[],i=e;i<=r;i++)o.push(m.createElement("option",{key:i,value:i},i));return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:t.props.year,className:"react-datepicker__year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__year-read-view",onClick:function(r){return t.toggleDropdown(r)}},m.createElement("span",{className:"react-datepicker__year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__year-read-view--selected-year"},t.props.year))},t.renderDropdown=function(){return m.createElement(Nc,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown(),e!==t.props.year&&t.props.onChange(e)},t.toggleDropdown=function(e){t.setState({dropdownVisible:!t.state.dropdownVisible},function(){t.props.adjustDateOnChange&&t.handleYearChange(t.props.date,e)})},t.handleYearChange=function(e,r){var o;(o=t.onSelect)===null||o===void 0||o.call(t,e,r),t.setOpen()},t.onSelect=function(e,r){var o,i;(i=(o=t.props).onSelect)===null||i===void 0||i.call(o,e,r)},t.setOpen=function(){var e,r;(r=(e=t.props).setOpen)===null||r===void 0||r.call(e,!0)},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(D.Component),Lc=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],Fc=function(n){var a=(n.className||"").split(/\s+/);return Lc.some(function(t){return a.indexOf(t)>=0})},Ic=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.monthContainer=void 0,e.handleClickOutside=function(r){e.props.onClickOutside(r)},e.setClickOutsideRef=function(){return e.containerRef.current},e.handleDropdownFocus=function(r){var o,i;Fc(r.target)&&((i=(o=e.props).onDropdownFocus)===null||i===void 0||i.call(o,r))},e.getDateInView=function(){var r=e.props,o=r.preSelection,i=r.selected,s=r.openToDate,c=zn(e.props),l=Xn(e.props),u=V(),d=s||i||o;return d||(c&&je(u,c)?c:l&&Ye(u,l)?l:u)},e.increaseMonth=function(){e.setState(function(r){var o=r.date;return{date:he(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.decreaseMonth=function(){e.setState(function(r){var o=r.date;return{date:He(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.handleDayClick=function(r,o,i){e.props.onSelect(r,o,i),e.props.setPreSelection&&e.props.setPreSelection(r)},e.handleDayMouseEnter=function(r){e.setState({selectingDate:r}),e.props.onDayMouseEnter&&e.props.onDayMouseEnter(r)},e.handleMonthMouseLeave=function(){e.setState({selectingDate:void 0}),e.props.onMonthMouseLeave&&e.props.onMonthMouseLeave()},e.handleYearMouseEnter=function(r,o){e.setState({selectingDate:me(V(),o)}),e.props.onYearMouseEnter&&e.props.onYearMouseEnter(r,o)},e.handleYearMouseLeave=function(r,o){e.props.onYearMouseLeave&&e.props.onYearMouseLeave(r,o)},e.handleYearChange=function(r){var o,i,s,c;(i=(o=e.props).onYearChange)===null||i===void 0||i.call(o,r),e.setState({isRenderAriaLiveMessage:!0}),e.props.adjustDateOnChange&&(e.props.onSelect(r),(c=(s=e.props).setOpen)===null||c===void 0||c.call(s,!0)),e.props.setPreSelection&&e.props.setPreSelection(r)},e.getEnabledPreSelectionDateForMonth=function(r){if(!le(r,e.props))return r;for(var o=Se(r),i=ac(r),s=ha(i,o),c=null,l=0;l<=s;l++){var u=pe(o,l);if(!le(u,e.props)){c=u;break}}return c},e.handleMonthChange=function(r){var o,i,s,c=(o=e.getEnabledPreSelectionDateForMonth(r))!==null&&o!==void 0?o:r;e.handleCustomMonthChange(c),e.props.adjustDateOnChange&&(e.props.onSelect(c),(s=(i=e.props).setOpen)===null||s===void 0||s.call(i,!0)),e.props.setPreSelection&&e.props.setPreSelection(c)},e.handleCustomMonthChange=function(r){var o,i;(i=(o=e.props).onMonthChange)===null||i===void 0||i.call(o,r),e.setState({isRenderAriaLiveMessage:!0})},e.handleMonthYearChange=function(r){e.handleYearChange(r),e.handleMonthChange(r)},e.changeYear=function(r){e.setState(function(o){var i=o.date;return{date:me(i,Number(r))}},function(){return e.handleYearChange(e.state.date)})},e.changeMonth=function(r){e.setState(function(o){var i=o.date;return{date:ce(i,Number(r))}},function(){return e.handleMonthChange(e.state.date)})},e.changeMonthYear=function(r){e.setState(function(o){var i=o.date;return{date:me(ce(i,ne(r)),L(r))}},function(){return e.handleMonthYearChange(e.state.date)})},e.header=function(r){r===void 0&&(r=e.state.date);var o=Ne(r,e.props.locale,e.props.calendarStartDay),i=[];return e.props.showWeekNumbers&&i.push(m.createElement("div",{key:"W",className:"react-datepicker__day-name"},e.props.weekLabel||"#")),i.concat([0,1,2,3,4,5,6].map(function(s){var c=pe(o,s),l=e.formatWeekday(c,e.props.locale),u=e.props.weekDayClassName?e.props.weekDayClassName(c):void 0;return m.createElement("div",{key:s,"aria-label":G(c,"EEEE",e.props.locale),className:re("react-datepicker__day-name",u)},l)}))},e.formatWeekday=function(r,o){return e.props.formatWeekDay?oc(r,e.props.formatWeekDay,o):e.props.useWeekdaysShort?sc(r,o):ic(r,o)},e.decreaseYear=function(){e.setState(function(r){var o,i=r.date;return{date:Ze(i,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.clearSelectingDate=function(){e.setState({selectingDate:void 0})},e.renderPreviousButton=function(){var r,o,i;if(!e.props.renderCustomHeader){var s=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?s-1:0,l=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,u=He(e.state.date,l),d;switch(!0){case e.props.showMonthYearPicker:d=on(e.state.date,e.props);break;case e.props.showYearPicker:d=fc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:d=uc(e.state.date,e.props);break;default:d=nn(u,e.props);break}if(!(!((i=e.props.forceShowMonthNavigation)!==null&&i!==void 0?i:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&d||e.props.showTimeSelectOnly)){var f=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--previous"],p=["react-datepicker__navigation","react-datepicker__navigation--previous"],h=e.decreaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(h=e.decreaseYear),d&&e.props.showDisabledMonthNavigation&&(p.push("react-datepicker__navigation--previous--disabled"),h=void 0);var v=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,g=e.props,y=g.previousMonthButtonLabel,_=y===void 0?a.defaultProps.previousMonthButtonLabel:y,w=g.previousYearButtonLabel,b=w===void 0?a.defaultProps.previousYearButtonLabel:w,P=e.props,O=P.previousMonthAriaLabel,C=O===void 0?typeof _=="string"?_:"Previous Month":O,k=P.previousYearAriaLabel,S=k===void 0?typeof b=="string"?b:"Previous Year":k;return m.createElement("button",{type:"button",className:p.join(" "),onClick:h,onKeyDown:e.props.handleOnKeyDown,"aria-label":v?S:C},m.createElement("span",{className:f.join(" ")},v?b:_))}}},e.increaseYear=function(){e.setState(function(r){var o,i=r.date;return{date:_e(i,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.renderNextButton=function(){var r;if(!e.props.renderCustomHeader){var o;switch(!0){case e.props.showMonthYearPicker:o=sn(e.state.date,e.props);break;case e.props.showYearPicker:o=pc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:o=dc(e.state.date,e.props);break;default:o=an(e.state.date,e.props);break}if(!(!((r=e.props.forceShowMonthNavigation)!==null&&r!==void 0?r:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&o||e.props.showTimeSelectOnly)){var i=["react-datepicker__navigation","react-datepicker__navigation--next"],s=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--next"];e.props.showTimeSelect&&i.push("react-datepicker__navigation--next--with-time"),e.props.todayButton&&i.push("react-datepicker__navigation--next--with-today-button");var c=e.increaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(c=e.increaseYear),o&&e.props.showDisabledMonthNavigation&&(i.push("react-datepicker__navigation--next--disabled"),c=void 0);var l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,u=e.props,d=u.nextMonthButtonLabel,f=d===void 0?a.defaultProps.nextMonthButtonLabel:d,p=u.nextYearButtonLabel,h=p===void 0?a.defaultProps.nextYearButtonLabel:p,v=e.props,g=v.nextMonthAriaLabel,y=g===void 0?typeof f=="string"?f:"Next Month":g,_=v.nextYearAriaLabel,w=_===void 0?typeof h=="string"?h:"Next Year":_;return m.createElement("button",{type:"button",className:i.join(" "),onClick:c,onKeyDown:e.props.handleOnKeyDown,"aria-label":l?w:y},m.createElement("span",{className:s.join(" ")},l?h:f))}}},e.renderCurrentMonth=function(r){r===void 0&&(r=e.state.date);var o=["react-datepicker__current-month"];return e.props.showYearDropdown&&o.push("react-datepicker__current-month--hasYearDropdown"),e.props.showMonthDropdown&&o.push("react-datepicker__current-month--hasMonthDropdown"),e.props.showMonthYearDropdown&&o.push("react-datepicker__current-month--hasMonthYearDropdown"),m.createElement("h2",{className:o.join(" ")},G(r,e.props.dateFormat,e.props.locale))},e.renderYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showYearDropdown||r))return m.createElement(Yc,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeYear,year:L(e.state.date)}))},e.renderMonthDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthDropdown||r))return m.createElement(Cc,W({},a.defaultProps,e.props,{month:ne(e.state.date),onChange:e.changeMonth}))},e.renderMonthYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthYearDropdown||r))return m.createElement(Pc,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeMonthYear}))},e.handleTodayButtonClick=function(r){e.props.onSelect(Zr(),r),e.props.setPreSelection&&e.props.setPreSelection(Zr())},e.renderTodayButton=function(){if(!(!e.props.todayButton||e.props.showTimeSelectOnly))return m.createElement("div",{className:"react-datepicker__today-button",onClick:e.handleTodayButtonClick},e.props.todayButton)},e.renderDefaultHeader=function(r){var o=r.monthDate,i=r.i;return m.createElement("div",{className:"react-datepicker__header ".concat(e.props.showTimeSelect?"react-datepicker__header--has-time-select":"")},e.renderCurrentMonth(o),m.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(e.props.dropdownMode),onFocus:e.handleDropdownFocus},e.renderMonthDropdown(i!==0),e.renderMonthYearDropdown(i!==0),e.renderYearDropdown(i!==0)),m.createElement("div",{className:"react-datepicker__day-names"},e.header(o)))},e.renderCustomHeader=function(r){var o,i,s=r.monthDate,c=r.i;if(e.props.showTimeSelect&&!e.state.monthContainer||e.props.showTimeSelectOnly)return null;var l=nn(e.state.date,e.props),u=an(e.state.date,e.props),d=on(e.state.date,e.props),f=sn(e.state.date,e.props),p=!e.props.showMonthYearPicker&&!e.props.showQuarterYearPicker&&!e.props.showYearPicker;return m.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:e.props.onDropdownFocus},(i=(o=e.props).renderCustomHeader)===null||i===void 0?void 0:i.call(o,W(W({},e.state),{customHeaderCount:c,monthDate:s,changeMonth:e.changeMonth,changeYear:e.changeYear,decreaseMonth:e.decreaseMonth,increaseMonth:e.increaseMonth,decreaseYear:e.decreaseYear,increaseYear:e.increaseYear,prevMonthButtonDisabled:l,nextMonthButtonDisabled:u,prevYearButtonDisabled:d,nextYearButtonDisabled:f})),p&&m.createElement("div",{className:"react-datepicker__day-names"},e.header(s)))},e.renderYearHeader=function(r){var o=r.monthDate,i=e.props,s=i.showYearPicker,c=i.yearItemNumber,l=c===void 0?a.defaultProps.yearItemNumber:c,u=Oe(o,l),d=u.startPeriod,f=u.endPeriod;return m.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},s?"".concat(d," - ").concat(f):L(o))},e.renderHeader=function(r){var o=r.monthDate,i=r.i,s=i===void 0?0:i,c={monthDate:o,i:s};switch(!0){case e.props.renderCustomHeader!==void 0:return e.renderCustomHeader(c);case(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker):return e.renderYearHeader(c);default:return e.renderDefaultHeader(c)}},e.renderMonths=function(){var r,o;if(!(e.props.showTimeSelectOnly||e.props.showYearPicker)){for(var i=[],s=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?s-1:0,l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker?_e(e.state.date,c):He(e.state.date,c),u=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,d=0;d0;i.push(m.createElement("div",{key:h,ref:function(y){e.monthContainer=y??void 0},className:"react-datepicker__month-container"},e.renderHeader({monthDate:p,i:d}),m.createElement(xc,W({},a.defaultProps,e.props,{containerRef:e.containerRef,ariaLabelPrefix:e.props.monthAriaLabelPrefix,day:p,onDayClick:e.handleDayClick,handleOnKeyDown:e.props.handleOnDayKeyDown,handleOnMonthKeyDown:e.props.handleOnKeyDown,onDayMouseEnter:e.handleDayMouseEnter,onMouseLeave:e.handleMonthMouseLeave,orderInDisplay:d,selectingDate:e.state.selectingDate,monthShowsDuplicateDaysEnd:v,monthShowsDuplicateDaysStart:g}))))}return i}},e.renderYears=function(){if(!e.props.showTimeSelectOnly&&e.props.showYearPicker)return m.createElement("div",{className:"react-datepicker__year--container"},e.renderHeader({monthDate:e.state.date}),m.createElement(Oc,W({},a.defaultProps,e.props,{selectingDate:e.state.selectingDate,date:e.state.date,onDayClick:e.handleDayClick,clearSelectingDate:e.clearSelectingDate,onYearMouseEnter:e.handleYearMouseEnter,onYearMouseLeave:e.handleYearMouseLeave})))},e.renderTimeSection=function(){if(e.props.showTimeSelect&&(e.state.monthContainer||e.props.showTimeSelectOnly))return m.createElement(Tc,W({},a.defaultProps,e.props,{onChange:e.props.onTimeChange,format:e.props.timeFormat,intervals:e.props.timeIntervals,monthRef:e.state.monthContainer}))},e.renderInputTimeSection=function(){var r=e.props.selected?new Date(e.props.selected):void 0,o=r&&Zt(r)&&!!e.props.selected,i=o?"".concat(ln(r.getHours()),":").concat(ln(r.getMinutes())):"";if(e.props.showTimeInput)return m.createElement(Dc,W({},a.defaultProps,e.props,{date:r,timeString:i,onChange:e.props.onTimeChange}))},e.renderAriaLiveRegion=function(){var r,o=Oe(e.state.date,(r=e.props.yearItemNumber)!==null&&r!==void 0?r:a.defaultProps.yearItemNumber),i=o.startPeriod,s=o.endPeriod,c;return e.props.showYearPicker?c="".concat(i," - ").concat(s):e.props.showMonthYearPicker||e.props.showQuarterYearPicker?c=L(e.state.date):c="".concat(Sr(ne(e.state.date),e.props.locale)," ").concat(L(e.state.date)),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},e.state.isRenderAriaLiveMessage&&c)},e.renderChildren=function(){if(e.props.children)return m.createElement("div",{className:"react-datepicker__children-container"},e.props.children)},e.containerRef=D.createRef(),e.state={date:e.getDateInView(),selectingDate:void 0,monthContainer:void 0,isRenderAriaLiveMessage:!1},e}return Object.defineProperty(a,"defaultProps",{get:function(){return{monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousYearButtonLabel:"Previous Year",nextYearButtonLabel:"Next Year",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next Month",yearItemNumber:mt}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){var t=this;this.props.showTimeSelect&&(this.assignMonthContainer=function(){t.setState({monthContainer:t.monthContainer})}())},a.prototype.componentDidUpdate=function(t){var e=this;if(this.props.preSelection&&(!A(this.props.preSelection,t.preSelection)||this.props.monthSelectedIn!==t.monthSelectedIn)){var r=!ae(this.state.date,this.props.preSelection);this.setState({date:this.props.preSelection},function(){return r&&e.handleCustomMonthChange(e.state.date)})}else this.props.openToDate&&!A(this.props.openToDate,t.openToDate)&&this.setState({date:this.props.openToDate})},a.prototype.render=function(){var t=this.props.container||Xs;return m.createElement(Xt,{onClickOutside:this.handleClickOutside,style:{display:"contents"},ignoreClass:this.props.outsideClickIgnoreClass},m.createElement("div",{style:{display:"contents"},ref:this.containerRef},m.createElement(t,{className:re("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly}),showTime:this.props.showTimeSelect||this.props.showTimeInput,showTimeSelectOnly:this.props.showTimeSelectOnly},this.renderAriaLiveRegion(),this.renderPreviousButton(),this.renderNextButton(),this.renderMonths(),this.renderYears(),this.renderTodayButton(),this.renderTimeSection(),this.renderInputTimeSection(),this.renderChildren())))},a}(D.Component),Ac=function(n){var a=n.icon,t=n.className,e=t===void 0?"":t,r=n.onClick,o="react-datepicker__calendar-icon";if(typeof a=="string")return m.createElement("i",{className:"".concat(o," ").concat(a," ").concat(e),"aria-hidden":"true",onClick:r});if(m.isValidElement(a)){var i=a;return m.cloneElement(i,{className:"".concat(i.props.className||""," ").concat(o," ").concat(e),onClick:function(s){typeof i.props.onClick=="function"&&i.props.onClick(s),typeof r=="function"&&r(s)}})}return m.createElement("svg",{className:"".concat(o," ").concat(e),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",onClick:r},m.createElement("path",{d:"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z"}))},Jn=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.portalRoot=null,e.el=document.createElement("div"),e}return a.prototype.componentDidMount=function(){this.portalRoot=(this.props.portalHost||document).getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),(this.props.portalHost||document.body).appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)},a.prototype.componentWillUnmount=function(){this.portalRoot&&this.portalRoot.removeChild(this.el)},a.prototype.render=function(){return aa.createPortal(this.props.children,this.el)},a}(D.Component),Wc="[tabindex], a, button, input, select, textarea",Hc=function(n){return(n instanceof HTMLAnchorElement||!n.disabled)&&n.tabIndex!==-1},ea=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.getTabChildren=function(){var r;return Array.prototype.slice.call((r=e.tabLoopRef.current)===null||r===void 0?void 0:r.querySelectorAll(Wc),1,-1).filter(Hc)},e.handleFocusStart=function(){var r=e.getTabChildren();r&&r.length>1&&r[r.length-1].focus()},e.handleFocusEnd=function(){var r=e.getTabChildren();r&&r.length>1&&r[0].focus()},e.tabLoopRef=D.createRef(),e}return a.prototype.render=function(){var t;return((t=this.props.enableTabLoop)!==null&&t!==void 0?t:a.defaultProps.enableTabLoop)?m.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},m.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:0,onFocus:this.handleFocusStart}),this.props.children,m.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:0,onFocus:this.handleFocusEnd})):this.props.children},a.defaultProps={enableTabLoop:!0},a}(D.Component);function Bc(n){var a=function(t){var e,r=typeof t.hidePopper=="boolean"?t.hidePopper:!0,o=D.useRef(null),i=zs(W({open:!r,whileElementsMounted:Es,placement:t.popperPlacement,middleware:De([Is({padding:15}),Fs(10),As({element:o})],(e=t.popperModifiers)!==null&&e!==void 0?e:[],!0)},t.popperProps)),s=W(W({},t),{hidePopper:r,popperProps:W(W({},i),{arrowRef:o})});return m.createElement(n,W({},s))};return a}var Qc=function(n){te(a,n);function a(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(a,"defaultProps",{get:function(){return{hidePopper:!0}},enumerable:!1,configurable:!0}),a.prototype.render=function(){var t=this.props,e=t.className,r=t.wrapperClassName,o=t.hidePopper,i=o===void 0?a.defaultProps.hidePopper:o,s=t.popperComponent,c=t.targetComponent,l=t.enableTabLoop,u=t.popperOnKeyDown,d=t.portalId,f=t.portalHost,p=t.popperProps,h=t.showArrow,v=void 0;if(!i){var g=re("react-datepicker-popper",e);v=m.createElement(ea,{enableTabLoop:l},m.createElement("div",{ref:p.refs.setFloating,style:p.floatingStyles,className:g,"data-placement":p.placement,onKeyDown:u},s,h&&m.createElement(js,{ref:p.arrowRef,context:p.context,fill:"currentColor",strokeWidth:1,height:8,width:16,style:{transform:"translateY(-1px)"},className:"react-datepicker__triangle"})))}this.props.popperContainer&&(v=D.createElement(this.props.popperContainer,{},v)),d&&!i&&(v=m.createElement(Jn,{portalId:d,portalHost:f},v));var y=re("react-datepicker-wrapper",r);return m.createElement(m.Fragment,null,m.createElement("div",{ref:p.refs.setReference,className:y},c),v)},a}(D.Component),jc=Bc(Qc),mn="react-datepicker-ignore-onclickoutside";function Vc(n,a){return n&&a?ne(n)!==ne(a)||L(n)!==L(a):n!==a}var ir="Date input not valid.",qc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.calendar=null,e.input=null,e.getPreSelection=function(){return e.props.openToDate?e.props.openToDate:e.props.selectsEnd&&e.props.startDate?e.props.startDate:e.props.selectsStart&&e.props.endDate?e.props.endDate:V()},e.modifyHolidays=function(){var r;return(r=e.props.holidays)===null||r===void 0?void 0:r.reduce(function(o,i){var s=new Date(i.date);return Zt(s)?De(De([],o,!0),[W(W({},i),{date:s})],!1):o},[])},e.calcInitialState=function(){var r,o=e.getPreSelection(),i=zn(e.props),s=Xn(e.props),c=i&&je(o,Et(i))?i:s&&Ye(o,Jr(s))?s:o;return{open:e.props.startOpen||!1,preventFocus:!1,inputValue:null,preSelection:(r=e.props.selectsRange?e.props.startDate:e.props.selected)!==null&&r!==void 0?r:c,highlightDates:cn(e.props.highlightDates),focused:!1,shouldFocusDayInline:!1,isRenderAriaLiveMessage:!1,wasHidden:!1}},e.resetHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!1}))},e.setHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!0}))},e.setHiddenStateOnVisibilityHidden=function(){document.visibilityState==="hidden"&&e.setHiddenStatus()},e.clearPreventFocusTimeout=function(){e.preventFocusTimeout&&clearTimeout(e.preventFocusTimeout)},e.setFocus=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.focus)===null||o===void 0||o.call(r,{preventScroll:!0})},e.setBlur=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.blur)===null||o===void 0||o.call(r),e.cancelFocusInput()},e.deferBlur=function(){requestAnimationFrame(function(){e.setBlur()})},e.setOpen=function(r,o){o===void 0&&(o=!1),e.setState({open:r,preSelection:r&&e.state.open?e.state.preSelection:e.calcInitialState().preSelection,lastPreSelectChange:sr},function(){r||e.setState(function(i){return{focused:o?i.focused:!1}},function(){!o&&e.deferBlur(),e.setState({inputValue:null})})})},e.inputOk=function(){return xe(e.state.preSelection)},e.isCalendarOpen=function(){return e.props.open===void 0?e.state.open&&!e.props.disabled&&!e.props.readOnly:e.props.open},e.handleFocus=function(r){var o,i,s=e.state.wasHidden,c=s?e.state.open:!0;s&&e.resetHiddenStatus(),e.state.preventFocus||((i=(o=e.props).onFocus)===null||i===void 0||i.call(o,r),c&&!e.props.preventOpenOnFocus&&!e.props.readOnly&&e.setOpen(!0)),e.setState({focused:!0})},e.sendFocusBackToInput=function(){e.preventFocusTimeout&&e.clearPreventFocusTimeout(),e.setState({preventFocus:!0},function(){e.preventFocusTimeout=setTimeout(function(){e.setFocus(),e.setState({preventFocus:!1})})})},e.cancelFocusInput=function(){clearTimeout(e.inputFocusTimeout),e.inputFocusTimeout=void 0},e.deferFocusInput=function(){e.cancelFocusInput(),e.inputFocusTimeout=setTimeout(function(){return e.setFocus()},1)},e.handleDropdownFocus=function(){e.cancelFocusInput()},e.handleBlur=function(r){var o,i;(!e.state.open||e.props.withPortal||e.props.showTimeInput)&&((i=(o=e.props).onBlur)===null||i===void 0||i.call(o,r)),e.state.open&&e.props.open===!1&&e.setOpen(!1),e.setState({focused:!1})},e.handleCalendarClickOutside=function(r){var o,i;e.props.inline||e.setOpen(!1),(i=(o=e.props).onClickOutside)===null||i===void 0||i.call(o,r),e.props.withPortal&&r.preventDefault()},e.handleChange=function(){for(var r,o,i,s,c,l=[],u=0;u=F){fe=R;break}f&&fep&&(Y=x.ArrowLeft,fe=le(p,e.props)?k(Y,fe):p),le(fe,e.props)?((Y===x.PageUp||Y===x.Home)&&(Y=x.ArrowRight),(Y===x.PageDown||Y===x.End)&&(Y=x.ArrowLeft),fe=k(Y,fe)):ee=!0,de++}return fe};if(P===x.Enter){r.preventDefault(),e.handleSelect(C,r),!g&&e.setPreSelection(C);return}else if(P===x.Escape){r.preventDefault(),e.setOpen(!1),e.inputOk()||(c=(s=e.props).onInputError)===null||c===void 0||c.call(s,{code:1,msg:ir});return}var N=null;switch(P){case x.ArrowLeft:case x.ArrowRight:case x.ArrowUp:case x.ArrowDown:case x.PageUp:case x.PageDown:case x.Home:case x.End:N=S(P,C);break}if(!N){(u=(l=e.props).onInputError)===null||u===void 0||u.call(l,{code:1,msg:ir});return}if(r.preventDefault(),e.setState({lastPreSelectChange:sr}),w&&e.setSelected(N),e.setPreSelection(N),b){var Q=ne(C),I=ne(N),$=L(C),j=L(N);Q!==I||$!==j?e.setState({shouldFocusDayInline:!0}):e.setState({shouldFocusDayInline:!1})}}},e.onPopperKeyDown=function(r){var o=r.key;o===x.Escape&&(r.preventDefault(),e.sendFocusBackToInput(),e.setOpen(!1))},e.onClearClick=function(r){r&&r.preventDefault&&r.preventDefault(),e.sendFocusBackToInput();var o=e.props,i=o.selectsRange,s=o.onChange;i?s==null||s([null,null],r):s==null||s(null,r),e.setState({inputValue:null})},e.clear=function(){e.onClearClick()},e.onScroll=function(r){typeof e.props.closeOnScroll=="boolean"&&e.props.closeOnScroll?(r.target===document||r.target===document.documentElement||r.target===document.body)&&e.setOpen(!1):typeof e.props.closeOnScroll=="function"&&e.props.closeOnScroll(r)&&e.setOpen(!1)},e.renderCalendar=function(){var r,o;return!e.props.inline&&!e.isCalendarOpen()?null:m.createElement(Ic,W({showMonthYearDropdown:void 0,ref:function(i){e.calendar=i}},e.props,e.state,{setOpen:e.setOpen,dateFormat:(r=e.props.dateFormatCalendar)!==null&&r!==void 0?r:a.defaultProps.dateFormatCalendar,onSelect:e.handleSelect,onClickOutside:e.handleCalendarClickOutside,holidays:mc(e.modifyHolidays()),outsideClickIgnoreClass:mn,onDropdownFocus:e.handleDropdownFocus,onTimeChange:e.handleTimeChange,className:e.props.calendarClassName,container:e.props.calendarContainer,handleOnKeyDown:e.props.onKeyDown,handleOnDayKeyDown:e.onDayKeyDown,setPreSelection:e.setPreSelection,dropdownMode:(o=e.props.dropdownMode)!==null&&o!==void 0?o:a.defaultProps.dropdownMode}),e.props.children)},e.renderAriaLiveRegion=function(){var r=e.props,o=r.dateFormat,i=o===void 0?a.defaultProps.dateFormat:o,s=r.locale,c=e.props.showTimeInput||e.props.showTimeSelect,l=c?"PPPPp":"PPPP",u;return e.props.selectsRange?u="Selected start date: ".concat(se(e.props.startDate,{dateFormat:l,locale:s}),". ").concat(e.props.endDate?"End date: "+se(e.props.endDate,{dateFormat:l,locale:s}):""):e.props.showTimeSelectOnly?u="Selected time: ".concat(se(e.props.selected,{dateFormat:i,locale:s})):e.props.showYearPicker?u="Selected year: ".concat(se(e.props.selected,{dateFormat:"yyyy",locale:s})):e.props.showMonthYearPicker?u="Selected month: ".concat(se(e.props.selected,{dateFormat:"MMMM yyyy",locale:s})):e.props.showQuarterYearPicker?u="Selected quarter: ".concat(se(e.props.selected,{dateFormat:"yyyy, QQQ",locale:s})):u="Selected date: ".concat(se(e.props.selected,{dateFormat:l,locale:s})),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},u)},e.renderDateInput=function(){var r,o,i,s=re(e.props.className,(r={},r[mn]=e.state.open,r)),c=e.props.customInput||m.createElement("input",{type:"text"}),l=e.props.customInputRef||"ref",u=e.props,d=u.dateFormat,f=d===void 0?a.defaultProps.dateFormat:d,p=u.locale,h=typeof e.props.value=="string"?e.props.value:typeof e.state.inputValue=="string"?e.state.inputValue:e.props.selectsRange?Js(e.props.startDate,e.props.endDate,{dateFormat:f,locale:p}):e.props.selectsMultiple?ec((i=e.props.selectedDates)!==null&&i!==void 0?i:[],{dateFormat:f,locale:p}):se(e.props.selected,{dateFormat:f,locale:p});return D.cloneElement(c,(o={},o[l]=function(v){e.input=v},o.value=h,o.onBlur=e.handleBlur,o.onChange=e.handleChange,o.onClick=e.onInputClick,o.onFocus=e.handleFocus,o.onKeyDown=e.onInputKeyDown,o.id=e.props.id,o.name=e.props.name,o.form=e.props.form,o.autoFocus=e.props.autoFocus,o.placeholder=e.props.placeholderText,o.disabled=e.props.disabled,o.autoComplete=e.props.autoComplete,o.className=re(c.props.className,s),o.title=e.props.title,o.readOnly=e.props.readOnly,o.required=e.props.required,o.tabIndex=e.props.tabIndex,o["aria-describedby"]=e.props.ariaDescribedBy,o["aria-invalid"]=e.props.ariaInvalid,o["aria-labelledby"]=e.props.ariaLabelledBy,o["aria-required"]=e.props.ariaRequired,o))},e.renderClearButton=function(){var r=e.props,o=r.isClearable,i=r.disabled,s=r.selected,c=r.startDate,l=r.endDate,u=r.clearButtonTitle,d=r.clearButtonClassName,f=d===void 0?"":d,p=r.ariaLabelClose,h=p===void 0?"Close":p,v=r.selectedDates,g=r.readOnly;return o&&!g&&(s!=null||c!=null||l!=null||v!=null&&v.length)?m.createElement("button",{type:"button",className:re("react-datepicker__close-icon",f,{"react-datepicker__close-icon--disabled":i}),disabled:i,"aria-label":h,onClick:e.onClearClick,title:u,tabIndex:-1}):null},e.state=e.calcInitialState(),e.preventFocusTimeout=void 0,e}return Object.defineProperty(a,"defaultProps",{get:function(){return{allowSameDay:!1,dateFormat:"MM/dd/yyyy",dateFormatCalendar:"LLLL yyyy",disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",preventOpenOnFocus:!1,monthsShown:1,readOnly:!1,withPortal:!1,selectsDisabledDaysInRange:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showTwoColumnMonthYearPicker:!1,showFourColumnMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,showWeekPicker:!1,strictParsing:!1,swapRange:!1,timeIntervals:30,timeCaption:"Time",previousMonthAriaLabel:"Previous Month",previousMonthButtonLabel:"Previous Month",nextMonthAriaLabel:"Next Month",nextMonthButtonLabel:"Next Month",previousYearAriaLabel:"Previous Year",previousYearButtonLabel:"Previous Year",nextYearAriaLabel:"Next Year",nextYearButtonLabel:"Next Year",timeInputLabel:"Time",enableTabLoop:!0,yearItemNumber:mt,focusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null,calendarStartDay:void 0,toggleCalendarOnIconClick:!1,usePointerEvent:!1}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){window.addEventListener("scroll",this.onScroll,!0),document.addEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.componentDidUpdate=function(t,e){var r,o,i,s;t.inline&&Vc(t.selected,this.props.selected)&&this.setPreSelection(this.props.selected),this.state.monthSelectedIn!==void 0&&t.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),t.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:cn(this.props.highlightDates)}),!e.focused&&!Ae(t.selected,this.props.selected)&&this.setState({inputValue:null}),e.open!==this.state.open&&(e.open===!1&&this.state.open===!0&&((o=(r=this.props).onCalendarOpen)===null||o===void 0||o.call(r)),e.open===!0&&this.state.open===!1&&((s=(i=this.props).onCalendarClose)===null||s===void 0||s.call(i)))},a.prototype.componentWillUnmount=function(){this.clearPreventFocusTimeout(),window.removeEventListener("scroll",this.onScroll,!0),document.removeEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.renderInputContainer=function(){var t=this.props,e=t.showIcon,r=t.icon,o=t.calendarIconClassname,i=t.calendarIconClassName,s=t.toggleCalendarOnIconClick,c=this.state.open;return o&&console.warn("calendarIconClassname props is deprecated. should use calendarIconClassName props."),m.createElement("div",{className:"react-datepicker__input-container".concat(e?" react-datepicker__view-calendar-icon":"")},e&&m.createElement(Ac,W({icon:r,className:re(i,!i&&o,c&&"react-datepicker-ignore-onclickoutside")},s?{onClick:this.toggleCalendar}:null)),this.state.isRenderAriaLiveMessage&&this.renderAriaLiveRegion(),this.renderDateInput(),this.renderClearButton())},a.prototype.render=function(){var t=this.renderCalendar();if(this.props.inline)return t;if(this.props.withPortal){var e=this.state.open?m.createElement(ea,{enableTabLoop:this.props.enableTabLoop},m.createElement("div",{className:"react-datepicker__portal",tabIndex:-1,onKeyDown:this.onPortalKeyDown},t)):null;return this.state.open&&this.props.portalId&&(e=m.createElement(Jn,W({portalId:this.props.portalId},this.props),e)),m.createElement("div",null,this.renderInputContainer(),e)}return m.createElement(jc,W({},this.props,{className:this.props.popperClassName,hidePopper:!this.isCalendarOpen(),targetComponent:this.renderInputContainer(),popperComponent:t,popperOnKeyDown:this.onPopperKeyDown,showArrow:this.props.showPopperArrow}))},a}(D.Component),Kc="input",sr="navigate";const Uc=H.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`,$c=H.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`,Gc=H.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`,zc=H.div` + display: flex; + gap: 1rem; + align-items: center; + flex-wrap: wrap; +`,Xc=H.div` + display: flex; + flex-direction: column; + min-width: 150px; +`,Zc=H.label` + font-size: 0.875rem; + font-weight: 500; + color: #374151; + margin-bottom: 0.5rem; +`,Jc=H(qc)` + width: 100%; + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + color: #111827; + background-color: white; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:hover { + border-color: #9ca3af; + } +`,el=H.button` + padding: 0.5rem 1rem; + background-color: #f3f4f6; + color: #374151; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #e5e7eb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,tl=H.div` + display: flex; + align-items: center; + color: #6b7280; + font-size: 0.875rem; +`,gn=({label:n,selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:i,minDate:s,maxDate:c,placeholderText:l})=>T.jsxs(Xc,{children:[T.jsx(Zc,{children:n}),T.jsx(Jc,{selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:i,minDate:s,maxDate:c,dateFormat:"MMM dd, yyyy",placeholderText:l})]}),rl=({onDateChange:n,initialStartDate:a,initialEndDate:t})=>{const{startDate:e,endDate:r,handleStartDateChange:o,handleEndDateChange:i,handleReset:s}=ia(n,a,t);return T.jsxs(Uc,{children:[T.jsxs($c,{children:[T.jsx(Gc,{children:"Date Range"}),T.jsx(el,{onClick:s,children:"Reset"})]}),T.jsxs(zc,{children:[T.jsx(gn,{label:"Start Date",selected:e,onChange:o,selectsStart:!0,startDate:e,endDate:r,maxDate:r,placeholderText:"Select start date"}),T.jsx(tl,{children:T.jsx("span",{children:"to"})}),T.jsx(gn,{label:"End Date",selected:r,onChange:i,selectsEnd:!0,startDate:e,endDate:r,minDate:e,maxDate:new Date,placeholderText:"Select end date"})]})]})},nl=H.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`,al=H.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`,ol=H.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`,il=H.input` + width: 100%; + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + color: #111827; + background-color: white; + margin-bottom: 1rem; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:hover { + border-color: #9ca3af; + } +`,sl=H.div` + max-height: 200px; + overflow-y: auto; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + background-color: white; +`,cl=H.label` + display: flex; + align-items: center; + padding: 0.75rem; + cursor: pointer; + border-bottom: 1px solid #f3f4f6; + transition: background-color 0.2s; + + &:last-child { + border-bottom: none; + } + + &:hover { + background-color: #f9fafb; + } + + &:focus-within { + background-color: #f0fdf4; + } +`,ll=H.input` + margin-right: 0.75rem; + width: 1rem; + height: 1rem; + accent-color: #10b981; +`,ul=H.div` + flex: 1; +`,dl=H.div` + font-weight: 500; + color: #111827; + font-size: 0.875rem; +`,fl=H.div` + font-size: 0.75rem; + color: #6b7280; + margin-top: 0.25rem; +`,pl=H.div` + font-size: 0.75rem; + color: #6b7280; + margin-top: 0.5rem; +`,hl=H.button` + padding: 0.5rem 1rem; + background-color: #f3f4f6; + color: #374151; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #e5e7eb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,ml=[{id:1,name:"Forest A",region:"North Region",treeCount:2500,area:"150 ha"},{id:2,name:"Forest B",region:"South Region",treeCount:3200,area:"200 ha"},{id:3,name:"Forest C",region:"East Region",treeCount:1800,area:"120 ha"},{id:4,name:"Forest D",region:"West Region",treeCount:2750,area:"180 ha"},{id:5,name:"Forest E",region:"Central Region",treeCount:4100,area:"250 ha"}],gl=({selectedForests:n=[],onChange:a,forests:t=ml})=>{const[e,r]=D.useState(""),[o,i]=D.useState(t);D.useEffect(()=>{const d=t.filter(f=>f.name.toLowerCase().includes(e.toLowerCase())||f.region.toLowerCase().includes(e.toLowerCase()));i(d)},[e,t]);const s=d=>{a&&(n.includes(d)?a(n.filter(f=>f!==d)):a([...n,d]))},c=()=>{a&&a(t.map(d=>d.id))},l=()=>{a&&a([])},u=()=>{a&&a([]),r("")};return T.jsxs(nl,{children:[T.jsxs(al,{children:[T.jsx(ol,{children:"Forest Selection"}),T.jsx(hl,{onClick:u,children:"Reset"})]}),T.jsx(il,{type:"text",placeholder:"Search forests by name or region...",value:e,onChange:d=>r(d.target.value)}),T.jsxs("div",{className:"flex gap-2 mb-3",children:[T.jsx("button",{onClick:c,className:"px-3 py-1 text-xs bg-green-100 text-green-700 rounded border border-green-200 hover:bg-green-200 transition-colors",children:"Select All"}),T.jsx("button",{onClick:l,className:"px-3 py-1 text-xs bg-gray-100 text-gray-700 rounded border border-gray-200 hover:bg-gray-200 transition-colors",children:"Select None"})]}),T.jsxs(sl,{children:[o.map(d=>T.jsxs(cl,{children:[T.jsx(ll,{type:"checkbox",checked:n.includes(d.id),onChange:()=>s(d.id)}),T.jsxs(ul,{children:[T.jsx(dl,{children:d.name}),T.jsxs(fl,{children:[d.region," • ",d.treeCount," trees • ",d.area]})]})]},d.id)),o.length===0&&T.jsx("div",{className:"p-4 text-center text-gray-500 text-sm",children:"No forests found matching your search."})]}),T.jsxs(pl,{children:[n.length," of ",t.length," forests selected"]})]})},vl=({errors:n})=>!n||Object.keys(n).length===0?null:T.jsxs("div",{className:"mb-4 p-3 bg-red-50 border border-red-200 rounded-lg",children:[T.jsxs("div",{className:"flex items-center mb-2",children:[T.jsx("svg",{className:"w-5 h-5 text-red-500 mr-2",fill:"currentColor",viewBox:"0 0 20 20",children:T.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})}),T.jsx("span",{className:"font-medium text-red-800",children:"Filter Validation Errors"})]}),T.jsx("ul",{className:"text-sm text-red-700 space-y-1",children:Object.entries(n).map(([a,t])=>T.jsxs("li",{children:["• ",t]},a))})]}),ft={MAX_DATE_RANGE_YEARS:5,MAX_SELECTED_FORESTS:10,MILLISECONDS_PER_YEAR:1e3*60*60*24*365},Tt={DATE_ORDER:"Start date must be before or equal to end date",DATE_FUTURE:"End date cannot be in the future",DATE_RANGE_TOO_LARGE:`Date range cannot exceed ${ft.MAX_DATE_RANGE_YEARS} years`,TOO_MANY_FORESTS:`Cannot select more than ${ft.MAX_SELECTED_FORESTS} forests at once`},wl=n=>{if(!n||!n.startDate||!n.endDate)return null;const{startDate:a,endDate:t}=n;return a>t?Tt.DATE_ORDER:t>new Date?Tt.DATE_FUTURE:(t-a)/ft.MILLISECONDS_PER_YEAR>ft.MAX_DATE_RANGE_YEARS?Tt.DATE_RANGE_TOO_LARGE:null},Dl=n=>!n||!Array.isArray(n)?null:n.length>ft.MAX_SELECTED_FORESTS?Tt.TOO_MANY_FORESTS:null,yl=n=>{const a={},t=wl(n.dateRange);t&&(a.dateRange=t);const e=Dl(n.selectedForests);return e&&(a.selectedForests=e),a},vn=()=>({dateRange:{startDate:new Date(new Date().getFullYear(),0,1),endDate:new Date},selectedForests:[]}),bl=H.div` + background: #f9fafb; + border-radius: 0.75rem; + padding: 1.5rem; + margin-bottom: 2rem; +`,kl=H.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.5rem; +`,_l=H.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`,xl=H.p` + color: #6b7280; + margin: 0.5rem 0 0 0; + font-size: 0.875rem; +`,Ml=H.div` + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + + @media (min-width: 768px) { + grid-template-columns: 1fr 1fr; + } + + @media (min-width: 1024px) { + grid-template-columns: 1fr 1fr; + } +`,Cl=H.div` + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-top: 1rem; + padding-top: 1rem; + border-top: 1px solid #e5e7eb; +`,Sl=H.span` + display: inline-flex; + align-items: center; + padding: 0.25rem 0.75rem; + background-color: #10b981; + color: white; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; +`,El=H.button` + padding: 0.5rem 1rem; + background-color: #ef4444; + color: white; + border: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #dc2626; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); + } +`,Ol=({onFiltersChange:n,initialFilters:a={}})=>{const[t,e]=oa(),r=D.useRef(!1),o=D.useRef(n),i=D.useRef(!1);D.useEffect(()=>{o.current=n},[n]);const s=D.useCallback(()=>{const w=t.get("startDate"),b=t.get("endDate"),P=t.get("forests"),O={};if(w&&b)try{const C=new Date(w),k=new Date(b);!isNaN(C.getTime())&&!isNaN(k.getTime())&&C<=k&&(O.dateRange={startDate:C,endDate:k})}catch(C){console.warn("Invalid date parameters in URL:",C)}if(P)try{const C=P.split(",").map(k=>parseInt(k,10)).filter(k=>!isNaN(k));C.length>0&&(O.selectedForests=C)}catch(C){console.warn("Invalid forest parameters in URL:",C)}return O},[t]),[c,l]=D.useState(()=>{const w=s();return{...vn(),...a,...w}}),[u,d]=D.useState({}),f=D.useCallback(w=>{const b=yl(w);return d(b),Object.keys(b).length===0},[]),p=D.useCallback(w=>{var P,O;const b=new URLSearchParams;(P=w.dateRange)!=null&&P.startDate&&((O=w.dateRange)!=null&&O.endDate)&&(b.set("startDate",Pr(w.dateRange.startDate)),b.set("endDate",Pr(w.dateRange.endDate))),w.selectedForests&&w.selectedForests.length>0&&b.set("forests",w.selectedForests.join(",")),e(b,{replace:!0})},[e]);D.useEffect(()=>{!r.current&&Object.keys(a).length>0&&(l(w=>({...w,...a})),r.current=!0)},[]);const[h,v]=D.useState([]);D.useEffect(()=>{const w=[];if(c.dateRange.startDate&&c.dateRange.endDate){const b=c.dateRange.startDate.toLocaleDateString(),P=c.dateRange.endDate.toLocaleDateString();w.push(`Date: ${b} - ${P}`)}c.selectedForests.length>0&&w.push(`${c.selectedForests.length} forests selected`),v(w)},[c]),D.useEffect(()=>{if(!i.current){i.current=!0;return}const w=setTimeout(()=>{f(c)&&(p(c),o.current&&o.current(c))},1e3);return()=>clearTimeout(w)},[c,f,p]);const g=D.useCallback(w=>{l(b=>({...b,dateRange:w}))},[]),y=D.useCallback(w=>{l(b=>({...b,selectedForests:w}))},[]),_=D.useCallback(()=>{const w=vn();l(w),d({}),e({},{replace:!0})},[e]);return T.jsxs(bl,{children:[T.jsxs(kl,{children:[T.jsxs("div",{children:[T.jsx(_l,{children:"Global Filters"}),T.jsx(xl,{children:"Filter your data by date range and forest selection"})]}),h.length>0&&T.jsx(El,{onClick:_,children:"Clear All"})]}),T.jsx(vl,{errors:u}),T.jsxs(Ml,{children:[T.jsx(rl,{onDateChange:g,initialStartDate:c.dateRange.startDate,initialEndDate:c.dateRange.endDate}),T.jsx(gl,{selectedForests:c.selectedForests,onChange:y})]}),h.length>0&&T.jsx(Cl,{children:h.map((w,b)=>T.jsx(Sl,{children:w},b))})]})};H.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.5rem; +`;H.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`;H.p` + color: #6b7280; + margin: 0.5rem 0 0 0; + font-size: 0.875rem; +`;H.button` + padding: 0.5rem 1rem; + background-color: #ef4444; + color: white; + border: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #dc2626; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); + } +`;export{Ol as G}; diff --git a/frontend/dist/assets/FormElements-5NQybTAT.js b/frontend/dist/assets/FormElements-5NQybTAT.js new file mode 100644 index 0000000000..c2b978f2db --- /dev/null +++ b/frontend/dist/assets/FormElements-5NQybTAT.js @@ -0,0 +1,159 @@ +import{j as n,d as e,r as u}from"./index-DJ39NcK9.js";const x=e.span` + padding: 0.25rem 0.75rem; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + + ${o=>{switch(o.action){case"CREATE":return"background: #d1fae5; color: #065f46;";case"UPDATE":return"background: #dbeafe; color: #1e40af;";case"DELETE":return"background: #fee2e2; color: #991b1b;";case"LOGIN":return"background: #fef3c7; color: #92400e;";case"LOGOUT":return"background: #f3f4f6; color: #374151;";default:return"background: #f3f4f6; color: #374151;"}}} +`,E=({action:o,children:r})=>n.jsx(x,{action:o,children:r||o}),g=({currentPage:o,totalPages:r,maxVisiblePages:t=5})=>{const i=u.useMemo(()=>{const c=[];for(let d=0;d0&&a<=r&&c.push(a)}return c},[o,r,t]),f=o>1,s=o>1,p=o{const i=Math.min(o+r,t);return n.jsxs(h,{children:["Showing ",o+1," to ",i," of ",t," entries"]})},w=e.button` + padding: 0.5rem 0.75rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + cursor: pointer; + transition: all 0.2s; + + &:hover:not(:disabled) { + background: #f9fafb; + border-color: #9ca3af; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + &.active { + background: #10b981; + color: white; + border-color: #10b981; + } +`,v=({pageNumbers:o,currentPage:r,onPageChange:t})=>n.jsx(n.Fragment,{children:o.map(i=>n.jsx(w,{onClick:()=>t(i),className:r===i?"active":"",children:i},i))}),y=e.div` + padding: 1rem 1.5rem; + background: #f9fafb; + border-top: 1px solid #e5e7eb; + display: flex; + justify-content: space-between; + align-items: center; +`,j=e.div` + display: flex; + gap: 0.5rem; + align-items: center; +`,l=e.button` + padding: 0.5rem 0.75rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + cursor: pointer; + transition: all 0.2s; + + &:hover:not(:disabled) { + background: #f9fafb; + border-color: #9ca3af; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +`,F=({currentPage:o,totalPages:r,startIndex:t,pageSize:i,totalItems:f,onPageChange:s})=>{const{pageNumbers:p,canGoFirst:m,canGoPrevious:c,canGoNext:d,canGoLast:a}=g({currentPage:o,totalPages:r});return n.jsxs(y,{children:[n.jsx(k,{startIndex:t,pageSize:i,totalItems:f}),n.jsxs(j,{children:[n.jsx(l,{onClick:()=>s(1),disabled:!m,children:"First"}),n.jsx(l,{onClick:()=>s(o-1),disabled:!c,children:"Previous"}),n.jsx(v,{pageNumbers:p,currentPage:o,onPageChange:s}),n.jsx(l,{onClick:()=>s(o+1),disabled:!d,children:"Next"}),n.jsx(l,{onClick:()=>s(r),disabled:!a,children:"Last"})]})]})},b=` + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + background: white; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:disabled { + background-color: #f3f4f6; + cursor: not-allowed; + opacity: 0.6; + } +`,L=e.div` + display: flex; + gap: 1rem; + align-items: center; +`;e.div` + display: flex; + flex-direction: column; + gap: 0.5rem; +`;e.div` + display: flex; + gap: 1rem; + align-items: center; + flex-wrap: wrap; +`;const S=e.input` + ${b} + min-width: 200px; + flex: 1; +`;e.input` + ${b} + width: 100%; +`;const N=e.select` + ${b} + cursor: pointer; +`;e.textarea` + ${b} + width: 100%; + min-height: 100px; + resize: vertical; +`;const z=e.label` + display: block; + font-size: 0.875rem; + font-weight: 500; + color: #374151; + margin-bottom: 0.25rem; +`;e(z)` + &::after { + content: ' *'; + color: #ef4444; + } +`;e.span` + font-size: 0.75rem; + color: #ef4444; + margin-top: 0.25rem; +`;e.div` + display: flex; + align-items: center; + gap: 0.5rem; +`;e.input.attrs({type:"checkbox"})` + width: 1rem; + height: 1rem; + accent-color: #10b981; + cursor: pointer; +`;e.div` + display: flex; + align-items: center; + gap: 0.5rem; +`;e.input.attrs({type:"radio"})` + width: 1rem; + height: 1rem; + accent-color: #10b981; + cursor: pointer; +`;e.fieldset` + border: 1px solid #d1d5db; + border-radius: 0.5rem; + padding: 1rem; + margin: 0; + + legend { + font-size: 0.875rem; + font-weight: 600; + color: #374151; + padding: 0 0.5rem; + } +`;e.span` + font-size: 0.75rem; + color: #6b7280; + margin-top: 0.25rem; +`;export{E as A,L as F,F as P,S,N as a}; diff --git a/frontend/dist/assets/IconButton-DIc-CK1Q.js b/frontend/dist/assets/IconButton-DIc-CK1Q.js new file mode 100644 index 0000000000..80b8290005 --- /dev/null +++ b/frontend/dist/assets/IconButton-DIc-CK1Q.js @@ -0,0 +1 @@ +import{R as e,j as m,o as l,f as i}from"./index-DJ39NcK9.js";const u=e.forwardRef(({className:o,children:t,"aria-label":s,size:a="md",variant:n="ghost",...r},c)=>m.jsx(l,{className:i("btn-icon",a==="sm"&&"h-8 w-8",a==="md"&&"h-10 w-10",a==="lg"&&"h-12 w-12",o),ref:c,size:"icon",variant:n,"aria-label":s,...r,children:t}));u.displayName="IconButton";export{u as I}; diff --git a/frontend/dist/assets/LandingPage-QWDx4awI.js b/frontend/dist/assets/LandingPage-QWDx4awI.js new file mode 100644 index 0000000000..b3b9df3a86 --- /dev/null +++ b/frontend/dist/assets/LandingPage-QWDx4awI.js @@ -0,0 +1 @@ +import{j as e,L as a}from"./index-DJ39NcK9.js";import"./IconButton-DIc-CK1Q.js";import"./TreeDetailLayout-CKxWzGm5.js";import"./ExportButton-Y3IlBTFt.js";import"./FormElements-5NQybTAT.js";import"./Table-BCdM5JW5.js";import"./ChartComponents-BrntlwBm.js";import"./MapSidebar-yNxbJbqT.js";import{N as i}from"./Navbar-DOE0P8dm.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-C5b08Ak3.js";import"./DarkModeToggle-sLchHfDj.js";const n=()=>e.jsxs("section",{className:"pt-20 bg-gradient-to-br from-green-500 to-green-700 dark:from-green-600 dark:to-green-800 min-h-screen flex items-center justify-center relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 opacity-30",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`}}),e.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24",children:e.jsxs("div",{className:"text-center",children:[e.jsxs("h1",{className:"text-4xl md:text-6xl font-bold text-white mb-6",children:["Discover, Monitor & Export",e.jsx("span",{className:"block text-green-200",children:"Real-Time Tree Insights"})]}),e.jsx("p",{className:"text-xl md:text-2xl text-green-100 mb-8 max-w-3xl mx-auto",children:"Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights."}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[e.jsx(a,{to:"/register",className:"bg-white dark:bg-gray-100 text-green-600 dark:text-green-700 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 dark:hover:bg-gray-200 transition-colors",children:"Start Your Free Trial"}),e.jsx("a",{href:"#features",className:"border-2 border-white text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-white hover:text-green-600 dark:hover:bg-gray-100 dark:hover:text-green-700 transition-colors",children:"Learn More"})]})]})})]}),l=({icon:r,title:t,description:s})=>e.jsxs("div",{className:"bg-white dark:bg-gray-900 p-8 rounded-xl shadow-lg dark:shadow-gray-900/50",children:[e.jsx("div",{className:"w-12 h-12 bg-green-100 dark:bg-green-900/30 rounded-lg flex items-center justify-center mb-6",children:r}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:t}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s})]}),o=()=>{const r=[{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Real-Time Analytics",description:"Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics."},{icon:e.jsxs("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),title:"Interactive Mapping",description:"Visualize forests and individual trees with marker clustering and detailed tree information."},{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),title:"Data Export",description:"Export filtered datasets to CSV or XLSX format for reporting and analysis."}];return e.jsx("section",{id:"features",className:"py-20 bg-gray-50 dark:bg-gray-800",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"text-center mb-16",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4",children:"Powerful Features for Tree Management"}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto",children:"Everything you need to monitor, analyze, and export tree data with precision and ease."})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-8",children:r.map((t,s)=>e.jsx(l,{icon:t.icon,title:t.title,description:t.description},s))})]})})},d=()=>{const r=[{value:"10K+",label:"Trees Monitored"},{value:"95%",label:"Survival Rate"},{value:"50+",label:"Forest Projects"},{value:"24/7",label:"Real-Time Data"}];return e.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 p-8 rounded-xl",children:e.jsx("div",{className:"grid grid-cols-2 gap-4",children:r.map((t,s)=>e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-green-600 dark:text-green-400 mb-2",children:t.value}),e.jsx("div",{className:"text-gray-600 dark:text-gray-300",children:t.label})]},s))})})},c=()=>e.jsx("section",{id:"about",className:"py-20 bg-white dark:bg-gray-900",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-6",children:"Empowering Sustainable Forestry"}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-6",children:"Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects."}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-8",children:"Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs."}),e.jsx(a,{to:"/register",className:"bg-green-600 dark:bg-green-500 text-white px-6 py-3 rounded-lg text-lg font-semibold hover:bg-green-700 dark:hover:bg-green-600 transition-colors inline-block",children:"Join Nanwa Today"})]}),e.jsx(d,{})]})})}),x=()=>e.jsx("footer",{className:"bg-gray-900 text-white py-12",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"grid md:grid-cols-4 gap-8",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-bold text-green-400 mb-4",children:"Nanwa"}),e.jsx("p",{className:"text-gray-400",children:"Empowering sustainable forestry through data-driven insights and real-time monitoring."})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Product"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#features",className:"hover:text-white transition-colors",children:"Features"})}),e.jsx("li",{children:e.jsx(a,{to:"/login",className:"hover:text-white transition-colors",children:"Login"})}),e.jsx("li",{children:e.jsx(a,{to:"/register",className:"hover:text-white transition-colors",children:"Register"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Company"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#about",className:"hover:text-white transition-colors",children:"About"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Contact"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Privacy"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Support"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Help Center"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Documentation"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"API"})})]})]})]}),e.jsx("div",{className:"border-t border-gray-800 mt-8 pt-8 text-center text-gray-400",children:e.jsx("p",{children:"© 2024 Nanwa. All rights reserved."})})]})}),k=()=>e.jsxs("div",{className:"min-h-screen bg-white dark:bg-gray-900",children:[e.jsx(i,{}),e.jsx(n,{}),e.jsx(o,{}),e.jsx(c,{}),e.jsx(x,{})]});export{k as LandingPage}; diff --git a/frontend/dist/assets/LoginPage-Ckb0MyS_.js b/frontend/dist/assets/LoginPage-Ckb0MyS_.js new file mode 100644 index 0000000000..3673c103fb --- /dev/null +++ b/frontend/dist/assets/LoginPage-Ckb0MyS_.js @@ -0,0 +1 @@ +import{r as o,j as e,L as f,u as j,a as k}from"./index-DJ39NcK9.js";import{N as w}from"./Navbar-DOE0P8dm.js";import{F as y,P as v}from"./PasswordInput-dcNbels6.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-C5b08Ak3.js";import"./DarkModeToggle-sLchHfDj.js";import"./IconButton-DIc-CK1Q.js";const C=({connectionState:r,onCancel:t,showCancel:l=!0})=>{const[n,i]=o.useState(0),[c,u]=o.useState(0),{isConnecting:s,isColdStart:a,retryAttempt:d,totalAttempts:h,estimatedWaitTime:p,message:g}=r;return o.useEffect(()=>{if(!s){i(0),u(0);return}const x=setInterval(()=>{if(u(m=>m+1),a){const b=Math.min(c/60*100,90);i(b)}else{const b=Math.min(c/10*100,90);i(b)}},1e3);return()=>clearInterval(x)},[s,a,c]),o.useEffect(()=>{!s&&n>0&&i(100)},[s,n]),s?e.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg p-8 max-w-md w-full mx-4 shadow-2xl",children:[e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("div",{className:"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsxs("svg",{className:"w-8 h-8 text-green-600 dark:text-green-400 animate-spin",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:a?"Server Starting Up":"Connecting"})]}),e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-2",children:g}),a&&e.jsxs("div",{className:"text-sm text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsx("p",{children:"The server needs to start up from sleep mode."}),e.jsx("p",{children:"This usually takes 30-60 seconds."})]})]}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex justify-between text-sm text-gray-500 dark:text-gray-400 mb-2",children:[e.jsx("span",{children:"Progress"}),e.jsxs("span",{children:[Math.round(n),"%"]})]}),e.jsx("div",{className:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2",children:e.jsx("div",{className:"bg-green-600 h-2 rounded-full transition-all duration-1000 ease-out",style:{width:`${n}%`}})})]}),d>0&&e.jsx("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg mb-4",children:e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"text-blue-600 dark:text-blue-400",children:["Attempt ",d," of ",h]}),e.jsxs("span",{className:"text-blue-500 dark:text-blue-300",children:[c,"s elapsed"]})]})}),p>0&&e.jsxs("div",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mb-4",children:["Estimated wait time: ",p," seconds"]}),l&&t&&e.jsx("div",{className:"text-center",children:e.jsx("button",{onClick:t,className:"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 text-sm underline",children:"Cancel and try again later"})})]})}):null},N=(r,t)=>{const[l,n]=o.useState(r),[i,c]=o.useState({}),[u,s]=o.useState({}),a=o.useCallback(g=>{const{name:x,value:m}=g.target;n(b=>({...b,[x]:m})),i[x]&&c(b=>({...b,[x]:""}))},[i]),d=o.useCallback(g=>{const{name:x}=g.target;s(m=>({...m,[x]:!0}))},[]),h=o.useCallback(()=>{const g=t(l);return c(g),Object.keys(g).length===0},[l,t]),p=o.useCallback(()=>{n(r),c({}),s({})},[r]);return{values:l,errors:i,touched:u,handleChange:a,handleBlur:d,validateForm:h,resetForm:p,setErrors:c}},S=r=>{const t={};return r.email?/\S+@\S+\.\S+/.test(r.email)||(t.email="Email is invalid"):t.email="Email is required",r.password?r.password.length<6&&(t.password="Password must be at least 6 characters"):t.password="Password is required",t},A=({onSubmit:r,isSubmitting:t,errors:l})=>{const{values:n,errors:i,handleChange:c,handleBlur:u,validateForm:s}=N({email:"",password:""},S),a={...i,...l},d=h=>{h.preventDefault(),s()&&r(n)};return e.jsxs("form",{onSubmit:d,className:"space-y-6",children:[a.general&&e.jsx("div",{className:"bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 text-red-700 dark:text-red-400 px-4 py-3 rounded-lg",children:a.general}),e.jsx(y,{label:"Email address",id:"email",error:a.email,required:!0,children:e.jsx("input",{type:"email",id:"email",name:"email",value:n.email,onChange:c,onBlur:u,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${a.email?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"}`,placeholder:"Enter your email",disabled:t})}),e.jsx(y,{label:"Password",id:"password",error:a.password,required:!0,children:e.jsx(v,{id:"password",name:"password",value:n.password,onChange:c,onBlur:u,error:a.password,placeholder:"Enter your password",disabled:t})}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(E,{disabled:t}),e.jsx(F,{})]}),e.jsx(P,{isSubmitting:t}),e.jsx(T,{})]})},E=({disabled:r})=>e.jsxs("div",{className:"flex items-center",children:[e.jsx("input",{id:"remember-me",name:"remember-me",type:"checkbox",className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700",disabled:r}),e.jsx("label",{htmlFor:"remember-me",className:"ml-2 block text-sm text-gray-900 dark:text-white",children:"Remember me"})]}),F=()=>e.jsx("div",{className:"text-sm",children:e.jsx("a",{href:"#",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Forgot your password?"})}),P=({isSubmitting:r})=>e.jsx("button",{type:"submit",disabled:r,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 dark:bg-green-500 hover:bg-green-700 dark:hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:r?e.jsxs("div",{className:"flex items-center",children:[e.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Signing in..."]}):"Sign in"}),T=()=>e.jsx("div",{className:"text-center",children:e.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["Don't have an account?"," ",e.jsx(f,{to:"/register",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Sign up"})]})}),L=()=>e.jsxs("div",{className:"mt-8 p-4 bg-gray-50 dark:bg-gray-700 rounded-lg",children:[e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 mb-2",children:"Demo credentials:"}),e.jsxs("div",{className:"text-xs text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Admin:"})," admin@nanwa.com / admin123"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"User:"})," user@nanwa.com / user123"]})]})]}),M=()=>{const[r,t]=o.useState({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null}),l=o.useCallback(s=>{const{attempt:a,totalAttempts:d,delay:h,error:p,isColdStart:g}=s;t(x=>({...x,isConnecting:!0,isColdStart:g,retryAttempt:a,totalAttempts:d,estimatedWaitTime:Math.ceil(h/1e3),message:W(a,d,g),error:null}))},[]),n=o.useCallback(()=>{t({isConnecting:!0,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:10,message:"Connecting to server...",error:null})},[]),i=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"Connected successfully!",error:null})},[]),c=o.useCallback(s=>{const a=s&&typeof s=="object"?s.message||String(s):String(s||"Connection failed");t(d=>({...d,isConnecting:!1,error:a,message:"Connection failed. Please try again."}))},[]),u=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null})},[]);return{connectionState:r,handleRetry:l,startConnection:n,connectionSuccess:i,connectionFailed:c,resetConnection:u}},W=(r,t,l)=>r===1&&l?"Server is starting up, this may take up to 60 seconds...":r===2&&l?"Still starting up, please wait...":r===3&&l?"Almost ready, just a few more seconds...":r>=4&&l?"Final attempt, server should be ready soon...":`Retrying connection (${r}/${t})...`,B=()=>{const[r,t]=o.useState({}),[l,n]=o.useState(!1),{login:i}=j();k();const{connectionState:c,handleRetry:u,startConnection:s,connectionSuccess:a,connectionFailed:d,resetConnection:h}=M();return{errors:r,isSubmitting:l,connectionState:c,handleLogin:async x=>{n(!0),t({}),s();try{const m=await i(x.email,x.password,u);m.success?a():(d(new Error(m.error)),t({general:m.error}))}catch(m){d(m),t({general:"Connection failed. Please check your internet connection and try again."})}finally{n(!1)}},handleCancelConnection:()=>{h(),n(!1)}}},V=()=>{const{errors:r,isSubmitting:t,connectionState:l,handleLogin:n,handleCancelConnection:i}=B();return e.jsxs(e.Fragment,{children:[e.jsx(w,{}),e.jsx(C,{connectionState:l,onCancel:i,showCancel:!0}),e.jsx("div",{className:"min-h-screen bg-gradient-to-br from-green-50 to-green-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center p-4",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-2xl p-8 w-full max-w-md",children:[e.jsx(R,{}),e.jsx(A,{onSubmit:n,isSubmitting:t,errors:r}),e.jsx(L,{})]})})]})},R=()=>e.jsxs("div",{className:"text-center mb-8",children:[e.jsx(f,{to:"/",className:"inline-block mb-6",children:e.jsx("h1",{className:"text-3xl font-bold text-green-600 dark:text-green-400",children:"Nanwa"})}),e.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome back"}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Sign in to your account to continue"})]});export{V as LoginPage}; diff --git a/frontend/dist/assets/MapPage-25t4MxmA.css b/frontend/dist/assets/MapPage-25t4MxmA.css new file mode 100644 index 0000000000..5b4cb38cc7 --- /dev/null +++ b/frontend/dist/assets/MapPage-25t4MxmA.css @@ -0,0 +1 @@ +.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{transition:transform .3s ease-out,opacity .3s ease-in}.leaflet-cluster-spider-leg{transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.marker-cluster-small{background-color:#b5e28c99}.marker-cluster-small div{background-color:#6ecc3999}.marker-cluster-medium{background-color:#f1d35799}.marker-cluster-medium div{background-color:#f0c20c99}.marker-cluster-large{background-color:#fd9c7399}.marker-cluster-large div{background-color:#f1801799}.leaflet-oldie .marker-cluster-small{background-color:#b5e28c}.leaflet-oldie .marker-cluster-small div{background-color:#6ecc39}.leaflet-oldie .marker-cluster-medium{background-color:#f1d357}.leaflet-oldie .marker-cluster-medium div{background-color:#f0c20c}.leaflet-oldie .marker-cluster-large{background-color:#fd9c73}.leaflet-oldie .marker-cluster-large div{background-color:#f18017}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px Helvetica Neue,Arial,Helvetica,sans-serif}.marker-cluster span{line-height:30px}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::-moz-selection{background:transparent}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline-offset:1px}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:#ffffff80}.leaflet-container{font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;font-size:.75rem;line-height:1.5}.leaflet-bar{box-shadow:0 1px 5px #000000a6;border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover,.leaflet-bar a:focus{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px #0006;background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=)}.leaflet-container .leaflet-control-attribution{background:#fff;background:#fffc;margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover,.leaflet-control-attribution a:focus{text-decoration:underline}.leaflet-attribution-flag{display:inline!important;vertical-align:baseline!important;width:1em;height:.6669em}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;white-space:nowrap;box-sizing:border-box;background:#fffc;text-shadow:1px 1px #fff}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 24px 13px 20px;line-height:1.3;font-size:13px;font-size:1.08333em;min-height:1px}.leaflet-popup-content p{margin:1.3em 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px #0006}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover,.leaflet-container a.leaflet-popup-close-button:focus{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=.70710678,M12=.70710678,M21=-.70710678,M22=.70710678)}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px #0006}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}} diff --git a/frontend/dist/assets/MapPage-CWavP_xM.js b/frontend/dist/assets/MapPage-CWavP_xM.js new file mode 100644 index 0000000000..1d5ba0998a --- /dev/null +++ b/frontend/dist/assets/MapPage-CWavP_xM.js @@ -0,0 +1,119 @@ +import{j as M,r as B,R as Mn,d as yt,g as ls}from"./index-DJ39NcK9.js";import{g as cs}from"./vendor-BtP0CW_r.js";import{G as ds}from"./FilterHeader-DzCm_NrU.js";import{M as fs,a as _s,T as ps}from"./MapSidebar-yNxbJbqT.js";import{E as ms}from"./ExportButton-Y3IlBTFt.js";import"./useKeyboardNavigation-C5b08Ak3.js";import"./Table-BCdM5JW5.js";const gs=({filters:x,onExportStart:w,onExportComplete:c,onExportError:b,mockTreeData:P})=>M.jsx("div",{className:"mb-8",children:M.jsxs("div",{className:"flex justify-between items-center mb-4",children:[M.jsxs("div",{children:[M.jsx("h2",{className:"text-3xl font-bold text-gray-900 mb-2",children:"Forest Map"}),M.jsx("p",{className:"text-gray-600",children:"Explore your forests and individual trees with interactive mapping."})]}),M.jsx("div",{className:"flex items-center space-x-4",children:M.jsx(ms,{data:P,fileName:"map_data",filters:x,onExportStart:w,onExportComplete:c,onExportError:b})})]})});function vs(x,w){const c=B.useRef(w);B.useEffect(function(){w!==c.current&&x.attributionControl!=null&&(c.current!=null&&x.attributionControl.removeAttribution(c.current),w!=null&&x.attributionControl.addAttribution(w)),c.current=w},[x,w])}const ys=1;function Ls(x){return Object.freeze({__version:ys,map:x})}const In=B.createContext(null),xs=In.Provider;function Bn(){const x=B.useContext(In);if(x==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of ");return x}function ws(x){function w(c,b){const{instance:P}=x(c).current;return B.useImperativeHandle(b,()=>P),null}return B.forwardRef(w)}function Ps(x,w){const c=B.useRef();B.useEffect(function(){return w!=null&&x.instance.on(w),c.current=w,function(){c.current!=null&&x.instance.off(c.current),c.current=null}},[x,w])}function An(x,w){const c=x.pane??w.pane;return c?{...x,pane:c}:x}var he={exports:{}};/* @preserve + * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com + * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */var Cs=he.exports,Tn;function bs(){return Tn||(Tn=1,function(x,w){(function(c,b){b(w)})(Cs,function(c){var b="1.9.4";function P(t){var e,i,n,o;for(i=1,n=arguments.length;i"u"||!L||!L.Mixin)){t=V(t)?t:[t];for(var e=0;e0?Math.floor(t):Math.ceil(t)};Z.prototype={clone:function(){return new Z(this.x,this.y)},add:function(t){return this.clone()._add(z(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(z(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new Z(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new Z(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=_i(this.x),this.y=_i(this.y),this},distanceTo:function(t){t=z(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=z(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=z(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+v(this.x)+", "+v(this.y)+")"}};function z(t,e,i){return t instanceof Z?t:V(t)?new Z(t[0],t[1]):t==null?t:typeof t=="object"&&"x"in t&&"y"in t?new Z(t.x,t.y):new Z(t,e,i)}function q(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=ot(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>=e.x&&n.x<=i.x,u=o.y>=e.y&&n.y<=i.y;return r&&u},overlaps:function(t){t=ot(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>e.x&&n.xe.y&&n.y=e.lat&&o.lat<=i.lat&&n.lng>=e.lng&&o.lng<=i.lng},intersects:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>=e.lat&&n.lat<=i.lat,u=o.lng>=e.lng&&n.lng<=i.lng;return r&&u},overlaps:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>e.lat&&n.late.lng&&n.lng1,Jn=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",f,e),window.removeEventListener("testPassiveEventSupport",f,e)}catch{}return t}(),Qn=function(){return!!document.createElement("canvas").getContext}(),Ne=!!(document.createElementNS&&mi("svg").createSVGRect),to=!!Ne&&function(){var t=document.createElement("div");return t.innerHTML="",(t.firstChild&&t.firstChild.namespaceURI)==="http://www.w3.org/2000/svg"}(),eo=!Ne&&function(){try{var t=document.createElement("div");t.innerHTML='';var e=t.firstChild;return e.style.behavior="url(#default#VML)",e&&typeof e.adj=="object"}catch{return!1}}(),io=navigator.platform.indexOf("Mac")===0,no=navigator.platform.indexOf("Linux")===0;function pt(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var S={ie:ce,ielt9:Hn,edge:vi,webkit:Ie,android:yi,android23:Li,androidStock:jn,opera:Be,chrome:xi,gecko:wi,safari:Gn,phantom:Pi,opera12:Ci,win:Wn,ie3d:bi,webkit3d:Ae,gecko3d:Mi,any3d:Un,mobile:Yt,mobileWebkit:Vn,mobileWebkit3d:qn,msPointer:Ti,pointer:ki,touch:Kn,touchNative:Si,mobileOpera:Yn,mobileGecko:$n,retina:Xn,passiveEvents:Jn,canvas:Qn,svg:Ne,vml:eo,inlineSvg:to,mac:io,linux:no},Ei=S.msPointer?"MSPointerDown":"pointerdown",Oi=S.msPointer?"MSPointerMove":"pointermove",zi=S.msPointer?"MSPointerUp":"pointerup",Zi=S.msPointer?"MSPointerCancel":"pointercancel",Re={touchstart:Ei,touchmove:Oi,touchend:zi,touchcancel:Zi},Ii={touchstart:uo,touchmove:de,touchend:de,touchcancel:de},Rt={},Bi=!1;function oo(t,e,i){return e==="touchstart"&&ho(),Ii[e]?(i=Ii[e].bind(this,i),t.addEventListener(Re[e],i,!1),i):(console.warn("wrong event specified:",e),f)}function so(t,e,i){if(!Re[e]){console.warn("wrong event specified:",e);return}t.removeEventListener(Re[e],i,!1)}function ro(t){Rt[t.pointerId]=t}function ao(t){Rt[t.pointerId]&&(Rt[t.pointerId]=t)}function Ai(t){delete Rt[t.pointerId]}function ho(){Bi||(document.addEventListener(Ei,ro,!0),document.addEventListener(Oi,ao,!0),document.addEventListener(zi,Ai,!0),document.addEventListener(Zi,Ai,!0),Bi=!0)}function de(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){e.touches=[];for(var i in Rt)e.touches.push(Rt[i]);e.changedTouches=[e],t(e)}}function uo(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&et(e),de(t,e)}function lo(t){var e={},i,n;for(n in t)i=t[n],e[n]=i&&i.bind?i.bind(t):i;return t=e,e.type="dblclick",e.detail=2,e.isTrusted=!1,e._simulated=!0,e}var co=200;function fo(t,e){t.addEventListener("dblclick",e);var i=0,n;function o(r){if(r.detail!==1){n=r.detail;return}if(!(r.pointerType==="mouse"||r.sourceCapabilities&&!r.sourceCapabilities.firesTouchEvents)){var u=Fi(r);if(!(u.some(function(p){return p instanceof HTMLLabelElement&&p.attributes.for})&&!u.some(function(p){return p instanceof HTMLInputElement||p instanceof HTMLSelectElement}))){var d=Date.now();d-i<=co?(n++,n===2&&e(lo(r))):n=1,i=d}}}return t.addEventListener("click",o),{dblclick:e,simDblclick:o}}function _o(t,e){t.removeEventListener("dblclick",e.dblclick),t.removeEventListener("click",e.simDblclick)}var De=pe(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),$t=pe(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),Ni=$t==="webkitTransition"||$t==="OTransition"?$t+"End":"transitionend";function Ri(t){return typeof t=="string"?document.getElementById(t):t}function Xt(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];if((!i||i==="auto")&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);i=n?n[e]:null}return i==="auto"?null:i}function H(t,e,i){var n=document.createElement(t);return n.className=e||"",i&&i.appendChild(n),n}function K(t){var e=t.parentNode;e&&e.removeChild(t)}function fe(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function Dt(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function Ht(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function He(t,e){if(t.classList!==void 0)return t.classList.contains(e);var i=_e(t);return i.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(i)}function A(t,e){if(t.classList!==void 0)for(var i=k(e),n=0,o=i.length;n0?2*window.devicePixelRatio:1;function Gi(t){return S.edge?t.wheelDeltaY/2:t.deltaY&&t.deltaMode===0?-t.deltaY/go:t.deltaY&&t.deltaMode===1?-t.deltaY*20:t.deltaY&&t.deltaMode===2?-t.deltaY*60:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?-t.detail*20:t.detail?t.detail/-32765*60:0}function Je(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch{return!1}return i!==t}var vo={__proto__:null,on:I,off:U,stopPropagation:It,disableScrollPropagation:Xe,disableClickPropagation:ee,preventDefault:et,stop:Bt,getPropagationPath:Fi,getMousePosition:ji,getWheelDelta:Gi,isExternalTarget:Je,addListener:I,removeListener:U},Wi=qt.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Zt(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=nt(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=this._duration*1e3;ethis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),n=this._limitCenter(i,this._zoom,$(t));return i.equals(n)||this.panTo(n,e),this._enforcingBounds=!1,this},panInside:function(t,e){e=e||{};var i=z(e.paddingTopLeft||e.padding||[0,0]),n=z(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),r=this.project(t),u=this.getPixelBounds(),d=ot([u.min.add(i),u.max.subtract(n)]),p=d.getSize();if(!d.contains(r)){this._enforcingBounds=!0;var y=r.subtract(d.getCenter()),T=d.extend(r).getSize().subtract(p);o.x+=y.x<0?-T.x:T.x,o.y+=y.y<0?-T.y:T.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=P({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),o=i.divideBy(2).round(),r=n.subtract(o);return!r.x&&!r.y?this:(t.animate&&t.pan?this.panBy(r):(t.pan&&this._rawPanBy(r),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i}))},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=P({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){if(this._container._leaflet_id){var e=t.code,i=t.message||(e===1?"permission denied":e===2?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})}},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e=t.coords.latitude,i=t.coords.longitude,n=new W(e,i),o=n.toBounds(t.coords.accuracy*2),r=this._locateOptions;if(r.setView){var u=this.getBoundsZoom(o);this.setView(n,r.maxZoom?Math.min(u,r.maxZoom):u)}var d={latlng:n,bounds:o,timestamp:t.timestamp};for(var p in t.coords)typeof t.coords[p]=="number"&&(d[p]=t.coords[p]);this.fire("locationfound",d)}},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch{this._container._leaflet_id=void 0,this._containerId=void 0}this._locationWatchId!==void 0&&this.stopLocate(),this._stop(),K(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(ht(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)K(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){var i="leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),n=H("div",i,e||this._mapPane);return t&&(this._panes[t]=n),n},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new st(e,i)},getMinZoom:function(){return this.options.minZoom===void 0?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===void 0?this._layersMaxZoom===void 0?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=$(t),i=z(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),r=this.getMaxZoom(),u=t.getNorthWest(),d=t.getSouthEast(),p=this.getSize().subtract(i),y=ot(this.project(d,n),this.project(u,n)).getSize(),T=S.any3d?this.options.zoomSnap:1,E=p.x/y.x,N=p.y/y.y,it=e?Math.max(E,N):Math.min(E,N);return n=this.getScaleZoom(it,n),T&&(n=Math.round(n/(T/100))*(T/100),n=e?Math.ceil(n/T)*T:Math.floor(n/T)*T),Math.max(o,Math.min(r,n))},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new Z(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){var i=this._getTopLeftPoint(t,e);return new q(i,i.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(t===void 0?this.getZoom():t)},getPane:function(t){return typeof t=="string"?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=e===void 0?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs;e=e===void 0?this._zoom:e;var n=i.zoom(t*i.scale(e));return isNaN(n)?1/0:n},project:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.latLngToPoint(R(t),e)},unproject:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.pointToLatLng(z(t),e)},layerPointToLatLng:function(t){var e=z(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(R(t))._round();return e._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(R(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds($(t))},distance:function(t,e){return this.options.crs.distance(R(t),R(e))},containerPointToLayerPoint:function(t){return z(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return z(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(z(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(R(t)))},mouseEventToContainerPoint:function(t){return ji(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=Ri(t);if(e){if(e._leaflet_id)throw new Error("Map container is already initialized.")}else throw new Error("Map container not found.");I(e,"scroll",this._onScroll,this),this._containerId=l(e)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&S.any3d,A(t,"leaflet-container"+(S.touch?" leaflet-touch":"")+(S.retina?" leaflet-retina":"")+(S.ielt9?" leaflet-oldie":"")+(S.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var e=Xt(t,"position");e!=="absolute"&&e!=="relative"&&e!=="fixed"&&e!=="sticky"&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),X(this._mapPane,new Z(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(A(t.markerPane,"leaflet-zoom-hide"),A(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){X(this._mapPane,new Z(0,0));var n=!this._loaded;this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset");var o=this._zoom!==e;this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){e===void 0&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return ht(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){X(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[l(this._container)]=this;var e=t?U:I;e(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),S.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){ht(this._resizeRequest),this._resizeRequest=nt(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i=[],n,o=e==="mouseout"||e==="mouseover",r=t.target||t.srcElement,u=!1;r;){if(n=this._targets[l(r)],n&&(e==="click"||e==="preclick")&&this._draggableMoved(n)){u=!0;break}if(n&&n.listens(e,!0)&&(o&&!Je(r,t)||(i.push(n),o))||r===this._container)break;r=r.parentNode}return!i.length&&!u&&!o&&this.listens(e,!0)&&(i=[this]),i},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e=t.target||t.srcElement;if(!(!this._loaded||e._leaflet_disable_events||t.type==="click"&&this._isClickDisabled(e))){var i=t.type;i==="mousedown"&&Ve(e),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){if(t.type==="click"){var n=P({},t);n.type="preclick",this._fireDOMEvent(n,n.type,i)}var o=this._findEventTargets(t,e);if(i){for(var r=[],u=0;u0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),n=S.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){Y(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._trunc();return(e&&e.animate)!==!0&&!this.getSize().contains(i)?!1:(this.panBy(i,e),!0)},_createAnimProxy:function(){var t=this._proxy=H("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(e){var i=De,n=this._proxy.style[i];zt(this._proxy,this.project(e.center,e.zoom),this.getZoomScale(e.zoom,1)),n===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){K(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();zt(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n);return i.animate!==!0&&!this.getSize().contains(o)?!1:(nt(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this),!0)},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,A(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&Y(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function yo(t,e){return new D(t,e)}var ft=xt.extend({options:{position:"topright"},initialize:function(t){C(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return A(e,"leaflet-control"),i.indexOf("bottom")!==-1?n.insertBefore(e,n.firstChild):n.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(K(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),ie=function(t){return new ft(t)};D.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},e="leaflet-",i=this._controlContainer=H("div",e+"control-container",this._container);function n(o,r){var u=e+o+" "+e+r;t[o+r]=H("div",u,i)}n("top","left"),n("top","right"),n("bottom","left"),n("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)K(this._controlCorners[t]);K(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Ui=ft.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,n){return i1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=e&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(l(t.target)),i=e.overlay?t.type==="add"?"overlayadd":"overlayremove":t.type==="add"?"baselayerchange":null;i&&this._map.fire(i,e)},_createRadioElement:function(t,e){var i='",n=document.createElement("div");return n.innerHTML=i,n.firstChild},_addItem:function(t){var e=document.createElement("label"),i=this._map.hasLayer(t.layer),n;t.overlay?(n=document.createElement("input"),n.type="checkbox",n.className="leaflet-control-layers-selector",n.defaultChecked=i):n=this._createRadioElement("leaflet-base-layers_"+l(this),i),this._layerControlInputs.push(n),n.layerId=l(t.layer),I(n,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var r=document.createElement("span");e.appendChild(r),r.appendChild(n),r.appendChild(o);var u=t.overlay?this._overlaysList:this._baseLayersList;return u.appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){if(!this._preventClick){var t=this._layerControlInputs,e,i,n=[],o=[];this._handlingClick=!0;for(var r=t.length-1;r>=0;r--)e=t[r],i=this._getLayer(e.layerId).layer,e.checked?n.push(i):e.checked||o.push(i);for(r=0;r=0;o--)e=t[o],i=this._getLayer(e.layerId).layer,e.disabled=i.options.minZoom!==void 0&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section;this._preventClick=!0,I(t,"click",et),this.expand();var e=this;setTimeout(function(){U(t,"click",et),e._preventClick=!1})}}),Lo=function(t,e,i){return new Ui(t,e,i)},Qe=ft.extend({options:{position:"topleft",zoomInText:'',zoomInTitle:"Zoom in",zoomOutText:'',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=H("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){var r=H("a",i,n);return r.innerHTML=t,r.href="#",r.title=e,r.setAttribute("role","button"),r.setAttribute("aria-label",e),ee(r),I(r,"click",Bt),I(r,"click",o,this),I(r,"click",this._refocusOnMap,this),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";Y(this._zoomInButton,e),Y(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),(this._disabled||t._zoom===t.getMinZoom())&&(A(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),(this._disabled||t._zoom===t.getMaxZoom())&&(A(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}});D.mergeOptions({zoomControl:!0}),D.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new Qe,this.addControl(this.zoomControl))});var xo=function(t){return new Qe(t)},Vi=ft.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=H("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=H("div",e,i)),t.imperial&&(this._iScale=H("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,i=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(i)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t),i=e<1e3?e+" m":e/1e3+" km";this._updateScale(this._mScale,i,e/t)},_updateImperial:function(t){var e=t*3.2808399,i,n,o;e>5280?(i=e/5280,n=this._getRoundNum(i),this._updateScale(this._iScale,n+" mi",n/i)):(o=this._getRoundNum(e),this._updateScale(this._iScale,o+" ft",o/e))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),wo=function(t){return new Vi(t)},Po='',ti=ft.extend({options:{position:"bottomright",prefix:''+(S.inlineSvg?Po+" ":"")+"Leaflet"},initialize:function(t){C(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=H("div","leaflet-control-attribution"),ee(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(' ')}}});D.mergeOptions({attributionControl:!0}),D.addInitHook(function(){this.options.attributionControl&&new ti().addTo(this)});var Co=function(t){return new ti(t)};ft.Layers=Ui,ft.Zoom=Qe,ft.Scale=Vi,ft.Attribution=ti,ie.layers=Lo,ie.zoom=xo,ie.scale=wo,ie.attribution=Co;var gt=xt.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});gt.addTo=function(t,e){return t.addHandler(e,this),this};var bo={Events:at},qi=S.touch?"touchstart mousedown":"mousedown",St=qt.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){C(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(I(this._dragStartTarget,qi,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(St._dragging===this&&this.finishDrag(!0),U(this._dragStartTarget,qi,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(this._enabled&&(this._moved=!1,!He(this._element,"leaflet-zoom-anim"))){if(t.touches&&t.touches.length!==1){St._dragging===this&&this.finishDrag();return}if(!(St._dragging||t.shiftKey||t.which!==1&&t.button!==1&&!t.touches)&&(St._dragging=this,this._preventOutline&&Ve(this._element),Ge(),Jt(),!this._moving)){this.fire("down");var e=t.touches?t.touches[0]:t,i=Di(this._element);this._startPoint=new Z(e.clientX,e.clientY),this._startPos=Zt(this._element),this._parentScale=qe(i);var n=t.type==="mousedown";I(document,n?"mousemove":"touchmove",this._onMove,this),I(document,n?"mouseup":"touchend touchcancel",this._onUp,this)}}},_onMove:function(t){if(this._enabled){if(t.touches&&t.touches.length>1){this._moved=!0;return}var e=t.touches&&t.touches.length===1?t.touches[0]:t,i=new Z(e.clientX,e.clientY)._subtract(this._startPoint);!i.x&&!i.y||Math.abs(i.x)+Math.abs(i.y)r&&(u=d,r=p);r>i&&(e[u]=1,ii(t,e,i,n,u),ii(t,e,i,u,o))}function So(t,e){for(var i=[t[0]],n=1,o=0,r=t.length;ne&&(i.push(t[n]),o=n);return oe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function Eo(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function ne(t,e,i,n){var o=e.x,r=e.y,u=i.x-o,d=i.y-r,p=u*u+d*d,y;return p>0&&(y=((t.x-o)*u+(t.y-r)*d)/p,y>1?(o=i.x,r=i.y):y>0&&(o+=u*y,r+=d*y)),u=t.x-o,d=t.y-r,n?u*u+d*d:new Z(o,r)}function lt(t){return!V(t[0])||typeof t[0][0]!="object"&&typeof t[0][0]<"u"}function tn(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),lt(t)}function en(t,e){var i,n,o,r,u,d,p,y;if(!t||t.length===0)throw new Error("latlngs not passed");lt(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);var T=R([0,0]),E=$(t),N=E.getNorthWest().distanceTo(E.getSouthWest())*E.getNorthEast().distanceTo(E.getNorthWest());N<1700&&(T=ei(t));var it=t.length,Q=[];for(i=0;in){p=(r-n)/o,y=[d.x-p*(d.x-u.x),d.y-p*(d.y-u.y)];break}var rt=e.unproject(z(y));return R([rt.lat+T.lat,rt.lng+T.lng])}var Oo={__proto__:null,simplify:$i,pointToSegmentDistance:Xi,closestPointOnSegment:To,clipSegment:Qi,_getEdgeIntersection:ve,_getBitCode:At,_sqClosestPointOnSegment:ne,isFlat:lt,_flat:tn,polylineCenter:en},ni={project:function(t){return new Z(t.lng,t.lat)},unproject:function(t){return new W(t.y,t.x)},bounds:new q([-180,-90],[180,90])},oi={R:6378137,R_MINOR:6356752314245179e-9,bounds:new q([-2003750834279e-5,-1549657073972e-5],[2003750834279e-5,1876465623138e-5]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,o=this.R_MINOR/i,r=Math.sqrt(1-o*o),u=r*Math.sin(n),d=Math.tan(Math.PI/4-n/2)/Math.pow((1-u)/(1+u),r/2);return n=-i*Math.log(Math.max(d,1e-10)),new Z(t.lng*e*i,n)},unproject:function(t){for(var e=180/Math.PI,i=this.R,n=this.R_MINOR/i,o=Math.sqrt(1-n*n),r=Math.exp(-t.y/i),u=Math.PI/2-2*Math.atan(r),d=0,p=.1,y;d<15&&Math.abs(p)>1e-7;d++)y=o*Math.sin(u),y=Math.pow((1-y)/(1+y),o/2),p=Math.PI/2-2*Math.atan(r*y)-u,u+=p;return new W(u*e,t.x*e/i)}},zo={__proto__:null,LonLat:ni,Mercator:oi,SphericalMercator:Ee},Zo=P({},kt,{code:"EPSG:3395",projection:oi,transformation:function(){var t=.5/(Math.PI*oi.R);return Kt(t,.5,-t,.5)}()}),nn=P({},kt,{code:"EPSG:4326",projection:ni,transformation:Kt(1/180,1,-1/180,.5)}),Io=P({},wt,{projection:ni,transformation:Kt(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,n=e.lat-t.lat;return Math.sqrt(i*i+n*n)},infinite:!0});wt.Earth=kt,wt.EPSG3395=Zo,wt.EPSG3857=ze,wt.EPSG900913=Dn,wt.EPSG4326=nn,wt.Simple=Io;var _t=qt.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[l(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[l(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e=t.target;if(e.hasLayer(this)){if(this._map=e,this._zoomAnimated=e._zoomAnimated,this.getEvents){var i=this.getEvents();e.on(i,this),this.once("remove",function(){e.off(i,this)},this)}this.onAdd(e),this.fire("add"),e.fire("layeradd",{layer:this})}}});D.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var e=l(t);return this._layers[e]?this:(this._layers[e]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var e=l(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return l(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){t=t?V(t)?t:[t]:[];for(var e=0,i=t.length;ethis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),this.options.minZoom===void 0&&this._layersMinZoom&&this.getZoom()=2&&e[0]instanceof W&&e[0].equals(e[i-1])&&e.pop(),e},_setLatLngs:function(t){Ct.prototype._setLatLngs.call(this,t),lt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return lt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,i=new Z(e,e);if(t=new q(t.min.subtract(i),t.max.add(i)),this._parts=[],!(!this._pxBounds||!this._pxBounds.intersects(t))){if(this.options.noClip){this._parts=this._rings;return}for(var n=0,o=this._rings.length,r;nt.y!=o.y>t.y&&t.x<(o.x-n.x)*(t.y-n.y)/(o.y-n.y)+n.x&&(e=!e);return e||Ct.prototype._containsPoint.call(this,t,!0)}});function jo(t,e){return new Gt(t,e)}var bt=Pt.extend({initialize:function(t,e){C(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e=V(t)?t:t.features,i,n,o;if(e){for(i=0,n=e.length;i0&&o.push(o[0].slice()),o}function Wt(t,e){return t.feature?P({},t.feature,{geometry:e}):Ce(e)}function Ce(t){return t.type==="Feature"||t.type==="FeatureCollection"?t:{type:"Feature",properties:{},geometry:t}}var hi={toGeoJSON:function(t){return Wt(this,{type:"Point",coordinates:ai(this.getLatLng(),t)})}};ye.include(hi),si.include(hi),Le.include(hi),Ct.include({toGeoJSON:function(t){var e=!lt(this._latlngs),i=Pe(this._latlngs,e?1:0,!1,t);return Wt(this,{type:(e?"Multi":"")+"LineString",coordinates:i})}}),Gt.include({toGeoJSON:function(t){var e=!lt(this._latlngs),i=e&&!lt(this._latlngs[0]),n=Pe(this._latlngs,i?2:e?1:0,!0,t);return e||(n=[n]),Wt(this,{type:(i?"Multi":"")+"Polygon",coordinates:n})}}),Ft.include({toMultiPoint:function(t){var e=[];return this.eachLayer(function(i){e.push(i.toGeoJSON(t).geometry.coordinates)}),Wt(this,{type:"MultiPoint",coordinates:e})},toGeoJSON:function(t){var e=this.feature&&this.feature.geometry&&this.feature.geometry.type;if(e==="MultiPoint")return this.toMultiPoint(t);var i=e==="GeometryCollection",n=[];return this.eachLayer(function(o){if(o.toGeoJSON){var r=o.toGeoJSON(t);if(i)n.push(r.geometry);else{var u=Ce(r);u.type==="FeatureCollection"?n.push.apply(n,u.features):n.push(u)}}}),i?Wt(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}});function rn(t,e){return new bt(t,e)}var Go=rn,be=_t.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,e,i){this._url=t,this._bounds=$(e),C(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(A(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){K(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&Dt(this._image),this},bringToBack:function(){return this._map&&Ht(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=$(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=this._url.tagName==="IMG",e=this._image=t?this._url:H("img");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=f,e.onmousemove=f,e.onload=a(this.fire,this,"load"),e.onerror=a(this._overlayOnError,this,"error"),(this.options.crossOrigin||this.options.crossOrigin==="")&&(e.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t){this._url=e.src;return}e.src=this._url,e.alt=this.options.alt},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),i=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;zt(this._image,i,e)},_reset:function(){var t=this._image,e=new q(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();X(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){ut(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&this.options.zIndex!==void 0&&this.options.zIndex!==null&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),Wo=function(t,e,i){return new be(t,e,i)},an=be.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t=this._url.tagName==="VIDEO",e=this._image=t?this._url:H("video");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=f,e.onmousemove=f,e.onloadeddata=a(this.fire,this,"load"),t){for(var i=e.getElementsByTagName("source"),n=[],o=0;o0?n:[e.src];return}V(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var r=0;ro?(e.height=o+"px",A(t,r)):Y(t,r),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),i=this._getAnchor();X(this._container,e.add(i))},_adjustPan:function(){if(this.options.autoPan){if(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning){this._autopanning=!1;return}var t=this._map,e=parseInt(Xt(this._container,"marginBottom"),10)||0,i=this._container.offsetHeight+e,n=this._containerWidth,o=new Z(this._containerLeft,-i-this._containerBottom);o._add(Zt(this._container));var r=t.layerPointToContainerPoint(o),u=z(this.options.autoPanPadding),d=z(this.options.autoPanPaddingTopLeft||u),p=z(this.options.autoPanPaddingBottomRight||u),y=t.getSize(),T=0,E=0;r.x+n+p.x>y.x&&(T=r.x+n-y.x+p.x),r.x-T-d.x<0&&(T=r.x-d.x),r.y+i+p.y>y.y&&(E=r.y+i-y.y+p.y),r.y-E-d.y<0&&(E=r.y-d.y),(T||E)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([T,E]))}},_getAnchor:function(){return z(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),qo=function(t,e){return new Me(t,e)};D.mergeOptions({closePopupOnClick:!0}),D.include({openPopup:function(t,e,i){return this._initOverlay(Me,t,e,i).openOn(this),this},closePopup:function(t){return t=arguments.length?t:this._popup,t&&t.close(),this}}),_t.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Me,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof Pt||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return this._popup?this._popup.isOpen():!1},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){if(!(!this._popup||!this._map)){Bt(t);var e=t.layer||t.target;if(this._popup._source===e&&!(e instanceof Et)){this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng);return}this._popup._source=e,this.openPopup(t.latlng)}},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){t.originalEvent.keyCode===13&&this._openPopup(t)}});var Te=vt.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){vt.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){vt.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=vt.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip",e=t+" "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=H("div",e),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+l(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i,n=this._map,o=this._container,r=n.latLngToContainerPoint(n.getCenter()),u=n.layerPointToContainerPoint(t),d=this.options.direction,p=o.offsetWidth,y=o.offsetHeight,T=z(this.options.offset),E=this._getAnchor();d==="top"?(e=p/2,i=y):d==="bottom"?(e=p/2,i=0):d==="center"?(e=p/2,i=y/2):d==="right"?(e=0,i=y/2):d==="left"?(e=p,i=y/2):u.xthis.options.maxZoom||in?this._retainParent(o,r,u,n):!1)},_retainChildren:function(t,e,i,n){for(var o=2*t;o<2*t+2;o++)for(var r=2*e;r<2*e+2;r++){var u=new Z(o,r);u.z=i+1;var d=this._tileCoordsToKey(u),p=this._tiles[d];if(p&&p.active){p.retain=!0;continue}else p&&p.loaded&&(p.retain=!0);i+1this.options.maxZoom||this.options.minZoom!==void 0&&o1){this._setView(t,i);return}for(var E=o.min.y;E<=o.max.y;E++)for(var N=o.min.x;N<=o.max.x;N++){var it=new Z(N,E);if(it.z=this._tileZoom,!!this._isValidTile(it)){var Q=this._tiles[this._tileCoordsToKey(it)];Q?Q.current=!0:u.push(it)}}if(u.sort(function(rt,Vt){return rt.distanceTo(r)-Vt.distanceTo(r)}),u.length!==0){this._loading||(this._loading=!0,this.fire("loading"));var ct=document.createDocumentFragment();for(N=0;Ni.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return $(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),o=n.add(i),r=e.unproject(n,t.z),u=e.unproject(o,t.z);return[r,u]},_tileCoordsToBounds:function(t){var e=this._tileCoordsToNwSe(t),i=new st(e[0],e[1]);return this.options.noWrap||(i=this._map.wrapLatLngBounds(i)),i},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var e=t.split(":"),i=new Z(+e[0],+e[1]);return i.z=+e[2],i},_removeTile:function(t){var e=this._tiles[t];e&&(K(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){A(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=f,t.onmousemove=f,S.ielt9&&this.options.opacity<1&&ut(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&nt(a(this._tileReady,this,t,null,o)),X(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);i=this._tiles[n],i&&(i.loaded=+new Date,this._map._fadeAnimated?(ut(i.el,0),ht(this._fadeFrame),this._fadeFrame=nt(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(A(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),S.ielt9||!this._map._fadeAnimated?nt(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new Z(this._wrapX?g(t.x,this._wrapX):t.x,this._wrapY?g(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new q(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function $o(t){return new se(t)}var Ut=se.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,e=C(this,e),e.detectRetina&&S.retina&&e.maxZoom>0?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),typeof e.subdomains=="string"&&(e.subdomains=e.subdomains.split("")),this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&e===void 0&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement("img");return I(i,"load",a(this._tileOnLoad,this,e,i)),I(i,"error",a(this._tileOnError,this,e,i)),(this.options.crossOrigin||this.options.crossOrigin==="")&&(i.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),typeof this.options.referrerPolicy=="string"&&(i.referrerPolicy=this.options.referrerPolicy),i.alt="",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:S.retina?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var i=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=i),e["-y"]=i}return j(this._url,P(e,this.options))},_tileOnLoad:function(t,e){S.ielt9?setTimeout(a(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&e.getAttribute("src")!==n&&(e.src=n),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom,i=this.options.zoomReverse,n=this.options.zoomOffset;return i&&(t=e-t),t+n},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_abortLoading:function(){var t,e;for(t in this._tiles)if(this._tiles[t].coords.z!==this._tileZoom&&(e=this._tiles[t].el,e.onload=f,e.onerror=f,!e.complete)){e.src=G;var i=this._tiles[t].coords;K(e),delete this._tiles[t],this.fire("tileabort",{tile:e,coords:i})}},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute("src",G),se.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(!(!this._map||i&&i.getAttribute("src")===G))return se.prototype._tileReady.call(this,t,e,i)}});function ln(t,e){return new Ut(t,e)}var cn=Ut.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i=P({},this.defaultWmsParams);for(var n in e)n in this.options||(i[n]=e[n]);e=C(this,e);var o=e.detectRetina&&S.retina?2:1,r=this.getTileSize();i.width=r.x*o,i.height=r.y*o,this.wmsParams=i},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,Ut.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,n=ot(i.project(e[0]),i.project(e[1])),o=n.min,r=n.max,u=(this._wmsVersion>=1.3&&this._crs===nn?[o.y,o.x,r.y,r.x]:[o.x,o.y,r.x,r.y]).join(","),d=Ut.prototype.getTileUrl.call(this,t);return d+F(this.wmsParams,d,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+u},setParams:function(t,e){return P(this.wmsParams,t),e||this.redraw(),this}});function Xo(t,e){return new cn(t,e)}Ut.WMS=cn,ln.wms=Xo;var Mt=_t.extend({options:{padding:.1},initialize:function(t){C(this,t),l(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),A(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),r=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t,e));S.any3d?zt(this._container,r,i):X(this._container,r)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new q(i,i.add(e.multiplyBy(1+t*2)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),dn=Mt.extend({options:{tolerance:0},getEvents:function(){var t=Mt.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Mt.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");I(t,"mousemove",this._onMouseMove,this),I(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),I(t,"mouseout",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext("2d")},_destroyContainer:function(){ht(this._redrawRequest),delete this._ctx,K(this._container),U(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){var t;this._redrawBounds=null;for(var e in this._layers)t=this._layers[e],t._update();this._redraw()}},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Mt.prototype._update.call(this);var t=this._bounds,e=this._container,i=t.getSize(),n=S.retina?2:1;X(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",S.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){Mt.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[l(t)]=t;var e=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=e),this._drawLast=e,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,n=e.prev;i?i.prev=n:this._drawLast=n,n?n.next=i:this._drawFirst=i,delete t._order,delete this._layers[l(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(typeof t.options.dashArray=="string"){var e=t.options.dashArray.split(/[, ]+/),i=[],n,o;for(o=0;o')}}catch{}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),Jo={_initContainer:function(){this._container=H("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Mt.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=re("shape");A(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=re("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;K(e),t.removeInteractiveTarget(e),delete this._layers[l(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e||(e=t._stroke=re("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=V(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i||(i=t._fill=re("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,"+65535*360)},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){Dt(t._container)},_bringToBack:function(t){Ht(t._container)}},ke=S.vml?re:mi,ae=Mt.extend({_initContainer:function(){this._container=ke("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=ke("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){K(this._container),U(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Mt.prototype._update.call(this);var t=this._bounds,e=t.getSize(),i=this._container;(!this._svgSize||!this._svgSize.equals(e))&&(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),X(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update")}},_initPath:function(t){var e=t._path=ke("path");t.options.className&&A(e,t.options.className),t.options.interactive&&A(e,"leaflet-interactive"),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){K(t._path),t.removeInteractiveTarget(t._path),delete this._layers[l(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,i=t.options;e&&(i.stroke?(e.setAttribute("stroke",i.color),e.setAttribute("stroke-opacity",i.opacity),e.setAttribute("stroke-width",i.weight),e.setAttribute("stroke-linecap",i.lineCap),e.setAttribute("stroke-linejoin",i.lineJoin),i.dashArray?e.setAttribute("stroke-dasharray",i.dashArray):e.removeAttribute("stroke-dasharray"),i.dashOffset?e.setAttribute("stroke-dashoffset",i.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),i.fill?(e.setAttribute("fill",i.fillColor||i.color),e.setAttribute("fill-opacity",i.fillOpacity),e.setAttribute("fill-rule",i.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,gi(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n=Math.max(Math.round(t._radiusY),1)||i,o="a"+i+","+n+" 0 1,0 ",r=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+o+i*2+",0 "+o+-i*2+",0 ";this._setPath(t,r)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){Dt(t._path)},_bringToBack:function(t){Ht(t._path)}});S.vml&&ae.include(Jo);function _n(t){return S.svg||S.vml?new ae(t):null}D.include({getRenderer:function(t){var e=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return e||(e=this._renderer=this._createRenderer()),this.hasLayer(e)||this.addLayer(e),e},_getPaneRenderer:function(t){if(t==="overlayPane"||t===void 0)return!1;var e=this._paneRenderers[t];return e===void 0&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e},_createRenderer:function(t){return this.options.preferCanvas&&fn(t)||_n(t)}});var pn=Gt.extend({initialize:function(t,e){Gt.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=$(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function Qo(t,e){return new pn(t,e)}ae.create=ke,ae.pointsToPath=gi,bt.geometryToLayer=xe,bt.coordsToLatLng=ri,bt.coordsToLatLngs=we,bt.latLngToCoords=ai,bt.latLngsToCoords=Pe,bt.getFeature=Wt,bt.asFeature=Ce,D.mergeOptions({boxZoom:!0});var mn=gt.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){I(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){U(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){K(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){this._resetStateTimeout!==0&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||t.which!==1&&t.button!==1)return!1;this._clearDeferredResetState(),this._resetState(),Jt(),Ge(),this._startPoint=this._map.mouseEventToContainerPoint(t),I(document,{contextmenu:Bt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=H("div","leaflet-zoom-box",this._container),A(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var e=new q(this._point,this._startPoint),i=e.getSize();X(this._box,e.min),this._box.style.width=i.x+"px",this._box.style.height=i.y+"px"},_finish:function(){this._moved&&(K(this._box),Y(this._container,"leaflet-crosshair")),Qt(),We(),U(document,{contextmenu:Bt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if(!(t.which!==1&&t.button!==1)&&(this._finish(),!!this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0);var e=new st(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(e).fire("boxzoomend",{boxZoomBounds:e})}},_onKeyDown:function(t){t.keyCode===27&&(this._finish(),this._clearDeferredResetState(),this._resetState())}});D.addInitHook("addHandler","boxZoom",mn),D.mergeOptions({doubleClickZoom:!0});var gn=gt.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,o=t.originalEvent.shiftKey?i-n:i+n;e.options.doubleClickZoom==="center"?e.setZoom(o):e.setZoomAround(t.containerPoint,o)}});D.addInitHook("addHandler","doubleClickZoom",gn),D.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var vn=gt.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new St(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}A(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){Y(this._map._container,"leaflet-grab"),Y(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var e=$(this._map.options.maxBounds);this._offsetLimit=ot(this._map.latLngToContainerPoint(e.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(e.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(i),this._times.push(e),this._prunePositions(e)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){if(!(!this._viscosity||!this._offsetLimit)){var t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit;t.xe.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,r=(n+e+i)%t-e-i,u=Math.abs(o+i)0?r:-r))-e;this._delta=0,this._startTime=null,u&&(t.options.scrollWheelZoom==="center"?t.setZoom(e+u):t.setZoomAround(this._lastMousePos,e+u))}});D.addInitHook("addHandler","scrollWheelZoom",Ln);var ts=600;D.mergeOptions({tapHold:S.touchNative&&S.safari&&S.mobile,tapTolerance:15});var xn=gt.extend({addHooks:function(){I(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){U(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(clearTimeout(this._holdTimeout),t.touches.length===1){var e=t.touches[0];this._startPos=this._newPos=new Z(e.clientX,e.clientY),this._holdTimeout=setTimeout(a(function(){this._cancel(),this._isTapValid()&&(I(document,"touchend",et),I(document,"touchend touchcancel",this._cancelClickPrevent),this._simulateEvent("contextmenu",e))},this),ts),I(document,"touchend touchcancel contextmenu",this._cancel,this),I(document,"touchmove",this._onMove,this)}},_cancelClickPrevent:function t(){U(document,"touchend",et),U(document,"touchend touchcancel",t)},_cancel:function(){clearTimeout(this._holdTimeout),U(document,"touchend touchcancel contextmenu",this._cancel,this),U(document,"touchmove",this._onMove,this)},_onMove:function(t){var e=t.touches[0];this._newPos=new Z(e.clientX,e.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){var i=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});i._simulated=!0,e.target.dispatchEvent(i)}});D.addInitHook("addHandler","tapHold",xn),D.mergeOptions({touchZoom:S.touch,bounceAtZoomLimits:!0});var wn=gt.extend({addHooks:function(){A(this._map._container,"leaflet-touch-zoom"),I(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){Y(this._map._container,"leaflet-touch-zoom"),U(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e=this._map;if(!(!t.touches||t.touches.length!==2||e._animatingZoom||this._zooming)){var i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=e.getSize()._divideBy(2),this._startLatLng=e.containerPointToLatLng(this._centerPoint),e.options.touchZoom!=="center"&&(this._pinchStartLatLng=e.containerPointToLatLng(i.add(n)._divideBy(2))),this._startDist=i.distanceTo(n),this._startZoom=e.getZoom(),this._moved=!1,this._zooming=!0,e._stop(),I(document,"touchmove",this._onTouchMove,this),I(document,"touchend touchcancel",this._onTouchEnd,this),et(t)}},_onTouchMove:function(t){if(!(!t.touches||t.touches.length!==2||!this._zooming)){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),o=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&o>1)&&(this._zoom=e._limitZoom(this._zoom)),e.options.touchZoom==="center"){if(this._center=this._startLatLng,o===1)return}else{var r=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(o===1&&r.x===0&&r.y===0)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),ht(this._animRequest);var u=a(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=nt(u,this,!0),et(t)}},_onTouchEnd:function(){if(!this._moved||!this._zooming){this._zooming=!1;return}this._zooming=!1,ht(this._animRequest),U(document,"touchmove",this._onTouchMove,this),U(document,"touchend touchcancel",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))}});D.addInitHook("addHandler","touchZoom",wn),D.BoxZoom=mn,D.DoubleClickZoom=gn,D.Drag=vn,D.Keyboard=yn,D.ScrollWheelZoom=Ln,D.TapHold=xn,D.TouchZoom=wn,c.Bounds=q,c.Browser=S,c.CRS=wt,c.Canvas=dn,c.Circle=si,c.CircleMarker=Le,c.Class=xt,c.Control=ft,c.DivIcon=un,c.DivOverlay=vt,c.DomEvent=vo,c.DomUtil=mo,c.Draggable=St,c.Evented=qt,c.FeatureGroup=Pt,c.GeoJSON=bt,c.GridLayer=se,c.Handler=gt,c.Icon=jt,c.ImageOverlay=be,c.LatLng=W,c.LatLngBounds=st,c.Layer=_t,c.LayerGroup=Ft,c.LineUtil=Oo,c.Map=D,c.Marker=ye,c.Mixin=bo,c.Path=Et,c.Point=Z,c.PolyUtil=Mo,c.Polygon=Gt,c.Polyline=Ct,c.Popup=Me,c.PosAnimation=Wi,c.Projection=zo,c.Rectangle=pn,c.Renderer=Mt,c.SVG=ae,c.SVGOverlay=hn,c.TileLayer=Ut,c.Tooltip=Te,c.Transformation=Oe,c.Util=Nn,c.VideoOverlay=an,c.bind=a,c.bounds=ot,c.canvas=fn,c.circle=Ho,c.circleMarker=Do,c.control=ie,c.divIcon=Yo,c.extend=P,c.featureGroup=Ao,c.geoJSON=rn,c.geoJson=Go,c.gridLayer=$o,c.icon=No,c.imageOverlay=Wo,c.latLng=R,c.latLngBounds=$,c.layerGroup=Bo,c.map=yo,c.marker=Ro,c.point=z,c.polygon=jo,c.polyline=Fo,c.popup=qo,c.rectangle=Qo,c.setOptions=C,c.stamp=l,c.svg=_n,c.svgOverlay=Vo,c.tileLayer=ln,c.tooltip=Ko,c.transformation=Kt,c.version=b,c.videoOverlay=Uo;var es=window.L;c.noConflict=function(){return window.L=es,this},window.L=c})}(he,he.exports)),he.exports}var di=bs();const Tt=cs(di);function Ms(x,w,c){return Object.freeze({instance:x,context:w,container:c})}function Ts(x,w){return w==null?function(b,P){const s=B.useRef();return s.current||(s.current=x(b,P)),s}:function(b,P){const s=B.useRef();s.current||(s.current=x(b,P));const a=B.useRef(b),{instance:h}=s.current;return B.useEffect(function(){a.current!==b&&(w(h,b,a.current),a.current=b)},[h,b,P]),s}}function ks(x,w){B.useEffect(function(){return(w.layerContainer??w.map).addLayer(x.instance),function(){var s;(s=w.layerContainer)==null||s.removeLayer(x.instance),w.map.removeLayer(x.instance)}},[w,x])}function Ss(x){return function(c){const b=Bn(),P=x(An(c,b),b);return vs(b.map,c.attribution),Ps(P.current,c.eventHandlers),ks(P.current,b),P}}function Es(x,w){const c=Ts(x,w),b=Ss(c);return ws(b)}function Os(x,w,c){const{opacity:b,zIndex:P}=w;b!=null&&b!==c.opacity&&x.setOpacity(b),P!=null&&P!==c.zIndex&&x.setZIndex(P)}function fi(){return Bn().map}function li(){return li=Object.assign||function(x){for(var w=1;w(m==null?void 0:m.map)??null,[m]);const C=B.useCallback(O=>{if(O!==null&&m===null){const j=new di.Map(O,g);c!=null&&_!=null?j.setView(c,_):x!=null&&j.fitBounds(x,w),l!=null&&j.whenReady(l),k(Ls(j))}},[]);B.useEffect(()=>()=>{m==null||m.map.remove()},[m]);const F=m?Mn.createElement(xs,{value:m},b):a??null;return Mn.createElement("div",li({},v,{ref:C}),F)}const Zs=B.forwardRef(zs),Is=Es(function({url:w,...c},b){const P=new di.TileLayer(w,An(c,b));return Ms(P,b)},function(w,c,b){Os(w,c,b);const{url:P}=c;P!=null&&P!==b.url&&w.setUrl(P)});var ue={exports:{}},Bs=ue.exports,kn;function As(){return kn||(kn=1,function(x,w){(function(c,b){b(w)})(Bs,function(c){var b=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnEveryZoom:!1,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyShapePositions:null,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(s){L.Util.setOptions(this,s),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var a=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,a?this._withAnimation:this._noAnimation),this._markerCluster=a?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(s){if(s instanceof L.LayerGroup)return this.addLayers([s]);if(!s.getLatLng)return this._nonPointGroup.addLayer(s),this.fire("layeradd",{layer:s}),this;if(!this._map)return this._needsClustering.push(s),this.fire("layeradd",{layer:s}),this;if(this.hasLayer(s))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(s,this._maxZoom),this.fire("layeradd",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var a=s,h=this._zoom;if(s.__parent)for(;a.__parent._zoom>=h;)a=a.__parent;return this._currentShownBounds.contains(a.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(s,a):this._animationAddLayerNonAnimated(s,a)),this},removeLayer:function(s){return s instanceof L.LayerGroup?this.removeLayers([s]):s.getLatLng?this._map?s.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(s)),this._removeLayer(s,!0),this.fire("layerremove",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),s.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(s)&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,s)&&this.hasLayer(s)&&this._needsRemoving.push({layer:s,latlng:s._latlng}),this.fire("layerremove",{layer:s}),this):(this._nonPointGroup.removeLayer(s),this.fire("layerremove",{layer:s}),this)},addLayers:function(s,a){if(!L.Util.isArray(s))return this.addLayer(s);var h=this._featureGroup,l=this._nonPointGroup,_=this.options.chunkedLoading,g=this.options.chunkInterval,f=this.options.chunkProgress,v=s.length,m=0,k=!0,C;if(this._map){var F=new Date().getTime(),O=L.bind(function(){var V=new Date().getTime();for(this._map&&this._unspiderfy&&this._unspiderfy();mg)break}if(C=s[m],C instanceof L.LayerGroup){k&&(s=s.slice(),k=!1),this._extractNonGroupLayers(C,s),v=s.length;continue}if(!C.getLatLng){l.addLayer(C),a||this.fire("layeradd",{layer:C});continue}if(!this.hasLayer(C)&&(this._addLayer(C,this._maxZoom),a||this.fire("layeradd",{layer:C}),C.__parent&&C.__parent.getChildCount()===2)){var G=C.__parent.getAllChildMarkers(),tt=G[0]===C?G[1]:G[0];h.removeLayer(tt)}}f&&f(m,v,new Date().getTime()-F),m===v?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(O,this.options.chunkDelay)},this);O()}else for(var j=this._needsClustering;m=0;a--)s.extend(this._needsClustering[a].getLatLng());return s.extend(this._nonPointGroup.getBounds()),s},eachLayer:function(s,a){var h=this._needsClustering.slice(),l=this._needsRemoving,_,g,f;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(h),g=h.length-1;g>=0;g--){for(_=!0,f=l.length-1;f>=0;f--)if(l[f].layer===h[g]){_=!1;break}_&&s.call(a,h[g])}this._nonPointGroup.eachLayer(s,a)},getLayers:function(){var s=[];return this.eachLayer(function(a){s.push(a)}),s},getLayer:function(s){var a=null;return s=parseInt(s,10),this.eachLayer(function(h){L.stamp(h)===s&&(a=h)}),a},hasLayer:function(s){if(!s)return!1;var a,h=this._needsClustering;for(a=h.length-1;a>=0;a--)if(h[a]===s)return!0;for(h=this._needsRemoving,a=h.length-1;a>=0;a--)if(h[a].layer===s)return!1;return!!(s.__parent&&s.__parent._group===this)||this._nonPointGroup.hasLayer(s)},zoomToShowLayer:function(s,a){var h=this._map;typeof a!="function"&&(a=function(){});var l=function(){(h.hasLayer(s)||h.hasLayer(s.__parent))&&!this._inZoomAnimation&&(this._map.off("moveend",l,this),this.off("animationend",l,this),h.hasLayer(s)?a():s.__parent._icon&&(this.once("spiderfied",a,this),s.__parent.spiderfy()))};s._icon&&this._map.getBounds().contains(s.getLatLng())?a():s.__parent._zoom=0;h--)if(s[h]===a)return s.splice(h,1),!0},_removeFromGridUnclustered:function(s,a){for(var h=this._map,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom());a>=_&&l[a].removeObject(s,h.project(s.getLatLng(),a));a--);},_childMarkerDragStart:function(s){s.target.__dragStart=s.target._latlng},_childMarkerMoved:function(s){if(!this._ignoreMove&&!s.target.__dragStart){var a=s.target._popup&&s.target._popup.isOpen();this._moveChild(s.target,s.oldLatLng,s.latlng),a&&s.target.openPopup()}},_moveChild:function(s,a,h){s._latlng=a,this.removeLayer(s),s._latlng=h,this.addLayer(s)},_childMarkerDragEnd:function(s){var a=s.target.__dragStart;delete s.target.__dragStart,a&&this._moveChild(s.target,a,s.target._latlng)},_removeLayer:function(s,a,h){var l=this._gridClusters,_=this._gridUnclustered,g=this._featureGroup,f=this._map,v=Math.floor(this._map.getMinZoom());a&&this._removeFromGridUnclustered(s,this._maxZoom);var m=s.__parent,k=m._markers,C;for(this._arraySplice(k,s);m&&(m._childCount--,m._boundsNeedUpdate=!0,!(m._zoom"+a+"
",className:"marker-cluster"+h,iconSize:new L.Point(40,40)})},_bindEvents:function(){var s=this._map,a=this.options.spiderfyOnMaxZoom,h=this.options.showCoverageOnHover,l=this.options.zoomToBoundsOnClick,_=this.options.spiderfyOnEveryZoom;(a||l||_)&&this.on("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),h&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),s.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(s){var a=s.layer,h=a;if(!(s.type==="clusterkeypress"&&s.originalEvent&&s.originalEvent.keyCode!==13)){for(;h._childClusters.length===1;)h=h._childClusters[0];h._zoom===this._maxZoom&&h._childCount===a._childCount&&this.options.spiderfyOnMaxZoom?a.spiderfy():this.options.zoomToBoundsOnClick&&a.zoomToBounds(),this.options.spiderfyOnEveryZoom&&a.spiderfy(),s.originalEvent&&s.originalEvent.keyCode===13&&this._map._container.focus()}},_showCoverage:function(s){var a=this._map;this._inZoomAnimation||(this._shownPolygon&&a.removeLayer(this._shownPolygon),s.layer.getChildCount()>2&&s.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(s.layer.getConvexHull(),this.options.polygonOptions),a.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var s=this.options.spiderfyOnMaxZoom,a=this.options.showCoverageOnHover,h=this.options.zoomToBoundsOnClick,l=this.options.spiderfyOnEveryZoom,_=this._map;(s||h||l)&&this.off("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),a&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),_.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var s=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,s),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),s),this._currentShownBounds=s}},_generateInitialClusters:function(){var s=Math.ceil(this._map.getMaxZoom()),a=Math.floor(this._map.getMinZoom()),h=this.options.maxClusterRadius,l=h;typeof h!="function"&&(l=function(){return h}),this.options.disableClusteringAtZoom!==null&&(s=this.options.disableClusteringAtZoom-1),this._maxZoom=s,this._gridClusters={},this._gridUnclustered={};for(var _=s;_>=a;_--)this._gridClusters[_]=new L.DistanceGrid(l(_)),this._gridUnclustered[_]=new L.DistanceGrid(l(_));this._topClusterLevel=new this._markerCluster(this,a-1)},_addLayer:function(s,a){var h=this._gridClusters,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom()),g,f;for(this.options.singleMarkerMode&&this._overrideMarkerIcon(s),s.on(this._childMarkerEventHandlers,this);a>=_;a--){g=this._map.project(s.getLatLng(),a);var v=h[a].getNearObject(g);if(v){v._addChild(s),s.__parent=v;return}if(v=l[a].getNearObject(g),v){var m=v.__parent;m&&this._removeLayer(v,!1);var k=new this._markerCluster(this,a,v,s);h[a].addObject(k,this._map.project(k._cLatLng,a)),v.__parent=k,s.__parent=k;var C=k;for(f=a-1;f>m._zoom;f--)C=new this._markerCluster(this,f,C),h[f].addObject(C,this._map.project(v.getLatLng(),f));m._addChild(C),this._removeFromGridUnclustered(v,a);return}l[a].addObject(s,g)}this._topClusterLevel._addChild(s),s.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(s){s instanceof L.MarkerCluster&&s._iconNeedsUpdate&&s._updateIcon()})},_enqueue:function(s){this._queue.push(s),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var s=0;ss?(this._animationStart(),this._animationZoomOut(this._zoom,s)):this._moveEnd()},_getExpandedVisibleBounds:function(){if(this.options.removeOutsideVisibleBounds){if(L.Browser.mobile)return this._checkBoundsMaxLat(this._map.getBounds())}else return this._mapBoundsInfinite;return this._checkBoundsMaxLat(this._map.getBounds().pad(1))},_checkBoundsMaxLat:function(s){var a=this._maxLat;return a!==void 0&&(s.getNorth()>=a&&(s._northEast.lat=1/0),s.getSouth()<=-a&&(s._southWest.lat=-1/0)),s},_animationAddLayerNonAnimated:function(s,a){if(a===s)this._featureGroup.addLayer(s);else if(a._childCount===2){a._addToMap();var h=a.getAllChildMarkers();this._featureGroup.removeLayer(h[0]),this._featureGroup.removeLayer(h[1])}else a._updateIcon()},_extractNonGroupLayers:function(s,a){var h=s.getLayers(),l=0,_;for(a=a||[];l=0;g--)k=m[g],h.contains(k._latlng)||l.removeLayer(k)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(h,a),l.eachLayer(function(f){!(f instanceof L.MarkerCluster)&&f._icon&&f.clusterShow()}),this._topClusterLevel._recursively(h,s,a,function(f){f._recursivelyRestoreChildPositions(a)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(h,s,_,function(f){l.removeLayer(f),f.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(s,a){this._animationZoomOutSingle(this._topClusterLevel,s-1,a),this._topClusterLevel._recursivelyAddChildrenToMap(null,a,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),s,this._getExpandedVisibleBounds())},_animationAddLayer:function(s,a){var h=this,l=this._featureGroup;l.addLayer(s),a!==s&&(a._childCount>2?(a._updateIcon(),this._forceLayout(),this._animationStart(),s._setPos(this._map.latLngToLayerPoint(a.getLatLng())),s.clusterHide(),this._enqueue(function(){l.removeLayer(s),s.clusterShow(),h._animationEnd()})):(this._forceLayout(),h._animationStart(),h._animationZoomOutSingle(a,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(s,a,h){var l=this._getExpandedVisibleBounds(),_=Math.floor(this._map.getMinZoom());s._recursivelyAnimateChildrenInAndAddSelfToMap(l,_,a+1,h);var g=this;this._forceLayout(),s._recursivelyBecomeVisible(l,h),this._enqueue(function(){if(s._childCount===1){var f=s._markers[0];this._ignoreMove=!0,f.setLatLng(f.getLatLng()),this._ignoreMove=!1,f.clusterShow&&f.clusterShow()}else s._recursively(l,h,_,function(v){v._recursivelyRemoveChildrenFromMap(l,_,a+1)});g._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroup=function(s){return new L.MarkerClusterGroup(s)};var P=L.MarkerCluster=L.Marker.extend({options:L.Icon.prototype.options,initialize:function(s,a,h,l){L.Marker.prototype.initialize.call(this,h?h._cLatLng||h.getLatLng():new L.LatLng(0,0),{icon:this,pane:s.options.clusterPane}),this._group=s,this._zoom=a,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,h&&this._addChild(h),l&&this._addChild(l)},getAllChildMarkers:function(s,a){s=s||[];for(var h=this._childClusters.length-1;h>=0;h--)this._childClusters[h].getAllChildMarkers(s,a);for(var l=this._markers.length-1;l>=0;l--)a&&this._markers[l].__dragStart||s.push(this._markers[l]);return s},getChildCount:function(){return this._childCount},zoomToBounds:function(s){for(var a=this._childClusters.slice(),h=this._group._map,l=h.getBoundsZoom(this._bounds),_=this._zoom+1,g=h.getZoom(),f;a.length>0&&l>_;){_++;var v=[];for(f=0;f_?this._group._map.setView(this._latlng,_):l<=g?this._group._map.setView(this._latlng,g+1):this._group._map.fitBounds(this._bounds,s)},getBounds:function(){var s=new L.LatLngBounds;return s.extend(this._bounds),s},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(s,a){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(s),s instanceof L.MarkerCluster?(a||(this._childClusters.push(s),s.__parent=this),this._childCount+=s._childCount):(a||this._markers.push(s),this._childCount++),this.__parent&&this.__parent._addChild(s,!0)},_setClusterCenter:function(s){this._cLatLng||(this._cLatLng=s._cLatLng||s._latlng)},_resetBounds:function(){var s=this._bounds;s._southWest&&(s._southWest.lat=1/0,s._southWest.lng=1/0),s._northEast&&(s._northEast.lat=-1/0,s._northEast.lng=-1/0)},_recalculateBounds:function(){var s=this._markers,a=this._childClusters,h=0,l=0,_=this._childCount,g,f,v,m;if(_!==0){for(this._resetBounds(),g=0;g=0;g--)f=_[g],f._icon&&(f._setPos(a),f.clusterHide())},function(l){var _=l._childClusters,g,f;for(g=_.length-1;g>=0;g--)f=_[g],f._icon&&(f._setPos(a),f.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(s,a,h,l){this._recursively(s,l,a,function(_){_._recursivelyAnimateChildrenIn(s,_._group._map.latLngToLayerPoint(_.getLatLng()).round(),h),_._isSingleParent()&&h-1===l?(_.clusterShow(),_._recursivelyRemoveChildrenFromMap(s,a,h)):_.clusterHide(),_._addToMap()})},_recursivelyBecomeVisible:function(s,a){this._recursively(s,this._group._map.getMinZoom(),a,null,function(h){h.clusterShow()})},_recursivelyAddChildrenToMap:function(s,a,h){this._recursively(h,this._group._map.getMinZoom()-1,a,function(l){if(a!==l._zoom)for(var _=l._markers.length-1;_>=0;_--){var g=l._markers[_];h.contains(g._latlng)&&(s&&(g._backupLatlng=g.getLatLng(),g.setLatLng(s),g.clusterHide&&g.clusterHide()),l._group._featureGroup.addLayer(g))}},function(l){l._addToMap(s)})},_recursivelyRestoreChildPositions:function(s){for(var a=this._markers.length-1;a>=0;a--){var h=this._markers[a];h._backupLatlng&&(h.setLatLng(h._backupLatlng),delete h._backupLatlng)}if(s-1===this._zoom)for(var l=this._childClusters.length-1;l>=0;l--)this._childClusters[l]._restorePosition();else for(var _=this._childClusters.length-1;_>=0;_--)this._childClusters[_]._recursivelyRestoreChildPositions(s)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(s,a,h,l){var _,g;this._recursively(s,a-1,h-1,function(f){for(g=f._markers.length-1;g>=0;g--)_=f._markers[g],(!l||!l.contains(_._latlng))&&(f._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())},function(f){for(g=f._childClusters.length-1;g>=0;g--)_=f._childClusters[g],(!l||!l.contains(_._latlng))&&(f._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())})},_recursively:function(s,a,h,l,_){var g=this._childClusters,f=this._zoom,v,m;if(a<=f&&(l&&l(this),_&&f===h&&_(this)),f=0;v--)m=g[v],m._boundsNeedUpdate&&m._recalculateBounds(),s.intersects(m._bounds)&&m._recursively(s,a,h,l,_)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}});L.Marker.include({clusterHide:function(){var s=this.options.opacity;return this.setOpacity(0),this.options.opacity=s,this},clusterShow:function(){return this.setOpacity(this.options.opacity)}}),L.DistanceGrid=function(s){this._cellSize=s,this._sqCellSize=s*s,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},f=g[h]=g[h]||[],v=L.Util.stamp(s);this._objectPoint[v]=a,f.push(s)},updateObject:function(s,a){this.removeObject(s),this.addObject(s,a)},removeObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},f=g[h]=g[h]||[],v,m;for(delete this._objectPoint[L.Util.stamp(s)],v=0,m=f.length;v=0;g--){if(f=a[g],v=this.getDistant(f,s),v>0)_.push(f);else continue;v>h&&(h=v,l=f)}return{maxPoint:l,newPoints:_}},buildConvexHull:function(s,a){var h=[],l=this.findMostDistantPointFromBaseLine(s,a);return l.maxPoint?(h=h.concat(this.buildConvexHull([s[0],l.maxPoint],l.newPoints)),h=h.concat(this.buildConvexHull([l.maxPoint,s[1]],l.newPoints)),h):[s[0]]},getConvexHull:function(s){var a=!1,h=!1,l=!1,_=!1,g=null,f=null,v=null,m=null,k=null,C=null,F;for(F=s.length-1;F>=0;F--){var O=s[F];(a===!1||O.lat>a)&&(g=O,a=O.lat),(h===!1||O.latl)&&(v=O,l=O.lng),(_===!1||O.lng<_)&&(m=O,_=O.lng)}h!==a?(C=f,k=g):(C=m,k=v);var j=[].concat(this.buildConvexHull([C,k],s),this.buildConvexHull([k,C],s));return j}}}(),L.MarkerCluster.include({getConvexHull:function(){var s=this.getAllChildMarkers(),a=[],h,l;for(l=s.length-1;l>=0;l--)h=s[l].getLatLng(),a.push(h);return L.QuickHull.getConvexHull(a)}}),L.MarkerCluster.include({_2PI:Math.PI*2,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(!(this._group._spiderfied===this||this._group._inZoomAnimation)){var s=this.getAllChildMarkers(null,!0),a=this._group,h=a._map,l=h.latLngToLayerPoint(this._latlng),_;this._group._unspiderfy(),this._group._spiderfied=this,this._group.options.spiderfyShapePositions?_=this._group.options.spiderfyShapePositions(s.length,l):s.length>=this._circleSpiralSwitchover?_=this._generatePointsSpiral(s.length,l):(l.y+=10,_=this._generatePointsCircle(s.length,l)),this._animationSpiderfy(s,_)}},unspiderfy:function(s){this._group._inZoomAnimation||(this._animationUnspiderfy(s),this._group._spiderfied=null)},_generatePointsCircle:function(s,a){var h=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+s),l=h/this._2PI,_=this._2PI/s,g=[],f,v;for(l=Math.max(l,35),g.length=s,f=0;f=0;m--)m=0;g--)_=l[g],h.removeLayer(_),_._preSpiderfyLatlng&&(_.setLatLng(_._preSpiderfyLatlng),delete _._preSpiderfyLatlng),_.setZIndexOffset&&_.setZIndexOffset(0),_._spiderLeg&&(a.removeLayer(_._spiderLeg),delete _._spiderLeg);s.fire("unspiderfied",{cluster:this,markers:l}),s._ignoreMove=!1,s._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(s,a){var h=this._group,l=h._map,_=h._featureGroup,g=this._group.options.spiderLegPolylineOptions,f,v,m,k;for(h._ignoreMove=!0,f=0;f=0;F--)G=_.layerPointToLatLng(a[F]),O=s[F],O._preSpiderfyLatlng=O._latlng,O.setLatLng(G),O.clusterShow&&O.clusterShow(),m&&(j=O._spiderLeg,V=j._path,V.style.strokeDashoffset=0,j.setStyle({opacity:C}));this.setOpacity(.3),l._ignoreMove=!1,setTimeout(function(){l._animationEnd(),l.fire("spiderfied",{cluster:h,markers:s})},200)},_animationUnspiderfy:function(s){var a=this,h=this._group,l=h._map,_=h._featureGroup,g=s?l._latLngToNewLayerPoint(this._latlng,s.zoom,s.center):l.latLngToLayerPoint(this._latlng),f=this.getAllChildMarkers(null,!0),v=L.Path.SVG,m,k,C,F,O,j;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),k=f.length-1;k>=0;k--)m=f[k],m._preSpiderfyLatlng&&(m.closePopup(),m.setLatLng(m._preSpiderfyLatlng),delete m._preSpiderfyLatlng,j=!0,m._setPos&&(m._setPos(g),j=!1),m.clusterHide&&(m.clusterHide(),j=!1),j&&_.removeLayer(m),v&&(C=m._spiderLeg,F=C._path,O=F.getTotalLength()+.1,F.style.strokeDashoffset=O,C.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var V=0;for(k=f.length-1;k>=0;k--)m=f[k],m._spiderLeg&&V++;for(k=f.length-1;k>=0;k--)m=f[k],m._spiderLeg&&(m.clusterShow&&m.clusterShow(),m.setZIndexOffset&&m.setZIndexOffset(0),V>1&&_.removeLayer(m),l.removeLayer(m._spiderLeg),delete m._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:f})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(s){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(s))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(s){this._spiderfied&&this._spiderfied.unspiderfy(s)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(s){s._spiderLeg&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow(),s.setZIndexOffset&&s.setZIndexOffset(0),this._map.removeLayer(s._spiderLeg),delete s._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(s){return s?s instanceof L.MarkerClusterGroup?s=s._topClusterLevel.getAllChildMarkers():s instanceof L.LayerGroup?s=s._layers:s instanceof L.MarkerCluster?s=s.getAllChildMarkers():s instanceof L.Marker&&(s=[s]):s=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(s),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(s),this},_flagParentsIconsNeedUpdate:function(s){var a,h;for(a in s)for(h=s[a].__parent;h;)h._iconNeedsUpdate=!0,h=h.__parent},_refreshSingleMarkerModeMarkers:function(s){var a,h;for(a in s)h=s[a],this.hasLayer(h)&&h.setIcon(this._overrideMarkerIcon(h))}}),L.Marker.include({refreshIconOptions:function(s,a){var h=this.options.icon;return L.setOptions(h,s),this.setIcon(h),a&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),c.MarkerClusterGroup=b,c.MarkerCluster=P,Object.defineProperty(c,"__esModule",{value:!0})})}(ue,ue.exports)),ue.exports}As();const Sn={healthy:"#10b981",warning:"#f59e0b",critical:"#ef4444"},En={healthy:"background: #d1fae5; color: #065f46;",warning:"background: #fef3c7; color: #92400e;",critical:"background: #fee2e2; color: #991b1b;"},ci={small:{dimension:"30px",fontSize:"12px",threshold:0},medium:{dimension:"40px",fontSize:"14px",threshold:10},large:{dimension:"50px",fontSize:"16px",threshold:50}},Ns={size:20,emoji:"🌳",className:"custom-tree-marker"},Rs={backgroundColor:"#10b981",className:"custom-cluster-icon",iconSize:[30,30]},On=(x="healthy")=>{const w=Sn[x]||Sn.healthy,{size:c,emoji:b,className:P}=Ns;return Tt.divIcon({className:P,html:Ds(w,c,b),iconSize:[c,c],iconAnchor:[c/2,c/2]})},Ds=(x,w,c)=>` +
+ ${c} +
+`,Hs=x=>{const w=Fs(x),{dimension:c,fontSize:b}=ci[w],{backgroundColor:P,className:s,iconSize:a}=Rs;return Tt.divIcon({html:js(P,c,b,x),className:s,iconSize:a})},Fs=x=>x>ci.large.threshold?"large":x>ci.medium.threshold?"medium":"small",js=(x,w,c,b)=>` +
${b}
+`,zn=x=>{const w=En[x.health]||En.healthy;return Gs(x,w)},Gs=(x,w)=>` +
+

${x.name}

+

Species: ${x.species}

+

Height: ${x.height}m

+

Health: + ${x.health} +

+
+`,Ws=({trees:x,onTreeClick:w,zoom:c})=>{const b=fi();return B.useEffect(()=>{if(!(!b||!x.length)){if(b.eachLayer(P=>{P instanceof Tt.MarkerClusterGroup&&b.removeLayer(P)}),c<12){const P=Tt.markerClusterGroup({chunkedLoading:!0,spiderfyOnMaxZoom:!0,showCoverageOnHover:!1,zoomToBoundsOnClick:!0,maxClusterRadius:50,iconCreateFunction:s=>{const a=s.getChildCount();return Hs(a)}});x.forEach(s=>{const a=Tt.marker([s.lat,s.lng],{icon:On(s.health)});a.bindPopup(zn(s)),a.on("click",()=>w(s)),P.addLayer(a)}),b.addLayer(P)}else x.forEach(P=>{const s=Tt.marker([P.lat,P.lng],{icon:On(P.health)});s.bindPopup(zn(P)),s.on("click",()=>w(P)),s.addTo(b)});return()=>{b.eachLayer(P=>{P instanceof Tt.MarkerClusterGroup&&b.removeLayer(P)})}}},[b,x,w,c]),null},Us=({onMapReady:x,onMapError:w})=>{const c=fi();return B.useEffect(()=>{const b=()=>{x&&x()},P=s=>{console.error("Map error:",s),w&&w(s)};return c.whenReady(()=>{b()}),c.on("tileerror",P),()=>{c.off("tileerror",P)}},[c,x,w]),null},Vs=({onZoomChange:x})=>{const w=fi();return B.useEffect(()=>{const c=()=>{x&&x(w.getZoom())};return w.on("zoomend",c),()=>{w.off("zoomend",c)}},[w]),null},qs=yt.div` + height: 600px; + width: 100%; + border-radius: 0.75rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; + position: relative; +`,Ks=yt.div` + background: white; + padding: 1rem 1.5rem; + border-bottom: 1px solid #e5e7eb; + display: flex; + justify-content: space-between; + align-items: center; +`,Ys=yt.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`,$s=yt.div` + display: flex; + gap: 0.5rem; +`,Zn=yt.button` + padding: 0.5rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.375rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #f9fafb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,Xs=yt.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`,Js=yt.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.95); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`,Qs=yt.div` + text-align: center; + padding: 2rem; + max-width: 300px; +`,tr=({onCenterMap:x,onFitBounds:w})=>M.jsxs(Ks,{children:[M.jsx(Ys,{children:"Forest Map"}),M.jsxs($s,{children:[M.jsx(Zn,{onClick:x,title:"Center Map",children:M.jsxs("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]})}),M.jsx(Zn,{onClick:w,title:"Fit to Bounds",children:M.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})})})]})]});delete Tt.Icon.Default.prototype._getIconUrl;Tt.Icon.Default.mergeOptions({iconRetinaUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png",iconUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png",shadowUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png"});const er=({trees:x=[{id:1,lat:59.3293,lng:18.0686,name:"Tree A-001",health:"healthy",height:2.4,species:"Pine"},{id:2,lat:59.33,lng:18.069,name:"Tree A-002",health:"healthy",height:2.1,species:"Oak"},{id:3,lat:59.3285,lng:18.0675,name:"Tree A-003",health:"warning",height:1.8,species:"Birch"},{id:4,lat:59.331,lng:18.07,name:"Tree A-004",health:"critical",height:1.5,species:"Spruce"},{id:5,lat:59.3275,lng:18.066,name:"Tree A-005",health:"healthy",height:2.7,species:"Pine"},{id:6,lat:59.332,lng:18.071,name:"Tree A-006",health:"healthy",height:2.3,species:"Oak"},{id:7,lat:59.3265,lng:18.065,name:"Tree A-007",health:"warning",height:1.9,species:"Birch"},{id:8,lat:59.333,lng:18.072,name:"Tree A-008",health:"healthy",height:2.5,species:"Spruce"}],onTreeSelect:w,filters:c={},loading:b=!1,error:P=null})=>{const[s,a]=B.useState(13),[h,l]=B.useState(null),[_,g]=B.useState(!0),[f,v]=B.useState(null),m=x.filter(G=>{if(c.selectedForests&&c.selectedForests.length>0){const tt=G.id<=4?1:2;if(!c.selectedForests.includes(tt))return!1}if(c.dateRange){const tt=new Date(2023,G.id%12,G.id%28+1);if(ttc.dateRange.endDate)return!1}return!0}),k=B.useCallback(G=>{l(G),w&&w(G)},[w]),C=B.useCallback(G=>{a(G)},[]),F=B.useCallback(()=>{g(!1),v(null)},[]),O=B.useCallback(G=>{g(!1),v((G==null?void 0:G.message)||"Failed to load map")},[]),j=B.useCallback(()=>{g(!0),v(null),setTimeout(()=>{g(!1)},1e3)},[]),V=B.useCallback(()=>{if(m.length===0)return;const G=m.reduce((Ot,Nt)=>Ot+Nt.lat,0),tt=m.reduce((Ot,Nt)=>Ot+Nt.lng,0),Lt=G/m.length,le=tt/m.length;console.log("Center map at:",Lt,le)},[m]),dt=B.useCallback(()=>{if(m.length===0)return;const G=m.reduce((tt,Lt)=>({minLat:Math.min(tt.minLat,Lt.lat),maxLat:Math.max(tt.maxLat,Lt.lat),minLng:Math.min(tt.minLng,Lt.lng),maxLng:Math.max(tt.maxLng,Lt.lng)}),{minLat:m[0].lat,maxLat:m[0].lat,minLng:m[0].lng,maxLng:m[0].lng});console.log("Fit bounds:",G)},[m]);return M.jsxs("div",{children:[M.jsxs(tr,{children:[M.jsx(MapTitle,{children:"Forest Map"}),M.jsxs(MapControls,{children:[M.jsx(ControlButton,{onClick:V,title:"Center Map",children:M.jsxs("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]})}),M.jsx(ControlButton,{onClick:dt,title:"Fit to Bounds",children:M.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})})})]})]}),M.jsxs(qs,{children:[M.jsxs(Zs,{center:[59.3293,18.0686],zoom:13,style:{height:"100%",width:"100%"},children:[M.jsx(Is,{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",attribution:'© OpenStreetMap contributors'}),M.jsx(Us,{onMapReady:F,onMapError:O}),M.jsx(Vs,{onZoomChange:C}),M.jsx(Ws,{trees:m,onTreeClick:k,zoom:s})]}),(_||b)&&M.jsx(Xs,{children:M.jsxs("div",{className:"text-center",children:[M.jsx(ls,{}),M.jsx("p",{className:"mt-2 text-sm text-gray-600",children:"Loading map..."})]})}),(f||P)&&M.jsx(Js,{children:M.jsxs(Qs,{children:[M.jsx("svg",{className:"w-12 h-12 text-red-500 mx-auto mb-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),M.jsx("h4",{className:"text-lg font-semibold text-gray-900 mb-2",children:"Map Error"}),M.jsx("p",{className:"text-sm text-gray-600 mb-4",children:f||P}),M.jsx("button",{onClick:j,className:"px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors text-sm",children:"Retry"})]})})]}),M.jsxs("div",{className:"mt-4 p-4 bg-white rounded-lg border border-gray-200",children:[M.jsx("h4",{className:"font-medium text-gray-900 mb-2",children:"Legend"}),M.jsxs("div",{className:"flex flex-wrap gap-4 text-sm",children:[M.jsxs("div",{className:"flex items-center",children:[M.jsx("div",{className:"w-4 h-4 bg-green-500 rounded-full mr-2"}),M.jsx("span",{children:"Healthy Trees"})]}),M.jsxs("div",{className:"flex items-center",children:[M.jsx("div",{className:"w-4 h-4 bg-yellow-500 rounded-full mr-2"}),M.jsx("span",{children:"Warning"})]}),M.jsxs("div",{className:"flex items-center",children:[M.jsx("div",{className:"w-4 h-4 bg-red-500 rounded-full mr-2"}),M.jsx("span",{children:"Critical"})]}),M.jsx("div",{className:"flex items-center text-gray-500",children:M.jsxs("span",{children:["Showing ",m.length," of ",x.length," trees"]})}),M.jsxs("div",{className:"flex items-center text-gray-500",children:[M.jsxs("span",{children:["Zoom level: ",s]}),s<12&&M.jsx("span",{className:"ml-4 text-xs",children:"(Clustering enabled)"})]})]})]})]})},ir=()=>{const[x,w]=B.useState({}),c=B.useCallback(P=>{w(P),console.log("Map filters changed:",P)},[]),b=B.useCallback(()=>{w({})},[]);return{filters:x,handleFiltersChange:c,resetFilters:b}},nr=()=>{const[x,w]=B.useState(null),[c,b]=B.useState(!1),P=B.useCallback(h=>{w(h),b(!0)},[]),s=B.useCallback(()=>{w(null),b(!1)},[]),a=B.useCallback(()=>{w(null),b(!1)},[]);return{selectedTree:x,isModalOpen:c,handleTreeSelect:P,handleCloseTreeDetail:s,clearSelection:a}},or=yt.div` + min-height: 100vh; + background-color: #f9fafb; +`,sr=yt.main` + margin-left: 250px; + padding: 2rem; +`,rr=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],_r=()=>{const{filters:x,handleFiltersChange:w}=ir(),{selectedTree:c,isModalOpen:b,handleTreeSelect:P,handleCloseTreeDetail:s}=nr(),a=()=>{console.log("Export started")},h=(_,g)=>{console.log(`Export completed: ${_} with ${g} records`)},l=_=>{console.error("Export error:",_)};return M.jsxs(or,{children:[M.jsx(fs,{}),M.jsx(_s,{}),M.jsx(sr,{children:M.jsxs("div",{className:"max-w-7xl mx-auto",children:[M.jsx(gs,{filters:x,onExportStart:a,onExportComplete:h,onExportError:l,mockTreeData:rr}),M.jsx(ds,{onFiltersChange:w}),M.jsx(ps,{tree:c,isOpen:b,onClose:s}),M.jsx(er,{onTreeSelect:P,filters:x})]})})]})};export{_r as MapPage}; diff --git a/frontend/dist/assets/MapSidebar-yNxbJbqT.js b/frontend/dist/assets/MapSidebar-yNxbJbqT.js new file mode 100644 index 0000000000..16e37da8d5 --- /dev/null +++ b/frontend/dist/assets/MapSidebar-yNxbJbqT.js @@ -0,0 +1,194 @@ +import{r as x,j as e,d as t,p as f,L as j,u}from"./index-DJ39NcK9.js";import{u as k}from"./useKeyboardNavigation-C5b08Ak3.js";import{b as g,c as i,d as l,T as v}from"./Table-BCdM5JW5.js";const w=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],y=(r,n)=>{const[o,s]=x.useState([]);return x.useEffect(()=>{r&&n&&s(w)},[r,n]),o},L=r=>x.useCallback(()=>{r&&(navigator.share?navigator.share({title:`Tree Details - ${r.name}`,text:`Check out this tree: ${r.name} (${r.species})`,url:window.location.href}):(navigator.clipboard.writeText(window.location.href),alert("Tree URL copied to clipboard!")))},[r]),M=t.div` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + padding: 1rem; +`,C=t.div` + background: white; + border-radius: 0.75rem; + max-width: 800px; + width: 100%; + max-height: 90vh; + overflow-y: auto; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + position: relative; +`,N=t.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 1.5rem; + border-bottom: 1px solid #e5e7eb; + background: #f9fafb; + border-radius: 0.75rem 0.75rem 0 0; +`,H=t.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`,T=t.button` + padding: 0.5rem; + background: transparent; + border: none; + border-radius: 0.375rem; + cursor: pointer; + color: #6b7280; + transition: all 0.2s; + + &:hover { + background: #f3f4f6; + color: #111827; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,I=t.div` + padding: 1.5rem; +`,z=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),B=({isOpen:r,onClose:n,title:o,children:s,containerRef:d})=>{const c=m=>{m.target===m.currentTarget&&n()};return r?e.jsx(M,{onClick:c,children:e.jsxs(C,{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":"modal-title",children:[e.jsxs(N,{children:[e.jsx(H,{id:"modal-title",children:o}),e.jsx(T,{onClick:n,"aria-label":"Close modal",children:e.jsx(z,{})})]}),e.jsx(I,{children:s})]})}):null},S=t.div` + background: #f9fafb; + border-radius: 0.75rem; + padding: 1.5rem; + border: 1px solid #e5e7eb; +`,V=t.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`,W=t.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.5rem 0; + border-bottom: 1px solid #e5e7eb; + + &:last-child { + border-bottom: none; + } +`,D=t.span` + color: #6b7280; + font-size: 0.875rem; +`,A=t.span` + font-weight: 500; + color: #111827; + font-size: 0.875rem; +`,p=({title:r,children:n})=>e.jsxs(S,{children:[e.jsx(V,{children:r}),n]}),a=({label:r,children:n})=>e.jsxs(W,{children:[e.jsxs(D,{children:[r,":"]}),e.jsx(A,{children:n})]}),P=t.span` + padding: 0.25rem 0.75rem; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + + ${r=>{switch(r.health){case"healthy":return"background: #d1fae5; color: #065f46;";case"warning":return"background: #fef3c7; color: #92400e;";case"critical":return"background: #fee2e2; color: #991b1b;";default:return"background: #f3f4f6; color: #374151;"}}} +`,b=({health:r,children:n})=>e.jsx(P,{health:r,children:n||r}),E=({tree:r})=>e.jsxs(p,{title:"Basic Information",children:[e.jsx(a,{label:"Tree ID",children:r.name}),e.jsx(a,{label:"Species",children:r.species}),e.jsxs(a,{label:"Current Height",children:[r.height,"m"]}),e.jsx(a,{label:"Health Status",children:e.jsx(b,{health:r.health,children:r.health})}),e.jsx(a,{label:"Planted Date",children:"March 15, 2023"})]}),F=({tree:r})=>e.jsxs(p,{title:"Location & Contract",children:[e.jsx(a,{label:"Latitude",children:r.lat.toFixed(6)}),e.jsx(a,{label:"Longitude",children:r.lng.toFixed(6)}),e.jsxs(a,{label:"Forest",children:["Forest ",r.id<=4?"A":"B"]}),e.jsx(a,{label:"Contract Status",children:e.jsx("span",{className:"px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs",children:"Active"})}),e.jsx(a,{label:"Last Inspection",children:"Jan 15, 2024"})]}),$=t.div` + margin-bottom: 2rem; +`,G=t.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`,R=t(v)` + background: white; + border-radius: 0.5rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +`,J=t.thead` + background: #f3f4f6; +`,K=({measurementHistory:r})=>e.jsxs($,{children:[e.jsx(G,{children:"Measurement History (Last 10 Entries)"}),e.jsxs(R,{children:[e.jsx(J,{children:e.jsxs(g,{children:[e.jsx(i,{children:"Date"}),e.jsx(i,{children:"Height (m)"}),e.jsx(i,{children:"Diameter (cm)"}),e.jsx(i,{children:"Health"})]})}),e.jsx("tbody",{children:r.slice(0,10).map((n,o)=>e.jsxs(g,{children:[e.jsx(l,{children:f(n.date)}),e.jsx(l,{children:n.height}),e.jsx(l,{children:n.diameter}),e.jsx(l,{children:e.jsx(b,{health:n.health,children:n.health})})]},o))})]})]}),U=t.div` + display: grid; + grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + gap: 1rem; + margin-top: 1rem; +`,q=t.div` + background: #f9fafb; + border-radius: 0.5rem; + padding: 1rem; + text-align: center; + border: 1px solid #e5e7eb; +`,O=t.div` + width: 100%; + height: 100px; + background: #e5e7eb; + border-radius: 0.5rem; + display: flex; + align-items: center; + justify-content: center; + color: #6b7280; + font-size: 0.875rem; + margin-bottom: 0.5rem; +`,Q=()=>e.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"})}),h=({caption:r})=>e.jsxs(q,{children:[e.jsx(O,{children:e.jsx(Q,{})}),e.jsx("div",{className:"text-xs text-gray-600",children:r})]}),X=()=>e.jsxs(U,{children:[e.jsx(h,{caption:"Latest Photo"}),e.jsx(h,{caption:"Growth Progress"}),e.jsx(h,{caption:"Planting Day"})]}),Y=t.button` + padding: 0.75rem 1.5rem; + background: #10b981; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #059669; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,Z=t(j)` + padding: 0.75rem 1.5rem; + background: #3b82f6; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + text-decoration: none; + display: inline-flex; + align-items: center; + gap: 0.5rem; + transition: all 0.2s; + + &:hover { + background: #2563eb; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); + } +`,_=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"})}),ee=()=>e.jsx("svg",{className:"w-4 h-4 mr-2 inline",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z"})}),re=({tree:r,onShare:n})=>e.jsxs("div",{className:"flex justify-end space-x-3",children:[e.jsxs(Z,{to:`/tree/${r.id}`,children:[e.jsx(_,{}),"View Full Page"]}),e.jsxs(Y,{onClick:n,children:[e.jsx(ee,{}),"Share Tree"]})]}),te=t.div` + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + margin-bottom: 2rem; + + @media (min-width: 768px) { + grid-template-columns: 1fr 1fr; + } +`,ne=t.div` + margin-bottom: 2rem; +`,oe=t.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`,ce=({tree:r,isOpen:n,onClose:o})=>{const{containerRef:s}=k({onEscape:o,trapFocus:!0,autoFocus:!0}),d=y(r,n),c=L(r);return r?e.jsxs(B,{isOpen:n,onClose:o,title:r.name,containerRef:s,children:[e.jsxs(te,{children:[e.jsx(E,{tree:r}),e.jsx(F,{tree:r})]}),e.jsx(K,{measurementHistory:d}),e.jsxs(ne,{children:[e.jsx(oe,{children:"Tree Images"}),e.jsx(X,{})]}),e.jsx(re,{tree:r,onShare:c})]}):null},ae=t.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`,he=()=>{const{user:r,logout:n,isAdmin:o}=u(),s=async()=>{await n()};return e.jsx(ae,{children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx("div",{className:"flex items-center",children:e.jsx("h1",{className:"text-2xl font-bold text-green-600",children:"Nanwa Map View"})}),e.jsxs("div",{className:"flex items-center space-x-4",children:[e.jsxs("div",{className:"text-sm text-gray-700",children:["Welcome, ",e.jsx("span",{className:"font-medium",children:r==null?void 0:r.name}),o()&&e.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 text-red-800 text-xs rounded-full",children:"Admin"})]}),e.jsx("button",{onClick:s,className:"text-gray-700 hover:text-green-600 transition-colors",children:e.jsx("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})})})]})]})})})},se=t.aside` + background: white; + border-right: 1px solid #e5e7eb; + width: 250px; + position: fixed; + top: 0; + left: 0; + height: 100vh; + overflow-y: auto; + z-index: 10; +`,xe=()=>{const{isAdmin:r}=u();return e.jsx(se,{children:e.jsx("div",{className:"p-6",children:e.jsxs("nav",{className:"space-y-2",children:[e.jsxs("a",{href:"/dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[e.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),e.jsxs("a",{href:"#map",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 bg-green-50 rounded-lg",children:[e.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),e.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[e.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),r()&&e.jsxs("a",{href:"#audit",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[e.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})})};export{b as H,he as M,ce as T,xe as a,L as u}; diff --git a/frontend/dist/assets/Navbar-DOE0P8dm.js b/frontend/dist/assets/Navbar-DOE0P8dm.js new file mode 100644 index 0000000000..8bf51f697c --- /dev/null +++ b/frontend/dist/assets/Navbar-DOE0P8dm.js @@ -0,0 +1 @@ +import{j as e,L as o,r as n}from"./index-DJ39NcK9.js";import{u as g}from"./useKeyboardNavigation-C5b08Ak3.js";import{D as l}from"./DarkModeToggle-sLchHfDj.js";import{I as m}from"./IconButton-DIc-CK1Q.js";const h=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})}),f=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),p=({className:r=""})=>e.jsx(o,{to:"/",className:`text-2xl font-extrabold text-green-600 dark:text-green-400 tracking-tight ${r}`,children:"Nanwa"}),c=()=>{const r="text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 transition-colors px-4 py-2 text-base font-medium";return e.jsxs(e.Fragment,{children:[e.jsx("a",{href:"#features",className:r,children:"Features"}),e.jsx("a",{href:"#about",className:r,children:"About"}),e.jsx(o,{to:"/login",className:r,children:"Login"}),e.jsx(o,{to:"/register",className:"ml-2 bg-green-600 dark:bg-green-500 text-white px-4 py-2 rounded-lg hover:bg-green-700 dark:hover:bg-green-600 transition-colors text-base font-medium",children:"Get Started"})]})},j=({isOpen:r})=>r?e.jsx("div",{className:"md:hidden border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-4 pb-4 space-y-1",children:e.jsx(c,{})}):null,N=()=>{const[r,t]=n.useState(!1),a=n.useRef(null),{containerRef:x,focusFirst:i}=g({onEscape:()=>t(!1),trapFocus:r,autoFocus:!1}),d=()=>{t(!r)};n.useEffect(()=>{setTimeout(r?()=>{i()}:()=>{var s;(s=a.current)==null||s.focus()},100)},[r,i]);const u=s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d())};return e.jsxs("nav",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm border-b border-gray-200 dark:border-gray-700",children:[e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center h-16",children:[e.jsx(p,{}),e.jsxs("div",{className:"hidden md:flex items-center gap-4",children:[e.jsx(c,{}),e.jsx(l,{size:"sm"})]}),e.jsxs("div",{className:"md:hidden flex items-center gap-2",children:[e.jsx(l,{size:"sm"}),e.jsx(m,{ref:a,"aria-label":"Toggle menu",className:"text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400",onClick:d,onKeyDown:u,children:r?e.jsx(f,{className:"h-6 w-6"}):e.jsx(h,{className:"h-6 w-6"})})]})]})}),e.jsx("div",{ref:x,children:e.jsx(j,{isOpen:r})})]})};export{N}; diff --git a/frontend/dist/assets/PasswordInput-dcNbels6.js b/frontend/dist/assets/PasswordInput-dcNbels6.js new file mode 100644 index 0000000000..7c95a5de35 --- /dev/null +++ b/frontend/dist/assets/PasswordInput-dcNbels6.js @@ -0,0 +1 @@ +import{j as e,r as u}from"./index-DJ39NcK9.js";const j=({label:r,id:s,error:t,required:a=!1,children:n,className:d=""})=>e.jsxs("div",{className:d,children:[e.jsxs("label",{htmlFor:s,className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[r,a&&e.jsx("span",{className:"text-red-500 ml-1",children:"*"})]}),n,t&&e.jsx("p",{id:`${s}-error`,className:"mt-1 text-sm text-red-600 dark:text-red-400",children:t})]}),y=({id:r,name:s,value:t,onChange:a,onBlur:n,className:d="",placeholder:c="",disabled:i=!1,error:l="",...x})=>{const[o,p]=u.useState(!1),h=()=>{p(!o)};return e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:o?"text":"password",id:r,name:s,value:t,onChange:a,onBlur:n,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${l?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"} ${d}`,placeholder:c,disabled:i,"aria-describedby":l?`${r}-error`:void 0,...x}),e.jsx("button",{type:"button",onClick:h,className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:i,"aria-label":o?"Hide password":"Show password",children:o?e.jsx(g,{className:"h-5 w-5 text-gray-400"}):e.jsx(m,{className:"h-5 w-5 text-gray-400"})})]})},m=({className:r})=>e.jsxs("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]}),g=({className:r})=>e.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})});export{j as F,y as P}; diff --git a/frontend/dist/assets/RegisterPage-C1DYj1NC.js b/frontend/dist/assets/RegisterPage-C1DYj1NC.js new file mode 100644 index 0000000000..b674402ee2 --- /dev/null +++ b/frontend/dist/assets/RegisterPage-C1DYj1NC.js @@ -0,0 +1,27 @@ +import{j as r,d as c,r as l,u as b,L as x}from"./index-DJ39NcK9.js";import{F as u,P as h}from"./PasswordInput-dcNbels6.js";import"./vendor-BtP0CW_r.js";const j=c.div` + width: 100%; + height: 4px; + background-color: #e5e7eb; + border-radius: 2px; + overflow: hidden; + margin-top: 0.5rem; +`,y=c.div` + height: 100%; + background-color: ${e=>e.strength==="weak"?"#ef4444":e.strength==="medium"?"#f59e0b":e.strength==="strong"?"#10b981":"#e5e7eb"}; + width: ${e=>e.strength==="weak"?"33%":e.strength==="medium"?"66%":e.strength==="strong"?"100%":"0%"}; + transition: all 0.3s ease; +`,P=e=>{switch(e){case"weak":return"Weak password";case"medium":return"Medium strength password";case"strong":return"Strong password";default:return""}},v=({strength:e,show:s})=>s?r.jsxs("div",{className:"mt-2",children:[r.jsx(j,{children:r.jsx(y,{strength:e})}),r.jsx("p",{className:`text-xs mt-1 ${e==="weak"?"text-red-600":e==="medium"?"text-yellow-600":e==="strong"?"text-green-600":"text-gray-500"}`,children:P(e)})]}):null,N=e=>l.useMemo(()=>{if(!e)return{strength:"none",score:0};let s=0;return e.length>=8&&(s+=1),/[a-z]/.test(e)&&(s+=1),/[A-Z]/.test(e)&&(s+=1),/[0-9]/.test(e)&&(s+=1),/[^A-Za-z0-9]/.test(e)&&(s+=1),s<=2?{strength:"weak",score:s}:s<=3?{strength:"medium",score:s}:{strength:"strong",score:s}},[e]),S=()=>{const[e,s]=l.useState({email:"",password:"",confirmPassword:""}),[a,o]=l.useState({}),[i,d]=l.useState(!1),{register:f}=b(),g=N(e.password),w=()=>{const t={};return e.email?/\S+@\S+\.\S+/.test(e.email)||(t.email="Email is invalid"):t.email="Email is required",e.password?e.password.length<6?t.password="Password must be at least 6 characters":g.strength==="weak"&&(t.password="Password is too weak. Include uppercase, lowercase, numbers, and special characters."):t.password="Password is required",e.confirmPassword?e.password!==e.confirmPassword&&(t.confirmPassword="Passwords do not match"):t.confirmPassword="Please confirm your password",o(t),Object.keys(t).length===0};return{formData:e,errors:a,isSubmitting:i,passwordStrength:g,handleInputChange:t=>{const{name:n,value:p}=t.target;s(m=>({...m,[n]:p})),a[n]&&o(m=>({...m,[n]:""}))},handleSubmit:async t=>{if(t.preventDefault(),!!w()){d(!0);try{const n=await f(e.email,e.password,e.confirmPassword);n.success||o({general:n.error})}catch{o({general:"An unexpected error occurred. Please try again."})}finally{d(!1)}}}}},k=()=>{const{formData:e,errors:s,isSubmitting:a,passwordStrength:o,handleInputChange:i,handleSubmit:d}=S();return r.jsxs("form",{onSubmit:d,className:"space-y-6",children:[s.general&&r.jsx("div",{className:"bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded-lg",children:s.general}),r.jsx(u,{label:"Email address",id:"email",error:s.email,required:!0,children:r.jsx("input",{type:"email",id:"email",name:"email",value:e.email,onChange:i,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${s.email?"border-red-300":"border-gray-300"}`,placeholder:"Enter your email",disabled:a})}),r.jsxs(u,{label:"Password",id:"password",error:s.password,required:!0,children:[r.jsx(h,{id:"password",name:"password",value:e.password,onChange:i,error:s.password,placeholder:"Create a strong password",disabled:a}),r.jsx(v,{strength:o.strength,show:e.password.length>0})]}),r.jsx(u,{label:"Confirm password",id:"confirmPassword",error:s.confirmPassword,required:!0,children:r.jsx(h,{id:"confirmPassword",name:"confirmPassword",value:e.confirmPassword,onChange:i,error:s.confirmPassword,placeholder:"Confirm your password",disabled:a})}),r.jsx(C,{disabled:a}),r.jsx(F,{isSubmitting:a}),r.jsx(I,{})]})},C=({disabled:e})=>r.jsxs("div",{className:"flex items-center",children:[r.jsx("input",{id:"terms",name:"terms",type:"checkbox",required:!0,className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 rounded",disabled:e}),r.jsxs("label",{htmlFor:"terms",className:"ml-2 block text-sm text-gray-900",children:["I agree to the"," ",r.jsx("a",{href:"#",className:"font-medium text-green-600 hover:text-green-500",children:"Terms of Service"})," ","and"," ",r.jsx("a",{href:"#",className:"font-medium text-green-600 hover:text-green-500",children:"Privacy Policy"})]})]}),F=({isSubmitting:e})=>r.jsx("button",{type:"submit",disabled:e,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:e?r.jsxs("div",{className:"flex items-center",children:[r.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[r.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),r.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Creating account..."]}):"Create account"}),I=()=>r.jsx("div",{className:"text-center",children:r.jsxs("p",{className:"text-sm text-gray-600",children:["Already have an account?"," ",r.jsx(x,{to:"/login",className:"font-medium text-green-600 hover:text-green-500",children:"Sign in"})]})}),E=c.div` + min-height: 100vh; + background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%); + display: flex; + align-items: center; + justify-content: center; + padding: 1rem; +`,R=c.div` + background: white; + border-radius: 1rem; + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + padding: 2rem; + width: 100%; + max-width: 450px; +`,M=()=>r.jsx(E,{children:r.jsxs(R,{children:[r.jsx(q,{}),r.jsx(k,{})]})}),q=()=>r.jsxs("div",{className:"text-center mb-8",children:[r.jsx(x,{to:"/",className:"inline-block mb-6",children:r.jsx("h1",{className:"text-3xl font-bold text-green-600",children:"Nanwa"})}),r.jsx("h2",{className:"text-2xl font-bold text-gray-900 mb-2",children:"Create your account"}),r.jsx("p",{className:"text-gray-600",children:"Join Nanwa to start monitoring your trees"})]});export{M as RegisterPage}; diff --git a/frontend/dist/assets/Table-BCdM5JW5.js b/frontend/dist/assets/Table-BCdM5JW5.js new file mode 100644 index 0000000000..a07b6c4a96 --- /dev/null +++ b/frontend/dist/assets/Table-BCdM5JW5.js @@ -0,0 +1,69 @@ +import{d as r}from"./index-DJ39NcK9.js";const e=()=>{const o=document.documentElement.classList.contains("dark");return{containerBg:o?"#1f2937":"#ffffff",containerBorder:o?"#374151":"#e5e7eb",containerShadow:o?"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)":"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",headerBg:o?"#374151":"#f9fafb",headerBorder:o?"#4b5563":"#e5e7eb",headerText:o?"#f9fafb":"#111827",cellText:o?"#e5e7eb":"#111827",cellBorder:o?"#4b5563":"#f3f4f6",cellHover:o?"#374151":"#f9fafb",cellHeaderText:o?"#d1d5db":"#374151",cellHeaderHover:o?"#4b5563":"#f3f4f6",mutedText:o?"#9ca3af":"#6b7280",sortIcon:o?"#6b7280":"#9ca3af"}},t=r.div` + background: ${()=>e().containerBg}; + border-radius: 0.75rem; + box-shadow: ${()=>e().containerShadow}; + border: 1px solid ${()=>e().containerBorder}; + overflow: hidden; + transition: background-color 0.2s ease, border-color 0.2s ease; +`,n=r.div` + background: ${()=>e().headerBg}; + padding: 1.5rem; + border-bottom: 1px solid ${()=>e().headerBorder}; + display: flex; + justify-content: space-between; + align-items: center; + transition: background-color 0.2s ease, border-color 0.2s ease; +`,s=r.h3` + font-size: 1.125rem; + font-weight: 600; + color: ${()=>e().headerText}; + margin: 0; + transition: color 0.2s ease; +`,d=r.table` + width: 100%; + border-collapse: collapse; +`,c=r.thead` + background: ${()=>e().headerBg}; + border-bottom: 1px solid ${()=>e().headerBorder}; + transition: background-color 0.2s ease, border-color 0.2s ease; +`,l=r.tr` + border-bottom: 1px solid ${()=>e().cellBorder}; + transition: background-color 0.2s ease, border-color 0.2s ease; + + &:hover { + background: ${()=>e().cellHover}; + } + + &:last-child { + border-bottom: none; + } +`,i=r.th` + padding: 0.75rem 1rem; + text-align: left; + font-size: 0.875rem; + font-weight: 600; + color: ${()=>e().cellHeaderText}; + cursor: pointer; + user-select: none; + transition: background-color 0.2s ease, color 0.2s ease; + + &:hover { + background: ${()=>e().cellHeaderHover}; + } +`,b=r.td` + padding: 0.75rem 1rem; + font-size: 0.875rem; + color: ${()=>e().cellText}; + vertical-align: top; + transition: color 0.2s ease; +`,f=r.div` + text-align: center; + padding: 3rem; + color: ${()=>e().mutedText}; + transition: color 0.2s ease; +`,g=r.span` + margin-left: 0.5rem; + font-size: 0.75rem; + color: ${()=>e().sortIcon}; + transition: color 0.2s ease; +`;export{f as E,g as S,d as T,c as a,l as b,i as c,b as d,t as e,n as f,s as g}; diff --git a/frontend/dist/assets/TreeDetailLayout-CKxWzGm5.js b/frontend/dist/assets/TreeDetailLayout-CKxWzGm5.js new file mode 100644 index 0000000000..d1a942e605 --- /dev/null +++ b/frontend/dist/assets/TreeDetailLayout-CKxWzGm5.js @@ -0,0 +1,187 @@ +import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-DJ39NcK9.js";import{H as k}from"./MapSidebar-yNxbJbqT.js";const I=w.forwardRef(({loading:n,loadingText:o="Loading...",children:i,...m},g)=>e.jsx(v,{ref:g,loading:n,...m,children:n?o:i}));I.displayName="LoadingButton";const T=({className:n="",...o})=>e.jsx("svg",{className:n,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 12H5M12 19l-7-7 7-7"})}),y=r.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`,z=r.div` + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; + display: flex; + justify-content: space-between; + align-items: center; +`,H=r.nav` + display: flex; + align-items: center; + gap: 1rem; +`,b=r.button` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #f3f4f6; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + color: #374151; + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #e5e7eb; + border-color: #9ca3af; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +`,B=r(C)` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #10b981; + color: white; + text-decoration: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + transition: all 0.2s; + + &:hover { + background: #059669; + } +`,M=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})}),S=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})}),D=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z"})}),J=({onPrevious:n,onNext:o,onShare:i,hasPrevious:m,hasNext:g})=>e.jsx(y,{children:e.jsxs(z,{children:[e.jsxs(B,{to:"/map",children:[e.jsx(T,{}),"Back to Map"]}),e.jsxs(H,{children:[e.jsxs(b,{onClick:n,disabled:!m,children:[e.jsx(M,{}),"Previous"]}),e.jsxs(b,{onClick:o,disabled:!g,children:["Next",e.jsx(S,{})]}),e.jsxs(b,{onClick:i,children:[e.jsx(D,{}),"Share"]})]})]})}),N=r.div` + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + margin-bottom: 1.5rem; +`,s=r.div` + padding: 1rem; + background: #f9fafb; + border-radius: 0.5rem; + border: 1px solid #e5e7eb; +`,t=r.div` + font-size: 0.875rem; + color: #6b7280; + margin-bottom: 0.5rem; +`,d=r.div` + font-size: 1.125rem; + font-weight: 600; + color: #111827; +`,$=r.h2` + font-size: 1.5rem; + font-weight: 600; + color: #111827; + margin: 0 0 1.5rem 0; +`,R=r.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`,q=({tree:n})=>e.jsxs(R,{children:[e.jsx($,{children:"Tree Information"}),e.jsxs(N,{children:[e.jsxs(s,{children:[e.jsx(t,{children:"Current Height"}),e.jsxs(d,{children:[n.height,"m"]})]}),e.jsxs(s,{children:[e.jsx(t,{children:"Health Status"}),e.jsx(d,{children:e.jsx(k,{health:n.health,children:n.health})})]}),e.jsxs(s,{children:[e.jsx(t,{children:"Species"}),e.jsx(d,{children:n.species})]}),e.jsxs(s,{children:[e.jsx(t,{children:"Planted Date"}),e.jsx(d,{children:"Mar 15, 2023"})]})]})]}),P=r.div` + display: flex; + flex-direction: column; + gap: 2rem; +`,p=r.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`,f=r.h2` + font-size: 1.5rem; + font-weight: 600; + color: #111827; + margin: 0 0 1.5rem 0; +`,j=r.div` + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + margin-bottom: 1.5rem; +`,a=r.div` + padding: 1rem; + background: #f9fafb; + border-radius: 0.5rem; + border: 1px solid #e5e7eb; +`,l=r.div` + font-size: 0.875rem; + color: #6b7280; + margin-bottom: 0.5rem; +`,c=r.div` + font-size: 1.125rem; + font-weight: 600; + color: #111827; +`,K=({tree:n})=>e.jsxs(P,{children:[e.jsxs(p,{children:[e.jsx(f,{children:"Location"}),e.jsxs(j,{children:[e.jsxs(a,{children:[e.jsx(l,{children:"Latitude"}),e.jsx(c,{children:n.lat.toFixed(6)})]}),e.jsxs(a,{children:[e.jsx(l,{children:"Longitude"}),e.jsx(c,{children:n.lng.toFixed(6)})]})]})]}),e.jsxs(p,{children:[e.jsx(f,{children:"Contract Details"}),e.jsxs(j,{children:[e.jsxs(a,{children:[e.jsx(l,{children:"Status"}),e.jsx(c,{children:e.jsx("span",{className:"px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs",children:"Active"})})]}),e.jsxs(a,{children:[e.jsx(l,{children:"Last Inspection"}),e.jsx(c,{children:"Jan 15, 2024"})]})]})]})]}),W=r.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`,A=r.h2` + font-size: 1.5rem; + font-weight: 600; + color: #111827; + margin: 0 0 1.5rem 0; +`,G=r.table` + width: 100%; + border-collapse: collapse; + margin-top: 1rem; +`,F=r.thead` + background: #f9fafb; +`,u=r.tr` + border-bottom: 1px solid #e5e7eb; + + &:last-child { + border-bottom: none; + } +`,h=r.td` + padding: 0.75rem; + text-align: left; + font-size: 0.875rem; + color: #111827; +`,x=r.th` + padding: 0.75rem; + text-align: left; + font-size: 0.875rem; + font-weight: 600; + color: #374151; +`,O=({measurements:n})=>e.jsxs(W,{children:[e.jsx(A,{children:"Measurement History"}),e.jsxs(G,{children:[e.jsx(F,{children:e.jsxs(u,{children:[e.jsx(x,{children:"Date"}),e.jsx(x,{children:"Height (m)"}),e.jsx(x,{children:"Diameter (cm)"}),e.jsx(x,{children:"Health"})]})}),e.jsx("tbody",{children:n.slice(0,10).map((o,i)=>e.jsxs(u,{children:[e.jsx(h,{children:L(o.date)}),e.jsx(h,{children:o.height}),e.jsx(h,{children:o.diameter}),e.jsx(h,{children:e.jsx(k,{health:o.health,children:o.health})})]},i))})]})]}),Q=r.div` + min-height: 100vh; + background-color: #f9fafb; +`,U=r.main` + max-width: 1200px; + margin: 0 auto; + padding: 2rem 1rem; +`,X=r.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + margin-bottom: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`,Y=r.h1` + font-size: 2.5rem; + font-weight: 700; + color: #111827; + margin: 0 0 1rem 0; +`,Z=r.p` + color: #6b7280; + font-size: 1.125rem; + margin: 0; +`,_=r.div` + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + + @media (min-width: 1024px) { + grid-template-columns: 2fr 1fr; + } +`,ee=r.div` + display: flex; + flex-direction: column; + gap: 2rem; +`;export{T as B,_ as C,U as M,Q as P,J as T,X as a,Y as b,Z as c,ee as d,q as e,O as f,K as g}; diff --git a/frontend/dist/assets/TreeDetailPage-D6Enxj1V.js b/frontend/dist/assets/TreeDetailPage-D6Enxj1V.js new file mode 100644 index 0000000000..5d63a09b41 --- /dev/null +++ b/frontend/dist/assets/TreeDetailPage-D6Enxj1V.js @@ -0,0 +1,8 @@ +import{r as n,a as f,m as j,u as P,j as e,g as S,d as v}from"./index-DJ39NcK9.js";import"./IconButton-DIc-CK1Q.js";import{P as g,T as x,M as T,a as y,b as N,c as b,C as A,d as D,e as M,f as k,g as w}from"./TreeDetailLayout-CKxWzGm5.js";import"./ExportButton-Y3IlBTFt.js";import"./FormElements-5NQybTAT.js";import"./Table-BCdM5JW5.js";import"./ChartComponents-BrntlwBm.js";import{u as C}from"./MapSidebar-yNxbJbqT.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-C5b08Ak3.js";const p=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],E=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],I=s=>{const[r,t]=n.useState(null),[a,h]=n.useState([]),[i,c]=n.useState(!0),[u,l]=n.useState(null);return n.useEffect(()=>{s&&(async()=>{try{c(!0),l(null),await new Promise(d=>setTimeout(d,500));const o=p.find(d=>d.id===parseInt(s));if(!o){l("Tree not found");return}t(o),h(E)}catch{l("Failed to load tree data")}finally{c(!1)}})()},[s]),{tree:r,measurements:a,loading:i,error:u,trees:p}},B=(s,r)=>{const t=f(),a=n.useMemo(()=>r.findIndex(l=>l.id===parseInt(s)),[r,s]),h=a>0,i=a{h&&t(`/tree/${r[a-1].id}`)},[t,r,a,h]),u=n.useCallback(()=>{i&&t(`/tree/${r[a+1].id}`)},[t,r,a,i]);return{hasPrevious:h,hasNext:i,handlePreviousTree:c,handleNextTree:u,currentIndex:a}},H=v.div` + background: #fee2e2; + color: #991b1b; + padding: 1rem; + border-radius: 0.5rem; + border: 1px solid #fecaca; + text-align: center; +`,Q=()=>{const{id:s}=j(),{user:r}=P(),{tree:t,measurements:a,loading:h,error:i,trees:c}=I(s),{hasPrevious:u,hasNext:l,handlePreviousTree:m,handleNextTree:o}=B(s,c),d=C(t);return h?e.jsxs(g,{children:[e.jsx(x,{onPrevious:m,onNext:o,onShare:d,hasPrevious:!1,hasNext:!1}),e.jsx(T,{children:e.jsx(S,{text:"Loading tree details..."})})]}):i||!t?e.jsxs(g,{children:[e.jsx(x,{onPrevious:m,onNext:o,onShare:d,hasPrevious:!1,hasNext:!1}),e.jsx(T,{children:e.jsx(H,{children:i||"Tree not found"})})]}):e.jsxs(g,{children:[e.jsx(x,{onPrevious:m,onNext:o,onShare:d,hasPrevious:u,hasNext:l}),e.jsxs(T,{children:[e.jsxs(y,{children:[e.jsx(N,{children:t.name}),e.jsxs(b,{children:[t.species," • Forest ",t.id<=4?"A":"B"]})]}),e.jsxs(A,{children:[e.jsxs(D,{children:[e.jsx(M,{tree:t}),e.jsx(k,{measurements:a})]}),e.jsx(w,{tree:t})]})]})]})};export{Q as TreeDetailPage}; diff --git a/frontend/dist/assets/index-BDpfdlnl.css b/frontend/dist/assets/index-BDpfdlnl.css new file mode 100644 index 0000000000..0e257a6243 --- /dev/null +++ b/frontend/dist/assets/index-BDpfdlnl.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}.dark{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}body{font-feature-settings:"rlig" 1,"calt" 1;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}body:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}*{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.\!container{width:100%!important}.container{width:100%}@media (min-width: 320px){.\!container{max-width:320px!important}.container{max-width:320px}}@media (min-width: 640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width: 768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width: 1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width: 1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width: 1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn:disabled{pointer-events:none;opacity:.5}.btn-primary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-secondary:disabled{pointer-events:none;opacity:.5}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(77 124 15 / var(--tw-bg-opacity, 1))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-outline:disabled{pointer-events:none;opacity:.5}.btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.btn-outline:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.btn-outline:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.btn-outline:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-700{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-20{padding-top:5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.skip-link{position:absolute;left:0;top:0;z-index:50;--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));padding:.5rem 1rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.skip-link:focus{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-offset-2:focus{outline-offset:2px}.focus\:outline-blue-500:focus{outline-color:#3b82f6}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-red-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-gray-100:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-green-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:from-gray-900:is(.dark *){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-600:is(.dark *){--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-green-800:is(.dark *){--tw-gradient-to: #166534 var(--tw-gradient-to-position)}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-green-700:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-gray-900\/50:is(.dark *){--tw-shadow-color: rgb(17 24 39 / .5);--tw-shadow: var(--tw-shadow-colored)}.dark\:hover\:bg-gray-100:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-200:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/30:hover:is(.dark *){background-color:#14532d4d}.dark\:hover\:bg-red-900\/30:hover:is(.dark *){background-color:#7f1d1d4d}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-700:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 768px){.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:sticky{position:sticky}.lg\:z-10{z-index:10}.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:hidden{display:none}.lg\:w-64{width:16rem}.lg\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:p-8{padding:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>svg\]\:opacity-70>svg{opacity:.7}@media (min-width: 768px){.md\:\[\&\>svg\]\:h-20>svg{height:5rem}.md\:\[\&\>svg\]\:w-20>svg{width:5rem}} diff --git a/frontend/dist/assets/index-BJRqtcJi.css b/frontend/dist/assets/index-BJRqtcJi.css deleted file mode 100644 index 0264354b76..0000000000 --- a/frontend/dist/assets/index-BJRqtcJi.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}.dark{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}body{font-feature-settings:"rlig" 1,"calt" 1}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn:disabled{pointer-events:none;opacity:.5}.btn-primary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-secondary:disabled{pointer-events:none;opacity:.5}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(77 124 15 / var(--tw-bg-opacity, 1))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-outline:disabled{pointer-events:none;opacity:.5}.btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.btn-outline:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.btn-outline:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.btn-outline:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.-ml-1{margin-left:-.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.min-h-screen{min-height:100vh}.w-12{width:3rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-t{border-top-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-20{padding-top:5rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.tracking-tight{letter-spacing:-.025em}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 768px){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width: 1024px){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}} diff --git a/frontend/dist/assets/index-CGuCVMO8.js b/frontend/dist/assets/index-CGuCVMO8.js deleted file mode 100644 index 1532a39b77..0000000000 --- a/frontend/dist/assets/index-CGuCVMO8.js +++ /dev/null @@ -1,113 +0,0 @@ -import{r as Xt,g as Zt,a as Qt}from"./vendor-BtP0CW_r.js";function Fr(e,t){for(var r=0;rn[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function r(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(a){if(a.ep)return;a.ep=!0;const o=r(a);fetch(a.href,o)}})();var Ze={exports:{}},me={};/** - * @license React - * react-jsx-runtime.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var St;function Ur(){if(St)return me;St=1;var e=Xt(),t=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,a=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function i(c,l,h){var u,d={},m=null,p=null;h!==void 0&&(m=""+h),l.key!==void 0&&(m=""+l.key),l.ref!==void 0&&(p=l.ref);for(u in l)n.call(l,u)&&!o.hasOwnProperty(u)&&(d[u]=l[u]);if(c&&c.defaultProps)for(u in l=c.defaultProps,l)d[u]===void 0&&(d[u]=l[u]);return{$$typeof:t,type:c,key:m,ref:p,props:d,_owner:a.current}}return me.Fragment=r,me.jsx=i,me.jsxs=i,me}var Ct;function Vr(){return Ct||(Ct=1,Ze.exports=Ur()),Ze.exports}var s=Vr(),f=Xt();const Z=Zt(f),qr=Fr({__proto__:null,default:Z},[f]);var Pe={},Pt;function Hr(){if(Pt)return Pe;Pt=1;var e=Qt();return Pe.createRoot=e.createRoot,Pe.hydrateRoot=e.hydrateRoot,Pe}var Gr=Hr();const Jr=Zt(Gr);Qt();/** - * @remix-run/router v1.23.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function xe(){return xe=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function er(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Kr(){return Math.random().toString(36).substr(2,8)}function Rt(e,t){return{usr:e.state,key:e.key,idx:t}}function st(e,t,r,n){return r===void 0&&(r=null),xe({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?ie(t):t,{state:r,key:t&&t.key||n||Kr()})}function Me(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function ie(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function Xr(e,t,r,n){n===void 0&&(n={});let{window:a=document.defaultView,v5Compat:o=!1}=n,i=a.history,c=V.Pop,l=null,h=u();h==null&&(h=0,i.replaceState(xe({},i.state,{idx:h}),""));function u(){return(i.state||{idx:null}).idx}function d(){c=V.Pop;let g=u(),x=g==null?null:g-h;h=g,l&&l({action:c,location:v.location,delta:x})}function m(g,x){c=V.Push;let y=st(v.location,g,x);h=u()+1;let w=Rt(y,h),N=v.createHref(y);try{i.pushState(w,"",N)}catch(P){if(P instanceof DOMException&&P.name==="DataCloneError")throw P;a.location.assign(N)}o&&l&&l({action:c,location:v.location,delta:1})}function p(g,x){c=V.Replace;let y=st(v.location,g,x);h=u();let w=Rt(y,h),N=v.createHref(y);i.replaceState(w,"",N),o&&l&&l({action:c,location:v.location,delta:0})}function b(g){let x=a.location.origin!=="null"?a.location.origin:a.location.href,y=typeof g=="string"?g:Me(g);return y=y.replace(/ $/,"%20"),R(x,"No window.location.(origin|href) available to create URL for href: "+y),new URL(y,x)}let v={get action(){return c},get location(){return e(a,i)},listen(g){if(l)throw new Error("A history only accepts one active listener");return a.addEventListener(Et,d),l=g,()=>{a.removeEventListener(Et,d),l=null}},createHref(g){return t(a,g)},createURL:b,encodeLocation(g){let x=b(g);return{pathname:x.pathname,search:x.search,hash:x.hash}},push:m,replace:p,go(g){return i.go(g)}};return v}var Lt;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Lt||(Lt={}));function Zr(e,t,r){return r===void 0&&(r="/"),Qr(e,t,r)}function Qr(e,t,r,n){let a=typeof t=="string"?ie(t):t,o=ft(a.pathname||"/",r);if(o==null)return null;let i=tr(e);en(i);let c=null;for(let l=0;c==null&&l{let l={relativePath:c===void 0?o.path||"":c,caseSensitive:o.caseSensitive===!0,childrenIndex:i,route:o};l.relativePath.startsWith("/")&&(R(l.relativePath.startsWith(n),'Absolute route path "'+l.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),l.relativePath=l.relativePath.slice(n.length));let h=q([n,l.relativePath]),u=r.concat(l);o.children&&o.children.length>0&&(R(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+h+'".')),tr(o.children,t,u,h)),!(o.path==null&&!o.index)&&t.push({path:h,score:ln(h,o.index),routesMeta:u})};return e.forEach((o,i)=>{var c;if(o.path===""||!((c=o.path)!=null&&c.includes("?")))a(o,i);else for(let l of rr(o.path))a(o,i,l)}),t}function rr(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,a=r.endsWith("?"),o=r.replace(/\?$/,"");if(n.length===0)return a?[o,""]:[o];let i=rr(n.join("/")),c=[];return c.push(...i.map(l=>l===""?o:[o,l].join("/"))),a&&c.push(...i),c.map(l=>e.startsWith("/")&&l===""?"/":l)}function en(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:cn(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const tn=/^:[\w-]+$/,rn=3,nn=2,sn=1,an=10,on=-2,It=e=>e==="*";function ln(e,t){let r=e.split("/"),n=r.length;return r.some(It)&&(n+=on),t&&(n+=nn),r.filter(a=>!It(a)).reduce((a,o)=>a+(tn.test(o)?rn:o===""?sn:an),n)}function cn(e,t){return e.length===t.length&&e.slice(0,-1).every((n,a)=>n===t[a])?e[e.length-1]-t[t.length-1]:0}function dn(e,t,r){let{routesMeta:n}=e,a={},o="/",i=[];for(let c=0;c{let{paramName:m,isOptional:p}=u;if(m==="*"){let v=c[d]||"";i=o.slice(0,o.length-v.length).replace(/(.)\/+$/,"$1")}const b=c[d];return p&&!b?h[m]=void 0:h[m]=(b||"").replace(/%2F/g,"/"),h},{}),pathname:o,pathnameBase:i,pattern:e}}function hn(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),er(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],a="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(i,c,l)=>(n.push({paramName:c,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),a+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?a+="\\/*$":e!==""&&e!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,t?void 0:"i"),n]}function mn(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return er(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function ft(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function fn(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:a=""}=typeof e=="string"?ie(e):e;return{pathname:r?r.startsWith("/")?r:pn(r,t):t,search:vn(n),hash:yn(a)}}function pn(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(a=>{a===".."?r.length>1&&r.pop():a!=="."&&r.push(a)}),r.length>1?r.join("/"):"/"}function Qe(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function gn(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function pt(e,t){let r=gn(e);return t?r.map((n,a)=>a===r.length-1?n.pathname:n.pathnameBase):r.map(n=>n.pathnameBase)}function gt(e,t,r,n){n===void 0&&(n=!1);let a;typeof e=="string"?a=ie(e):(a=xe({},e),R(!a.pathname||!a.pathname.includes("?"),Qe("?","pathname","search",a)),R(!a.pathname||!a.pathname.includes("#"),Qe("#","pathname","hash",a)),R(!a.search||!a.search.includes("#"),Qe("#","search","hash",a)));let o=e===""||a.pathname==="",i=o?"/":a.pathname,c;if(i==null)c=r;else{let d=t.length-1;if(!n&&i.startsWith("..")){let m=i.split("/");for(;m[0]==="..";)m.shift(),d-=1;a.pathname=m.join("/")}c=d>=0?t[d]:"/"}let l=fn(a,c),h=i&&i!=="/"&&i.endsWith("/"),u=(o||i===".")&&r.endsWith("/");return!l.pathname.endsWith("/")&&(h||u)&&(l.pathname+="/"),l}const q=e=>e.join("/").replace(/\/\/+/g,"/"),xn=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),vn=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,yn=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function bn(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const nr=["post","put","patch","delete"];new Set(nr);const wn=["get",...nr];new Set(wn);/** - * React Router v6.30.1 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function ve(){return ve=Object.assign?Object.assign.bind():function(e){for(var t=1;t{c.current=!0}),f.useCallback(function(h,u){if(u===void 0&&(u={}),!c.current)return;if(typeof h=="number"){n.go(h);return}let d=gt(h,JSON.parse(i),o,u.relative==="path");e==null&&t!=="/"&&(d.pathname=d.pathname==="/"?t:q([t,d.pathname])),(u.replace?n.replace:n.push)(d,u.state,u)},[t,n,i,o,e])}function or(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=f.useContext(H),{matches:a}=f.useContext(G),{pathname:o}=be(),i=JSON.stringify(pt(a,n.v7_relativeSplatPath));return f.useMemo(()=>gt(e,JSON.parse(i),o,r==="path"),[e,i,o,r])}function Sn(e,t){return Cn(e,t)}function Cn(e,t,r,n){le()||R(!1);let{navigator:a}=f.useContext(H),{matches:o}=f.useContext(G),i=o[o.length-1],c=i?i.params:{};i&&i.pathname;let l=i?i.pathnameBase:"/";i&&i.route;let h=be(),u;if(t){var d;let g=typeof t=="string"?ie(t):t;l==="/"||(d=g.pathname)!=null&&d.startsWith(l)||R(!1),u=g}else u=h;let m=u.pathname||"/",p=m;if(l!=="/"){let g=l.replace(/^\//,"").split("/");p="/"+m.replace(/^\//,"").split("/").slice(g.length).join("/")}let b=Zr(e,{pathname:p}),v=In(b&&b.map(g=>Object.assign({},g,{params:Object.assign({},c,g.params),pathname:q([l,a.encodeLocation?a.encodeLocation(g.pathname).pathname:g.pathname]),pathnameBase:g.pathnameBase==="/"?l:q([l,a.encodeLocation?a.encodeLocation(g.pathnameBase).pathname:g.pathnameBase])})),o,r,n);return t&&v?f.createElement(We.Provider,{value:{location:ve({pathname:"/",search:"",hash:"",state:null,key:"default"},u),navigationType:V.Pop}},v):v}function Pn(){let e=Mn(),t=bn(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,a={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},t),r?f.createElement("pre",{style:a},r):null,null)}const En=f.createElement(Pn,null);class Rn extends f.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?f.createElement(G.Provider,{value:this.props.routeContext},f.createElement(sr.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Ln(e){let{routeContext:t,match:r,children:n}=e,a=f.useContext(xt);return a&&a.static&&a.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=r.route.id),f.createElement(G.Provider,{value:t},n)}function In(e,t,r,n){var a;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var o;if(!r)return null;if(r.errors)e=r.matches;else if((o=n)!=null&&o.v7_partialHydration&&t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,c=(a=r)==null?void 0:a.errors;if(c!=null){let u=i.findIndex(d=>d.route.id&&(c==null?void 0:c[d.route.id])!==void 0);u>=0||R(!1),i=i.slice(0,Math.min(i.length,u+1))}let l=!1,h=-1;if(r&&n&&n.v7_partialHydration)for(let u=0;u=0?i=i.slice(0,h+1):i=[i[0]];break}}}return i.reduceRight((u,d,m)=>{let p,b=!1,v=null,g=null;r&&(p=c&&d.route.id?c[d.route.id]:void 0,v=d.route.errorElement||En,l&&(h<0&&m===0?(Tn("route-fallback"),b=!0,g=null):h===m&&(b=!0,g=d.route.hydrateFallbackElement||null)));let x=t.concat(i.slice(0,m+1)),y=()=>{let w;return p?w=v:b?w=g:d.route.Component?w=f.createElement(d.route.Component,null):d.route.element?w=d.route.element:w=u,f.createElement(Ln,{match:d,routeContext:{outlet:u,matches:x,isDataRoute:r!=null},children:w})};return r&&(d.route.ErrorBoundary||d.route.errorElement||m===0)?f.createElement(Rn,{location:r.location,revalidation:r.revalidation,component:v,error:p,children:y(),routeContext:{outlet:null,matches:x,isDataRoute:!0}}):y()},null)}var ir=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(ir||{}),lr=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(lr||{});function On(e){let t=f.useContext(xt);return t||R(!1),t}function An(e){let t=f.useContext(jn);return t||R(!1),t}function _n(e){let t=f.useContext(G);return t||R(!1),t}function cr(e){let t=_n(),r=t.matches[t.matches.length-1];return r.route.id||R(!1),r.route.id}function Mn(){var e;let t=f.useContext(sr),r=An(),n=cr();return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function $n(){let{router:e}=On(ir.UseNavigateStable),t=cr(lr.UseNavigateStable),r=f.useRef(!1);return ar(()=>{r.current=!0}),f.useCallback(function(a,o){o===void 0&&(o={}),r.current&&(typeof a=="number"?e.navigate(a):e.navigate(a,ve({fromRouteId:t},o)))},[e,t])}const Ot={};function Tn(e,t,r){Ot[e]||(Ot[e]=!0)}function Bn(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function Dn(e){let{to:t,replace:r,state:n,relative:a}=e;le()||R(!1);let{future:o,static:i}=f.useContext(H),{matches:c}=f.useContext(G),{pathname:l}=be(),h=ze(),u=gt(t,pt(c,o.v7_relativeSplatPath),l,a==="path"),d=JSON.stringify(u);return f.useEffect(()=>h(JSON.parse(d),{replace:r,state:n,relative:a}),[h,d,a,r,n]),null}function fe(e){R(!1)}function Wn(e){let{basename:t="/",children:r=null,location:n,navigationType:a=V.Pop,navigator:o,static:i=!1,future:c}=e;le()&&R(!1);let l=t.replace(/^\/*/,"/"),h=f.useMemo(()=>({basename:l,navigator:o,static:i,future:ve({v7_relativeSplatPath:!1},c)}),[l,c,o,i]);typeof n=="string"&&(n=ie(n));let{pathname:u="/",search:d="",hash:m="",state:p=null,key:b="default"}=n,v=f.useMemo(()=>{let g=ft(u,l);return g==null?null:{location:{pathname:g,search:d,hash:m,state:p,key:b},navigationType:a}},[l,u,d,m,p,b,a]);return v==null?null:f.createElement(H.Provider,{value:h},f.createElement(We.Provider,{children:r,value:v}))}function zn(e){let{children:t,location:r}=e;return Sn(at(t),r)}new Promise(()=>{});function at(e,t){t===void 0&&(t=[]);let r=[];return f.Children.forEach(e,(n,a)=>{if(!f.isValidElement(n))return;let o=[...t,a];if(n.type===f.Fragment){r.push.apply(r,at(n.props.children,o));return}n.type!==fe&&R(!1),!n.props.index||!n.props.children||R(!1);let i={id:n.props.id||o.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(i.children=at(n.props.children,o)),r.push(i)}),r}/** - * React Router DOM v6.30.1 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function ot(){return ot=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[a]=e[a]);return r}function Un(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Vn(e,t){return e.button===0&&(!t||t==="_self")&&!Un(e)}const qn=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],Hn="6";try{window.__reactRouterVersion=Hn}catch{}const Gn="startTransition",At=qr[Gn];function Jn(e){let{basename:t,children:r,future:n,window:a}=e,o=f.useRef();o.current==null&&(o.current=Yr({window:a,v5Compat:!0}));let i=o.current,[c,l]=f.useState({action:i.action,location:i.location}),{v7_startTransition:h}=n||{},u=f.useCallback(d=>{h&&At?At(()=>l(d)):l(d)},[l,h]);return f.useLayoutEffect(()=>i.listen(u),[i,u]),f.useEffect(()=>Bn(n),[n]),f.createElement(Wn,{basename:t,children:r,location:c.location,navigationType:c.action,navigator:i,future:n})}const Yn=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Kn=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,$=f.forwardRef(function(t,r){let{onClick:n,relative:a,reloadDocument:o,replace:i,state:c,target:l,to:h,preventScrollReset:u,viewTransition:d}=t,m=Fn(t,qn),{basename:p}=f.useContext(H),b,v=!1;if(typeof h=="string"&&Kn.test(h)&&(b=h,Yn))try{let w=new URL(window.location.href),N=h.startsWith("//")?new URL(w.protocol+h):new URL(h),P=ft(N.pathname,p);N.origin===w.origin&&P!=null?h=P+N.search+N.hash:v=!0}catch{}let g=Nn(h,{relative:a}),x=Xn(h,{replace:i,state:c,target:l,preventScrollReset:u,relative:a,viewTransition:d});function y(w){n&&n(w),w.defaultPrevented||x(w)}return f.createElement("a",ot({},m,{href:b||g,onClick:v||o?n:y,ref:r,target:l}))});var _t;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(_t||(_t={}));var Mt;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Mt||(Mt={}));function Xn(e,t){let{target:r,replace:n,state:a,preventScrollReset:o,relative:i,viewTransition:c}=t===void 0?{}:t,l=ze(),h=be(),u=or(e,{relative:i});return f.useCallback(d=>{if(Vn(d,r)){d.preventDefault();let m=n!==void 0?n:Me(h)===Me(u);l(e,{replace:m,state:a,preventScrollReset:o,relative:i,viewTransition:c})}},[h,l,u,n,a,r,e,o,i,c])}var O=function(){return O=Object.assign||function(t){for(var r,n=1,a=arguments.length;n0?I(ce,--M):0,ne--,L===10&&(ne=1,Ue--),L}function T(){return L=M2||lt(L)>3?"":" "}function is(e,t){for(;--t&&T()&&!(L<48||L>102||L>57&&L<65||L>70&&L<97););return qe(e,Ie()+(t<6&&K()==32&&T()==32))}function ct(e){for(;T();)switch(L){case e:return M;case 34:case 39:e!==34&&e!==39&&ct(L);break;case 40:e===41&&ct(e);break;case 92:T();break}return M}function ls(e,t){for(;T()&&e+L!==57;)if(e+L===84&&K()===47)break;return"/*"+qe(t,M-1)+"*"+yt(e===47?e:T())}function cs(e){for(;!lt(K());)T();return qe(e,M)}function ds(e){return as(Oe("",null,null,null,[""],e=ss(e),0,[0],e))}function Oe(e,t,r,n,a,o,i,c,l){for(var h=0,u=0,d=i,m=0,p=0,b=0,v=1,g=1,x=1,y=0,w="",N=a,P=o,C=n,k=w;g;)switch(b=y,y=T()){case 40:if(b!=108&&I(k,d-1)==58){Le(k+=j(et(y),"&","&\f"),"&\f",hr(h?c[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:k+=et(y);break;case 9:case 10:case 13:case 32:k+=os(b);break;case 92:k+=is(Ie()-1,7);continue;case 47:switch(K()){case 42:case 47:pe(us(ls(T(),Ie()),t,r,l),l);break;default:k+="/"}break;case 123*v:c[h++]=B(k)*x;case 125*v:case 59:case 0:switch(y){case 0:case 125:g=0;case 59+u:x==-1&&(k=j(k,/\f/g,"")),p>0&&B(k)-d&&pe(p>32?Bt(k+";",n,r,d-1,l):Bt(j(k," ","")+";",n,r,d-2,l),l);break;case 59:k+=";";default:if(pe(C=Tt(k,t,r,h,u,a,c,w,N=[],P=[],d,o),o),y===123)if(u===0)Oe(k,t,C,C,N,o,d,c,P);else switch(m===99&&I(k,3)===110?100:m){case 100:case 108:case 109:case 115:Oe(e,C,C,n&&pe(Tt(e,C,C,0,0,a,c,w,a,N=[],d,P),P),a,P,d,c,n?N:P);break;default:Oe(k,C,C,C,[""],P,0,c,P)}}h=u=p=0,v=x=1,w=k="",d=i;break;case 58:d=1+B(k),p=b;default:if(v<1){if(y==123)--v;else if(y==125&&v++==0&&ns()==125)continue}switch(k+=yt(y),y*v){case 38:x=u>0?1:(k+="\f",-1);break;case 44:c[h++]=(B(k)-1)*x,x=1;break;case 64:K()===45&&(k+=et(T())),m=K(),u=d=B(w=k+=cs(Ie())),y++;break;case 45:b===45&&B(k)==2&&(v=0)}}return o}function Tt(e,t,r,n,a,o,i,c,l,h,u,d){for(var m=a-1,p=a===0?o:[""],b=fr(p),v=0,g=0,x=0;v0?p[y]+" "+w:j(w,/&\f/g,p[y])))&&(l[x++]=N);return Ve(e,t,r,a===0?Fe:c,l,h,u,d)}function us(e,t,r,n){return Ve(e,t,r,dr,yt(rs()),re(e,2,-2),0,n)}function Bt(e,t,r,n,a){return Ve(e,t,r,vt,re(e,0,n),re(e,n+1,-1),n,a)}function gr(e,t,r){switch(es(e,t)){case 5103:return S+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return S+e+e;case 4789:return ge+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return S+e+ge+e+E+e+e;case 5936:switch(I(e,t+11)){case 114:return S+e+E+j(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return S+e+E+j(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return S+e+E+j(e,/[svh]\w+-[tblr]{2}/,"lr")+e}case 6828:case 4268:case 2903:return S+e+E+e+e;case 6165:return S+e+E+"flex-"+e+e;case 5187:return S+e+j(e,/(\w+).+(:[^]+)/,S+"box-$1$2"+E+"flex-$1$2")+e;case 5443:return S+e+E+"flex-item-"+j(e,/flex-|-self/g,"")+(W(e,/flex-|baseline/)?"":E+"grid-row-"+j(e,/flex-|-self/g,""))+e;case 4675:return S+e+E+"flex-line-pack"+j(e,/align-content|flex-|-self/g,"")+e;case 5548:return S+e+E+j(e,"shrink","negative")+e;case 5292:return S+e+E+j(e,"basis","preferred-size")+e;case 6060:return S+"box-"+j(e,"-grow","")+S+e+E+j(e,"grow","positive")+e;case 4554:return S+j(e,/([^-])(transform)/g,"$1"+S+"$2")+e;case 6187:return j(j(j(e,/(zoom-|grab)/,S+"$1"),/(image-set)/,S+"$1"),e,"")+e;case 5495:case 3959:return j(e,/(image-set\([^]*)/,S+"$1$`$1");case 4968:return j(j(e,/(.+:)(flex-)?(.*)/,S+"box-pack:$3"+E+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+S+e+e;case 4200:if(!W(e,/flex-|baseline/))return E+"grid-column-align"+re(e,t)+e;break;case 2592:case 3360:return E+j(e,"template-","")+e;case 4384:case 3616:return r&&r.some(function(n,a){return t=a,W(n.props,/grid-\w+-end/)})?~Le(e+(r=r[t].value),"span",0)?e:E+j(e,"-start","")+e+E+"grid-row-span:"+(~Le(r,"span",0)?W(r,/\d+/):+W(r,/\d+/)-+W(e,/\d+/))+";":E+j(e,"-start","")+e;case 4896:case 4128:return r&&r.some(function(n){return W(n.props,/grid-\w+-start/)})?e:E+j(j(e,"-end","-span"),"span ","")+e;case 4095:case 3583:case 4068:case 2532:return j(e,/(.+)-inline(.+)/,S+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(B(e)-1-t>6)switch(I(e,t+1)){case 109:if(I(e,t+4)!==45)break;case 102:return j(e,/(.+:)(.+)-([^]+)/,"$1"+S+"$2-$3$1"+ge+(I(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~Le(e,"stretch",0)?gr(j(e,"stretch","fill-available"),t,r)+e:e}break;case 5152:case 5920:return j(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(n,a,o,i,c,l,h){return E+a+":"+o+h+(i?E+a+"-span:"+(c?l:+l-+o)+h:"")+e});case 4949:if(I(e,t+6)===121)return j(e,":",":"+S)+e;break;case 6444:switch(I(e,I(e,14)===45?18:11)){case 120:return j(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+S+(I(e,14)===45?"inline-":"")+"box$3$1"+S+"$2$3$1"+E+"$2box$3")+e;case 100:return j(e,":",":"+E)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return j(e,"scroll-","scroll-snap-")+e}return e}function Te(e,t){for(var r="",n=0;n-1&&!e.return)switch(e.type){case vt:e.return=gr(e.value,e.length,r);return;case ur:return Te([U(e,{value:j(e.value,"@","@"+S)})],n);case Fe:if(e.length)return ts(r=e.props,function(a){switch(W(a,n=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":ee(U(e,{props:[j(a,/:(read-\w+)/,":"+ge+"$1")]})),ee(U(e,{props:[a]})),it(e,{props:$t(r,n)});break;case"::placeholder":ee(U(e,{props:[j(a,/:(plac\w+)/,":"+S+"input-$1")]})),ee(U(e,{props:[j(a,/:(plac\w+)/,":"+ge+"$1")]})),ee(U(e,{props:[j(a,/:(plac\w+)/,E+"input-$1")]})),ee(U(e,{props:[a]})),it(e,{props:$t(r,n)});break}return""})}}var gs={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},A={},se=typeof process<"u"&&A!==void 0&&(A.REACT_APP_SC_ATTR||A.SC_ATTR)||"data-styled",xr="active",vr="data-styled-version",He="6.1.19",bt=`/*!sc*/ -`,Be=typeof window<"u"&&typeof document<"u",xs=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process<"u"&&A!==void 0&&A.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&A.REACT_APP_SC_DISABLE_SPEEDY!==""?A.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&A.REACT_APP_SC_DISABLE_SPEEDY:typeof process<"u"&&A!==void 0&&A.SC_DISABLE_SPEEDY!==void 0&&A.SC_DISABLE_SPEEDY!==""&&A.SC_DISABLE_SPEEDY!=="false"&&A.SC_DISABLE_SPEEDY),Ge=Object.freeze([]),ae=Object.freeze({});function vs(e,t,r){return r===void 0&&(r=ae),e.theme!==r.theme&&e.theme||t||r.theme}var yr=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),ys=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,bs=/(^-|-$)/g;function Dt(e){return e.replace(ys,"-").replace(bs,"")}var ws=/(a)(d)/gi,Ee=52,Wt=function(e){return String.fromCharCode(e+(e>25?39:97))};function dt(e){var t,r="";for(t=Math.abs(e);t>Ee;t=t/Ee|0)r=Wt(t%Ee)+r;return(Wt(t%Ee)+r).replace(ws,"$1-$2")}var tt,br=5381,te=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},wr=function(e){return te(br,e)};function js(e){return dt(wr(e)>>>0)}function Ns(e){return e.displayName||e.name||"Component"}function rt(e){return typeof e=="string"&&!0}var jr=typeof Symbol=="function"&&Symbol.for,Nr=jr?Symbol.for("react.memo"):60115,ks=jr?Symbol.for("react.forward_ref"):60112,Ss={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Cs={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},kr={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Ps=((tt={})[ks]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},tt[Nr]=kr,tt);function zt(e){return("type"in(t=e)&&t.type.$$typeof)===Nr?kr:"$$typeof"in e?Ps[e.$$typeof]:Ss;var t}var Es=Object.defineProperty,Rs=Object.getOwnPropertyNames,Ft=Object.getOwnPropertySymbols,Ls=Object.getOwnPropertyDescriptor,Is=Object.getPrototypeOf,Ut=Object.prototype;function Sr(e,t,r){if(typeof t!="string"){if(Ut){var n=Is(t);n&&n!==Ut&&Sr(e,n,r)}var a=Rs(t);Ft&&(a=a.concat(Ft(t)));for(var o=zt(e),i=zt(t),c=0;c0?" Args: ".concat(t.join(", ")):""))}var Os=function(){function e(t){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=t}return e.prototype.indexOfGroup=function(t){for(var r=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,a=n.length,o=a;t>=o;)if((o<<=1)<0)throw we(16,"".concat(t));this.groupSizes=new Uint32Array(o),this.groupSizes.set(n),this.length=o;for(var i=a;i=this.length||this.groupSizes[t]===0)return r;for(var n=this.groupSizes[t],a=this.indexOfGroup(t),o=a+n,i=a;i=0){var n=document.createTextNode(r);return this.element.insertBefore(n,this.nodes[t]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(t){this.element.removeChild(this.nodes[t]),this.length--},e.prototype.getRule=function(t){return t0&&(g+="".concat(x,","))}),l+="".concat(b).concat(v,'{content:"').concat(g,'"}').concat(bt)},u=0;u0?".".concat(t):m},u=l.slice();u.push(function(m){m.type===Fe&&m.value.includes("&")&&(m.props[0]=m.props[0].replace(Us,r).replace(n,h))}),i.prefix&&u.push(ps),u.push(hs);var d=function(m,p,b,v){p===void 0&&(p=""),b===void 0&&(b=""),v===void 0&&(v="&"),t=v,r=p,n=new RegExp("\\".concat(r,"\\b"),"g");var g=m.replace(Vs,""),x=ds(b||p?"".concat(b," ").concat(p," { ").concat(g," }"):g);i.namespace&&(x=Er(x,i.namespace));var y=[];return Te(x,ms(u.concat(fs(function(w){return y.push(w)})))),y};return d.hash=l.length?l.reduce(function(m,p){return p.name||we(15),te(m,p.name)},br).toString():"",d}var Hs=new Pr,ht=qs(),Rr=Z.createContext({shouldForwardProp:void 0,styleSheet:Hs,stylis:ht});Rr.Consumer;Z.createContext(void 0);function Gt(){return f.useContext(Rr)}var Gs=function(){function e(t,r){var n=this;this.inject=function(a,o){o===void 0&&(o=ht);var i=n.name+o.hash;a.hasNameForId(n.id,i)||a.insertRules(n.id,i,o(n.rules,i,"@keyframes"))},this.name=t,this.id="sc-keyframes-".concat(t),this.rules=r,jt(this,function(){throw we(12,String(n.name))})}return e.prototype.getName=function(t){return t===void 0&&(t=ht),this.name+t.hash},e}(),Js=function(e){return e>="A"&&e<="Z"};function Jt(e){for(var t="",r=0;r>>0);if(!r.hasNameForId(this.componentId,i)){var c=n(o,".".concat(i),void 0,this.componentId);r.insertRules(this.componentId,i,c)}a=Y(a,i),this.staticRulesId=i}else{for(var l=te(this.baseHash,n.hash),h="",u=0;u>>0);r.hasNameForId(this.componentId,p)||r.insertRules(this.componentId,p,n(h,".".concat(p),void 0,this.componentId)),a=Y(a,p)}}return a},e}(),Or=Z.createContext(void 0);Or.Consumer;var nt={};function Zs(e,t,r){var n=wt(e),a=e,o=!rt(e),i=t.attrs,c=i===void 0?Ge:i,l=t.componentId,h=l===void 0?function(N,P){var C=typeof N!="string"?"sc":Dt(N);nt[C]=(nt[C]||0)+1;var k="".concat(C,"-").concat(js(He+C+nt[C]));return P?"".concat(P,"-").concat(k):k}(t.displayName,t.parentComponentId):l,u=t.displayName,d=u===void 0?function(N){return rt(N)?"styled.".concat(N):"Styled(".concat(Ns(N),")")}(e):u,m=t.displayName&&t.componentId?"".concat(Dt(t.displayName),"-").concat(t.componentId):t.componentId||h,p=n&&a.attrs?a.attrs.concat(c).filter(Boolean):c,b=t.shouldForwardProp;if(n&&a.shouldForwardProp){var v=a.shouldForwardProp;if(t.shouldForwardProp){var g=t.shouldForwardProp;b=function(N,P){return v(N,P)&&g(N,P)}}else b=v}var x=new Xs(r,m,n?a.componentStyle:void 0);function y(N,P){return function(C,k,Q){var je=C.attrs,Mr=C.componentStyle,$r=C.defaultProps,Tr=C.foldedComponentIds,Br=C.styledComponentId,Dr=C.target,Wr=Z.useContext(Or),zr=Gt(),Ye=C.shouldForwardProp||zr.shouldForwardProp,Nt=vs(k,Wr,$r)||ae,D=function(ke,ue,Se){for(var he,J=O(O({},ue),{className:void 0,theme:Se}),Xe=0;Xe{const[e,t]=f.useState(!1),r=()=>t(!e),n="text-gray-700 hover:text-green-600 transition-colors px-4 py-2 text-base font-medium",a=s.jsxs(s.Fragment,{children:[s.jsx("a",{href:"#features",className:n,children:"Features"}),s.jsx("a",{href:"#about",className:n,children:"About"}),s.jsx($,{to:"/login",className:n,children:"Login"}),s.jsx($,{to:"/register",className:"ml-2 bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 transition-colors text-base font-medium",children:"Get Started"})]});return s.jsxs("nav",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 backdrop-blur-sm border-b border-gray-200",children:[s.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:s.jsxs("div",{className:"flex justify-between items-center h-16",children:[s.jsx($,{to:"/",className:"text-2xl font-extrabold text-green-600 tracking-tight",children:"Nanwa"}),s.jsx("div",{className:"hidden md:flex items-center gap-4",children:a}),s.jsx("button",{"aria-label":"Toggle menu",className:"md:hidden text-gray-700 hover:text-green-600 focus:outline-none",onClick:r,children:e?s.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}):s.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})})]})}),e&&s.jsx("div",{className:"md:hidden border-t border-gray-200 bg-white px-4 pb-4 space-y-1",children:a})]})},ta=_.section` - background: linear-gradient(135deg, #10b981 0%, #059669 100%); - min-height: 100vh; - display: flex; - align-items: center; - justify-content: center; - position: relative; - overflow: hidden; -`,ra=_.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); - opacity: 0.3; -`,na=()=>s.jsxs("div",{className:"min-h-screen bg-white",children:[s.jsx(ea,{}),s.jsxs(ta,{className:"pt-20",children:[s.jsx(ra,{}),s.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24",children:s.jsxs("div",{className:"text-center",children:[s.jsxs("h1",{className:"text-4xl md:text-6xl font-bold text-white mb-6",children:["Discover, Monitor & Export",s.jsx("span",{className:"block text-green-200",children:"Real-Time Tree Insights"})]}),s.jsx("p",{className:"text-xl md:text-2xl text-green-100 mb-8 max-w-3xl mx-auto",children:"Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights."}),s.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[s.jsx($,{to:"/register",className:"bg-white text-green-600 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 transition-colors",children:"Start Your Free Trial"}),s.jsx("a",{href:"#features",className:"border-2 border-white text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-white hover:text-green-600 transition-colors",children:"Learn More"})]})]})})]}),s.jsx("section",{id:"features",className:"py-20 bg-gray-50",children:s.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[s.jsxs("div",{className:"text-center mb-16",children:[s.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 mb-4",children:"Powerful Features for Tree Management"}),s.jsx("p",{className:"text-xl text-gray-600 max-w-2xl mx-auto",children:"Everything you need to monitor, analyze, and export tree data with precision and ease."})]}),s.jsxs("div",{className:"grid md:grid-cols-3 gap-8",children:[s.jsxs("div",{className:"bg-white p-8 rounded-xl shadow-lg",children:[s.jsx("div",{className:"w-12 h-12 bg-green-100 rounded-lg flex items-center justify-center mb-6",children:s.jsx("svg",{className:"w-6 h-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})})}),s.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Real-Time Analytics"}),s.jsx("p",{className:"text-gray-600",children:"Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics."})]}),s.jsxs("div",{className:"bg-white p-8 rounded-xl shadow-lg",children:[s.jsx("div",{className:"w-12 h-12 bg-green-100 rounded-lg flex items-center justify-center mb-6",children:s.jsxs("svg",{className:"w-6 h-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]})}),s.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Interactive Mapping"}),s.jsx("p",{className:"text-gray-600",children:"Visualize forests and individual trees with marker clustering and detailed tree information."})]}),s.jsxs("div",{className:"bg-white p-8 rounded-xl shadow-lg",children:[s.jsx("div",{className:"w-12 h-12 bg-green-100 rounded-lg flex items-center justify-center mb-6",children:s.jsx("svg",{className:"w-6 h-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})})}),s.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Data Export"}),s.jsx("p",{className:"text-gray-600",children:"Export filtered datasets to CSV or XLSX format for reporting and analysis."})]})]})]})}),s.jsx("section",{id:"about",className:"py-20 bg-white",children:s.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:s.jsxs("div",{className:"grid md:grid-cols-2 gap-12 items-center",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 mb-6",children:"Empowering Sustainable Forestry"}),s.jsx("p",{className:"text-lg text-gray-600 mb-6",children:"Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects."}),s.jsx("p",{className:"text-lg text-gray-600 mb-8",children:"Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs."}),s.jsx($,{to:"/register",className:"bg-green-600 text-white px-6 py-3 rounded-lg text-lg font-semibold hover:bg-green-700 transition-colors inline-block",children:"Join Nanwa Today"})]}),s.jsx("div",{className:"bg-green-50 p-8 rounded-xl",children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-600 mb-2",children:"10K+"}),s.jsx("div",{className:"text-gray-600",children:"Trees Monitored"})]}),s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-600 mb-2",children:"95%"}),s.jsx("div",{className:"text-gray-600",children:"Survival Rate"})]}),s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-600 mb-2",children:"50+"}),s.jsx("div",{className:"text-gray-600",children:"Forest Projects"})]}),s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-600 mb-2",children:"24/7"}),s.jsx("div",{className:"text-gray-600",children:"Real-Time Data"})]})]})})]})})}),s.jsx("footer",{className:"bg-gray-900 text-white py-12",children:s.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[s.jsxs("div",{className:"grid md:grid-cols-4 gap-8",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"text-2xl font-bold text-green-400 mb-4",children:"Nanwa"}),s.jsx("p",{className:"text-gray-400",children:"Empowering sustainable forestry through data-driven insights and real-time monitoring."})]}),s.jsxs("div",{children:[s.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Product"}),s.jsxs("ul",{className:"space-y-2 text-gray-400",children:[s.jsx("li",{children:s.jsx("a",{href:"#features",className:"hover:text-white transition-colors",children:"Features"})}),s.jsx("li",{children:s.jsx($,{to:"/login",className:"hover:text-white transition-colors",children:"Login"})}),s.jsx("li",{children:s.jsx($,{to:"/register",className:"hover:text-white transition-colors",children:"Register"})})]})]}),s.jsxs("div",{children:[s.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Company"}),s.jsxs("ul",{className:"space-y-2 text-gray-400",children:[s.jsx("li",{children:s.jsx("a",{href:"#about",className:"hover:text-white transition-colors",children:"About"})}),s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Contact"})}),s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Privacy"})})]})]}),s.jsxs("div",{children:[s.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Support"}),s.jsxs("ul",{className:"space-y-2 text-gray-400",children:[s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Help Center"})}),s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Documentation"})}),s.jsx("li",{children:s.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"API"})})]})]})]}),s.jsx("div",{className:"border-t border-gray-800 mt-8 pt-8 text-center text-gray-400",children:s.jsx("p",{children:"© 2024 Nanwa. All rights reserved."})})]})})]}),_r=f.createContext(),Je=()=>{const e=f.useContext(_r);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},sa=({children:e})=>{const[t,r]=f.useState(null),[n,a]=f.useState(!0),o=ze();f.useEffect(()=>{const d=localStorage.getItem("authToken"),m=localStorage.getItem("userData");if(d&&m)try{r(JSON.parse(m))}catch(p){console.error("Error parsing user data:",p),localStorage.removeItem("authToken"),localStorage.removeItem("userData")}a(!1)},[]);const u={user:t,loading:n,login:async(d,m)=>{try{a(!0);const p=await aa(d,m),{token:b,user:v}=p;return localStorage.setItem("authToken",b),localStorage.setItem("userData",JSON.stringify(v)),r(v),o("/dashboard"),{success:!0}}catch(p){return{success:!1,error:p.message}}finally{a(!1)}},register:async(d,m,p)=>{try{if(a(!0),m!==p)throw new Error("Passwords do not match");const b=await oa(d,m),{token:v,user:g}=b;return localStorage.setItem("authToken",v),localStorage.setItem("userData",JSON.stringify(g)),r(g),o("/dashboard"),{success:!0}}catch(b){return{success:!1,error:b.message}}finally{a(!1)}},logout:()=>{localStorage.removeItem("authToken"),localStorage.removeItem("userData"),r(null),o("/")},isAdmin:()=>(t==null?void 0:t.role)==="admin"};return s.jsx(_r.Provider,{value:u,children:e})},aa=async(e,t)=>{if(await new Promise(r=>setTimeout(r,1e3)),!e||!t)throw new Error("Email and password are required");if(e==="admin@nanwa.com"&&t==="admin123")return{token:"mock-jwt-token-admin",user:{id:1,email:"admin@nanwa.com",role:"admin",name:"Admin User"}};if(e==="user@nanwa.com"&&t==="user123")return{token:"mock-jwt-token-user",user:{id:2,email:"user@nanwa.com",role:"user",name:"Regular User"}};throw new Error("Invalid email or password")},oa=async(e,t)=>{if(await new Promise(r=>setTimeout(r,1e3)),!e||!t)throw new Error("Email and password are required");if(t.length<6)throw new Error("Password must be at least 6 characters long");return{token:"mock-jwt-token-new-user",user:{id:Math.floor(Math.random()*1e3),email:e,role:"user",name:e.split("@")[0]}}},ia=_.div` - min-height: 100vh; - background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%); - display: flex; - align-items: center; - justify-content: center; - padding: 1rem; -`,la=_.div` - background: white; - border-radius: 1rem; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); - padding: 2rem; - width: 100%; - max-width: 400px; -`,ca=()=>{const[e,t]=f.useState({email:"",password:""}),[r,n]=f.useState({}),[a,o]=f.useState(!1),[i,c]=f.useState(!1),{login:l}=Je();ze();const h=()=>{const m={};return e.email?/\S+@\S+\.\S+/.test(e.email)||(m.email="Email is invalid"):m.email="Email is required",e.password?e.password.length<6&&(m.password="Password must be at least 6 characters"):m.password="Password is required",n(m),Object.keys(m).length===0},u=m=>{const{name:p,value:b}=m.target;t(v=>({...v,[p]:b})),r[p]&&n(v=>({...v,[p]:""}))},d=async m=>{if(m.preventDefault(),!!h()){o(!0);try{const p=await l(e.email,e.password);p.success||n({general:p.error})}catch{n({general:"An unexpected error occurred. Please try again."})}finally{o(!1)}}};return s.jsx(ia,{children:s.jsxs(la,{children:[s.jsxs("div",{className:"text-center mb-8",children:[s.jsx($,{to:"/",className:"inline-block mb-6",children:s.jsx("h1",{className:"text-3xl font-bold text-green-600",children:"Nanwa"})}),s.jsx("h2",{className:"text-2xl font-bold text-gray-900 mb-2",children:"Welcome back"}),s.jsx("p",{className:"text-gray-600",children:"Sign in to your account to continue"})]}),s.jsxs("form",{onSubmit:d,className:"space-y-6",children:[r.general&&s.jsx("div",{className:"bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded-lg",children:r.general}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"email",className:"block text-sm font-medium text-gray-700 mb-2",children:"Email address"}),s.jsx("input",{type:"email",id:"email",name:"email",value:e.email,onChange:u,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.email?"border-red-300":"border-gray-300"}`,placeholder:"Enter your email",disabled:a,"aria-describedby":r.email?"email-error":void 0}),r.email&&s.jsx("p",{id:"email-error",className:"mt-1 text-sm text-red-600",children:r.email})]}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"password",className:"block text-sm font-medium text-gray-700 mb-2",children:"Password"}),s.jsxs("div",{className:"relative",children:[s.jsx("input",{type:i?"text":"password",id:"password",name:"password",value:e.password,onChange:u,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.password?"border-red-300":"border-gray-300"}`,placeholder:"Enter your password",disabled:a,"aria-describedby":r.password?"password-error":void 0}),s.jsx("button",{type:"button",onClick:()=>c(!i),className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:a,children:i?s.jsx("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})}):s.jsxs("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]})})]}),r.password&&s.jsx("p",{id:"password-error",className:"mt-1 text-sm text-red-600",children:r.password})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center",children:[s.jsx("input",{id:"remember-me",name:"remember-me",type:"checkbox",className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 rounded"}),s.jsx("label",{htmlFor:"remember-me",className:"ml-2 block text-sm text-gray-900",children:"Remember me"})]}),s.jsx("div",{className:"text-sm",children:s.jsx("a",{href:"#",className:"font-medium text-green-600 hover:text-green-500",children:"Forgot your password?"})})]}),s.jsx("button",{type:"submit",disabled:a,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:a?s.jsxs("div",{className:"flex items-center",children:[s.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[s.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),s.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Signing in..."]}):"Sign in"})]}),s.jsx("div",{className:"mt-6 text-center",children:s.jsxs("p",{className:"text-sm text-gray-600",children:["Don't have an account?"," ",s.jsx($,{to:"/register",className:"font-medium text-green-600 hover:text-green-500",children:"Sign up"})]})}),s.jsxs("div",{className:"mt-8 p-4 bg-gray-50 rounded-lg",children:[s.jsx("p",{className:"text-sm text-gray-600 mb-2",children:"Demo credentials:"}),s.jsxs("div",{className:"text-xs text-gray-500 space-y-1",children:[s.jsxs("p",{children:[s.jsx("strong",{children:"Admin:"})," admin@nanwa.com / admin123"]}),s.jsxs("p",{children:[s.jsx("strong",{children:"User:"})," user@nanwa.com / user123"]})]})]})]})})},da=_.div` - min-height: 100vh; - background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%); - display: flex; - align-items: center; - justify-content: center; - padding: 1rem; -`,ua=_.div` - background: white; - border-radius: 1rem; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); - padding: 2rem; - width: 100%; - max-width: 450px; -`,ha=_.div` - width: 100%; - height: 4px; - background-color: #e5e7eb; - border-radius: 2px; - overflow: hidden; - margin-top: 0.5rem; -`,ma=_.div` - height: 100%; - background-color: ${e=>e.strength==="weak"?"#ef4444":e.strength==="medium"?"#f59e0b":e.strength==="strong"?"#10b981":"#e5e7eb"}; - width: ${e=>e.strength==="weak"?"33%":e.strength==="medium"?"66%":e.strength==="strong"?"100%":"0%"}; - transition: all 0.3s ease; -`,fa=()=>{const[e,t]=f.useState({email:"",password:"",confirmPassword:""}),[r,n]=f.useState({}),[a,o]=f.useState(!1),[i,c]=f.useState(!1),[l,h]=f.useState(!1),{register:u}=Je(),m=(x=>{if(!x)return{strength:"none",score:0};let y=0;return x.length>=8&&(y+=1),/[a-z]/.test(x)&&(y+=1),/[A-Z]/.test(x)&&(y+=1),/[0-9]/.test(x)&&(y+=1),/[^A-Za-z0-9]/.test(x)&&(y+=1),y<=2?{strength:"weak",score:y}:y<=3?{strength:"medium",score:y}:{strength:"strong",score:y}})(e.password),p=()=>{const x={};return e.email?/\S+@\S+\.\S+/.test(e.email)||(x.email="Email is invalid"):x.email="Email is required",e.password?e.password.length<6?x.password="Password must be at least 6 characters":m.strength==="weak"&&(x.password="Password is too weak. Include uppercase, lowercase, numbers, and special characters."):x.password="Password is required",e.confirmPassword?e.password!==e.confirmPassword&&(x.confirmPassword="Passwords do not match"):x.confirmPassword="Please confirm your password",n(x),Object.keys(x).length===0},b=x=>{const{name:y,value:w}=x.target;t(N=>({...N,[y]:w})),r[y]&&n(N=>({...N,[y]:""}))},v=async x=>{if(x.preventDefault(),!!p()){o(!0);try{const y=await u(e.email,e.password,e.confirmPassword);y.success||n({general:y.error})}catch{n({general:"An unexpected error occurred. Please try again."})}finally{o(!1)}}},g=()=>{switch(m.strength){case"weak":return"Weak password";case"medium":return"Medium strength password";case"strong":return"Strong password";default:return""}};return s.jsx(da,{children:s.jsxs(ua,{children:[s.jsxs("div",{className:"text-center mb-8",children:[s.jsx($,{to:"/",className:"inline-block mb-6",children:s.jsx("h1",{className:"text-3xl font-bold text-green-600",children:"Nanwa"})}),s.jsx("h2",{className:"text-2xl font-bold text-gray-900 mb-2",children:"Create your account"}),s.jsx("p",{className:"text-gray-600",children:"Join Nanwa to start monitoring your trees"})]}),s.jsxs("form",{onSubmit:v,className:"space-y-6",children:[r.general&&s.jsx("div",{className:"bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded-lg",children:r.general}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"email",className:"block text-sm font-medium text-gray-700 mb-2",children:"Email address"}),s.jsx("input",{type:"email",id:"email",name:"email",value:e.email,onChange:b,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.email?"border-red-300":"border-gray-300"}`,placeholder:"Enter your email",disabled:a,"aria-describedby":r.email?"email-error":void 0}),r.email&&s.jsx("p",{id:"email-error",className:"mt-1 text-sm text-red-600",children:r.email})]}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"password",className:"block text-sm font-medium text-gray-700 mb-2",children:"Password"}),s.jsxs("div",{className:"relative",children:[s.jsx("input",{type:i?"text":"password",id:"password",name:"password",value:e.password,onChange:b,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.password?"border-red-300":"border-gray-300"}`,placeholder:"Create a strong password",disabled:a,"aria-describedby":r.password?"password-error":void 0}),s.jsx("button",{type:"button",onClick:()=>c(!i),className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:a,children:i?s.jsx("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})}):s.jsxs("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]})})]}),e.password&&s.jsxs("div",{className:"mt-2",children:[s.jsx(ha,{children:s.jsx(ma,{strength:m.strength})}),s.jsx("p",{className:`text-xs mt-1 ${m.strength==="weak"?"text-red-600":m.strength==="medium"?"text-yellow-600":m.strength==="strong"?"text-green-600":"text-gray-500"}`,children:g()})]}),r.password&&s.jsx("p",{id:"password-error",className:"mt-1 text-sm text-red-600",children:r.password})]}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"confirmPassword",className:"block text-sm font-medium text-gray-700 mb-2",children:"Confirm password"}),s.jsxs("div",{className:"relative",children:[s.jsx("input",{type:l?"text":"password",id:"confirmPassword",name:"confirmPassword",value:e.confirmPassword,onChange:b,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent ${r.confirmPassword?"border-red-300":"border-gray-300"}`,placeholder:"Confirm your password",disabled:a,"aria-describedby":r.confirmPassword?"confirm-password-error":void 0}),s.jsx("button",{type:"button",onClick:()=>h(!l),className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:a,children:l?s.jsx("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})}):s.jsxs("svg",{className:"h-5 w-5 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]})})]}),r.confirmPassword&&s.jsx("p",{id:"confirm-password-error",className:"mt-1 text-sm text-red-600",children:r.confirmPassword})]}),s.jsxs("div",{className:"flex items-center",children:[s.jsx("input",{id:"terms",name:"terms",type:"checkbox",required:!0,className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 rounded"}),s.jsxs("label",{htmlFor:"terms",className:"ml-2 block text-sm text-gray-900",children:["I agree to the"," ",s.jsx("a",{href:"#",className:"font-medium text-green-600 hover:text-green-500",children:"Terms of Service"})," ","and"," ",s.jsx("a",{href:"#",className:"font-medium text-green-600 hover:text-green-500",children:"Privacy Policy"})]})]}),s.jsx("button",{type:"submit",disabled:a,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:a?s.jsxs("div",{className:"flex items-center",children:[s.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[s.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),s.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Creating account..."]}):"Create account"})]}),s.jsx("div",{className:"mt-6 text-center",children:s.jsxs("p",{className:"text-sm text-gray-600",children:["Already have an account?"," ",s.jsx($,{to:"/login",className:"font-medium text-green-600 hover:text-green-500",children:"Sign in"})]})})]})})},pa=_.div` - min-height: 100vh; - background-color: #f9fafb; -`,ga=_.header` - background: white; - border-bottom: 1px solid #e5e7eb; - padding: 1rem 0; -`,xa=_.aside` - background: white; - border-right: 1px solid #e5e7eb; - width: 250px; - position: fixed; - top: 0; - left: 0; - height: 100vh; - overflow-y: auto; - z-index: 10; -`,va=_.main` - margin-left: 250px; - padding: 2rem; -`,ya=()=>{const{user:e,logout:t,isAdmin:r}=Je(),n=()=>{t()};return s.jsxs(pa,{children:[s.jsx(ga,{children:s.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("div",{className:"flex items-center",children:s.jsx("h1",{className:"text-2xl font-bold text-green-600",children:"Nanwa Dashboard"})}),s.jsxs("div",{className:"flex items-center space-x-4",children:[s.jsxs("div",{className:"text-sm text-gray-700",children:["Welcome, ",s.jsx("span",{className:"font-medium",children:e==null?void 0:e.name}),r()&&s.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 text-red-800 text-xs rounded-full",children:"Admin"})]}),s.jsx("button",{onClick:n,className:"text-gray-700 hover:text-green-600 transition-colors",children:s.jsx("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})})})]})]})})}),s.jsx(xa,{children:s.jsx("div",{className:"p-6",children:s.jsxs("nav",{className:"space-y-2",children:[s.jsxs("a",{href:"#dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 bg-green-50 rounded-lg",children:[s.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),s.jsxs("a",{href:"#map",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[s.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),s.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[s.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),r()&&s.jsxs("a",{href:"#audit",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[s.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})}),s.jsx(va,{children:s.jsxs("div",{className:"max-w-7xl mx-auto",children:[s.jsxs("div",{className:"mb-8",children:[s.jsx("h2",{className:"text-3xl font-bold text-gray-900 mb-2",children:"Welcome to Nanwa"}),s.jsx("p",{className:"text-gray-600",children:"Monitor your forests and track tree growth with real-time insights."})]}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:[s.jsx("div",{className:"bg-white p-6 rounded-lg shadow-sm border border-gray-200",children:s.jsxs("div",{className:"flex items-center",children:[s.jsx("div",{className:"p-2 bg-green-100 rounded-lg",children:s.jsx("svg",{className:"h-6 w-6 text-green-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})})}),s.jsxs("div",{className:"ml-4",children:[s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Total Trees"}),s.jsx("p",{className:"text-2xl font-bold text-gray-900",children:"10,247"})]})]})}),s.jsx("div",{className:"bg-white p-6 rounded-lg shadow-sm border border-gray-200",children:s.jsxs("div",{className:"flex items-center",children:[s.jsx("div",{className:"p-2 bg-blue-100 rounded-lg",children:s.jsx("svg",{className:"h-6 w-6 text-blue-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})})}),s.jsxs("div",{className:"ml-4",children:[s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Survival Rate"}),s.jsx("p",{className:"text-2xl font-bold text-gray-900",children:"95.2%"})]})]})}),s.jsx("div",{className:"bg-white p-6 rounded-lg shadow-sm border border-gray-200",children:s.jsxs("div",{className:"flex items-center",children:[s.jsx("div",{className:"p-2 bg-yellow-100 rounded-lg",children:s.jsx("svg",{className:"h-6 w-6 text-yellow-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"})})}),s.jsxs("div",{className:"ml-4",children:[s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"Avg Height"}),s.jsx("p",{className:"text-2xl font-bold text-gray-900",children:"2.4m"})]})]})}),s.jsx("div",{className:"bg-white p-6 rounded-lg shadow-sm border border-gray-200",children:s.jsxs("div",{className:"flex items-center",children:[s.jsx("div",{className:"p-2 bg-purple-100 rounded-lg",children:s.jsx("svg",{className:"h-6 w-6 text-purple-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})})}),s.jsxs("div",{className:"ml-4",children:[s.jsx("p",{className:"text-sm font-medium text-gray-600",children:"CO₂ Absorbed"}),s.jsx("p",{className:"text-2xl font-bold text-gray-900",children:"1.2t"})]})]})})]}),s.jsxs("div",{className:"bg-white p-8 rounded-lg shadow-sm border border-gray-200",children:[s.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Coming Soon"}),s.jsx("p",{className:"text-gray-600 mb-4",children:"The dashboard is currently being developed. Soon you'll be able to:"}),s.jsxs("ul",{className:"space-y-2 text-gray-600",children:[s.jsxs("li",{className:"flex items-center",children:[s.jsx("svg",{className:"h-4 w-4 text-green-500 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"View real-time charts and analytics"]}),s.jsxs("li",{className:"flex items-center",children:[s.jsx("svg",{className:"h-4 w-4 text-green-500 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Explore interactive maps with tree locations"]}),s.jsxs("li",{className:"flex items-center",children:[s.jsx("svg",{className:"h-4 w-4 text-green-500 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Export data in CSV or XLSX format"]}),s.jsxs("li",{className:"flex items-center",children:[s.jsx("svg",{className:"h-4 w-4 text-green-500 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:s.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Filter and search through tree data"]})]})]})]})})]})},ba=({children:e})=>{const{user:t,loading:r}=Je();return r?s.jsx("div",{className:"min-h-screen flex items-center justify-center",children:s.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-green-600"})}):t?e:s.jsx(Dn,{to:"/login",replace:!0})},wa=()=>s.jsx(Jn,{children:s.jsx(sa,{children:s.jsxs(zn,{children:[s.jsx(fe,{path:"/",element:s.jsx(na,{})}),s.jsx(fe,{path:"/login",element:s.jsx(ca,{})}),s.jsx(fe,{path:"/register",element:s.jsx(fa,{})}),s.jsx(fe,{path:"/dashboard",element:s.jsx(ba,{children:s.jsx(ya,{})})})]})})});Jr.createRoot(document.getElementById("root")).render(s.jsx(Z.StrictMode,{children:s.jsx(wa,{})})); diff --git a/frontend/dist/assets/index-DJ39NcK9.js b/frontend/dist/assets/index-DJ39NcK9.js new file mode 100644 index 0000000000..e7604d1c0a --- /dev/null +++ b/frontend/dist/assets/index-DJ39NcK9.js @@ -0,0 +1,189 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-QWDx4awI.js","assets/IconButton-DIc-CK1Q.js","assets/TreeDetailLayout-CKxWzGm5.js","assets/MapSidebar-yNxbJbqT.js","assets/useKeyboardNavigation-C5b08Ak3.js","assets/Table-BCdM5JW5.js","assets/ExportButton-Y3IlBTFt.js","assets/vendor-BtP0CW_r.js","assets/FormElements-5NQybTAT.js","assets/ChartComponents-BrntlwBm.js","assets/Navbar-DOE0P8dm.js","assets/DarkModeToggle-sLchHfDj.js","assets/LoginPage-Ckb0MyS_.js","assets/PasswordInput-dcNbels6.js","assets/RegisterPage-C1DYj1NC.js","assets/DashboardPage-BnZglKQh.js","assets/FilterHeader-DzCm_NrU.js","assets/FilterHeader-DdjxYr1F.css","assets/MapPage-CWavP_xM.js","assets/MapPage-25t4MxmA.css","assets/TreeDetailPage-D6Enxj1V.js","assets/AdminPage-Bc5ol_Rn.js","assets/ErrorPages-D4z_BlyV.js"])))=>i.map(i=>d[i]); +var fn=Object.defineProperty;var dn=(e,t,r)=>t in e?fn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var Oe=(e,t,r)=>dn(e,typeof t!="symbol"?t+"":t,r);import{r as dr,g as Ct,a as hr}from"./vendor-BtP0CW_r.js";function hn(e,t){for(var r=0;rn[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const a of o)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(o){const a={};return o.integrity&&(a.integrity=o.integrity),o.referrerPolicy&&(a.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?a.credentials="include":o.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(o){if(o.ep)return;o.ep=!0;const a=r(o);fetch(o.href,a)}})();var at={exports:{}},xe={};/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Bt;function pn(){if(Bt)return xe;Bt=1;var e=dr(),t=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,o=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,a={key:!0,ref:!0,__self:!0,__source:!0};function s(c,i,f){var u,l={},h=null,m=null;f!==void 0&&(h=""+f),i.key!==void 0&&(h=""+i.key),i.ref!==void 0&&(m=i.ref);for(u in i)n.call(i,u)&&!a.hasOwnProperty(u)&&(l[u]=i[u]);if(c&&c.defaultProps)for(u in i=c.defaultProps,i)l[u]===void 0&&(l[u]=i[u]);return{$$typeof:t,type:c,key:h,ref:m,props:l,_owner:o.current}}return xe.Fragment=r,xe.jsx=s,xe.jsxs=s,xe}var Mt;function mn(){return Mt||(Mt=1,at.exports=pn()),at.exports}var p=mn(),d=dr();const N=Ct(d),gn=hn({__proto__:null,default:N},[d]);var ke={},Ft;function vn(){if(Ft)return ke;Ft=1;var e=hr();return ke.createRoot=e.createRoot,ke.hydrateRoot=e.hydrateRoot,ke}var yn=vn();const xn=Ct(yn),bn="modulepreload",wn=function(e){return"/"+e},Ut={},K=function(t,r,n){let o=Promise.resolve();if(r&&r.length>0){let s=function(f){return Promise.all(f.map(u=>Promise.resolve(u).then(l=>({status:"fulfilled",value:l}),l=>({status:"rejected",reason:l}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),i=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));o=s(r.map(f=>{if(f=wn(f),f in Ut)return;Ut[f]=!0;const u=f.endsWith(".css"),l=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${f}"]${l}`))return;const h=document.createElement("link");if(h.rel=u?"stylesheet":bn,u||(h.as="script"),h.crossOrigin="",h.href=f,i&&h.setAttribute("nonce",i),document.head.appendChild(h),u)return new Promise((m,v)=>{h.addEventListener("load",m),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${f}`)))})}))}function a(s){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=s,window.dispatchEvent(c),!c.defaultPrevented)throw s}return o.then(s=>{for(const c of s||[])c.status==="rejected"&&a(c.reason);return t().catch(a)})};var Sn=hr();const Bs=Ct(Sn);/** + * @remix-run/router v1.23.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Se(){return Se=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function pr(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Cn(){return Math.random().toString(36).substr(2,8)}function qt(e,t){return{usr:e.state,key:e.key,idx:t}}function dt(e,t,r,n){return r===void 0&&(r=null),Se({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?de(t):t,{state:r,key:t&&t.key||n||Cn()})}function We(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function de(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function Rn(e,t,r,n){n===void 0&&(n={});let{window:o=document.defaultView,v5Compat:a=!1}=n,s=o.history,c=Y.Pop,i=null,f=u();f==null&&(f=0,s.replaceState(Se({},s.state,{idx:f}),""));function u(){return(s.state||{idx:null}).idx}function l(){c=Y.Pop;let g=u(),w=g==null?null:g-f;f=g,i&&i({action:c,location:y.location,delta:w})}function h(g,w){c=Y.Push;let S=dt(y.location,g,w);f=u()+1;let x=qt(S,f),C=y.createHref(S);try{s.pushState(x,"",C)}catch(j){if(j instanceof DOMException&&j.name==="DataCloneError")throw j;o.location.assign(C)}a&&i&&i({action:c,location:y.location,delta:1})}function m(g,w){c=Y.Replace;let S=dt(y.location,g,w);f=u();let x=qt(S,f),C=y.createHref(S);s.replaceState(x,"",C),a&&i&&i({action:c,location:y.location,delta:0})}function v(g){let w=o.location.origin!=="null"?o.location.origin:o.location.href,S=typeof g=="string"?g:We(g);return S=S.replace(/ $/,"%20"),A(w,"No window.location.(origin|href) available to create URL for href: "+S),new URL(S,w)}let y={get action(){return c},get location(){return e(o,s)},listen(g){if(i)throw new Error("A history only accepts one active listener");return o.addEventListener(Wt,l),i=g,()=>{o.removeEventListener(Wt,l),i=null}},createHref(g){return t(o,g)},createURL:v,encodeLocation(g){let w=v(g);return{pathname:w.pathname,search:w.search,hash:w.hash}},push:h,replace:m,go(g){return s.go(g)}};return y}var Gt;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Gt||(Gt={}));function Pn(e,t,r){return r===void 0&&(r="/"),jn(e,t,r)}function jn(e,t,r,n){let o=typeof t=="string"?de(t):t,a=Rt(o.pathname||"/",r);if(a==null)return null;let s=mr(e);_n(s);let c=null;for(let i=0;c==null&&i{let i={relativePath:c===void 0?a.path||"":c,caseSensitive:a.caseSensitive===!0,childrenIndex:s,route:a};i.relativePath.startsWith("/")&&(A(i.relativePath.startsWith(n),'Absolute route path "'+i.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),i.relativePath=i.relativePath.slice(n.length));let f=H([n,i.relativePath]),u=r.concat(i);a.children&&a.children.length>0&&(A(a.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+f+'".')),mr(a.children,t,u,f)),!(a.path==null&&!a.index)&&t.push({path:f,score:Ln(f,a.index),routesMeta:u})};return e.forEach((a,s)=>{var c;if(a.path===""||!((c=a.path)!=null&&c.includes("?")))o(a,s);else for(let i of gr(a.path))o(a,s,i)}),t}function gr(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,o=r.endsWith("?"),a=r.replace(/\?$/,"");if(n.length===0)return o?[a,""]:[a];let s=gr(n.join("/")),c=[];return c.push(...s.map(i=>i===""?a:[a,i].join("/"))),o&&c.push(...s),c.map(i=>e.startsWith("/")&&i===""?"/":i)}function _n(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:$n(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const An=/^:[\w-]+$/,Tn=3,In=2,On=1,kn=10,Nn=-2,Vt=e=>e==="*";function Ln(e,t){let r=e.split("/"),n=r.length;return r.some(Vt)&&(n+=Nn),t&&(n+=In),r.filter(o=>!Vt(o)).reduce((o,a)=>o+(An.test(a)?Tn:a===""?On:kn),n)}function $n(e,t){return e.length===t.length&&e.slice(0,-1).every((n,o)=>n===t[o])?e[e.length-1]-t[t.length-1]:0}function Dn(e,t,r){let{routesMeta:n}=e,o={},a="/",s=[];for(let c=0;c{let{paramName:h,isOptional:m}=u;if(h==="*"){let y=c[l]||"";s=a.slice(0,a.length-y.length).replace(/(.)\/+$/,"$1")}const v=c[l];return m&&!v?f[h]=void 0:f[h]=(v||"").replace(/%2F/g,"/"),f},{}),pathname:a,pathnameBase:s,pattern:e}}function Bn(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),pr(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,c,i)=>(n.push({paramName:c,isOptional:i!=null}),i?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),n]}function Mn(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return pr(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function Rt(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function Fn(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:o=""}=typeof e=="string"?de(e):e;return{pathname:r?r.startsWith("/")?r:Un(r,t):t,search:Gn(n),hash:Vn(o)}}function Un(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?r.length>1&&r.pop():o!=="."&&r.push(o)}),r.length>1?r.join("/"):"/"}function st(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function Wn(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function Pt(e,t){let r=Wn(e);return t?r.map((n,o)=>o===r.length-1?n.pathname:n.pathnameBase):r.map(n=>n.pathnameBase)}function jt(e,t,r,n){n===void 0&&(n=!1);let o;typeof e=="string"?o=de(e):(o=Se({},e),A(!o.pathname||!o.pathname.includes("?"),st("?","pathname","search",o)),A(!o.pathname||!o.pathname.includes("#"),st("#","pathname","hash",o)),A(!o.search||!o.search.includes("#"),st("#","search","hash",o)));let a=e===""||o.pathname==="",s=a?"/":o.pathname,c;if(s==null)c=r;else{let l=t.length-1;if(!n&&s.startsWith("..")){let h=s.split("/");for(;h[0]==="..";)h.shift(),l-=1;o.pathname=h.join("/")}c=l>=0?t[l]:"/"}let i=Fn(o,c),f=s&&s!=="/"&&s.endsWith("/"),u=(a||s===".")&&r.endsWith("/");return!i.pathname.endsWith("/")&&(f||u)&&(i.pathname+="/"),i}const H=e=>e.join("/").replace(/\/\/+/g,"/"),qn=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Gn=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Vn=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function Jn(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const vr=["post","put","patch","delete"];new Set(vr);const Yn=["get",...vr];new Set(Yn);/** + * React Router v6.30.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Ee(){return Ee=Object.assign?Object.assign.bind():function(e){for(var t=1;t{c.current=!0}),d.useCallback(function(f,u){if(u===void 0&&(u={}),!c.current)return;if(typeof f=="number"){n.go(f);return}let l=jt(f,JSON.parse(s),a,u.relative==="path");e==null&&t!=="/"&&(l.pathname=l.pathname==="/"?t:H([t,l.pathname])),(u.replace?n.replace:n.push)(l,u.state,u)},[t,n,s,a,e])}function Ms(){let{matches:e}=d.useContext(W),t=e[e.length-1];return t?t.params:{}}function br(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=d.useContext(X),{matches:o}=d.useContext(W),{pathname:a}=pe(),s=JSON.stringify(Pt(o,n.v7_relativeSplatPath));return d.useMemo(()=>jt(e,JSON.parse(s),a,r==="path"),[e,s,a,r])}function Zn(e,t){return Qn(e,t)}function Qn(e,t,r,n){he()||A(!1);let{navigator:o}=d.useContext(X),{matches:a}=d.useContext(W),s=a[a.length-1],c=s?s.params:{};s&&s.pathname;let i=s?s.pathnameBase:"/";s&&s.route;let f=pe(),u;if(t){var l;let g=typeof t=="string"?de(t):t;i==="/"||(l=g.pathname)!=null&&l.startsWith(i)||A(!1),u=g}else u=f;let h=u.pathname||"/",m=h;if(i!=="/"){let g=i.replace(/^\//,"").split("/");m="/"+h.replace(/^\//,"").split("/").slice(g.length).join("/")}let v=Pn(e,{pathname:m}),y=oo(v&&v.map(g=>Object.assign({},g,{params:Object.assign({},c,g.params),pathname:H([i,o.encodeLocation?o.encodeLocation(g.pathname).pathname:g.pathname]),pathnameBase:g.pathnameBase==="/"?i:H([i,o.encodeLocation?o.encodeLocation(g.pathnameBase).pathname:g.pathnameBase])})),a,r,n);return t&&y?d.createElement(Je.Provider,{value:{location:Ee({pathname:"/",search:"",hash:"",state:null,key:"default"},u),navigationType:Y.Pop}},y):y}function eo(){let e=co(),t=Jn(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return d.createElement(d.Fragment,null,d.createElement("h2",null,"Unexpected Application Error!"),d.createElement("h3",{style:{fontStyle:"italic"}},t),r?d.createElement("pre",{style:o},r):null,null)}const to=d.createElement(eo,null);class ro extends d.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?d.createElement(W.Provider,{value:this.props.routeContext},d.createElement(yr.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function no(e){let{routeContext:t,match:r,children:n}=e,o=d.useContext(_t);return o&&o.static&&o.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=r.route.id),d.createElement(W.Provider,{value:t},n)}function oo(e,t,r,n){var o;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var a;if(!r)return null;if(r.errors)e=r.matches;else if((a=n)!=null&&a.v7_partialHydration&&t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let s=e,c=(o=r)==null?void 0:o.errors;if(c!=null){let u=s.findIndex(l=>l.route.id&&(c==null?void 0:c[l.route.id])!==void 0);u>=0||A(!1),s=s.slice(0,Math.min(s.length,u+1))}let i=!1,f=-1;if(r&&n&&n.v7_partialHydration)for(let u=0;u=0?s=s.slice(0,f+1):s=[s[0]];break}}}return s.reduceRight((u,l,h)=>{let m,v=!1,y=null,g=null;r&&(m=c&&l.route.id?c[l.route.id]:void 0,y=l.route.errorElement||to,i&&(f<0&&h===0?(uo("route-fallback"),v=!0,g=null):f===h&&(v=!0,g=l.route.hydrateFallbackElement||null)));let w=t.concat(s.slice(0,h+1)),S=()=>{let x;return m?x=y:v?x=g:l.route.Component?x=d.createElement(l.route.Component,null):l.route.element?x=l.route.element:x=u,d.createElement(no,{match:l,routeContext:{outlet:u,matches:w,isDataRoute:r!=null},children:x})};return r&&(l.route.ErrorBoundary||l.route.errorElement||h===0)?d.createElement(ro,{location:r.location,revalidation:r.revalidation,component:y,error:m,children:S(),routeContext:{outlet:null,matches:w,isDataRoute:!0}}):S()},null)}var wr=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(wr||{}),Sr=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Sr||{});function ao(e){let t=d.useContext(_t);return t||A(!1),t}function so(e){let t=d.useContext(Hn);return t||A(!1),t}function io(e){let t=d.useContext(W);return t||A(!1),t}function Er(e){let t=io(),r=t.matches[t.matches.length-1];return r.route.id||A(!1),r.route.id}function co(){var e;let t=d.useContext(yr),r=so(),n=Er();return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function lo(){let{router:e}=ao(wr.UseNavigateStable),t=Er(Sr.UseNavigateStable),r=d.useRef(!1);return xr(()=>{r.current=!0}),d.useCallback(function(o,a){a===void 0&&(a={}),r.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,Ee({fromRouteId:t},a)))},[e,t])}const Jt={};function uo(e,t,r){Jt[e]||(Jt[e]=!0)}function fo(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function ho(e){let{to:t,replace:r,state:n,relative:o}=e;he()||A(!1);let{future:a,static:s}=d.useContext(X),{matches:c}=d.useContext(W),{pathname:i}=pe(),f=Ye(),u=jt(t,Pt(c,a.v7_relativeSplatPath),i,o==="path"),l=JSON.stringify(u);return d.useEffect(()=>f(JSON.parse(l),{replace:r,state:n,relative:o}),[f,l,o,r,n]),null}function M(e){A(!1)}function po(e){let{basename:t="/",children:r=null,location:n,navigationType:o=Y.Pop,navigator:a,static:s=!1,future:c}=e;he()&&A(!1);let i=t.replace(/^\/*/,"/"),f=d.useMemo(()=>({basename:i,navigator:a,static:s,future:Ee({v7_relativeSplatPath:!1},c)}),[i,c,a,s]);typeof n=="string"&&(n=de(n));let{pathname:u="/",search:l="",hash:h="",state:m=null,key:v="default"}=n,y=d.useMemo(()=>{let g=Rt(u,i);return g==null?null:{location:{pathname:g,search:l,hash:h,state:m,key:v},navigationType:o}},[i,u,l,h,m,v,o]);return y==null?null:d.createElement(X.Provider,{value:f},d.createElement(Je.Provider,{children:r,value:y}))}function mo(e){let{children:t,location:r}=e;return Zn(ht(t),r)}new Promise(()=>{});function ht(e,t){t===void 0&&(t=[]);let r=[];return d.Children.forEach(e,(n,o)=>{if(!d.isValidElement(n))return;let a=[...t,o];if(n.type===d.Fragment){r.push.apply(r,ht(n.props.children,a));return}n.type!==M&&A(!1),!n.props.index||!n.props.children||A(!1);let s={id:n.props.id||a.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(s.children=ht(n.props.children,a)),r.push(s)}),r}/** + * React Router DOM v6.30.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function pt(){return pt=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[o]=e[o]);return r}function vo(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function yo(e,t){return e.button===0&&(!t||t==="_self")&&!vo(e)}function mt(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,r)=>{let n=e[r];return t.concat(Array.isArray(n)?n.map(o=>[r,o]):[[r,n]])},[]))}function xo(e,t){let r=mt(e);return t&&t.forEach((n,o)=>{r.has(o)||t.getAll(o).forEach(a=>{r.append(o,a)})}),r}const bo=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],wo="6";try{window.__reactRouterVersion=wo}catch{}const So="startTransition",Yt=gn[So];function Eo(e){let{basename:t,children:r,future:n,window:o}=e,a=d.useRef();a.current==null&&(a.current=En({window:o,v5Compat:!0}));let s=a.current,[c,i]=d.useState({action:s.action,location:s.location}),{v7_startTransition:f}=n||{},u=d.useCallback(l=>{f&&Yt?Yt(()=>i(l)):i(l)},[i,f]);return d.useLayoutEffect(()=>s.listen(u),[s,u]),d.useEffect(()=>fo(n),[n]),d.createElement(po,{basename:t,children:r,location:c.location,navigationType:c.action,navigator:s,future:n})}const Co=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Ro=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Fs=d.forwardRef(function(t,r){let{onClick:n,relative:o,reloadDocument:a,replace:s,state:c,target:i,to:f,preventScrollReset:u,viewTransition:l}=t,h=go(t,bo),{basename:m}=d.useContext(X),v,y=!1;if(typeof f=="string"&&Ro.test(f)&&(v=f,Co))try{let x=new URL(window.location.href),C=f.startsWith("//")?new URL(x.protocol+f):new URL(f),j=Rt(C.pathname,m);C.origin===x.origin&&j!=null?f=j+C.search+C.hash:y=!0}catch{}let g=Kn(f,{relative:o}),w=Po(f,{replace:s,state:c,target:i,preventScrollReset:u,relative:o,viewTransition:l});function S(x){n&&n(x),x.defaultPrevented||w(x)}return d.createElement("a",pt({},h,{href:v||g,onClick:y||a?n:S,ref:r,target:i}))});var Ht;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ht||(Ht={}));var Kt;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Kt||(Kt={}));function Po(e,t){let{target:r,replace:n,state:o,preventScrollReset:a,relative:s,viewTransition:c}=t===void 0?{}:t,i=Ye(),f=pe(),u=br(e,{relative:s});return d.useCallback(l=>{if(yo(l,r)){l.preventDefault();let h=n!==void 0?n:We(f)===We(u);i(e,{replace:h,state:o,preventScrollReset:a,relative:s,viewTransition:c})}},[f,i,u,n,o,r,e,a,s,c])}function Us(e){let t=d.useRef(mt(e)),r=d.useRef(!1),n=pe(),o=d.useMemo(()=>xo(n.search,r.current?null:t.current),[n.search]),a=Ye(),s=d.useCallback((c,i)=>{const f=mt(typeof c=="function"?c(o):c);r.current=!0,a("?"+f,i)},[a,o]);return[o,s]}const jo="https://project-final-frontend-4bia.onrender.com/api",_o=["failed to fetch","network request failed","timeout","connection refused","service unavailable","internal server error"],J={maxAttempts:4,maxDelay:2e4,coldStartTimeouts:[15e3,2e4,25e3,3e4],retryDelays:[5e3,1e4,15e3,2e4]},Ao=e=>{if(!e||!e.message)return!1;const t=e.message.toLowerCase();return _o.some(r=>t.includes(r))},To=e=>J.retryDelays[e-1]||J.maxDelay,Cr=()=>{try{return localStorage.getItem("authToken")}catch(e){return console.warn("Failed to retrieve auth token from localStorage:",e),null}},Io=(e={})=>{const t={"Content-Type":"application/json",...e},r=Cr();return r&&(t.Authorization=`Bearer ${r}`),t},Oo=(e={})=>{const t={...e},r=Cr();return r&&(t.Authorization=`Bearer ${r}`),t};class ko{constructor(){this.baseURL=jo}async request(t,r={}){const n=`${this.baseURL}${t}`,{retryAttempts:o=0,onRetry:a}=r,s=oi.abort(),s),u=await fetch(n,{...c,signal:i.signal});if(clearTimeout(f),!u.ok){const l=await u.json().catch(()=>({})),h=new Error(l.message||`HTTP error! status: ${u.status}`);throw h.status=u.status,h}return await u.json()}catch(i){if(i.name==="AbortError"){const u=new Error("Request timeout");throw u.name="AbortError",u.status=408,u}if(Ao(i)&&osetTimeout(h,l)),this.request(t,{...r,retryAttempts:u,onRetry:a})}throw console.error("API request failed:",i),i}}async get(t,r={}){const n=new URLSearchParams(r).toString(),o=n?`${t}?${n}`:t;return this.request(o,{method:"GET"})}async post(t,r={},n={}){return this.request(t,{method:"POST",body:JSON.stringify(r),...n})}async put(t,r={}){return this.request(t,{method:"PUT",body:JSON.stringify(r)})}async patch(t,r={}){return this.request(t,{method:"PATCH",body:JSON.stringify(r)})}async delete(t){return this.request(t,{method:"DELETE"})}async uploadFile(t,r){return this.request(t,{method:"POST",body:r,headers:Oo()})}}const Q=new ko,it={register:(e,t={})=>Q.post("/auth/register",e,t),login:(e,t={})=>Q.post("/auth/login",e,t),logout:()=>Q.post("/auth/logout"),logoutAll:()=>Q.post("/auth/logout-all"),refreshToken:()=>Q.post("/auth/refresh"),getProfile:()=>Q.get("/auth/profile"),updateProfile:e=>Q.put("/auth/profile",e)},Rr=d.createContext(),No=()=>{const e=d.useContext(Rr);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},Lo=({children:e})=>{const[t,r]=d.useState(null),[n,o]=d.useState(!0),a=Ye();d.useEffect(()=>{const l=localStorage.getItem("authToken"),h=localStorage.getItem("userData");if(l&&h)try{r(JSON.parse(h))}catch(m){console.error("Error parsing user data:",m),localStorage.removeItem("authToken"),localStorage.removeItem("userData")}o(!1)},[]);const u={user:t,loading:n,login:async(l,h,m)=>{try{o(!0);const v=await it.login({email:l,password:h},{onRetry:m}),{token:y,user:g}=v.data;return localStorage.setItem("authToken",y),localStorage.setItem("userData",JSON.stringify(g)),r(g),a("/dashboard"),{success:!0}}catch(v){return{success:!1,error:v.message}}finally{o(!1)}},register:async(l,h,m)=>{try{if(o(!0),h!==m)throw new Error("Passwords do not match");const v=await it.register({email:l,password:h}),{token:y,user:g}=v.data;return localStorage.setItem("authToken",y),localStorage.setItem("userData",JSON.stringify(g)),r(g),a("/dashboard"),{success:!0}}catch(v){return{success:!1,error:v.message}}finally{o(!1)}},logout:async()=>{try{await it.logout()}catch(l){console.error("Logout API call failed:",l)}finally{localStorage.removeItem("authToken"),localStorage.removeItem("userData"),r(null),a("/")}},isAdmin:()=>(t==null?void 0:t.role)==="admin"};return p.jsx(Rr.Provider,{value:u,children:e})},$o=()=>{const{user:e,loading:t}=No();return{user:e,loading:t,isAuthenticated:!!e,isLoading:t}};var O=function(){return O=Object.assign||function(t){for(var r,n=1,o=arguments.length;n0?I(me,--L):0,ce--,T===10&&(ce=1,Ke--),T}function D(){return T=L2||vt(T)>3?"":" "}function Vo(e,t){for(;--t&&D()&&!(T<48||T>102||T>57&&T<65||T>70&&T<97););return Ze(e,ze()+(t<6&&te()==32&&D()==32))}function yt(e){for(;D();)switch(T){case e:return L;case 34:case 39:e!==34&&e!==39&&yt(T);break;case 40:e===41&&yt(e);break;case 92:D();break}return L}function Jo(e,t){for(;D()&&e+T!==57;)if(e+T===84&&te()===47)break;return"/*"+Ze(t,L-1)+"*"+Tt(e===47?e:D())}function Yo(e){for(;!vt(te());)D();return Ze(e,L)}function Ho(e){return qo(Be("",null,null,null,[""],e=Wo(e),0,[0],e))}function Be(e,t,r,n,o,a,s,c,i){for(var f=0,u=0,l=s,h=0,m=0,v=0,y=1,g=1,w=1,S=0,x="",C=o,j=a,P=n,E=x;g;)switch(v=S,S=D()){case 40:if(v!=108&&I(E,l-1)==58){De(E+=b(ct(S),"&","&\f"),"&\f",_r(f?c[f-1]:0))!=-1&&(w=-1);break}case 34:case 39:case 91:E+=ct(S);break;case 9:case 10:case 13:case 32:E+=Go(v);break;case 92:E+=Vo(ze()-1,7);continue;case 47:switch(te()){case 42:case 47:be(Ko(Jo(D(),ze()),t,r,i),i);break;default:E+="/"}break;case 123*y:c[f++]=z(E)*w;case 125*y:case 59:case 0:switch(S){case 0:case 125:g=0;case 59+u:w==-1&&(E=b(E,/\f/g,"")),m>0&&z(E)-l&&be(m>32?Qt(E+";",n,r,l-1,i):Qt(b(E," ","")+";",n,r,l-2,i),i);break;case 59:E+=";";default:if(be(P=Zt(E,t,r,f,u,o,c,x,C=[],j=[],l,a),a),S===123)if(u===0)Be(E,t,P,P,C,a,l,c,j);else switch(h===99&&I(E,3)===110?100:h){case 100:case 108:case 109:case 115:Be(e,P,P,n&&be(Zt(e,P,P,0,0,o,c,x,o,C=[],l,j),j),o,j,l,c,n?C:j);break;default:Be(E,P,P,P,[""],j,0,c,j)}}f=u=m=0,y=w=1,x=E="",l=s;break;case 58:l=1+z(E),m=v;default:if(y<1){if(S==123)--y;else if(S==125&&y++==0&&Uo()==125)continue}switch(E+=Tt(S),S*y){case 38:w=u>0?1:(E+="\f",-1);break;case 44:c[f++]=(z(E)-1)*w,w=1;break;case 64:te()===45&&(E+=ct(D())),h=te(),u=l=z(x=E+=Yo(ze())),S++;break;case 45:v===45&&z(E)==2&&(y=0)}}return a}function Zt(e,t,r,n,o,a,s,c,i,f,u,l){for(var h=o-1,m=o===0?a:[""],v=Tr(m),y=0,g=0,w=0;y0?m[S]+" "+x:b(x,/&\f/g,m[S])))&&(i[w++]=C);return Xe(e,t,r,o===0?He:c,i,f,u,l)}function Ko(e,t,r,n){return Xe(e,t,r,Pr,Tt(Fo()),ie(e,2,-2),0,n)}function Qt(e,t,r,n,o){return Xe(e,t,r,At,ie(e,0,n),ie(e,n+1,-1),n,o)}function Or(e,t,r){switch(Bo(e,t)){case 5103:return R+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return R+e+e;case 4789:return we+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return R+e+we+e+_+e+e;case 5936:switch(I(e,t+11)){case 114:return R+e+_+b(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return R+e+_+b(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return R+e+_+b(e,/[svh]\w+-[tblr]{2}/,"lr")+e}case 6828:case 4268:case 2903:return R+e+_+e+e;case 6165:return R+e+_+"flex-"+e+e;case 5187:return R+e+b(e,/(\w+).+(:[^]+)/,R+"box-$1$2"+_+"flex-$1$2")+e;case 5443:return R+e+_+"flex-item-"+b(e,/flex-|-self/g,"")+(F(e,/flex-|baseline/)?"":_+"grid-row-"+b(e,/flex-|-self/g,""))+e;case 4675:return R+e+_+"flex-line-pack"+b(e,/align-content|flex-|-self/g,"")+e;case 5548:return R+e+_+b(e,"shrink","negative")+e;case 5292:return R+e+_+b(e,"basis","preferred-size")+e;case 6060:return R+"box-"+b(e,"-grow","")+R+e+_+b(e,"grow","positive")+e;case 4554:return R+b(e,/([^-])(transform)/g,"$1"+R+"$2")+e;case 6187:return b(b(b(e,/(zoom-|grab)/,R+"$1"),/(image-set)/,R+"$1"),e,"")+e;case 5495:case 3959:return b(e,/(image-set\([^]*)/,R+"$1$`$1");case 4968:return b(b(e,/(.+:)(flex-)?(.*)/,R+"box-pack:$3"+_+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+R+e+e;case 4200:if(!F(e,/flex-|baseline/))return _+"grid-column-align"+ie(e,t)+e;break;case 2592:case 3360:return _+b(e,"template-","")+e;case 4384:case 3616:return r&&r.some(function(n,o){return t=o,F(n.props,/grid-\w+-end/)})?~De(e+(r=r[t].value),"span",0)?e:_+b(e,"-start","")+e+_+"grid-row-span:"+(~De(r,"span",0)?F(r,/\d+/):+F(r,/\d+/)-+F(e,/\d+/))+";":_+b(e,"-start","")+e;case 4896:case 4128:return r&&r.some(function(n){return F(n.props,/grid-\w+-start/)})?e:_+b(b(e,"-end","-span"),"span ","")+e;case 4095:case 3583:case 4068:case 2532:return b(e,/(.+)-inline(.+)/,R+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(z(e)-1-t>6)switch(I(e,t+1)){case 109:if(I(e,t+4)!==45)break;case 102:return b(e,/(.+:)(.+)-([^]+)/,"$1"+R+"$2-$3$1"+we+(I(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~De(e,"stretch",0)?Or(b(e,"stretch","fill-available"),t,r)+e:e}break;case 5152:case 5920:return b(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(n,o,a,s,c,i,f){return _+o+":"+a+f+(s?_+o+"-span:"+(c?i:+i-+a)+f:"")+e});case 4949:if(I(e,t+6)===121)return b(e,":",":"+R)+e;break;case 6444:switch(I(e,I(e,14)===45?18:11)){case 120:return b(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+R+(I(e,14)===45?"inline-":"")+"box$3$1"+R+"$2$3$1"+_+"$2box$3")+e;case 100:return b(e,":",":"+_)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return b(e,"scroll-","scroll-snap-")+e}return e}function qe(e,t){for(var r="",n=0;n-1&&!e.return)switch(e.type){case At:e.return=Or(e.value,e.length,r);return;case jr:return qe([V(e,{value:b(e.value,"@","@"+R)})],n);case He:if(e.length)return Mo(r=e.props,function(o){switch(F(o,n=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":ae(V(e,{props:[b(o,/:(read-\w+)/,":"+we+"$1")]})),ae(V(e,{props:[o]})),gt(e,{props:Xt(r,n)});break;case"::placeholder":ae(V(e,{props:[b(o,/:(plac\w+)/,":"+R+"input-$1")]})),ae(V(e,{props:[b(o,/:(plac\w+)/,":"+we+"$1")]})),ae(V(e,{props:[b(o,/:(plac\w+)/,_+"input-$1")]})),ae(V(e,{props:[o]})),gt(e,{props:Xt(r,n)});break}return""})}}var ta={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},k={},le=typeof process<"u"&&k!==void 0&&(k.REACT_APP_SC_ATTR||k.SC_ATTR)||"data-styled",kr="active",Nr="data-styled-version",Qe="6.1.19",It=`/*!sc*/ +`,Ge=typeof window<"u"&&typeof document<"u",ra=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process<"u"&&k!==void 0&&k.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&k.REACT_APP_SC_DISABLE_SPEEDY!==""?k.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&k.REACT_APP_SC_DISABLE_SPEEDY:typeof process<"u"&&k!==void 0&&k.SC_DISABLE_SPEEDY!==void 0&&k.SC_DISABLE_SPEEDY!==""&&k.SC_DISABLE_SPEEDY!=="false"&&k.SC_DISABLE_SPEEDY),et=Object.freeze([]),ue=Object.freeze({});function na(e,t,r){return r===void 0&&(r=ue),e.theme!==r.theme&&e.theme||t||r.theme}var Lr=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),oa=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,aa=/(^-|-$)/g;function er(e){return e.replace(oa,"-").replace(aa,"")}var sa=/(a)(d)/gi,Ne=52,tr=function(e){return String.fromCharCode(e+(e>25?39:97))};function xt(e){var t,r="";for(t=Math.abs(e);t>Ne;t=t/Ne|0)r=tr(t%Ne)+r;return(tr(t%Ne)+r).replace(sa,"$1-$2")}var lt,$r=5381,se=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},Dr=function(e){return se($r,e)};function zr(e){return xt(Dr(e)>>>0)}function ia(e){return e.displayName||e.name||"Component"}function ut(e){return typeof e=="string"&&!0}var Br=typeof Symbol=="function"&&Symbol.for,Mr=Br?Symbol.for("react.memo"):60115,ca=Br?Symbol.for("react.forward_ref"):60112,la={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},ua={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Fr={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},fa=((lt={})[ca]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},lt[Mr]=Fr,lt);function rr(e){return("type"in(t=e)&&t.type.$$typeof)===Mr?Fr:"$$typeof"in e?fa[e.$$typeof]:la;var t}var da=Object.defineProperty,ha=Object.getOwnPropertyNames,nr=Object.getOwnPropertySymbols,pa=Object.getOwnPropertyDescriptor,ma=Object.getPrototypeOf,or=Object.prototype;function Ur(e,t,r){if(typeof t!="string"){if(or){var n=ma(t);n&&n!==or&&Ur(e,n,r)}var o=ha(t);nr&&(o=o.concat(nr(t)));for(var a=rr(e),s=rr(t),c=0;c0?" Args: ".concat(t.join(", ")):""))}var ga=function(){function e(t){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=t}return e.prototype.indexOfGroup=function(t){for(var r=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,o=n.length,a=o;t>=a;)if((a<<=1)<0)throw Pe(16,"".concat(t));this.groupSizes=new Uint32Array(a),this.groupSizes.set(n),this.length=a;for(var s=o;s=this.length||this.groupSizes[t]===0)return r;for(var n=this.groupSizes[t],o=this.indexOfGroup(t),a=o+n,s=o;s=0){var n=document.createTextNode(r);return this.element.insertBefore(n,this.nodes[t]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(t){this.element.removeChild(this.nodes[t]),this.length--},e.prototype.getRule=function(t){return t0&&(g+="".concat(w,","))}),i+="".concat(v).concat(y,'{content:"').concat(g,'"}').concat(It)},u=0;u0?".".concat(t):h},u=i.slice();u.push(function(h){h.type===He&&h.value.includes("&")&&(h.props[0]=h.props[0].replace(ja,r).replace(n,f))}),s.prefix&&u.push(ea),u.push(Xo);var l=function(h,m,v,y){m===void 0&&(m=""),v===void 0&&(v=""),y===void 0&&(y="&"),t=y,r=m,n=new RegExp("\\".concat(r,"\\b"),"g");var g=h.replace(_a,""),w=Ho(v||m?"".concat(v," ").concat(m," { ").concat(g," }"):g);s.namespace&&(w=Gr(w,s.namespace));var S=[];return qe(w,Zo(u.concat(Qo(function(x){return S.push(x)})))),S};return l.hash=i.length?i.reduce(function(h,m){return m.name||Pe(15),se(h,m.name)},$r).toString():"",l}var Ta=new qr,St=Aa(),Vr=N.createContext({shouldForwardProp:void 0,styleSheet:Ta,stylis:St});Vr.Consumer;N.createContext(void 0);function ir(){return d.useContext(Vr)}var Jr=function(){function e(t,r){var n=this;this.inject=function(o,a){a===void 0&&(a=St);var s=n.name+a.hash;o.hasNameForId(n.id,s)||o.insertRules(n.id,s,a(n.rules,s,"@keyframes"))},this.name=t,this.id="sc-keyframes-".concat(t),this.rules=r,kt(this,function(){throw Pe(12,String(n.name))})}return e.prototype.getName=function(t){return t===void 0&&(t=St),this.name+t.hash},e}(),Ia=function(e){return e>="A"&&e<="Z"};function cr(e){for(var t="",r=0;r>>0);if(!r.hasNameForId(this.componentId,s)){var c=n(a,".".concat(s),void 0,this.componentId);r.insertRules(this.componentId,s,c)}o=ee(o,s),this.staticRulesId=s}else{for(var i=se(this.baseHash,n.hash),f="",u=0;u>>0);r.hasNameForId(this.componentId,m)||r.insertRules(this.componentId,m,n(f,".".concat(m),void 0,this.componentId)),o=ee(o,m)}}return o},e}(),Kr=N.createContext(void 0);Kr.Consumer;var ft={};function La(e,t,r){var n=Ot(e),o=e,a=!ut(e),s=t.attrs,c=s===void 0?et:s,i=t.componentId,f=i===void 0?function(C,j){var P=typeof C!="string"?"sc":er(C);ft[P]=(ft[P]||0)+1;var E="".concat(P,"-").concat(zr(Qe+P+ft[P]));return j?"".concat(j,"-").concat(E):E}(t.displayName,t.parentComponentId):i,u=t.displayName,l=u===void 0?function(C){return ut(C)?"styled.".concat(C):"Styled(".concat(ia(C),")")}(e):u,h=t.displayName&&t.componentId?"".concat(er(t.displayName),"-").concat(t.componentId):t.componentId||f,m=n&&o.attrs?o.attrs.concat(c).filter(Boolean):c,v=t.shouldForwardProp;if(n&&o.shouldForwardProp){var y=o.shouldForwardProp;if(t.shouldForwardProp){var g=t.shouldForwardProp;v=function(C,j){return y(C,j)&&g(C,j)}}else v=y}var w=new Na(r,h,n?o.componentStyle:void 0);function S(C,j){return function(P,E,oe){var je=P.attrs,nn=P.componentStyle,on=P.defaultProps,an=P.foldedComponentIds,sn=P.styledComponentId,cn=P.target,ln=N.useContext(Kr),un=ir(),rt=P.shouldForwardProp||un.shouldForwardProp,Dt=na(E,ln,on)||ue,B=function(Ae,ve,Te){for(var ye,Z=O(O({},ve),{className:void 0,theme:Te}),ot=0;ote||"40px"}; + height: ${({size:e})=>e||"40px"}; + border: 3px solid #f3f3f3; + border-top: 3px solid #007bff; + border-radius: 50%; + animation: ${$a} 1s linear infinite; + + ${({color:e})=>e&&` + border-top-color: ${e}; + `} +`,za=({size:e="40px",color:t="#007bff",className:r="",...n})=>p.jsx(Da,{size:e,color:t,className:r,...n}),Ba=$.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 200px; + padding: 2rem; + + ${({fullscreen:e})=>e&&` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + z-index: 9999; + min-height: 100vh; + `} +`,Ma=$.div` + margin-bottom: 1rem; +`,Fa=$.p` + color: #666; + font-size: 0.9rem; + margin: 0; + text-align: center; +`,Zr=({text:e="Loading...",size:t="40px",fullscreen:r=!1,className:n="",spinnerColor:o="#007bff"})=>p.jsxs(Ba,{fullscreen:r,className:n,role:"status","aria-live":"polite","aria-label":e,children:[p.jsx(Ma,{children:p.jsx(za,{size:t,color:o})}),p.jsx(Fa,{children:e})]}),$e=({children:e})=>{const{isAuthenticated:t,isLoading:r}=$o();return r?p.jsx(Zr,{text:"Authenticating...",fullscreen:!0,size:"48px"}):t?e:p.jsx(ho,{to:"/login",replace:!0})},Qr=d.createContext(),Ua=(e,t)=>{switch(t.type){case"ADD_TOAST":return[...e,t.toast];case"REMOVE_TOAST":return e.filter(r=>r.id!==t.id);case"CLEAR_ALL":return[];default:return e}},Wa=({children:e})=>{const[t,r]=d.useReducer(Ua,[]),n=d.useCallback(l=>{const h=Date.now()+Math.random(),m={id:h,type:"info",duration:5e3,...l};return r({type:"ADD_TOAST",toast:m}),m.duration>0&&setTimeout(()=>{r({type:"REMOVE_TOAST",id:h})},m.duration),h},[]),o=d.useCallback(l=>{r({type:"REMOVE_TOAST",id:l})},[]),a=d.useCallback(()=>{r({type:"CLEAR_ALL"})},[]),s=d.useCallback((l,h={})=>n({message:l,type:"success",...h}),[n]),c=d.useCallback((l,h={})=>n({message:l,type:"error",duration:7e3,...h}),[n]),i=d.useCallback((l,h={})=>n({message:l,type:"warning",duration:6e3,...h}),[n]),f=d.useCallback((l,h={})=>n({message:l,type:"info",...h}),[n]),u={toasts:t,addToast:n,removeToast:o,clearAll:a,showSuccess:s,showError:c,showWarning:i,showInfo:f};return p.jsx(Qr.Provider,{value:u,children:e})},qa=()=>{const e=d.useContext(Qr);if(!e)throw new Error("useToast must be used within a ToastProvider");return e},en=d.createContext(),Ws=()=>{const e=d.useContext(en);if(!e)throw new Error("useDarkMode must be used within a DarkModeProvider");return e},Ga=({children:e})=>{const[t,r]=d.useState(()=>{const s=localStorage.getItem("darkMode");return s!==null?JSON.parse(s):window.matchMedia("(prefers-color-scheme: dark)").matches}),n=()=>{r(s=>!s)},o=s=>{r(s)};d.useEffect(()=>{localStorage.setItem("darkMode",JSON.stringify(t)),t?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[t]),d.useEffect(()=>{const s=window.matchMedia("(prefers-color-scheme: dark)"),c=i=>{localStorage.getItem("darkMode")===null&&r(i.matches)};return s.addEventListener("change",c),()=>s.removeEventListener("change",c)},[]);const a={isDarkMode:t,toggleDarkMode:n,setDarkMode:o};return p.jsx(en.Provider,{value:a,children:e})},U={SUCCESS:"success",ERROR:"error",WARNING:"warning",INFO:"info"},fr={[U.SUCCESS]:"#28a745",[U.ERROR]:"#dc3545",[U.WARNING]:"#ffc107",[U.INFO]:"#17a2b8"},Va={[U.SUCCESS]:"Success",[U.ERROR]:"Error",[U.WARNING]:"Warning",[U.INFO]:"Info"},$t=e=>fr[e]||fr[U.INFO],Ja=e=>Va[e]||"Notification",Ya=$.div` + width: 20px; + height: 20px; + flex-shrink: 0; + margin-top: 0.125rem; + + svg { + width: 100%; + height: 100%; + fill: ${({$type:e})=>$t(e)}; + } +`,Ha=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"})}),Ka=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"})}),Xa=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z"})}),Za=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z"})}),Qa=e=>{switch(e){case"success":return p.jsx(Ha,{});case"error":return p.jsx(Ka,{});case"warning":return p.jsx(Xa,{});case"info":default:return p.jsx(Za,{})}},es=({type:e})=>p.jsx(Ya,{$type:e,children:Qa(e)}),ts=e=>{const[t,r]=d.useState(100);return d.useEffect(()=>{if(e>0){const n=setInterval(()=>{r(o=>{const a=o-100/(e/100);return a<=0?0:a})},100);return()=>clearInterval(n)}},[e]),t},rs=Lt` + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0); + opacity: 1; + } +`,ns=Lt` + from { + transform: translateX(0); + opacity: 1; + } + to { + transform: translateX(100%); + opacity: 0; + } +`,os=$.div` + position: fixed; + top: 1rem; + right: 1rem; + z-index: 9999; + display: flex; + flex-direction: column; + gap: 0.5rem; + max-width: 420px; + + @media (max-width: 768px) { + left: 1rem; + right: 1rem; + max-width: none; + } +`,as=$.div` + ${({$isExiting:e})=>Nt` + animation: ${e?ns:rs} 0.3s ease-out; + `} +`,ss=$.div` + background: white; + border-radius: 8px; + padding: 1rem; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + border-left: 4px solid ${({$type:e})=>$t(e)}; + display: flex; + align-items: flex-start; + gap: 0.75rem; + position: relative; + + &:focus-within { + outline: 2px solid #007bff; + outline-offset: 2px; + } +`,is=$.div` + flex: 1; + + h4 { + margin: 0 0 0.25rem 0; + font-size: 0.9rem; + font-weight: 600; + color: #333; + } + + p { + margin: 0; + font-size: 0.875rem; + line-height: 1.4; + color: #666; + } +`,cs=$.button` + background: none; + border: none; + cursor: pointer; + padding: 0.25rem; + color: #999; + flex-shrink: 0; + border-radius: 4px; + + &:hover { + color: #666; + background-color: rgba(0, 0, 0, 0.05); + } + + &:focus { + outline: 2px solid #007bff; + outline-offset: 2px; + } + + svg { + width: 16px; + height: 16px; + fill: currentColor; + } +`,ls=$.div` + position: absolute; + bottom: 0; + left: 0; + height: 3px; + background-color: ${({$type:e})=>$t(e)}; + border-radius: 0 0 8px 8px; + width: ${({$progress:e})=>e}%; + transition: width 0.1s linear; +`,us=({toast:e,onRemove:t})=>{const[r,n]=d.useState(!1),o=ts(e.duration),a=()=>{n(!0),setTimeout(()=>t(e.id),300)};return p.jsx(as,{$isExiting:r,children:p.jsxs(ss,{$type:e.type,role:"alert","aria-live":"polite","aria-atomic":"true",children:[p.jsx(es,{type:e.type}),p.jsxs(is,{children:[p.jsx("h4",{children:e.title||Ja(e.type)}),p.jsx("p",{children:e.message})]}),p.jsx(cs,{onClick:a,"aria-label":"Close notification",type:"button",children:p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}),e.duration>0&&p.jsx(ls,{$type:e.type,$progress:o})]})})},fs=()=>{const{toasts:e,removeToast:t}=qa();return p.jsx(os,{"aria-live":"polite","aria-label":"Notifications",children:e.map(r=>p.jsx(us,{toast:r,onRemove:t},r.id))})};function tn(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;tp.jsx("div",{className:ne("bg-white rounded-lg p-8 max-w-2xl w-full shadow-lg text-center",e),...r,children:t}),ps=({className:e,children:t,...r})=>p.jsx("h1",{className:ne("text-red-600 text-3xl mb-4 font-semibold",e),...r,children:t}),ms=({className:e,children:t,...r})=>p.jsx("p",{className:ne("text-gray-600 text-lg leading-relaxed mb-8",e),...r,children:t}),gs=({className:e,error:t,errorInfo:r,...n})=>p.jsxs("details",{className:ne("mb-8 text-left",e),...n,children:[p.jsx("summary",{className:"cursor-pointer text-blue-600 font-medium mb-2 hover:text-blue-800",children:"Show technical details"}),p.jsxs("pre",{className:"bg-gray-50 p-4 rounded overflow-x-auto text-sm text-gray-700 whitespace-pre-wrap break-words",children:[t==null?void 0:t.toString(),r==null?void 0:r.componentStack]})]}),vs={primary:"btn-primary",secondary:"btn-secondary",outline:"btn-outline",ghost:"btn-ghost",link:"btn-link",destructive:"btn-destructive",success:"btn-success"},ys={sm:"h-8 px-3 text-xs",md:"h-10 px-4 py-2",lg:"h-12 px-8",xl:"h-14 px-10 text-lg",icon:"h-10 w-10"},Ue=N.forwardRef(({className:e,variant:t="primary",size:r="md",disabled:n=!1,loading:o=!1,children:a,...s},c)=>p.jsxs("button",{className:ne("btn",vs[t],ys[r],n&&"btn-disabled",o&&"btn-loading",e),ref:c,disabled:n||o,...s,children:[o&&p.jsx("span",{className:"btn-spinner","aria-hidden":"true",children:p.jsxs("svg",{className:"animate-spin h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[p.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),p.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),a]}));Ue.displayName="Button";const rn=N.forwardRef(({className:e,orientation:t="horizontal",size:r="md",variant:n="outline",children:o,...a},s)=>{const c=N.Children.map(o,i=>N.isValidElement(i)?N.cloneElement(i,{size:i.props.size||r,variant:i.props.variant||n}):i);return p.jsx("div",{className:ne("btn-group",t==="horizontal"&&"btn-group-horizontal",t==="vertical"&&"btn-group-vertical",e),ref:s,...a,children:c})});rn.displayName="ButtonGroup";const xs=({onRetry:e,onReload:t,onReportError:r})=>p.jsxs(rn,{className:"flex gap-4 justify-center flex-wrap",children:[p.jsx(Ue,{onClick:e,variant:"primary",children:"Try Again"}),p.jsx(Ue,{onClick:t,variant:"secondary",children:"Refresh Page"}),p.jsx(Ue,{onClick:r,variant:"secondary",children:"Report Error"})]}),tt=e=>{if(!e)return null;const t=new Date(e);return isNaN(t.getTime())?null:t},qs=e=>{const t=tt(e);return t?t.toLocaleString():"Invalid date"},Gs=e=>{const t=tt(e);return t?t.toLocaleDateString():"Invalid date"},Vs=e=>{const t=tt(e);return t?t.toISOString().split("T")[0]:""},bs=e=>{const t=tt(e);return t?t.toISOString():null},ws=({children:e,className:t,...r})=>p.jsx("div",{className:ne("min-h-screen flex items-center justify-center p-8 bg-gray-50",t),role:"alert","aria-live":"assertive",...r,children:e});class Ss extends N.Component{constructor(r){super(r);Oe(this,"handleRetry",()=>{this.setState({hasError:!1,error:null,errorInfo:null})});Oe(this,"handleReload",()=>{window.location.reload()});Oe(this,"handleReportError",()=>{this.errorReporting.reportError(this.state.error,this.state.errorInfo)});this.state={hasError:!1,error:null,errorInfo:null},this.errorReporting={reportError:(n,o)=>{const a={error:n==null?void 0:n.toString(),stack:n==null?void 0:n.stack,componentStack:o==null?void 0:o.componentStack,userAgent:navigator.userAgent,timestamp:bs(new Date),url:window.location.href};navigator.clipboard.writeText(JSON.stringify(a,null,2)).then(()=>{alert("Error details copied to clipboard. Please send this to support.")}).catch(()=>{alert("Failed to copy error details. Please try again.")})},logError:(n,o)=>{console.error("Error caught by boundary:",n,o)}}}static getDerivedStateFromError(r){return{hasError:!0}}componentDidCatch(r,n){this.setState({error:r,errorInfo:n}),this.errorReporting.logError(r,n)}render(){return this.state.hasError?p.jsx(ws,{children:p.jsxs(hs,{children:[p.jsx(ps,{children:"Oops! Something went wrong"}),p.jsx(ms,{children:"We're sorry, but something unexpected happened. You can try refreshing the page or contact support if the problem persists."}),this.state.error&&p.jsx(gs,{error:this.state.error,errorInfo:this.state.errorInfo}),p.jsx(xs,{onRetry:this.handleRetry,onReload:this.handleReload,onReportError:this.handleReportError})]})}):this.props.children}}const Es=({children:e})=>e,Cs=d.lazy(()=>K(()=>import("./LandingPage-QWDx4awI.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(e=>({default:e.LandingPage}))),Rs=d.lazy(()=>K(()=>import("./LoginPage-Ckb0MyS_.js"),__vite__mapDeps([12,10,4,11,1,13,7])).then(e=>({default:e.LoginPage}))),Ps=d.lazy(()=>K(()=>import("./RegisterPage-C1DYj1NC.js"),__vite__mapDeps([14,13,7])).then(e=>({default:e.RegisterPage}))),js=d.lazy(()=>K(()=>import("./DashboardPage-BnZglKQh.js"),__vite__mapDeps([15,9,7,16,17,6,11,1])).then(e=>({default:e.DashboardPage}))),_s=d.lazy(()=>K(()=>import("./MapPage-CWavP_xM.js"),__vite__mapDeps([18,7,16,17,3,4,5,6,19])).then(e=>({default:e.MapPage}))),As=d.lazy(()=>K(()=>import("./TreeDetailPage-D6Enxj1V.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.TreeDetailPage}))),Ts=d.lazy(()=>K(()=>import("./AdminPage-Bc5ol_Rn.js"),__vite__mapDeps([21,5,8,7])).then(e=>({default:e.AdminPage}))),Is=d.lazy(()=>K(()=>import("./ErrorPages-D4z_BlyV.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.NotFoundPage}))),Os=()=>p.jsx(Ss,{children:p.jsx(Eo,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:p.jsx(Ga,{children:p.jsx(Wa,{children:p.jsx(Lo,{children:p.jsxs(Es,{children:[p.jsx(d.Suspense,{fallback:p.jsx(Zr,{fullscreen:!0,text:"Loading page..."}),children:p.jsxs(mo,{children:[p.jsx(M,{path:"/",element:p.jsx(Cs,{})}),p.jsx(M,{path:"/login",element:p.jsx(Rs,{})}),p.jsx(M,{path:"/register",element:p.jsx(Ps,{})}),p.jsx(M,{path:"/dashboard",element:p.jsx($e,{children:p.jsx(js,{})})}),p.jsx(M,{path:"/map",element:p.jsx($e,{children:p.jsx(_s,{})})}),p.jsx(M,{path:"/tree/:id",element:p.jsx($e,{children:p.jsx(As,{})})}),p.jsx(M,{path:"/admin",element:p.jsx($e,{children:p.jsx(Ts,{})})}),p.jsx(M,{path:"*",element:p.jsx(Is,{})})]})}),p.jsx(fs,{})]})})})})})}),ks=(e="root")=>{const t=document.getElementById(e);if(!t)throw new Error(`Root element with id '${e}' not found in the document`);return t},Ns=e=>xn.createRoot(e),Ls=e=>{e.render(p.jsx(N.StrictMode,{children:p.jsx(Os,{})}))},$s=()=>{try{const e=ks(),t=Ns(e);Ls(t)}catch(e){throw console.error("Failed to initialize application:",e),e}};$s();export{rn as B,Fs as L,ho as N,N as R,Ye as a,Sn as b,ds as c,$ as d,Ws as e,ne as f,Zr as g,gn as h,Bs as i,p as j,Us as k,Vs as l,Ms as m,qs as n,Ue as o,Gs as p,d as r,No as u}; diff --git a/frontend/dist/assets/useKeyboardNavigation-C5b08Ak3.js b/frontend/dist/assets/useKeyboardNavigation-C5b08Ak3.js new file mode 100644 index 0000000000..529e3a0b8b --- /dev/null +++ b/frontend/dist/assets/useKeyboardNavigation-C5b08Ak3.js @@ -0,0 +1 @@ +import{r as s}from"./index-DJ39NcK9.js";const T=(A={})=>{const{onEscape:f,onEnter:d,onSpace:b,onArrowUp:m,onArrowDown:p,onArrowLeft:k,onArrowRight:E,onTab:w,trapFocus:h=!1,autoFocus:g=!1,disabled:D=!1}=A,l=s.useRef(null),a=s.useRef([]),x=s.useCallback(()=>{if(!l.current)return[];const e=["button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","a[href]:not([disabled])",'[tabindex]:not([tabindex="-1"]):not([disabled])',"summary:not([disabled])"];return Array.from(l.current.querySelectorAll(e.join(","))).filter(t=>{const r=window.getComputedStyle(t);return r.display!=="none"&&r.visibility!=="hidden"})},[]),n=s.useCallback(()=>{a.current=x()},[x]),u=s.useCallback(e=>{if(D)return;const{key:t,shiftKey:r,ctrlKey:c,altKey:o,metaKey:i}=e;if(!((c||o||i)&&t!=="Tab"))switch(t){case"Escape":f&&(e.preventDefault(),f(e));break;case"Enter":d&&(e.preventDefault(),d(e));break;case" ":b&&(e.preventDefault(),b(e));break;case"ArrowUp":m&&(e.preventDefault(),m(e));break;case"ArrowDown":p&&(e.preventDefault(),p(e));break;case"ArrowLeft":k&&(e.preventDefault(),k(e));break;case"ArrowRight":E&&(e.preventDefault(),E(e));break;case"Tab":h&&a.current.length>0&&(e.preventDefault(),C(r)),w&&w(e);break}},[D,f,d,b,m,p,k,E,w,h]),C=s.useCallback(e=>{var i;n();const t=a.current;if(t.length===0)return;const r=document.activeElement,c=t.indexOf(r);let o;e?o=c<=0?t.length-1:c-1:o=c>=t.length-1?0:c+1,(i=t[o])==null||i.focus()},[n]),y=s.useCallback(()=>{var t;n(),(t=a.current[0])==null||t.focus()},[n]),v=s.useCallback(()=>{var t;n();const e=a.current;(t=e[e.length-1])==null||t.focus()},[n]),I=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r>=e.length-1?0:r+1;(o=e[c])==null||o.focus()},[n]),K=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r<=0?e.length-1:r-1;(o=e[c])==null||o.focus()},[n]);return s.useEffect(()=>{const e=l.current;if(e){if(e.addEventListener("keydown",u),g){const t=setTimeout(()=>{y()},100);return()=>{clearTimeout(t),e.removeEventListener("keydown",u)}}return()=>{e.removeEventListener("keydown",u)}}},[u,g,y]),s.useEffect(()=>{n()},[n]),{containerRef:l,focusFirst:y,focusLast:v,focusNext:I,focusPrevious:K,updateFocusableElements:n,getFocusableElements:x}};export{T as u}; diff --git a/frontend/dist/index.html b/frontend/dist/index.html index 54085eb331..f08f16c4db 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -2,12 +2,12 @@ - + - Technigo React Vite Boiler Plate - + ENTity app + - +
diff --git a/frontend/dist/tree.png b/frontend/dist/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..278908c907ca0c0e9cb01e498d3eae356c2208ae GIT binary patch literal 80363 zcmX6^1z1zx``;Lh8jS811(6sb-65bT-7QF$bTb$!tx_tf(gM;TF&F|WCEaX_bc}BH z-}m?5^XxhIZuh?TJ?HcGeNU3!GffII7BT<;K%uRrZU6uf;13A^RD}3}5`z@O4_ppf z22TNi(0c#?JQe`B#Qy}}0007D0Kk?V03e$S05JM|XxEp=|3UEliKaRZM^_~}j6Wmw z(K7eLkNB(bU#z?8DE@%hU;C*B@dhyvN&wz5A*sVt18A$O7zNMo3Znx-anb-MCRGHJ!%W5;`J6de<0|$C&~edX*%-Wk$dXgHJ)g%}(#y^()b~UrY9Z zK~6zV&c7lGojGO~-!Jk?Ny*?pqDhH%c6J%|Nx}4cM7>jcJ{ZXL0;zB~c!mYFtBbbb z2)>q&wSjN!qVt)rIaIPS8A8z2Ysg^-iv+~-!($_#A!pl8XPYL=mw==n7KN*Y^9*%iVyac}UFW|avd z^FVFnSH?#I#|y|cC&HB2CybtFL~RV}v+mhyKtIw6TJJ}F7xxJhB~$?Sm+2hbkg4^w z6d!_uU-C_c5dVAuUU}C3{y9L(w3{Ddb^o0X4Gu$Pteb)@S>aHF~PSPD7fllbAXz z;H=%=W?eEdIgab?N9x8)(q-}(mTlyur8Ufh5CUO)_1|jn5-p|JUZclA=X21=FF?i< zMAvu087^vnRfD~&v5SBWdcfzI%58gidX>1VU4|m;KYxRlT#7u23OI8- z4v5e!sd~~PRfJK34N+_f6BH1u0+dXh$B|sS&q)Aaa8j{l809T%_9JA=5~eSzJuD@9 zB_#OyGBsfJl2EalptC!sT5~D@m6s8%@*1Y&27%DC_N)$*v{;LLV;Vk<)#(D1%8P2PG)nIytfIvKuRCpA)0-u<# z4qzkrQ(PeF76*>g`|1RNs>_{v=jQyE0(8OjzG2E~Csb(S$XfV}4Auqe#i-(>;tz;* zjvhP3o(Huqu+})m;A(oKUSOQugZ+WMe9AheKKq1`oXQ0QdM`yfjHqqGK|ckFR=$o1 z*-H3S(0X(b{%S!jyHXuywr`NAD3=)rSI7=of&LxdeV~CyBlPv6!f^~j(4IN z(Xu7?y6<2&gKrlB$6x=<4{fOG zf5=n3<`6Iuz*YJmQQY#C%EuMzeaP3M=w?5KNB-*>8rq)*UW29U|Yzp;Zb7fw?8 zMWkoK-m-+GWe^K>uJbkWFR;#^QfG(MnXh8IE0KIZkNowfyX5Rc!QvNO)0Rq+b=CY!j=>GDmfIxBokj6*?-Z`7nMQ$Bf~7z#wKG-Ct3m^zrqmP}{-w>%KMB@^$gR>%s6 z5pmthMoikY)00;}14-6S6K0y*+u>kv1?WFQOy$uRr^Xv%6q2dBsw}d9>wA%jO2xmP zVs~Og`uF2StNeNAg;Vchha;GxSXCbpD`@kE44(_9MFb`LAG2*{8OU)LioA4LSaLjKon)q4JGeWzmFZ1ia|6C zx-lhwus|@AqsxD?fU5f>-Vw$S1GOvE&l|Dct@7?&{imn8P~gOLA;XyuZ*qKiyie5P zl_~KQUNUT)I{~e)>GPp;%&^Bh3&e4%#hH>K{qi}}NW4Q~j*=&~mNfqXsxKmA9TuNy z`}kwSBJPCd_#lC`toxMcgC^$xvAHFL( z&e4mMfBOq`S6rOB}eGbh~;v z$D;xHF-PA3j2Nu_ZqDbp;vnKyCE!&Mad|$_JO|atGKS%a)$GZ~^~~9#?MQa2$Og!f zQwLP9S7g2)umUe^;J!D-{qOazl*;{?5BuSpK})Ie{XdYT|LNVOTG@y-41Bp3T@>{7 zrcWk61KVE(^J82Mhl?KR3T=Q<%+~f}!Xy{aD=3XYe5{NTVm&HhpbBH4-TIQV*Xp<+ zfse-2;eWX?Nk?aP{5lJ4T826srC+yy01sJ*< zUzA1_NL$j0i~s~jkmTJ{ou1*I@fs zOUqIQ;vfknn4O5$mlH&l#$kfDSygi%g6#AST|&9yj@;~&+;RruYSF2eKIbw!Ve78I zB}pSV%}J4G;06oHKSsd2h?rt(SRF0iHfXUhHxcKFMY(IzCN+^ ze%i_Q@pp?lvTGB9${W>catnk+j9X#OrCPEs#>{JHg+60?EW)|e8y%+!`vj2)VOae2 z9Pc}l{)-(+KZ?U%RZw1WA{R&MPRSOnioS{5UvDbAH{XK?eTUxExsR)DXqdQ@MRjtt zW<;B;xPf{woG4TxHo8zX+H0%bp4Wv6iZ_W=O6}&j-=45LeAj;{gMMxAX{T;qoEC+H zonpeRVX{MwuPn%dTWM`ZftJ7C+%^G1{rl6KejzusT!L+^#U(7jCNPgj6a|m` zvj38{#MljqkA>3@Rexf=eu!#qls~Vk57miVcAi2*`_Y9aqQK0I6QYeK%8tO-FTqhT z=wapVZ3I~M6t1ntj;>m7WT!kqly)2$UabwzXwx znVHjop$X&)Q%(M|+cUCPL)-TMw1Ptz`*)P`#il{=cO`NyAlG>bs#%3adxh9Vh4Nsk zLr+lpKkXr90))q)RqHIlsU-YqVb7j7=8&9=mfec9T`c>C-bpyNy^3bEP~~!f3Lqx- zGu5q+`@BmgrJ4*HH6ZVv*mK~1b1>AaQ`Ym5Bsh|+;0f}EJ9h-W5M?Jocn*+Lj#oZ@ zK-EUsd!(Xnh(6+7RSQV;rjIeV>}gQ{Y22nlRt#wC`&NOkejbGZQ9K}nT7P|>I42hK#cqouaT)P<`bx;jO!21p_-XlHs7Rbz7770> z9f1XK?lrD8F$cY7C(S|lO`x~tolgnn;t8O7cvY-tunB8!y>8kRO|B2xM&a`#%IYYh zYo(aVi6RVtuyC)(kn^Pt*ZtO60|u+q6XQ#)1H3RpBE(LwZs<6A>^fMF1SCNoPw>>6=#sN$eCkbn1@ z2Rw}MyRzG_t@|s%woGo?j{19|{Ln>$BQlcRH>=O*^35_Sp_t0CUF#Vrcn{%`3MX$5 zGx&Qy^fEAym~tk1le72m7k1+*ea+SK&Lg1#<83k}B9%7Vq$x5MM>ag1cZx@Jq28p0 zSusgnRO0cgVNWK$pY0JfWvdMEyR_53N+ZhN+6!=Uc7MS@D^9ovL6DCk^ZsD#I6B6O z9y6k_Y1#U9f#rs7Y{#@e!u$hgX$b#Tp|Z2MF0{KO0WQai*JkvGoyiAJ9bx~;PLUJc z?|qbMButE0o$^iyqT37nN1SqNJ(hzJ{qI}Gi|oCw$=NxU26jYa?8vi!Djd1H;1#bp z%YTz6pFG$n=V*^z$PCjF`}8S>FmbB?5FQ&&Syv>#DOJ<*e61KZ7Qp7kiAwHPS#cjb zCdcB;mK@5bDIjd=7QLWZed73sG3>UL?%EdxS!lEpsVp1IDj_7g7g6L7S%LlgSHZcDNjme5+k8;ej)^XtMIV$UbN2W`9&RfTJ|9ZDUyvJf1r0ENL!3MC53^+JCh zUdIf3$eFT9n!cCOxNo@&2(@RwuBSfK=`|x81bk}FG6!kWkP;$M!Z81Cmg}C|5f$-j z@^~v&^!5o%L`Uj;zz%W?2H#H=p(0S+M-|1uzL2b5yfrIc5uQ9<$se|xZ&0R4=}`jV zle$f2-Ha2g^^5bTUs&fmXJ%4oPi|jrW6I8oaN5|YJU&HGiix8gn&ld<1v5?%zOtWw z$bZhGO-nFY-&-wN_pOQS$=3dPQfRCR-(7nz)0ovt35$SVX$}$D$dY)?3L8(gqPiOZ|vGRtkH4LoBDD^4emJ@Z0DHm;_*xqRFY{2XxJqvqr&tPJIWxBFm@~V2X&M>PLIy3B0^> zO0pl6)|1eHG@?C1dsp40Z>cqp##0;_nT5(TEaDS`ae9Ja)Xg?FKr^_JslhLUNp1qL z#VB4yeZoH|8$fq;y>f~L3P*60lzoiQqZV|0KXUmW!H`Do5@n$V$J**Ii{LL(^TI5 zkDwRTB!|f)a5EvI0Y`%6hl2K1;yML}%+7QJ7B5(MN-LDExi{of=E!iaH5L>gAw+B< z!CvnIMUkE)y;Cx}{2pThYftpyOB7^W5x;=b`me85q-Jr=WDNl@J>v6@MMhau6Z`&w zd;!rWBC>L&NzoBLMTEIG(AI&;g_$>He8YH_td>#VK2VUI$Q!=GSf!Mre`m?A<7Z>q z>pwHbG05e>eu{*lQ8ipeMw{#!Dk6m;Q{YD>_U+)}vdAWJhgw2x;%a&ebLe;+HB zcU*9fI!?{>S(*)bT?1>s@<*a<>ZX>VhMgDLGsTe_^lR?UEa3Z(x;~&=)EJ8-9-5-i z0}9By5FxlqZ~3YIKT!FEcHEpO!G{ZAbD?Pz(>LAm|2!$B^e$1zwrDl#N)7DR5|Nvuv8vOkR33iiuy$GR-04s3P^yC)6o zD?Byf4~LBmh*QS+{*kjmp(3Bg#mb!C3L%s4a_tMr{i*o(`6LdF2(J@m+p{s55!_y( zA{mF^dG1eQhFsNGDS7OY-02Bo^UotKFco#eRpc|-fh2|rZ2l(7xf|MI$)Z|s5LM!C zDokjgC;`qoX4~RcXI4pz5ZFbP&CGC3QM;GG(1hk3zU^W1-zhP(FF)_d&%EZ^G0$CL zvk4<*p@&1Kk*^1Qn(xO78J;l{nEy|e&1sdy6NDt{%>z;PW&%OWRHgUCGtHqVx_>+(KpMtVl&8Sco>o8yqI3>|>eSTJiZQ zOW%J|E^S(iG7fW6aznbDuscTXY%Q|Rsuhf4vJSSOH*#n2@|rpclHRVn#>}8w1Mnk% z#1nT+D^v#(GZqubOGR*w$}%5o;2RPkqvlIgm|RHGT$ zW?tP4Cjc>rK228pm2US~Tlx$LL-2Wyk4csa;5~n;Ul)n|2Rqvj@+&HThigVc$f#CE zNWv)9wS`<_EJX)H`$J`dRuPExzsviNIo1*8P%aPAuW~wGoq!(OgS{#?`wogq9LM+y5fRVklfBz~JfxkS2FKRJSp; zKd{#bU$XsV{FW~2lug~VQ8evRxhe|qS){!ka34;rTAqu*%eSv^>6cEg(2~onFE2GZ!xr15j!mrwh$TP|VBu zp{k#mjFv|*gin+x=a3DuQ<~Sx!BlR}R>85z?>pFCmf#l*9XUj&&y1f)S}Z&zigA0? zj|WKL9@$a6{_HHtcfQ4RH$(q!h)A4h({WN z&=;@j_83i_=~Qpf-opzYMwCad+_BYJ%6(K^0FDo_(d+iR&H`4f*W4!9kTMFRZQQXq z!~+#}?>r#zP)(v|$nkb5Ac0w-_`)O?O?npaOD(?G?xzC@z%>{7%I9xJ#LHLN2!qeo z`A2WLo!G4eKiwvB1!hQxF@-M1Gs|#YJ{@xA`BWURdM#7bWFmYsG{e3sSe@&!%(wrz z=3$)pOu>i)vH>m1Q=ml+=Zvk19aV&Xw~!AifZT3fzq(XX>E4GySzNV~-@NkKhZdX| zZrGPZZn1XwbAqEtcDGSp!!SMP1^W!K|CVX(w|#KNLYFjsSNsmM29I)1bJQt$-AfkW;?w^U+e zk4_Pz0%}-cKPDCJaJ|RHPI~mjYIlTcIbPNh7sma&;$GvkYQBp-e@_*8xQYGn3#pKt zMN-LUA;HrBFQ$Amml(mnbOOU}0a5k6N4v(YFC#TxCoMy$o2-w0Jg4_5X0nk9oIQgw zRM$*LK^tyz*^n5#3fk}85EL7GcCVm7Kc($fye&$mT{adt7JZ+ah`I|YGGU|3rG~^u zxO314-O7LpTarYA^qgW;2=*qXRlw&VY93AD{OUW!6Vdvf3hHT*f1Pf3b=_d+?t&0G zN|hiOlpr*q&VnHLh^He$BaYd<{|Apeld5$myENNT{pcC2nF>M{n~)6GVNz8l!^bGD zxpEC$-$CQ}%g1!q9ehRdgPyL^uf8zuO zwjK>F68NV22Gkf*LAjX3JP|M1(Q)fWt&yk9(IE=HkfBYo!f-%(&g*b)BrS(c^pQT5 zxYob#nazy9Gh`V3FF6)}Qkf$4Y)?d_FkYr*({;vs|Kh4}itKwAq^onBEs%4SL7nsG zci9H3dr!c5Kb6Htsm=w!WJ3MdBVw<)wt2lI5{SQ9<&$ejJMpQY?0T+XMfc^yX^(&0VIF9`gK6VK=s z&8qo5Ya(fGcNzyI3o>2x~OZcv!y zlIW<#?VQYqEdIuWW$jiRNwly(Itl4GYm=Q3Ru0Lmx+K;40$K9vX_D{D|L3lX49=Bd zTzt~gnvAx6YnIcPR5C8D#JD_6a8(Or$22e<#WsmZTX|aB0UIxvAN3lpgVZCT$x87i zw$Y#o_5!{2IIvDJiFTJlDD4Y;YWEmCz63SgkyEfOA6@Yu@P+aEpjb`^;cBouF zjQWvaf@UUHZS;Z+R)BOF)YH%ya-n0Q+~-4b$;M$4Cl`P*dDfZ--RlB!JA}ABaI249 zi6W>K-g+ncT!ukZ>y5h7gYm!)lG$5#A9Y@dget#1p63PEK^GdC zY?j8Igl3a($}Vir0Ga7Z^rTD0JaO}hM@M3~?R;%V17hkB zwSV0ANG~K4868NuQfYoe_F5W5(wrTRmd_zcNwdr^7I7HcT; z#)Ok@=lB96-w)xSc@%|LJu59!8aM6Td{mIRc4YZz(X8F`T_OmZ`ZRCfCSk!6_mc?z zK;|u}80ZXg^c!aM7W?-_@XeFKQXwf)Z6!CWxsX`m-f{$Xn}yyhINYBfA7(xx4S}59 z)`=T%xgPP#YhoVlSe!2uB6H}GEj(*In%+hXl;_HhyeZv;Z|*7kLtdVJ9zbQW`gFg( zRNDvBpKk-y<$ZkeN|1Dv`8Qm@oc?gsloWJ339%*V**{yBWejB!&i)!HG;oD)-^nGN z2v=UnJuniXBQ4b#^Cp(~MmMTZ!Tw9lE3hhRqIgF2Y*WvX-+vGKM7ReRh?4W;x>EnM zbJp@+Z^)~7w3kl~tp_L5RkM*Zlylu}5Yv+n2JYRu+kO~ipt@KfE74xfaC$q@-B(&vn}=5=@skOIs2X8q0VFL6D4hfQlJdM27VM8))ZUDP z>mgUdBX7#q?SI(fL&#vcm$fD6>F<|K+jlU*oP2Nj$U1Pb!p=Qm{3g1j*Z-tHoLk4q z=#%?|u`DjR-B@I&)}664`4e$K`aNPRY)uXbc#4qs&&9~g))djxe zV?dV5quDt+)s;q(Er%cy_nj?*Pc-3hJuC|Z#nO{7f$St*8?o#j7GxSEgeoQgmoR6k z0`djV7Q01*B^x7!uElm*P~M2)@;qaNpPt`4vI(cl%A<~XhDZ<4;y{H3{8v8ufNp!{ zG#7pI7`xqCJtua{6At|@#zOX0SshjD$mw8FaQ9V24VqoMSCWi*c&i>?mDSY4o(kp#FR4?9%bxDsoP(B5HaG9wTz)U_qNWKUT7`$tzSnKazHKk5d}pD6w3 z!ym^lr1`=KSJs!#7nP}kmXv(?0a_Vbiy}tw!FMJ#VW`5pm@&<*{a}cIWha?JT7}Yc zt%hm~(uIeGtZr+p45ao`Z$3EAqjF}0%p8cW!)er;r5R%wz}n`b`$6gHh7ZxFWNhhf#6p)U7rI8dmW%E=`zY1nytI!^fX9Q< zLDB`=q`O6W>>-(-VI4Ar9nm2dcT-QFrSl<6dhy*At>Q~*T%OkX-{>BNC2(gbiRj1? zceWrF_WMFHjm#%sb~i|p8x8gT$8F{#rLX>JSt>U#mCiqk`&*GKxjeJp2@m5Y#~4@` zRmieNaWP$s^yD^Rd-%|$(;xqm03ZJgb`d>Z0-4@^7gXM$6#7w5cDR~~)1T2rc8^HI zH3DLZ7*rQT1q9bNx1YEp?|Y^$_gKIOEqs12A1ywdiV9#l22^$w_fC{l*`6%z34yMZ zrUm}}cyWe7AEZ@@Z}MEjxdy{Y`>hdYXE7BVYnNZkIFA741b(5&f06=2V+6d+_z2;t znFlNR1=+0(5Vj9M0G(n;`rs!ofVW=bT2*bRobYT>(yG6}3#!658Ib?D}5fy5jT8M&Kg*^Ir52 zELWb!B1GkllpR)a){1_QLjTOwz)S3`yC9s>Ydt6cV<@@>;KCWgE_ooiAdV=SZAJiW z)Jz^u4C5nD@dRc@(LUgP8wHg&?Z+k3W}%B4QhG{y8aZT*V+6B_m0X(vO1iFv>t5%sQJ7y$i1N1cfNs;^=hy zrLt|6ql+Znh4?t^4#~cI3g=5{Cs0d>3G#Y=LjZ6x{v@T2BcjDcyY8w?9zOnIo*@Lx z`IU2x`RU5{&zfT6;egr=t$>cV%V$?$R}AfZwgj;&PkjY%i&-@6IV1ZqZH1XM^vAFlU|0nu%s_g0<*e<*+N+Rq7)RJ{^?eV6*< zyaCx$)sxurN9?L!%8H4on(1bu}1@#EQ07;i8RWL*!RaronwYV^MS zP*iZ1QV?Zt0mtnjCL1u1XsN(?Gref~jE`?F_8TLA+78OhdJa!D1J;X%i0@}4om){5 z&u2aUS#;SarK$2@w^7q_0ZzjZ6xN$*YLqKl{FN22nWUKsvO&_x$p$!d19@rne=WYUyED0e`?Cu5Vl28Gnqk7R5uwhP~c{ncZ z{7vdDl(I?tcvD+*_?-1Eg5|qWZkNMUAfXZbuZ7HOxhpRy?o0E5&6IwS4JftoGmMk< zuPnJcA|XHWsx~{$@PO&!#ZTfFQGUM6s-l)Z&f-urcE0Ah=JXr^1B*6>3xG|hk%kq> z`6}b!H#R@HMhBzNF_PQakGHUU5`p++X+-@Bea#h2s8b6Ta_imE3YLDy=WcWV+MYw? zvs|2zP?fbIfh`x?B2=||3HFuJQBJwqkBiHME7%{RxC!-aM*g56NVMB0#m2E_*$)Pd?eK>CgB8mOk{^CicVpw4GEhz} z81rn^2%%BSaz-U!vBsv1ys3Y-juIz?^mT8;E-5lkr_|*YeaFn_eq6NW;dXB`wfr?q zO$}IhtZu?oSJypw+MojpEgb6Drt)q0`HC9GR(+(_=XvB*+otJ$vJu31G$5+|hW=c4 zbt96VPoM%y+xAlRlSkCTd{M>g!C1h0x7d3U2^?*+hNF#KX8VBpD_vUGpl7Qlv{$cL zB*bpTT9&zJ4svJ@Id50HiC2iX5y#X%_9=!6ija2K)GJhEyugl*o!2T^Lga0I zeQwo&B8eAt3=tIUopxoXl>YmN29m+(6mfpGxS#Huq+`VeWDS4clcd0R-yMCKEdQtV z9p7~Dkrdd$?M5?{3s@q+w5~}`$3|q=JX?L_Y*t+%m1<(g+Wrx4`-{-;vFh);eSv+a zR4>_YZ}o35)z6*;lSw?;2&Z_k9!E2q{_jzne1)MBD~W@=Hy zO_(jR0+Nrv`^c;`x)VGqmVlWwgbOQ(j@_NavU%)YE%)MY0uwND+h(rhT|Mr&&xB*pWk(nR*RcERHz6F*pgTr+}u+Aq=0XQ(kFCKltV*Z76=#1ob}WTsb{x3@A(m842t9{dMnv#`J15n z989@uY=0{Ke*6P@C#zIvSt59XdSjlbzSi`>s<_4&fy*yMqbloM=zYi<&>yqpz>6Hp z!??MEoy--k#c>jYtlIIGj2Zm|pNeaxYa&HO&>Ko+b;7m0?yf@pZvtDKF;cgWdoG_+ z>Z2oRY~;ua66&_Y+D}MEp4Qz&g2W%S?2|P1C=rKSkac|n>HCS+o-I7r_`syS%fCd^ z-MpbBJz){YEJxrmfPWu(HXa6x0=$JzS~o;5q}t)iwxG_g36o*Mk&Ln{`t~M`04Zo!z) zto-GMhfc)Pc5-ajr(b$=(hHw@wej!!a4*=O-_M;Ue16a2mj6w|viIjZKl~{K8spaN zvA4=h)5KkZl&D4YjqBK!Ww`}|?-XIn9r-WQEq}bx&pC1zXwPFL_7m@Z|4j-UeHzUP zR+Ukr&(0NCA`~ONtt1isEgd9Ty&RCEs`n@3KT}{9LQlzNVjt)NRP{z>#XhW}T}{rPCXfifIRyV~-Ss(ppvnRSY#2?b7A&o4*##&Hd| zr+SVBT(>fw1N`JBygy0+Gwoy{oRsmG^I`r?g+y|LEi7(qEq7unXBxiY3(XRVRW00~ zTzQ6Yv9*lMvbKFU5ls)jKe$*pZnRx<$prsZ?_Xk^YqMQ7xtp1oHr+rwXR^9H!=t&7 zblsu(DabO@O-B9to25KTVXxs(h*~E1u2&vpN4e$1#hElyY~Dn0zi%Zd&w*#A{d zQcmz;Nwf9IEFaC(k1mPY9ESTh?!EsYpWtrFj%-c|M;!`3c#e`1z5tKAb5-I9 z8LdVu^z;eU&#kM zzskjZF;QFHA*Gj+&TO2L!yP=Jo}k-aF&>EI(f={`zUG>4(favYUIBY~qK# z&wq&9ibmLx&6zy6^gG*X?wx#x8@8tF@}Brq?}wv#omO__fppB*lQLSC$8kw1974V| zx?Nz7Q9O^6twL;8EgoiWSZrCi{kGVU zy*zPOCkwCKk}~XV*t-qb4UWI+Vr?Yhw8J=9p3u$g^(0j@UDC z-21Y`!OIKba(7}sOrsWt{Pg7GXC=nAuKp<*T}ynC-+)9E=eLojm9+Fyj`~}qEWORh zLmp0D2AP?eKjvw<^cF+PCBlgxehP?vEznxB<}sgtcLWn|Q%z{lLo7@s@hnLt(d`Qv zxTR?ou4vr8r;n1cjuD3b(&3qF=M`o%S-S7L9utv1*J!hvU&^yBut2Td^jTc#72SJ| zZU(Mx?ab~1!hPu9vu}})pRYS)#=C3W`Z6YkREMQCO!hDc91UEl z2L{mOU8W2cH`mlGo+st;kK+y}PRx!BGp#S@UWhHu$wGFQgy=3#IjL)tNrx7x4z};q zySAE)5sn)pdb6*2h{(&Ic~=ike?4`6Y4$64{&SguwKpAUp`E3LTK3(=>0eV+ZCwIH z+qMy!XQj#hQ_zuvp=&?f{rYRa2m7PoktjZc;KmbQr3Ta0K!faZBi6J^Zm~bDiJEz> z`}an4vwnD%4#I*m2k*a}(5h0mqIY#I19OEjWTG^!@{bzv`v`b5_dlvH;jel8PINDmD|HZ6nWgd=hIDKi)b3f44nBMyJh9#SDG7K^*IDVDi zx6oJgBu0TiLiR>o0jqSh`Ic;pn{X@xj%wM~>ga+Rp9%N{Hu7O`s*$$)#gFo$V!wM*;JD_DRoHMmxvp;QZb$=DgS`}35I@2 z4O86wdC3!!2UDet6U2P~d z(W3IE=Z#R>vX8xBhd3+430NjJgtM{AS~$#3@$oq|M1)jCQ4e$AF)-f&-V@Z}QaJg1 z3nMsn5so!}mkw3c5%o~}Y`8|gQSRy2uqeDm8a-tf3L?qZit$QQdxy;0JFqfZ(bx?{ zpNfv0NmhhkDY=m%+ItCxA67>ec0b~$V{8j(+|sqir?>1O1{QF`ry8$P(&XGz z8v;26>fI2pXmwdT=S@F360E4LP4RpS`mC%_m52MNq#jDifN9Rk>#j-pH=XD)eBz%! ztF~&ADaBx3+g;7Be!AQsuJYn*RCTG=1>@i5-SbG1kR+>f_3u$0>qiDMce3YZx-a+W z<_=#~`Q*U1KAk5kV4Qb(#lzf003v8qPc|MUpXow#mk%G>!;;3EQLtd84PNqY6H z=C9pQ*`;+f_jkJy1uiM4rx}t*Gi}~AZBz`NaiN#Aq;JM(mxZ8wRc5u_B{Rk9N^&&h zpli%21=A`eU(;=m#g%c$7fEm_H17Fd<7=H~HS2W!SLAYc424^0tA7aZo{uG{k_Q@BKwF7Diuc%U~d| zzWdZ}F8IL=y(zJ>-q|^)p*`WM8K(Nxza-YZ4s3AW?koC0h=>y8;wfeW7Q1NBhj7UbQ z{LS2}A0vo*ou;0M`v0Lz2#^c*AvHM$o<6@qeraQjpp1va1kMBRXnzQBG~+>b-h&*+ zt~aW=UkmP$0>g(iMRh}f;7ABm5&sI1aQ;MMpkzn(aj;s>sBtbm=HNNub?KLrcYl^! z<~X0-9Qa#J81uLC=uT`*61-AUPbjPMLZ2H%e#9yQeeZ z&6Y96E%%iDIViVF>&0j?AEKM_s|CC{*&e_5tTT>}je^Np^y5b1TDua|qgG zp#OOCTW%1&lhkCKc^5Q_i|y5WyGIn|t^=-du9;eLlnw+wQJ{{qIYz#Z4iJ^*BE|EF z8%&*($BXSAnXNmKAK8wD0pT%iYGQ87ij#9>L?*~q{y`jQ4Y;!MrwfLpbp&5i5#3ny z=4a(jeXN-zESH@0;-Zs%{;%B)s>F$4eOE{0Ntr$buDVh?mMEZ+k5EDoXe-!hHetNp z7iCC3nSmy{Q7O!`GVG?j*G)aTHTiSD;|Wq+E#IhcYbjwmVRWHql8j0mAFcil|9kZg zw;#w6Y7?L5P>j4c6r<)V;q8TVl$IV3ol{Uk)FV7}p8N|4BVyVFVc3njgsyS`eqH2G zqc>-YmX+zf(xdGyRI=_jRz>`luZ`Y^T>WwMPq80lFcSL0Nm7ie>ztk(s-5M8btA9=0nN;{5MaP()e00B$U)!G#JH%gm-MhTeR}N#mg?nu^(gt&L z6brnX1$upt+;~V*lQpn-A@?V7?GqJ6Y17yU1;O&)O_d4IAaG(iI^Vf~ z(A$hyO3Ff4Y+rFOZ|qcs^-%rcMj(L9%~JU(!%TEkP%ktgT1I#4MBldc1M+u|#*wOx zraM3ts6-+HxT6%W{hP`faD=WEDl7+zqXkmh32g~(X<_71lwxncNpcEDzPPdII?C8L zW!+kWs^a2B(t1}=#;q?Fh6o8&YusV~%w0q+;|4MmiKD&*kM?#d?I!=Vg%YIP1$@JA z)n>g268NxSr%5=at$0Nx+x?~YLnl=B4my60qX-!85o5CiuT2z350n^f0J>$WA&Vlt83iv|!Ef_rxzL@|~1I=|7 zJNPSmkL(BG+cGflGsaN9A$F z8Th?~`TxhxLgYj1xBCo)@`vLopS^?uJ`nj5jB5a2O@PP(me|{nQ3i+?roxbZaCK#RmrGUqDqI#k^Vt~305Ajqn+Sgi{u;o0wy&BF0;Ia<2(5KK+696m+3SC~Krm3*Vr_%`d5K3uVB9q&` zqQK1!+WSJL7p+_uz!!p6z^LwU(~7~&1Lp< zgQ1borv#XW^Te<SxL;QF zkbtpex1H#t;B(;Qko6Z|h+ziqhqvNpq{8~cSkHGUstZE&! zx;r}y0{`J@!#Z`nbTkA^BI$$!-Vj|GCS`>$&q3H@tZtL5G7aV(gy%FZowK&bskU+S zEIf{9uqkjBvJbZsPraw5Au!=Zi1Fg-gT$0z*tRW<=m0*SVb%_0FjwJ$J7MoS`{LyK z1xhY+b8jE32#powPSmxvIsZy&rB0|&Kz z@Fr452#5x+%jUIe&j~zzT3te@yqCHG{*JU^P(n!K?NGh13bUL=Th>jm_3P!zfT?&A z^Pvs?f53M&VMHki%Yk|Dx7a3E?L5pM2GunI-I;siO~4*Fup2mK{W-;2f?qQ$@qq0` zVMsX$Y=*hL>WxrU|59}(eDyVCRqn$R+&1h1(NPffKZwc+k$*wdvu2G+^j%<{#r}_pWw}Uo2Tc4gve&i|?WMdnzmdqCMf^YjATATwM-V z8^Mh;a5oD)ehz}&A>sf;*Mpeb;IOuJ4FN?70i6Wl*+ zU(^~eg5NAx7a$Gd>f;F00>5MtaSyfcXv(o=U7hO;j5-GRN>Py(KkD9#d&2Lm{4|lB z`gCGaCcC39+JCgPM`w|h&N%*6mHA>lk(pSg(Rx*hk_%`L=)uAjRIeNxl_8E(GH>;zd&wnWL;vb3ETji-DCqEK7@rB6h zogyQ9inQ?;soY&8cWDvtaU$fkzpa#gB(ia7%G6JC3F;!!aA^F;W?TDtMv45Ujbtg* z4$=#T0AK@)wu_jS+xO9pKjrFNXK>Wn>enlays`G_0VKX(nGzz~=IPQ&!a4CaqdKc& z?jrf#vafw*{Z(ZD1Ls!Z!1MMGHXu^oL*(WpJ0GSE{;!IB(@ey#g_Xfy{lC;bkzI3~ zTlVq@Yx>@ka3XgA}T( zq~Hlr6=A_U5O@%~tkcThf&52ozu({qh5%p-&jDHOi(<0#Ad3_y81RF@Kv@4Wta=@; ze4=F@*ZIqLB$}Uqt}xXfx~~OJW43O$<{T#49DcqnyptE!=TzZtIL~2FG`JszH#&gV z0&EsGa&Lhwk8QixZd9*OwE(CGK7yAuYwr|Z&%WCq4m3*mp4Am$Wp-FH4B8Kbt-W-0nvk#(j^okQjc0wxbSvfR z$}ZHdj%`I@jb@c*htQqpu^sKrAP$BAU;`deU@Bl=oaj-m&UGUA!-G}Orz^DX4(;|s zvo$dL4+w3E>-^UJaA-4Lg}dM|oYR4DzFh)0_`=QH@a6&NUJOoX?uSjJj4u$&`cUmq#I9_pq> zKlzb>FFg1Lz6Kt(#%|Azzn6poOJUVwI5`#`oPg+*_VAfTF?IpifKO3yD`a2)A2AQ; z=jxm%%>GueG#5lD&u=GyJ{w@q85r3F3TcNQrDn@vTTrLNWw{CyUIw3Nn7RR?n-JHR zyoNeB=IR&F>ofDgB<(U|9;~Bq%2$)CCA{(r9DE&{2HRYN!J~ZQ_azzi&g+Fhmes0b zwgJz}P<*WVBcV1E1O!0nYcM(!d@~m!c3^h$qiLT!Fnh(z2cP}}?`Zz;o%9Y8V`n1> zES}LYMz2oU=?}Z8<^x?Nbc$l!bC{!%KUh>6=hFC%8=~_9*34fnZ*as|eHH zh0T3{-?8tEj;wHdC49RQrv3prRzSgDp=1P9$OV<3g$g&I;3e?hZV@*F9IBKkt~NqQ z3#@x6;%%p4%8>r9&UNCfd_lycoG#zqPyYWx8<7Kgllb&tT^nfrC-{cQklZ4kgH?I` z;(3pm%>U*xi7fILk$+V>;SSE1s@q+gMY1fmt$lsmC1tAY!5xuWE9}?-FjVC5P21kX zWWEO3<1CfPFxVlQ{TRZ_PU=)l)I~Qo-qHl7b!M9;m)VnDv?dSbdgeHXJRjE z5Q-Qn@>QgWpEmdeBrF7EDkCy!o=D{Axal~OuP)lwzQ&bIx$0UpSj4TlZTWiff=JL# zD~agZ&E@w*-uPG-&&whmrID$;L*#Tr6)7;~${PnYGo1NQgv}{4v-ka5q~IBm=LU#$ zjTRZZOXSxXB8P%SZmtvw-{hjYa1=@iKQ~R}`2nij?oO^(EB%{Sevt}8MFtiX*_mG? zRIeFGrP>llV+a5?a7{!?*(v?k{#@kIX;wr0*p!G6pu&9vL`Hrj5;jVuP zM55MOB%qsB9jPNyPcKYZ`ejgqf4&wXn}brWj0q93P2`P1@|1?m5wrUMcaf3>MVh=K z@?k-d8P`Pq{7vNCP?5*EMPm9Tkg>EVj4S6=*RzN;YmhPmmDQicd(09e(sGW-FB3!_ z{jAGxn5!$yxflX~4Frx9sdL-D23B~G$b}BB&UpeT#~DZcM2eh_JK)Fpso7ZtFOh>< zXOvz(3RRBin<6v57s(P5cgFwJPYq6e%1}X7rwvtEOA+ zMJm|XS-lp;TiXM5KcX;@5T`CXA9y)8>R)d&~@ zfDJ@17U|f@zJ}$yR%G+qorMK75BVJne@6y&TR>F z`brou-4gk9r$|(071@;@-jv`mYqp4~K+gg{sRbOwk%z9KDWiEMKhiN3DN5G^hjMjcH?-vnV3ZXKayOZ(!4wt&Nf zT%GeoP=dy*A#g2F$;2LR4yY2;>HYg7*dZG7Ms693id{p!<7u9vHa{ zA}V3tvu)2Ywy71*C*^2g1!i4@LZgZQEcOUu2c}<#LHAK`x}C1hlG?GW_?7lU{znPl z`tW}sDd_B^K#*|4WDLVy4Wejh%q3_lD2 zzU7IJgw%-UmC+mS_lAjI!E1|Q&0&a{ih0ryob=>V6|Po6q!o6Z5Xm&mK9y4O{UR4r zi6K*hDD~X=0FmcbCr~D3u;q18WbzGN{M4itv$jv%);+#Db@PTzA|)!>uIjD6KxE(U zBs|j!VR=NF7E1WpEr*Fjrr=i7@8{Uo<~;*MYQ8U0v7Csz{(z(S)_K)ZONqQ9``W38 zIbnB2Qu!v64dqtb*W5l4X_ZN2|8k2&GUy(2&CoXFp2)y&MBM&*TGgKFf4XlxbC}4d zcSP>#-)Cy-`;vg60kDw*UXY`^eQ~b*0RL=Jf21Z=mn8u}1QZX1>DAzw8YP^C%{>4StBt&>>BRGzNf}7!@SN=PJbwiWjS^3Xb*IU zH`~LX+Om%uNuJ?&--K$3oF#Fmk=cu0N|Ch!nCc~RlNUq=!M+)A{1imb=ZVKYYxVB~ z1VOe&@O3Mwq51gtB~=hq0{+)f{SjYJnF$DnfGP0#tFZ7rsIHx#5S>We^h^ZiGag#N z*vBw=2gKCn$&y=ILF>2u;IR*kT>;%Q!>J-FJf++`JBf_gG?PU3K9H}R9TD6hau)pA z4fu=HU(?F}c9lXfqZO1Yi}^#fTnATfa__c*Pm00m$|~GO6|vKZ27KT`JLqr|UTFi( zykN~Xb=_7WMJFu0G#Gwd3RO?5YeKyK)^UT=SKzJl@M|U&=0TFz3#&d49trqFzfl(M z7fhkL1$^>@+qa3_WUZ|62|@0d-TcmjVO`<%iz+-dtc$A-{ZMZ>7#KG!4t_u&WSI&R zm%?Wuka+@6)Wfc{UvMSrP_3AE;JZ68VFpC~hIvURt*)PkVE&#zfVIKUz8(DejJoDV z+7fDXr1oJc)euk|^4GB=g6c4~&4(L1Qy_zmkU~}G`}{DNQ2>hkj=ACcTimBQxa0mX zWEnjCidZdz%Wwx-0#ow9Up^3794<_T&)dSao_40C^Rr�xWzT>b$S3BWqtx4B!V> zR>OPQVeaz~a|W|um4ri;%1nf831|>*zX|69ZBH+`c+~ZCUWCYO#GYtp4+T0x!ENzh57`Ju z4m!V1HDow&DA~!V#LWM^QVd3v2cKM+HA|k!Nz}32ei=6OSASR&O4PUf-dyNa8W>Id z$4qBHc2$I-H6Tb^0=3w+VhV@M=b_Y0Xq+GV<%Ahy;kWFtr4DSX1e=b)AHT!O4X~sj z{Co%&XN46HU~OgCCB$C741(kYKfbfitiAkX^cvS%rkH!u#s!|4X z&%7#fa-#k9;&jxvv8tGeS9}LEDPIuJ%@w(RM8!+&YzPZuv8dG|QBhAnH@$FZpGbu; z5#LfG*}IFB2o`yvph%Y@B411q`Ki9h-+e@`xr>A@bL_Jp|0!~;qsY8_B3&Md6mKHp zw%+Lk**gGl+8MDlzk z;{Tk8`zM#S67c?G$`L|(})@;xGF`-()rV}Bhk{X!&X zskn{avO_O9U*ynT6~RS2A13CpUjJ2=i`-4F_d@09=XN2HH&2O}@~ZUXImAXg+0Ok3 zkv^S79%}V&hu6RnbrWt^RXs)SrqJnlOEQU=zDs6@sp=$e8<9=tQzqX@A$qw;_j^xU zf$Im3fXgCly;X$7+LrG6r9mR!E)i+dRis^Cku{}6V*YV;iJil_??txU7df;{)%6RCDoB-1+AZ6_IC*SW_m#C>brf$gcE z_Aa7C-fSmwJCjPsMgeK*ED^WJ_}f(0r6T)YNtwExbvK#cfD)X&KNgvOSeI}r+(vb7 zhDgywv>n~LiA0RBAu*-hi2Pk-@l}yZ7H*ykg^HY*>gp0Zn8e;`O1*Q7J}vA`kzHXT zeRGKv%14Vv+L*)JCBIRBd@!VqNg{7qLY4xl! zUx-}1r84P+hB5Z+(*tsRfBUo&dH!pWZ!3%ZJ6A+n>JqY4Uug%q^bz^Khlro17WJ`G zpFSdka_g2mQh5LKhaX#i2X2o=mh4V``XUnBp$CVE3_Bv?Js@r;@YGMYOz?UZk*k^z zV8e03`-4TY?o7CSP1jryJGrwNKRo&00EqMs6bbLF5>0KhB-LJL_Yg6)jlUeZdyDML ztKuZ2fl=@HepZn|uZj5UPd!uuk;i6{wE?a!cm_b<7nK(|Hcw>G=OX#ve_BJ8q@U7^ z<{2rn&dJNYjwJ000J?!H=8njzMk3>05UKsKh>zuLB{le)9xgIztMjVkT49mqWpvN; ziYFfyr>_;gEYj}{kv*eC!td)6)DI|12#A^^GJ2VaXJadAssH;e6IqzYHBF*V_4w=m z({2uYkeb0qG!hwqS;T)#+)g0A*)NDREh}<l!fC`O8j%!POsoW7<+7keD1AmmS$e!gQeFlgW z+MWsreTxQFC0OLf=PL7#oUy6KcI`iruHGVUt8I{IEe|aDR-|1fku?=W9!;=FKU!i{ z`k_CI^l=v<|I@QOt#d0{L1f>@Dy{<$$w`bp-^O3w)*VG6-5mHZHGoAwBQo7fB#UMs znkn)6eyOj>i95Qq;%N(^yG0sTOt@`TYAkZ=nse(lW|7F7r<2(BRU0fiL1e#H=2YA% z9(hwF_u=@LRf0uBZ z3h)=%R@J%n8g@~n$$})bdG#&&{30^HsdMw_D84zIa9O%k6N#)APh{OY{5!iymD2Hi zXG$n4P)B6<-zq{18FLy~psV*AK_Z{{h-3=Yy)%24i`D(6Rw5%yi^yxPE?~l>4FN!B zPYf!LRIGPG)_%J6 zYPU)vWxYj)6cjnsLnNwI+(#XZ5Ggt!;dJ|Yh(vg(2q|C>Fzn|9W^T`P<@p{uKki$!*J*QI5}$N1E8iMOrM&p5YU@4qEd?Zc$E{rB8O!k1bpV=5zP zj7Y*0H9Ny-1$ai{L3OmCE*!tYX7;F5}95mh3f32$k;6+ zgTC9QPX(Q6Dp~!}LB9Hn$NqOGM=NjUryF6BZ^K?-2=c;$HfT3q^|Tx3jIQS#FgZ zA{Xs2d~^wF@ZR%@NY)?XZ_h8kAriPd{`evyTPli_+?{ye^!|2{@GL4)YBPq+sOYo- zhx3ax(D!fl9$=)}e}ji2_x7qpQ=#yidOZOKWA?r53!6_vn-Cas3@&P3xsrSIsw?n- zn15kz0Nm0JdvSFBwZm7!AZIxkS|8R%!&^%r^A4VPs!GUXndY%j)$y%g;Kx7V^;yuo z0F3_u_N)Q-%3x|6Pkdhp+XP?sgB`t9xRYIFW=X))V$}cO>^Ubr*!@YJwcZ1>|Aiv0 zFnb2{Ng$pVocjrS6oKFJ>(bKs6)$iGGJP0NeARZ2^@58Z;56(Su$A#`{M0nZWlo0TW=w_bvG8^XEgvF;U9d7`W5 z4xa^q*F$qXW!N(VQX9H=R{0t%tPGt>fXM^l=T5x-SrsEKaO%orJ%!p-8b&HfUXxmLT_!A`7#Kh>uD@ z&6Y2{C{i>gk@mDkWZnl)zjH^i_K=9@Z}zwIcV7~T_)8^{%J)P++As2gc6_mZ=C1x< z?uy9OHWra|W!lzOq~y{BzA5e4<6jo(#ao!vR=R9nHbM1H+1 z(loD#&&edHxJ=f|li06IU6H_hPv^&xtoIS|S`&XBUV23&XtI;*S|0nA`v&9q;dBbkxGRV7tA`16^Z)8IYpY$$o}?Se6q;N^(p}uIEAtq_3iBp z70G-f{&IbM)p|S;k)1U~N@q`CfKUQpmUl%~6mxZf4Qxg;tR5%Qx37rlzI}b(Q|)J{ zs|)lrsYd|N4GRAoE>cdv@7Uh;7khrT*buZ4aVsd|QC!4xh=}KI5szCU?x#get3@ba z|8q^hiA;Mgh3iu2{#-27VUQLIg#=k6X>V3_P;^-N3yGnEry86%gGMBAY_+ zNO({MZrp{7cauG=~_=BU?@8=SwSC@F%pN0y+DoP(6FAe+8*!UAX?qHEuN#-+S056EX2;cOA63;^C&Y0K31cx5~nl(T8g~6l0tzW;l1#XRm zf|s3AyHD4f3F`U7+{@6jG@L%0K%5}J55h*l_!@A2Bz#c~GJ8PCJfM5RkG#AI_C-Sx ztSR!B@k_`Gx9Z&Z$u=Zf7}_7qi3Sp&;1>dB0WS}y(coZy~rQ`h@3ep^59jG z$Vy2sPE;L{d#{Kbx+$`-n@I0hL~0cj$$mw|^jh3JRB9k{rLGI>UZ-^ln;^2~JCSaA zMRFBRxbBklQ`_PS{wuOIt8Bur7V=IdIERQ=_IOJ!cmMeHvr1NBvpWhNW-&G`{vV+Q!zzcm?K;&RWkp+WA zKA9oX{Zo+v%S86>6T41_a~gW@itZx&ON;dP6e&8`qArtbfT;}LDoz(Ud|N%xfnKr# zCyLbhHsL&cKR$))R_`39mq^7>+dGUnKO2mX%I*@m>fobDuUr)=@rMn0R&Ar^4w2ib ztdmQOuk*)Wu9CS#E^6!cY7n^4Ql#z|iM%g0fhn_40x*9icsql#)TGH$1cPxrWkM6!Rn4%0JSq;^q}iSLP=E-Vr?CV5%6nfN-u zt~TD6(&z`{wIXLri;TY^Qe&%#S4)ffO{V{a=ROrVJx@K$L2F`Bz9O#=j^~*wze85L zpk8(FcfY?#$$+e({O zTCZL`L}GN`#Wi1%X8jZS4%Eyr=lddS)6l^%1~zg_WW;wO*m{J#u07RWDsumAR~O(3 zu34Rn0X#u2!wg{LHxRY}@WZ@!Iyq>2H6y^cFf_Rbi(10(U17jXD02ziKjn!HfHR42 zeS4w$R}#4|rO_-xqJid6>I{667uKzSpWlWy`5?zpi@e+0f>c@ejD?>2;LQ6x*#|9l zre%S92;^TB&qbB?)rTNorbunZEwg%l^&prR4pnYGT_?%H4I+PpHUB{LKR9e}`IR;h zv@VgG)Uzu4LMyF(q?R_F2p7)6q1EaSefx_6pRUltPwfK-ZZCm;Ibq$mx-wd}Sx+Do zyl2A~&7k>|yF>xG;r$cvytbC_Z9_a|3vlFJ_&Ypqm`h1ay0>ffH-1G-sL?Oh^=3+Wz` z%$ei(tO-B6!6cCoR~^2htIvNPi&VMecr8G|on|eUwfC2lyiOcz4RGAyFc^a*pq8#zToUnp z(f)q#{c|GnsjCZNCgn8%YG$zM5q#ngkG{ujX&Ic1^xS|bFy)5Yvtj;5_@yqi_6Pq1 z#PvXzMrJ0d0)1UYf>&jzF&e)43^opiv2Q`ekzo3OCmI!7_Laz!wEwOHU0TCm4b?R_ zlC|rj@GIcfApYyOmqO4{+tYI>y85h^3FcmcD%Y%EPbybmfIl<~^W>zb;+|h*+wCRR zLhFm_kF+q`b%W>;@aGbcGg#GRy>uON7lQlKV8AF?d{qTt%0kCTjD+pod@e1!_@bn=3H zLcsB<@a8#Kwi|PcRBF_uP@o9-c8UM`y$SH3v#Tr9OtoiWZg!}m3BSo5IMvs@vM4+p zk^KCH4}kb*>VgN>mk(8Y zuQLWFd;wWM#N4l?rY&Cvjw1qm2g7^CAfPRFOkQCxei&*Vgf9Ek-rm0=1y`Gw}OxnEoPE{RXJZ zQ|Ad-MQi+iaQQOyY624@Ap8{IOOgb`Jar&*#rUrW9)mk0TwRGzsOAH6Z$Onx4oFN5 zV*liZ?a!*Ps3fPxqq%V9kHnwpHW=zo1ygBK#moY)Ijdt1NeUKO?%g?699GH>7% zv3?GoBEVekQt!ccZ$pvsnESf`SC`PhX{bqMy#mnSjtaAJyb1po{wl8iaIvtQG6Fyh z-~*AJV9YbH;pb!)-UI|gwr^nM=kU`&sNP0hi^fp7r34m-G3C4tJr~0No`*4iK#})! z*Atrsg#ZEYFbF>F4ujp{{xxDdR(r_t9^@Jk|Mk#~aPt>eS6*DIm4LYqpvrY!U{b#g zcL-Yoi&sEoYm)UX+;W542NJ(8??O#2pC`Kq(ohGKF0c>;@;?Wk`oaHlLyvI~@CWAE5G4F=f&gEL_!%Zo zgdTswxh1+dHm;ck{0#YP$A3L~4P4vh>Ppk0>aAL3n41l%`o;~n8znGpnga(n#SOEU zOH<&{oW$=dzY2>9uDzX-PGESU9W1#6Ek6LXwSK>p zsxkwsXboR=lodz9j8|aspHQbVPz&=rPiV_bDCQaKY*^h5I(`W|w2s&fn~oFqt_y|p zCVbEJPOh#jEA@t24)BDk4wyaO_ko|PfFxr};J+_Jqz!7#T1COPTME>b1GzH|PPSBk zBxS&M$Gil22?mBhkKHOf3YV*O4N{gIBca7O^@ojZ>Fz-|{EK~YoPl!%fM~!E9yNo{ zJHy4dFn93w8hGh^_cvb!3+qF*SJgGaSnE$sXe}xNJS#zqZ{XJwFrq8uo(^a;#rWQt zt^+-A20G7#pWcQTZ_E<64K^di<|cgo`f-phiKpWVsy>1r`aN_0WD6CR z1TDbX=Muli^LwcAQ%cuT^7;1zxOOOskxj(bXZN)*q&;{P#N4)x<;RSL8oZm7hOA3% zj~4SQ?A8PT7YdBd6#&%CW7c=DZn6rq*C0+6%;?! zzJ@vTp;A)YwyM8tSz*z96=tUvAT$vEJ(l==IR(mo<)Vs83Q9wD@OcRSB#CLL`fb(- z#tQhK!7P~C;t<9leWAY5^1ngF&+Uu4Z$3QuLH&^oW8LK7JOMz>^7pNR$sHhO3HHy_ z-H09h+dqWw10nAkjO{gP2_MXjyBxf*9+sYlFULYoZ=Tp~#McT#0e=XZ2V-hM&pzr z^1!M}>JJZWTH62Grh00h|C@wu8iYvJg6 z^@ly{uK_?5l)MGg{)N&TF$+~jf0VINZRpv4;MUT{INlI81_ob)x!oWpGd3@AIuhpy z0IFkOF$jLwq#Aow9I8@Z-UU-yLhcPfAjZd*mhr{h4!T04`LKKwblC##Q!%ff#y5+K zB(|mQe-AosgxO~yvLU|K zNcbMN@=)S=S67rBXa`X}3&HkuuxhV=rn~TULwMz76>eFYiPrbsfh47u)Am6x=9datKxkMzPJxv zbExoW8{?-GwhAN3J#E$CX_ReEOmUEDcE$|`yddTaSk@lemVgb~)@Ki#{=OV50H}&M zJqPCXQDOF|$V@;Oc)7u_hR{HBLSjhT=@VtqZ~6e*Y=k9ipw1(8Er$5da0nr`U2Xjl z+O~l?b0NIGIn2E#WJ#!H?}h7+U0rw^(b>W@4}@x4{Eozz>kCsjDl`4fHz#ri+-3wOpXI9N3I*hMYV#@v}-+)kh?0eC|4htXy9~o$JSn2F4DhyCW`3fbT zZiyTsmmj*iVr)bm|NC=!5qDdT9#_X(n@WoGy)P2dPNfs->ViBW>Zr(_%p(7|iTpH9 z6N_fra0%l~L=#A-{=S zC@HeOjmWrQk@jaqp2;PWZLx@3^#sbJ+KK5kk%j)QehcZ7c|}DSm%NFu<)j8gYV8u) zFOKNIcEiB!P_~E)^R*+sLE1;ze`E@RFZaRJJ&>;x zPqxOyx8@o~>|)lj4bbZlY`&N9qi)TI(0;Biu$_1S;o$x|e6k-pf2qQ4IVVAFm)xEQ z=4+n&EWdvBy`G6S9|fEknXiNQ5m#4=?c7`dyQar2>r?2rAK!xsuR@l>n3r6fX@{hL zhpL^2?0~bL@ar8I`Wm!+1oaj|>tA7rKP)Q)NAJLcP7ssOl8y4NDXZYjM^3Kf3`*!0 zV2Fbf3n%v5+*=1ao`Z#rA*LU(=TA5ahdQpj{TBR^U;W{R%?G&P1w=rjkDy~=pgnQU zi#NzX_+uXAcEa00;g!(;KRCVzbDM~-U1?z+5cQk-zbEnfp14;V0xPD$jV0cgjVA?0 zpMY~0VE0_i!c$lxaXmn)!jucpuntt+g}F1)1~&D*o%-IktoSVhkB>3GsMJgh;06a5 zz=gzYKQyDuk6`jW$W;onwYH-hie>-i22nTQ`c^nL2KL;6zh8t?zrgJ~5Vaauoy_L} zz84)_4okv#+DV(fjipoS_(HJ`@SisM)fw<63Ei%zt4pExuW+RU3|I}mmvNXs9LHz? zl=0tRf5C}U76q_{2*`8*K70W(t-#!fjKM$S;!SLudif1l5)BPCgV2PG10n9#nFJh9 zJsJcLSGl^NNyHxrgF+Qxd?e)WY5qIW?Y3$rc%?Xu9t1&CFn7#44}l>y;mjs%!tXzD zAMNVOumRP}ZG0QTM-qSEq6VqTpTOkdP_Ptc?USPhfBk@<@({cU4(EXHPeJD@(BN-) zeKU-?1AqPs*IPqWg=9WgZLRel4^`_rv}WTH0r)`Zc=-Jlm|p~L_a$~4WqPJ^UYI!# zD(X-3bcDBB%^T|L@Wn$IGzuPe!#wy0CO>({2mtO7eE`;Ug~(Odr&myov-xePugxS3 zH@^nD(;qADg@yUy&9A_%H|CBenKO!@f^cW7s|%S7)Hm|Nk1%vNcs9YTI35c>kAhc}#Oe#$46K zjY-M_t;c&1AhKnV$fqSlYX2mX>3G7%hYtI_B~tn~k#Bm4JbYPY#*xO1y0Y%AAyT8? z(|MTZw3nNT(A7goYmvD%M9O|--LNmoKizlP!C&M~FZIB{B;{B{9I*>P75t|V5w}1) z3#6=5-#8@_UeR^$&L9n-gn-CfA~Sc3~nV*(~x~ZIw`j z>)x9|8bG&q{Wo`!;+>M$k@kDX)dg}ai+&LCIctA?H0vdD<1KRx)~edp_6J-Rh^h-7f4RC~$wZaCZF$(-AAZ!r5<}J3x|z^>JiL~{p=ELyPhYUYz3Pizy?n^ z903n~tlVoy+l+&L=Zi`s%MmDb3~Ek=I`g2~?@;(v@Y|+~x5-L6jzU@XA1?;)SAsKZ zG24=82Bm5TPWkVl>J0}zH!Yyq;Y5O4Ff;_Jhrp6-@Lg*-vl{dJOsZGLXuuQX516tI zO1ug0{Y28dQ#wN6`8!4=%aNo>GvADNwYX-G=FmylN4JR7em7}tulfOz2d7E>Rb)!zD7|=q*^poxN_u*hy7dmmm$BVqC*(P~dFNeonk)Jg!q&3yQm6?7} zZ;^c$MaJzFY52KFc5C&PRQ0}?cMedJrQKhP7gv)D1>J^B; z9PZgfzVGd#JfiM(3ioCy9B;Z#EXam$TUjFeSJC;5DEL(7h05GqY2siC7K;9oj zj<;5cq~gOo?tUXF!}JX=e(D;o{iK%{UrkqbY#x*(2c#&HpkPm?j=*w`U`^vKmE zO#szC4ptD!^?AbOc;<7Fo1?AA*AqBUWba{-ud0aDzb=wJw*v=#D|H?)OQho9yN8>MRilB_NAHN{dX-z!kRyHX0tBc&%gv5;Azw62$`IpGA*F~zFe7eq( zDg@LI5V?I^dw}iPa)?ss#LqxpY~Q=D?yFG`N-ncdn;00_g08((^n&kqL&>?Aw>;Un zb?ZR^xN+Cj1#uusJ>1C~Ue>&l*`m(2R88CH!^7JAa-rTPqqy}V5Z8XPok^lgJ07*naR5d#{3(Rd1NuQoQ zb*qmT18%LMz!0eM5E`C@I<28pF!;F<*YjU$=p)r2_KO>QHy>h@KtP1<9#ysuWueJ> zU=#^E?#gI*VXh;AVsF6r6`BW7OcBR8U7U) z=>Il&?8ht|7y>|COzIa3zGY!R3>0Yy1D=7)6R>IW5{D?j3vRy+6Q6}ebHTTVZBdim ztR5bOyCv<9SHu8NK(D_CN@h=fT^bl*!u%2Bg!dmqyU$d(4W0DAb0FqlR~Nv+M1tFW zc)u1DUZldDFo47?cXdJI!2^OO!=f$_Z6eWW&Uc;QrTNfhFwA-#jy(&Z#jV_!R6!~l zygEYJRq#%8`1t|+*%f{ag*OjC$s6EVoj5L;fz+cm7r+O?dcc@1a9VS>9c*!5B)I(w z{Z>J_c`D2p{Nu+LbH7y{-dGRwRzt}im45&-5067#op}eNw$oPl61r=%SbNUqun|d( z0)XlWw~T>ZYgAZN0{44E=s>vR4$(D}`D}~c)N25g%M0&~f@N9Y&vP()B(z%%MJ9uL z0CC?-QnqoW1WFKDc@9=Ai5nJ+8n7D1K)2sjm=oHZ!$>W8^LUb%hG${++feLX%xnAh z+5~t(XcL%u2ZDmJXPdsK52!^ z?r?pvt26Ed)NJyt-=SPS73SapMt)0v8jj5n-~~ai!iJ#%)U5Q^xv)huP>e`&YVl(+=zGkDG9BT)C9pgYHW!2GA3>{ikbfNT z8)<9M*Q46eoQ`m$p9-@)c3PF~?Xpm>lnQh8fo|Hj>#7)(onY#Qo1C2rK03OgjP9RtoomPTF2a2eysKZ(LnKg#g|VbsN694M)CJ;f|R7 z>)TBf_DAJA)&l)dMe2%kl2g1Q)Hw^g|>S|j8?bKG> z=>&g#q5ep~m^9fx-umHZh?UZVfD|jtSh|R7dnK%zF*W0ZrEf2 zn%>EM78+kveEn&@(_yLQDF|UE)Nd?`Oeh^d{Um3TVdWs6_(td zO;fw7`pYv9-VB3Z#=!3bq5mN$vk2TLP20+ z3FJQrste(@Q?MMtfIkGEhjC-!t!Lq+CX|>k_lZG}X&_Wj&CWl(fl$c36h_Q~oP9Cd zE7;n$)O%Wg8XhO|ttY#=hW=rH9FGsd`&oOr8+q1{+_8_M>3AFVM&w z{?uAsMnct3qqX3dE#X^lR)u4capR>MR0mL6pktKB#%zFo3@q;Y;E#f$9rmq=rnLt7ydYtZ>v)ic$M4yAX zqp7y1nwX1e8CcPXk zJh7w~V%tQgX;8O|lj|?JsPC%YVCZpPh1uGsRec;=3nwNdc5gBnJl6j8i9)MH{wwb4 z#g??o?ANT+tMY-Lb+*Xl`63aw)y=7Ott*AN^_NJc(8Sy1(5|k|sS{D_iaVbZ$?Cv0 z@g_fsgw=OpxzxcYcQ%PMz3;g7eYaL3Rkn&u93XOWoy9Zl@Uxy|bZgjmvx_X6B=S}d zk+wb}|C^Hn&sSyK`%om;vk9MZFlvK}GFfCpPLZZtMSQ-Fdr$M@A`z9HlvmvmxQBO( zH0Yyywzuy8${wWldm@+0s0g+m`|K*zd${m}NZFU-vB5~>_w~qxACYX?HEOT@aZE>m zxsDK%GA5-W>6wAp6!q$U0Z& z)=4OJcC|O*xs7qdl0#5+h;o$^r6|A$A~V65O0ZsYDrWC2)8k2cZqGxFg)rR<)`h}= ziBP1ex*lV3zq8QRu(QMOv!Qh+=w1Zo&xI9X@NogS)GygjNwiL6BrGfhcm7dfRx}Ro zeIeg6`1=m@Y!B@o!}|IV_KB(|wG$xk^WfnOO;H%J?f8$r&>=HynWklqC)@l2fCwmd z7bZ1>!l%uDr>b25)=+J&SP$r?*(}()lSh3Ad*(yLj`(j&wg4bW@B$ds6QZj)teR4u zgx1$nzyPmGet1?>?dTh^+BX{Z6O8Q#pI(Qc+L%9pj3@*Ma2x7e0aFM5&)!*wNm+ey z{Ii|F(%oGOhyoT8f(00WqS&;eA}XjT76yv?69q&OF%Sz-N*WYt=|;Lcw)6Y@WA4Dq zurV_`voni)pXYsM_lNq@h z7y_2y*|9OsmR9PgFybgYassy44blTR-@Xgj-Yt1M{O@IGW)EPLUpy3=_SflCsNzZ+ zG~aD}1P)fp`n6m)>%cj#f0Oz;B){#kBFcM&K>BmAU>=Mr50gj0-e>FuVt&0P2xLH^ zr=j~&2#vrdulQ`f+SRK&-C|E{|c#r9mesa&z{t9vud2>~(jk z*#W@03A5$*P`ePBWm9Js@wEF7@|j@}NZ z%UQ}QiE{yMBHn<(9idsog|u@G6FKip0eJay=-&;F{lJC${a~B?W1;A?@X|vWLvZOTo9q+QU_cy85G&kEwlueB?FEoHONaDXgn&^$}Q68dfW7(z%w&BHnQQ zo1|ahWM_}aM|qDxNE-^@B*Tdfwp*!7V0#F>Qy6aB3BwM;@z*%7X7aQ*vLuN59bSop z%A2rBv{4T4q+nAUJ_}zjfWE8X*wdVoivLT9`2gzJH2~S!0ZfK7&3w(R7a<4^fL3dO zBjkD|ln@579rKWXqxRkNE05=CgQ*Vu(raep>30qfOc+V-A=z!4+;jLTX`M)9f z8IzCP+MJ|uu5MP8hx@z1PxCU##_h^W|nR^3o5+e z+NT+NVAEAOl6D`_y3D)4BW@mSZ{l#%l;po}!t?LL-3MUm6iA!Ec|pKa zswcD0)?g&Oeg>jyan5+?0;FiJn<+TsmXs!2oMCk3-yxE|DP4MHHYnsea)~J zVFu7^4neWqxhI$WBb<6Vk9ar1QBLiF=bnK@_GoiC^(nj2UMiHE1s^npAMbz`b4{1E z+w=IsX-@_a3K^y0{o*j{I^Ye?h1IHr%KqYhEgow`1 zC@~l6x)Hv7$M4xZ%&m6ftI_VM5?^WJYrTs5NC=Z!zLkZV&T^cnz++PHmD0Z-T0Tzn z5EDi%ly0!<{f?yl|nwvxm}L19|!b>DmagD zdau;vNbZjT1`d~gT$2Y3o2|5@Po-xfB}Qb^)~%OaE!;zD+e2Dzb=B)fZnM9gEk(ba zwb~z~fWFe(i@nH%IeIubT?)U~g?3;WTk5WoX4Sd4-f{&qMkV)^KK@NAV&C=*ap1!; z2UYJN&D>+5kssCmS>VM!u5Zm$ACNV@Tnhk`cS^yBT^~H|-65q{^L25$k5Q+k;PTm= z%?!76jLy>c)1>52Ed)FH$FAGq;X>wKIv1;#Ea5OW{si3?!4v<$j)LZS0J#rG83x2b!K+~CmvD2H3wgW% z>F4>G{4(_Z4G!Fn&2l#0nZ)upN+m+c>{OAa%>IdnBc+`pnLi<571U|t8FI(G84_5W zQ$v5V4&G`7DfXjg*;)LXEv_O@!H1v2+jm0I-kfjezV^|d3Pi%OIC!}%>{*Fzo6xZz z1_Mb@;zM}#7bwyW*Q3KZ%MY;h513pMV?$uMpf)U_W^wA7nhu-jt< z!S*D0ygz@HKFPJ38wKEgS77ZzOQQ!qxfP79_89MvDw%F#jlPzr+=P+dkNqTd?I+RoLTUY?E5f1;m>~T)PD+cskXEi>tcbS^ zm73%vxm(nxw=b9WzUDzb{20ldrQ06Kxm||8F3s5FYi_-diSwl3*K)4`c%qf}d7Zvc zDpfa&)n67X|6&o+cQ;#zcxvm-Lr9+`z1SsZRc=6S>CLs?=O^_&>7kWQZmpO)D1h|V zNGYMSArj{SMl9O5Kkt^V8emB`ICDNij!C`4rK9$3<-G9L=p)Q3D}{%-*iW-LHIi!q z;KXXFp&KDa1FJ~i3^qjaqngGXr#n?r>f1&N`6wGTo`YIGI#_!4W$DOZ3%%Tyfl-&O zswvfLda;TwD;AJpO$a7mQyWT!?Avyk3GHUl&?;Rz5n;adhU(w&vuK=D z9Ni-%2~Im0x~b3q6?&tzLye@7#f%Omgbz< zQus>O`)O9lwE&R%v~*W{7a1~@*{h4BBe~_khcJyTah>!*d#Ugn*)&-DWjU|fGF4hp z(L&Edd(VHSOI4QUFlbtYfHr?gyKe9-5B`YH?sTqQ-n3YXdoB0r`7?HvkSaJ4BO#}& z)wfdOQV%m{`qlQfQWLxOEGNyDY3GIRlfHUZ=l$vX)8uc2l6~(>SNFVlJaAm;mbgY* zXrEZUD4eH;OApx%D}%D{8z9yEM4B0ValYJ!MX)*EMSA`-DRR_>6Mbe^?d{Tx(@v(b zNXkf)G8Rc0J0&?|yW)q2z|)3Hp_5#nYqLVG4@Lxk40X!DBv(F??PqCoI6fbW-RtR{ zk~~5*kO<-Rp?@q?dkF@1ge`SU9)q~paJ1F8i=SOz3#wJ&Je<;M5m z-yh&gUo-4Q6kH5N%EI1U(mA~p65F2l0Gn&X0nu<|E<8OMmf5|?Ww$3C0mMV(3K-HC z9{mFthW{P?3Wf9%@WC~(Vw$;^kjZ;#5KtES2EdK>BW~XCrEiYt{k0r^f7;y3%tf>r zCjgpMgU<%TRd&A2QAW368EgLj3|{*J<_rg3VPsq3m0wzGnQHX2~F?U0$>QJE@lD?aJ=C2k=v<6g18C)kD-3(%eD*D{VOq%PM1i8R^!mEcwhvg0&xIiF#cc z@TPQPiiM`T@lns2>$j4ffWboaN}Xjv>8f!4Q3TdiK@ax-RI@^om1^xE4}$xRn) zL9)AoBt^EBA__?%m88Ih5>6cT&Fl*PNs4)1su3==*&{ulApN{j+Sx@)d(XnRuQa4) z9D4U<*Yj4WYSv^uA^>chDwQhcUcnE1z()n@X;?bLv8Sb{*Gb{mElJ7t-<@7-3|8OR4d| zY*hbdK~Ul@X`y}c_m=A4@bvSuQpA;6l&_`i+kYeN9cI3DS0Hf^rq4Vgecx4TQduJA zLV?a%)wVaU;2u(?C#0?~O20=)@pjuFAGNQHLgFrZp^ zYf@5L+ulMeKWk^KMe@9K*Bj2Y%c{Rhd)ntdO@BtWhjTwj7Mvt4ZJ0|&Oj}L+NqXy5 zDdd?8C&cUoHIRBFNO3P2T7GKCntoV%-U$ag0gp&;Jt^;MFid$LDK0g8Ko@8pG8+%> zJ|Z3b$9(GnW4{9fq_MwCEs~|sr!p5fe118M)#0qd8lpD@SDAurj+JHC}q=8R>wPraKMJ ze3NjG)Z<3icxV_PEt_Vcb%_W8FE|0ODcSQHWQuE&b0}bPV6?{dc%Ox-j*jx zgTImJn|=M>ajSIj7xRsq7WV1YrTwo;Q%*}yt(NM%Dh1tdNyph$zppNfAlhc0bn5QB zYCIR#*`jo*-~`wCf23g6q;oF-80O}*mLk7&kvSv9KlX@}J~4M}_#G_5%;txr)^(jM z6N_rFSs7{i04dG78gO+oG7|gY;Zp0-7q6bO8(eGGloq_1d7kns#*~wAQdsS?+1K29 z7lSigA50vtzz?J!-gc7#OIw~WSt@+e(9P+%pSfCYl=clV1pM*%ml1AG1W7lY%|@^> z6HKY@(jxmx+Z&n;iwb^9C#lFzlYVgKV?g7lq!jpLQ3pe^_8EII}tZC-nPm(?6dQYgGcHzAoVJu5$ zFM@5?p0`@OBw(=^tu+qbxeAILbK*OTr>`Xkp-U}zrZ;R31)aq8Xl0Q=Jd}JA-rEJ0 zyJIW&tgQU)x5A@IFm=8qPpRZhjE1i3H(KT@N9$$0pJw$mRs$9l%aMB%b zfZ|+Rp4k)ncZ5?#$k{Wc@#ffIISl^_%DrUXkH-ICM%S@hVc|-1FS8&%sSp?m&(wnJ z8ku{ZwEDOAX~WO_Q_!z5oUDTF#8KMC?*~_hXZJ%@yLZtn$~WUmI1>QdiolFsF!WF8 z`Yp7+9@^G`C+~&v17TYfB>(F0aXR?}ru>RO3s0ONe2ZC#I%Fys$2>caWghFo|&2&Tt5Cl`-fb}KKJr~NdVr{7PMApweBLJAm?~Yqw zL~}Sjz=dzk8PlKI!=pby$(EiiKd&IO$vyz+3b7^N@CNwzeOUV)EdLr-mV|vpfdSZ7 zFwVvRNaS4S*>eKM*0bFXDhlCI5cMe(cp3_ChQcvWY%dgxf+9ac(bG`)ZYcCA6j%?D zQ4kpp;nzX>r@-ZE)xxcr1VQRa*s%xx=mtMt4=bV|{UvfdW1ln_o=S(3 zjUb>nB)m=|N85#Wxj zfzQW7dH}W=JEu4eaBg00^cs}BGn@B3xkr&OO1jM+CfAv0QkE-dob>fbL&zWZnlm{M zp0HNhSwot2ll0Ln>9K{Hyz3aQ6Y>7dn%mOs{2c9&5F2c>8q;H^O%Z)R)GL&YrgC1OU?z$K5Rj4ReuMBP_K3ON#C9 z>*CG^^=wC2rtX(sYAoGcM5=IF3jf#-I*qq4iw}Vtwo89?v6PFyIbF#CpO=tm;at8$ z$4HaxN6hk@u#*GEHk1O~^xt8*qv*#;|SsebV*LIy5l`tARI4FQ!PTjSVe- za`Br9lE0N6xZ=V*WR|ZEEu}N-%ty|&uS|@9(_^FqL!_C5rNKz8mP;kpNi5GiO~1Vy zP6I@YkSf=bZkjB0Z!LW=P?|VdTK<}}=X&W(GbzPg15|&9G2UKMSSoY%h4ZAdSE+xc zjlX7}jOPRZgTvQI4PJGx!9^CArrD1a`Fc{Z9OXN`T$<5A>NQNN^|ur@$aTr}lDI4y zj8gTbA@54Z>R8Im2WMm5!LnXbp)}_wpGWFR>79Jdwde8maw(uk?%PGHfl|WU91=4} z^mc8LT3LgcWY=db&$`x@&Q3S9{4BEH1u%VJ<{7EL$Sm?`gz1VuORHL#@3K2zpUEo! zYz=8uXKCaj>HY;$&COCoSk`Sgzg(fEq~?!GZ^cWqw@bSxO7Wjc+L}YTUrI-HORgk$i{RJge-gnZ{|&Rj$| zq&yB2BH_z0SlJB{+vV_$e9W`AVK+_;gTw1#&`g;A06cRVZcT@%qLy;-$9-9Ys)wQS zVbeylgK59>(%|1xP$M7Y%@wFFurc>^Vw*wg0Ek$T#S13B#r^>3{Wr|L&fL$*ILti1 zaWTB}6%@FY+{Mbs3xq;qYZ$p4Vq>}3<|n}Rf5<2p_$xG=XYM=h`&*4p18sB;kB2pX z!~BZycWc;k98UBB)@5F9=jh}k6gmh4`opb}Ks9qYgG;1Ok^)3RQX;(ZD$HGK?z?jO zDh-1BL&v%hx|r+@m^~`F7%6Of0jY9*_g2Nl%1A3B4Lu+4@%_?Eia4D43iv;NS=3SC z+oapuN|WD`&eZU2ojHZ(Quo(fYoEjB`4H==U`U^suc3M8}p7Cmm3$5j=q?4lAaX+ z>^LPoThILl@WK{f*MtqP-sr&FrLN+4=d$eEh5sqtuv_{dMOrmUiuF$G${oyL`%NV& zu$mM3GlOe0q?2L3X5O)w4Q=gRjJSEkBObT(*ef1@A8C7@KROzu+ z()N*-g7LQ)51xd{TgDyI@a|HS-F17o>tz@aD*f+S=aTh&u*?h~2D-F>Z{y(DZWq2a zs;jA^;OX^HW{$_Xa|xZg!p3T_U=^HLW8>{I9FSsuLm=r!_zT-rtQOQ-1`Xea`kz9T z`A~W%6lw+q?uM{>5WEM1+;Jk48yHpCRUM$jY&e|L`$mQOPji_49(1=-f8s5$?pm0(3Z@6b#{H0F-BQV^+%6TQ0^yK+2YdxA zs|SOc!#!Ogq&t^psB&|pI(-q0_y}Hp1>&b*+vh+77!PuSvnt2zV- z0zZb};}E(YqP~WxkD$PdP^bnJu%AmU50NDxyaj{}fY94)6Jf|J5I7Km218(R;8)04 zX^RW4AV`}4>2E;Va7ce2(msZ?4UilONv$EdJtVyh$ps)e9Fm@dgj0|Z3<>ig@i$2P z7!v-1l&c~6en|ZgbRe5DaL0j1W_29~5%)lW)ljHB6rKe!v!GygC>R0-jzeTYh@1_P zvmoL*h*%BbcR|Dh5cv{BheG55i2NI(Z-vOWA#4_eg+V}8PE)dJ{0SxDj*rN57xC&6zUA>w67yB~IRhk4!L_i$MD2%LJs^0GfW&~XLs z2GIm2o4@gghw0V${21(J76axtp;A{e% z*$gLU!jU;}s3YvZ9`+7|1GmD_0+6)K5OlL4<{HHz@HGf}4}xk!upqQAM0BzV0)>8u zA|FGkR#2`hRO}2@hC+q8Q1U@2^enK%v2eIRAb7DoygS8tmLi^qA1Xix`|2*AYXROB zyyyYpI`Vt?qaWOG1lyz+2K#P@J_}%~-Pw%k*Vz*S65xtE;MX}&Es^};b<#L&`Jo0p zQUX%`&id8+i$ed!@Xv!Vdk`#H0{g20k6T{K!-+p|C4@JG0>40XXNYMHF)2{+S%@wH z(S;!D4G3vsbFvd$5&|M1Jq%L2L*i=?*Avd{hEucQWH~r_Kb)=uv9lp9GY3(wrcnZE^#B2^ed&a{iGf7(v1Dm3nQh9yZvBK(1k1fs8l*ZYVxJ@ zcopf>3~5PdEqZCRiC6#iOt}XSmnJScPj^SC)YjVX zoiS1~#!H39O1~ZVb;-DnQxVdQdoOG&nO$LLrNYIf07rWwPZ{!MVW$+-SSoTvs(n~$ zd!y7lNqT>#^us}E;aq9cSJHtx(#h#k;xkfOYbm3LlbPQsr8kk1o{>(4N_*x?D;G+W zBc%85kRE+VYWj>+a+nm<$9bMJE1O~~qz^NsMEm*wv%ao*H(;@4Sg}KD)5VfkH}?GP zwk4&SOMizN!cHEQ^{N1n5-#0wje89_=#=#1JVPj-548CaaiyhRRee9H=k_WzP-@go z>J=;fR9f1(LrOJ*<+`a-(I;G^7xJDocC4>!$1`~DwCBqCv(q-3E6YmPrn)(?)sS91 zA*I_R&*g`HZ=CmhT~G?1oJ0N`jRHMoRGdi}M|PE}$4VWFN`tCPKSoKb@01R2mXez1 zaT#49oq1N;c)v7ZqV#mU)U>}8lUXR@?8?MMN)35Ldg3SPgx#~>8DBR7Ct;cRPuG+F zH%6+^?_wd?ow^VDOZwm&*IDwa0Fc&A>gcS;uS^=jvrF^3hW=x49AICTb}y8^Tqd>d zD}|@{eggO8N+`IuRJovZ-y~^le`)khQo%hg&@==16+@*x#Z8&{la|Uw^zx7f0Hk&w zO7EYMsvOR~4l=zWY`-mb*uuz4^1UN4XJGozv9(gOk|r-ca^la04*StEgby}DP($#03-!#< z93H$Hz8mHtdhGzaJ%zIYOW>S=Wr;80=iA`M(&W3n-O*K`_j<_ic1U6eJBsjWP~&sB z@j+;v&q-?ocJE(N-_6{vFCTc(+vNF6rsD(u@Yuk+*zZ5T3=UhSDGRO1+Lr zRez8Ia&Ws|Xs@&?$k$vOIIQ;LzL6HENP|{MS6wTGHoI7xnA@wto6@>JO@i?*bL<5_ z00}@eoSp%1bb|x;xKApjGo<oKjI zEVlDAa-;Lg03sna6kaU{b&5lc`>~yr@b(JOgGikOvE@BP%-!-d7T&EQq1Om=&mP0x z-(mXI_gBLzdz^Mx+_mNe`zqIzZOQr2@@2TQ5nTT*l(_;}ZF%2U$E7_5Ggif{g0?{0 z(y%)YX1xx-b%vEw;n*vn7cK8Ehq})}v2T3MJQu9I4~&MXhv1i8uyPKZw(@5*UT&}Y zEt<@Fb6|8=sBb@h>xS0MvjRYpjftc%7`zaE>3A{IuApE%L{#=DhyM-OCw?0LcOoyu4~|~Q&9I&2)3T@ zc8nL0pJCk=$N&yOC7=iJP#f4b3D$OnJ>4Ox6hy>BrAOd~o>2aNAMx8r!#O-Q0%soB&`vIHlbJ?+$|z3qc8-mv~%(=>)Zo zLG%jXHji<6>BHhQ<;Vc|bqI{jfYsw5eM}bLc+Cpr5{Bu}6Q@GepW&_hA>J*vBtl*x@7r(Xb~R`b~o0%0Nb};mvBhklQiV zVvE)4Cir9-)ERG~?PlIRBLJiWA)tQnso=eekk%gCYADG?TE-P<*kNdYI|QuET?YR% zu&Yi(;N%hb^+ovnHdu8ORKdLCsa48l*xFwFUESQvjhkM}#2?lHnje7frQzn1P$&klyUMnYf%&0~ zJPBun9AC~2;Sm2iywCt9*%zwzMX#r}QH^7u;4k5!(eP#!C^OnK`Om!!nZY@U`0I)= z_+LnBk8MA~)yW^uNlNXGL7V-#&)|OsK|n*8(;4oLhTccupH85%oF6nUPyU`oDiCRN zz5Lo77-!$E3dZkkDB{*Y{Ea?HH~>h3sL?R+ODJ`K{4@CjghI+O_+L#pxXIjeXY#k( zIix`Fc4+x3d^;C@c?~)yL7_bkbT5yAev1{|VOlfuPavMN1+mw8JQN)a?^J|OPePe7 zxb7)13*=q^Fcc;|4lmS(vpcaFLnXLD%NSAB{uEx@2$6?zPl))B;*aa0>n2zj4e8T4 zuZqs=iN6B`7J!fsAbbZz-2(*{L!k{2a~ulKfg%+lCKU?31ktM?`~?V(0uDNvhQADm z#_09TFYsI~_;I+o?~LnPAL7*OkTg2?bX0-LBqcA`DZY(G<1rE0=IMCK`fr5*ma0MvT5{h(#!b73Z0x0wb6nq?_%R9(0M*KA;3>pwT~Dm#YdrC&6RGE$Upm{YXBKG4WqR$&C>4w8s|Z=lA=sgAPeBv;owxN5xFTqdqd+ zADWEi5Z_b9JU7T&g35j#6qFrFfO&4Bro)7(L*dy0FJ%~PcDVj`tZOPKvVoOaM1B#kajAM z6Ezx<9%JE(m(9KWF!{qdmHn5Au;_E34$e>hb{l~t2s;jU-3rg&0*&ee_Q~Jalw3ys zL-l4*?g(u41Ti!D2W^6$hvCh;phzO;7d#$bOt|L>&`9kkj>BWu!SCC0!GVbY7S#&g z`w5;Xk4==yFXw^%2s5_AJ=-9$Jx(9JjOqy`xfC??3xo8yTq+rpiXz=8X5-k{bJ&93faFt8(Zd!5VoPiix%{}&RKa^Vfk_yCW% zPWs>)DJ{;Vksthk`ympalAbCnh2MK|SqHr;6}VlhG+Jt2TI#(_8o66qSX|n3mz2=Q z*WBkGNv}!UAC$(YNsn)kYEF}a4`%Mk&#PAf+i&zv>HUsUN@c@fT&}X`QS>^U_Z}F7 z>Pnvv^>xl&gcv1QJ`~-tjUc8HardgA2m*bs@M8`Dahi-(Xgl302{*_hI8L z5c>)QwSbt9pyW4D?p7%C6cj53QFmlP=Mvd=(M&k_2K>Dcem@2ao`C~DSzhq=kw{|; z6V?-+O@WtVA?j!R!ee0C%h35CO!_*H5;SGqtPo5o0!4R{@7me$WayUw=|#v{yJmS_ zeklyz3tg{)u!`n+KFj-MA`^EVObI%p;KMh zZD-I`i+^Jb6Iu^mz7bw503q*kdGgOK@>viSufbt}O@9iujf3Amg`exg+KG_%rg`Xr zU>sS(2)ThP;PEB!_QO!DAU?0BxL|0r43;#`JuPPuC>WIh-6P3As(({Yt6qV-2EpEN za&9k{!T*{N_^23MYd_iIFWW$u;T61hD-8T2cQo1+fr()d?Cfc%T*CQom<~k1sW;)3 zLuT?1#`VcR6i9;LmGJyx7&y&L{z+V({Bw)TlfMnt)m0hu~#t!)EK4{en z!fxdJVD1eAtVAFbGOmU%o`Rn3VQ*W`*OQMY@K4YE?s^DuECJX{$z+Jl3*86zXNIME(XZONm=%!JsbJd~`I_jz?2rX7sB z9j4hG{wRm{jqz8T2U&f|E$S*#?FC+iLsuf6u0;{1@5=^WFqjy6? z`;oYGJb!LKjdMM1!RPQ$0{nA>g|9po0uC01*gSMnROt=4v!40KpZqsu1vB0)SPUP& z02$-4jdxk`9>}=?|GsK4;w~uD8rx|mKlA}{8D4-9bRW7Nu4riPxpDM&_fXjJZQil% zv<*P~4tO9Heyhy|feD;Tg>#+fzQZuGBE%%&7Y0$6@gIgIaL>W3Ve~-w{AM^@$UOJ7 zeSoDO)Gq|1?}Dad&9gi-4ErJsdU(t3A(Q;}J^&-?VT+UC?=W^q2d6^k1@QMUE;!1U zRUQHE83Q9~L5XWQ=NBU1BP&N%`6TF-FEHkQ==CI|UFY8SAEraUK=Ncv$XNqmR9I6J z;E%7(Jy#}wIM+dL?gqn#U!MFg!%tvY)s>An5FJX|n65hGhO#YDdNdFjH-*I&wxYS|VLgyuLv;D-8D_h%UvY&SYB=;mw z76ds90Kstfe)zmRB)^C2Y7OJFxZZB~=yoXc7Bk;6t^W;NJ;&VhcZWBI z=LscY%x))mHlt_LS7CSwD077TKemZ;+hF1zwVX7UU9>zL8$Gw*dNj#^?l=~ zA>Y6_d`PV=9SW1qG_gF3_ce3>AtaptbIEm5t8$k19O+@_IHrG8epi~+$-+ar_p*0v zuXM$!ymS8Z$`)T&sFN`LZ}oDiY9A-+JKFYJqpP%HpP`Z89hh18-(OgI;hUhlf!Z-%eP8$NUN1emm1y1T@M1C~qPze-3$TUrQa_@+YKLUK0G zJedz8Xzh-Wx|fxzHEYO|9f><~;->_@=)r z{k~UfyvLH?kc+)s_VgpKmVO5#NUhx>mD^^@%~=nmrrq7KNJ@Iw`>bZY1z^+>YhQ!~ z&zpO$7!H}Og4>>io^P3ZX)dTke2oNK9?o6|D?WxLpTUl|A@Mfz+@23lsBD8FehTzE z3tt?7?F(V?UGUT@cyJ1AsA5U;@|J-2Veb_QP@)J7JqVu+h0+H&@Atw}?KlaDfIZcq z=S?vEUJDOi*bdlMA5M+&UeQ@mbtKg7ZT|7selKjk8a{y!Tfp>ta(F)on+MaPF!&p| zeV2t!euTY^MZmF&@X{)HunDZRdo2v&{1MpzAQl4tga)_znsGmdF^;^VCOq8K+;g@s z+qVI(g6+k;&uZ2Jfa$QmABL09J4ww-H3dq{gcnaj!DiS7&ir&FCK8U8hDUoqtJctF zKC~DI9p=NZov_nxNEJx-MnX>F*jQL$A1nib5XkrprrrjziZ>qvO+Y1yUgjyRdK}Wbc)8rn*wOG?C>HDGv^>P? zq!KW^FwmR}VzFNYQy-5XfgV#V_xx4B$qtE}Yr{*9zeKMt zd1zxney~3Dz78hdY3_R{obmn)*wirhbeuutXsBn`jQOJ%yi_0x&fW{Jl!MLd&HeZ+ z-VXzkpj;DpXE~Ir$GO-j`3m-S6b1*X!qZQ|)7#-d6z8q_9mi`^e|0*;h&oVXhIuE- z3;fx)nS($ZU`Gk~;zoF^6}+?&j->(x$scoy-3w+fDEG4K->nFNf7f`I#caFgoSl&9 z>VBbN{{CZ7W3RcFpH%-A)NBbcc6F)ao_`2rtb$p+p;JltcqSwi#yvmpf{=Rf(EAYe z2ey4-Yt1ABp|GPY^xg@p?DzA^pZjH;um5-`R}n_`gvUETz-!p*!40opnZo$TI5Z9V zd<;LoXYL2#{-9^t;+k@B_~X1Ou3}}OqQAQL7B-oxI%{@<#>Gp{~6jI)UMJM6O z_0W0>^xO?&1@F{@clJR>s29@r2Fw^fmGMhOKBnXn3r?;HjRi?#bq_YKlT~XO% z>OE3n`xa+N&UxzcnG~OBKF)9Bno;>DekFanOe+26#VY5lwjb-Zmi}&Rq2+}WP?D6~ zMw*S(dAAhvYv$u@xnk1ReeNfh=P+9t3(86bK5(HAney-ah?Kg_d+cQ?0Q|j1DtgSl z&fj~ilySn>C7(-}qd{v|Ni{z;dCN)|2s{7xmBG@q2PM64=s0_Z-*nJjBc-eC`;gfj z*ShV0(&5+5x0jFP|IbGG(O8d%q zkFP8RfRDyYfwNri_>nE7nO_OYD*Ty!!?fNj@|X1P1S!@&V5G~rj$_Je z#ywKeAVV)a>vSHwNs7D9e4FI!Qu+_V2wri8r6+nw0ewx~c+xP?2mwWYl)k=N(ibLe zXPwTNHZ^^d6n@spG;)s(&qOq^gK2BC!YUv$42Sdy;8AM3lAY#^HsKuwCM?77p#jg^T3Di zxZeLGnn|^zov{H40@}mWFCeL) z6YmFet{qjK4?Q=*$W!pqP`KtP^Nw;RQ+khw^6yEQe)IV>_;Itjmz^=KG48xI5+1M{ z-#U?ZpTo{$BqWrFk0wKxqOfe2xgUsaTyaDckPJcJ!6S`f+*YXd9OuWC+!`L+$G>oh z?*v~phISj^!wPUbg!B9Qj_o?!@HH8p_!DaRt8GbEFk?ZBwNT7OyRF0}u-==lrL&R@ z>eh5`#nSbRlu^VL8N|OMac$5@_^-G^?M5UQSyAM!lObMe1ffvgNqy zGJ9fC_eo=;d|gQYahUCZlabQBRa{#syQ&E&G*KxB~^aL`LqHK zN!_|iJFb@W-Fb2wI!aYmIYDEJG^V@!3r20f;4!IWzl-~6R$7o^3DRGG8XAdir=EAP zcrV@BTIzC23Lb3o6qS8mK`OFWdbgJpx5NBGmQgerzePU>4DBphllwdtNsdE3v8-z?3ucd&feF)j%hAz=SI(#>uP z&pBSkFtEUJ>61lL+ANcH4inRm-&{+lj-&%0SO^$FB5jOxrxQX=a1m+ZKfbOI3yhF- zu#0qEQVznq!}WYYDPz8`GvFl57?Ad^^h*P&Ztct$B^O+la%j9#`r~0qT?{=>#2~Q< zB!?vpj+aW#bAm5RJBxWndT+Os6zV~~e1rjR7~DkTo^4nJ860O1qd7@+1#Uw89$ z5ql9v8cumz`tE;H&3#TZWHU(z?~)!~C+)Ht)THK|*5>-sRdy#OneB}k1ExklOWQ}A zZ!ez=@D1#B_Kno=r3>rF(?USxR_VRFrIZgZO#2+nz`MPjRQ+TQt1O4B>j)|1%Zsy@ z-d?)b2>~E%i!`T#uPejA2=A%aN>9yovW$%lN39#A9rpcZe-^B*L3}ny{c1@CN?7uf z!vZC2yVQM)w5OScW^VIqSu~{$k*1!MuB$3xH@wX5#Eiv0q3-X}q$5(sR6{JkPX4Am zeq131J?vVaulK%m>^ASPm8Ad>^q%X3Q*a&Ww^qI`X)nXF+S=Sfx_`11^5=yE$3>S# zIJj!6H1kGDc0nLJi(<3#TCzf_X0MOvtjqtN+oaQh=G)6gfj-58u2R|E7YczMy9~Xs zAEiMtQv7t2s9o^0uh<`#p4{p>{lQmeo~N|?q`RCr%2c4X^!Gwv*T9ANzNHlTjo~pU z=R5?wDSdRv*IefS%OsoLMVek&YVzd8i-YXOqbkd#F<(kab^+28f{ta3+&Nq7`;b)7 zdh9T(and57hW$@^_-ARG)c`KPM_ZJ%>P4x@J+Ae~vIC{<4||87ECqnT(XJ01;Q`XD zAYT`89>CJ^5}Hb*qNIvH<{)uf8h6o|((Ct1#|K(y=FqsOy(^Wp?=L&5FHL#@w@5Fx zm(r@6k1ml@82Jj8wlOYAiY}AGpy%#o+Cb2Bsds(pSSDL<<6BD6-CSG!6C;hz!h%1g zm2}I&oM{y9Bdz?~*A=02T9Nger0S=0m=x`o(Xw4#PC7j8;yU#kSSHy$PfGpnlM1c1 zAO6%%oPSY(|?4=T)m%d#l)h~8&o6Tv}U*~P<>%LN=bxicfI&cFA zqoo?(yVlnWwUk!;=pBBt766`fjY+WWi_iVt*F~I%u&mx!q)5#dJHL8kuhgoIG{26N zagT+jV?($6Kk`*6?Ds5$3^Q;=j*-SR%ZA=%cpvr^_$led3KH|OsI%N&mX+M?d!)7V z&$BQ+LMlJW$w|+0g(OK+r(~Y3glDA|4RWSY?6|aUgpcdMOde;eNOxcDTDb<_E{z%Q zWBzl9)CG!;i7a=Y1R}M z7{3h9!|cJI43O?<@8O9*i?&pylQiIM>6zJ5$^I9%31_dE7o-(GWS*t7&q>$DSv zduh}A&KH%(VfuZ>0_m-2DR7FD0+=bw>sv`DZ#1<0MS!+Uu&GhfykDd{i%X$a=T4bT zvKG6c$V1X2wWSRQEp&4`!CJN&kNr=2_b;iu)%Y+ge*+c`MettfmKUX2=~9|iDDjuF z_aKrcNp0?StxtwsAx&TG9e%R(s2tD%_}IlGh0Q?^0W-XKZqXT}V>|O32#FnF?=7%* zHyj)XM=HX}4iNhhBs>hMiy)&t1h;_5#ZY)T6deae_e0_DASM`MeuDzPK;!|49B=d6 zAN&FYUIFZZ)Q4c-e)w_)oL%k&e|Del;cy}rKKKHr4~O0@;NGvGcx7v$n!F@I=nm*V z4dxYuU1u|)8xKUmp%d`Tukig?Xz;5^FF*LszLXFO#6#f>csm5P)PsLFVDq`|f$-7i zkjA+X(K~;J_kOlKi^djPzy-t%gW^N8Na_(tE(JW7J&nK<5afpMbB{orJ9qtaEqMQT z$Y_bJK2mb{HVuNh!J~mt_;Y;QZ^VV??n5ByTUZtWU#)`QJHY8)ks(s>5r>? zEn}U>>|dl?k4mN6OW`+3eC$Ggs!PGOq{uI&!ULtUUrIHnOIN)kHUCSx?KA1F+oU@; zN-YaZ<^RZhRhHvrk=g?vm#&#Fjoc|69F}#y9_#2F?PkA7+uk%ET>=I)`59vmNZ~D< zT#5Sdy5>gdbQW#z*!5EV5;@Z-Q$pHa+Xsbg(fG}sC{^ffc#3vD|5ucjj{4D2=A@d^ zw!YHXaZ>w|QXy+zGCLJy)dD;rU2%gne1UX4(n>TJ3|Wi>)AmY>dPw)aAw>?(Vf+iY zu-#Wll-|Bw+HYO){|5}0lRuPh-QrrG3|}J6_JD>uGh`{>1}%3z*j!q9h#%|)Da8%U zN`yy};7|$6%>^zH*lt?@q;<1J_&t@?d(+MDE#@~6*P^!BrS@RR7z4}4z{;L5qAj$4 z656hSnsp&M22TG2i~GZ>+kjuPp=nlxOFBZ&Y4AlusJhxbb6i}@ZdkT(!3w!>BO#!faI&4@32UkJH5yPZ?6`k1t zZN`%tQP6!Ubg2(zn`6@sT2}2Y!>$bphKvaK=NtHP9{idHCtfx0gkxLrJC1+$`#{N` zpzEj5qbAg_dW)2seC0Ew-4F3oUHc|@Ekv#H4nF~sG98WzN5N?~V%vZIJ@mLApH4KY z4-a;L?}u>Cjif&hx)&gr3p!ANrcfc;Rv$;dfZanOdh~2AqVw>v2x)Z-u2#1$+bn84$1p0$KtOKtKZs2nDL!-VI0v zIs#Wg;FSl6cWoq zd@YENhJ-6X*EsNJSL^41yPkyiL!s(0%T0I2;|wlvX`S>PEWZlAtpmTEhGQ}2fy0<} z0Zcm&8xQxq56=vN#?2rgCi660##YGK4rxsxy(OeS3mIpC^$;8g;YA?u-CWT3Fpl?z zmR(`}_0E4&Y%?rq1$7U2o}Vl=0Fk}m^oOn!+1ESGZ#p1a!hS`Q$T+TOUI5X-L=!aUCJH z8^n%=xQ8G%6yldc@@tS5Yl|5k*ad?7K-irSkpj_wLDZX2a0(PmfasPGl?dUlLO@m% zg(n1AUa&UgB9$e5Wk z4W&cIJ)Yw!OW50RFdVK5AN>R)(;;>+ww1rD3m8kEQa{U@;TOQF(b#JF`&Y}~lgyQ! z_Twt^`=|M}ub!tk!Jm`$Ty6{mcZB2$5VqIcbf*mmg8qd41z^EJ__;3p`InJJV=Q#D z(|9IB*uU`3Xm~0Hf^NMyjdR)i6Ve}o-y#HT`V$_m4}Ho*-`!C1dGn4%b?Prj?h0r3!m*RE|3}!@0(S3$y~p7|Q8@7x zoPHPLKZE37Ao)c|>jD{NKn;KahR{S{5Cn9Gz)29a8$#}Yh@KF!4+`G^Mel?%E1_Z_ zRJ{c%zXjzVhLZ6%?F-{Qlqq|=91W9OoAKU-ReXm*FnA~&YXLLk;Img?>94>hE>N-N z1|e@iB|Du=CXBS1ke&|I%OR_$Aj5?fj?1v9vXe@|veCbpTg;HA$A4CjfA+ukQfF@O(1y~ zq%MW@BcT0;@MMRC=9=G?oEOZt0A(PoDU^N|u6zMnTnR1vL+wKlY}c~b4adEVoz>xF zN8l&tzbXD06nfJ;{A9TWaNipEv7ze(D=vU}BcRHU-eK4&SSnL5!uD{OvlnLG0;{iw z!{s2=-!%cAhGkH^wm3ZhG29vkVfK|;UT+J035mnu)B|w%RoJ~Ab{vNt$6)tgu)i%F z`v%U=fuv)&W>?`ZdO+k)Q22hR&=G2HhX(VYQ3zDOABvTPKu7C#S2P4>D`4I-xaU1M zJ;{02o{oZ#Ei2R`^QOu;_dEY&^_(0TS)%ZVzij@*Of$$CrSx15n^0DBKZ>ghPqmP$CG54uS$j zfH&dHDL60=c6|f8)8W`;NVgh4xl^{TY;}19maR}LN;QKvy`c9bX!WwJQNyX94A0UXX@ zHBuxLX8#F|ns}h_;evjg^alKO8pbq$KZd}WZRQo4GHne{cj{V~TH8a7q8vsAu2;sMRhiOkC zH3edCfaCAM$tG}e5uBL~vA;pw{g7A!lJ-FAtu_Obj5r_^0^Wh($077X2-^jb&qCBG zC~!N(JOnYNpioOF^cY00hltY<-UirV5`F;EzJ=rmAmMp9`y3oA3kUYYj>52I0Q_4N z_6>n!>mYtrR<(zFoztQ+E>r_rrbFjIxFH?N+ynt*+%MC#Z{hT0IPeE-kA#iGVAE#U z-WCo_fKx>v^_^@8_|t%s880iK_-{~WAl%RsZkhpCY=+_`9Nx=H7%-Ff;`^XoGMt?3 z94lr2hIubS4SQVrL?8mvAA=FaVbE7__Bc=gh;=W!H{A)-Izi<9nLpn&9a{bmj?BuQ zPQfUcc?C3GoQtw|D8JbEVZkf#)xR(&9pWmP2VOFUyo~<6o^> zb{e!92Sro(fxg!}^}E0od6Ujyws;js}|UOq>>tK=5#=x&xXOh3h)Qm3Kmg?GV!r!qR}> zE#FOm)FY5k5Ki6?hdzTHQLtq%Y?%k!m%zauaJoIDxAS#jdJvhEapZkaV-qxg0NOT! ztItBQyK^R$`Yk;415B8KQ>xX#QZQyQJW`qSmea-vPOre2ZSX=fIMolgg@8wXg0aJZ zERF$g>aiJ=EzKsndGDHRBFe}y`CdWos*oCLfv)eUDN#>M0Pd!^(rbs4TA8~2y- z*GfC?mZlw--nd`7W1Lj6x)i)E8)qOcx|0Qo`)?!Q!3m`yZv^x0`QV5CQ_8s}IeMS>cd~6eO#GX>NUsD)HJ*{EW1;EkXo{DwOY#c5RSF50A}dHSL!}b?qzZ$j z+7+b6&r3JmB;DCS>d``a>$LRyMCn)yFOJqgM03Q z8Rc=!0@Um=Uwacw+yN!`a(OGj+xQy}uY$#oz~rl7&VD%L=yTqm_SgSID18)KjfH!g z!;Pn);4SB$^*#=xiaSRqXf%8i0rz+1Vh1V~gWDhLLf=_%tQ<}o1{UZ9GnYZLJz2lA z_HSra8BUbVncl1a!0Xw?1F-TR2OImrxF_JJXJF4l%X|NItN#Bef*L^ZAP6}P;i(W& z10r97=x8YLD-@gxg$hAT7by596np>*hC`vUP~a34s0~pyAgU2Wra<^-5cVO2m4%QW zA$Xiag5EG#7Z3nv?uNVD!n|I%v~?9e873`)Ti!oU%hSj@%NY>yG<5C(vx-CdF&C&B z1GB{o;Nxpx$Xc7Htjlg_y@U+lIw*A=+zoVS0Gn=xDcxb_b+91~PNs12ymH2Vb}dJk?s31xRf#b2DKmEHsX=m7V<1%X=}o(FTzTK?XRKm+JI8jkhA zDVu;Ie?jT$Iq*;hDB>KuyY_)rKtNB22lg?*O#WL=!`H=NdX-5m;rK;a&?AXG(uh9a9F=6Q%|3F|JAD=G}rP;p^RSmm59>F2fBt9DR(P30o_}@-DFW3t00q>}m}O zb_1;#;Iyxq{tv*?cY?l#>g%EA2eA2R*!GF@WGe52xh0`;R_B#1^*`ZJ=-U~N-$sr? zK$CGW>klZHje*~~cF-yjj?X1WTs_3LaER${xoJ6Py}v7by%oMX47>JQ-no>7(lrpW z20|J__)-Xe3PMvM^bCZ30iksuv@-;!K+sVL3WlI+5U?KtH$vdQKu1VF0~x8dQ%I?W zAvqS3PeSrzkhl&KUx$QxkW>Ov8|Q8Dg_MG#cSDi75R(ouWuWL+Q1l5XdJ>Avfx@Gp za8a{TzXhT{fQXMEvI&I7K=A7j)YjLPi&1Z2QEYnbO$*K z008f=g%=vQLEX6Htd$BsO@#WLITy0_GQ5mTv@IF0!?9DaVIa&b2H!M-BkSFwei`l} zGZml<=l6r^z_^|8Kq6UtFSFeLZY4ZD6HX2yTOpv+X80ipg0j&9teXa{Hp1}%A4-pc60h1O z!@@T~bOuCT2jMqE*xL~FIRsw^fvapMJc0^Azz7Ja1ObA81mm81Jm?tcH0U^__ky(B zA^jFe3xlLzAbvcYy%tW6gTr6Jfx58!W!SwA_Pzi|lHlxFkQXM|UXMcmWl*Rlg!hE- zkq~@61h{hozuc3Q07+=eE5(TTllxyI|@5z0H=}hWq+%yZkww@H#K&miR zYC2WA?`vsLxHM**G`qUAVYqbYPAP7Klzz9bJNtPg)|U=ek(M`-zWH8y_D`whn^KvR zQg9U)@}JFhHgzusIU4qbyXJLC*LF0-ko_ zJ=5pE`4__LLeY4bxd@gngA{w8w>$9hr#*h73yt~>N*#r2pF{0ipw1eo(HANNLD9+( z{VW99%kLrcYxkJyrWa9fAbcH^#&%r|JP0Ht!Tw^fb~Y>>2TO~=mg#VE%lZ5R&TYj6 z!`e1*?_B8C2%boT3dPJb~;Ck>8i+b<&pWu^yP~}No1cW?kvwRP{1Be41gp3uC zz7Nu_gOvG@JQortLi})un+KH`0eVJ@C1ilDG z$3W%Aa777d6bg0kg(|I~c%X5Dbtxc=G2`qg*ggstE`V9r!15k8SLNB2*#)o&lUF3e zvs0jB0z^G%p8MJzybrLfEj)M&Y=0Kl+;f}0(d0&$+7*g*ck;X3z$ra}Q78UVPKqq& zrn<=D{GiEK(%+LT^b_+&J9DWaafEcZxwJM;ni?w&FCjhss&q$jss3$JiEt_OHs7gK zgStyaic7U`l-hhH^;j#tn;`udCjGTX+O|zPUS3LiP0|F^9i*H8kg6S*3N)1%<_BtLS1;3#9-1hnzwBh8B-?&cx=I7jNP%N6R5zAA zA#HcUY1gL5q>^*|pbT=O)_+$jnl3dfB0c$>^xZYm+9T4bSV`UUybJpdnfMk-=q@ek zB|X1Rs@5#)@jJV*J+z&4XDMk>8!6*Z_UT=USclZ`B~u=5IIRl$M*3o7-tp^{5uhC@ zw?nUgVeB?%zi@zMwN?HW81xQ2lm_8;_lx;W8<4|FJl8k?3WBsVaC!$EoC3Qh!1hA$ zZ$q2)^!^*+*eW<%1X8lI7|nx~ZuHGiW*Jo50ax~c27yq0ACy^Vvkng1n)@_zi=vA`YbrsN-B56LCg0|_G002Uc^~|= z7QX%nwpyb)X4fAqs_x<~;ISF-L_a7$!aTnew*@TiWo>Kd{x7W9;|3k0Rln&|n3w{E z`{Dih1t(7d0Ou-i>r%M07;LG|IV*pcVH!$U8R+yg416EzPO?1DgN(b4OjKHFT_K?| z#BYH3JVIcFI4@(rq&Og?`sa7N9=Og ze*>)D27kW>%R0lhXgG7D!;5|-3W014}Qi34uIY=)784rVcK*j`eu-x)rgnj}gQlVNWXwV)SErt45K*bn{ zc`Or$FZlsk4F0Ff!It{4pbN|`25atv!e@hA{5BRS0LRzEhrM9? zQFx~gRQrt_C&L}%;iiXRzdsr7Ijr`JPJ|YL(5VvK*aAwOba>z2#uR^rLt9wi9)@p( zpMW!Vty6aP9F{&3HWcpc1_P3yVQKT+M6=AdFblzq#qi6IFz{E{bs%>nd%pvp%!T0D zxufF}T-q=&`#7n|((`Xg)N=p$h~sww^`xt+N}tt{_8rJ1?R1wo^*j=6KReGzPmGkx zb(I23`@tTk7p}m`QsEO){iagqFlk6ZY3h~I_V1o%O%SHm{a@dw?==UJ28WGQ)wx#xr(&hExig{OSqK0zYXGIkV_YWys{aJ962 zpp?AVfpK4t9r+oS!fSnc@&n@ z3n540n(v@X8MxzWs944F-ha^g+^evtq)(rO@9%*BeGJ>1nCIDT3)nRYg22YmHUM5d z2ux~u zdqKL|Zt>`92-?gp2PZ?(jiiPnq@IhU?|MpG`bjAzEqtW7#l2g|7$Wt*)=8^aKfOZk zkV;gR8h#>mt}G2sl73t$tqPTnbeB@5!Hd(xynOc1itvNEHtGRwMBKk-RI0 zgCnJCQ+&VT59=wlo+FJvBc0smz~trCzIS2K6m1@o5S71OVw=2-4-j zQmrd5?xeZ8G8sezzmm!ZN%wS-ChV0?{hE0tc?;X`l*(_+Ka+pZ7^zsSbX7I!fj^~p znn;t+NE_-%Cw|H#uKZ;<2TSN(os~AFNG}FU6?)}zKyb5<+?^n$*3X-)AKot2TAjyj z+0xg7&PvT=qzUoT*#!>F{YQ?O`2{Rxoq9x?)>yh>s}xYf(l)abgv~q=e2die8);^gQ+ zGh~L;Vz4wLT*@eKuO;sm)b`QR6;r)4hhmIJCD72c@T9mWmIt)JwScC&(ICNc$(|O_q<1mg>*X!^uD5{NHseNTW7NCs$Y) z^1*<485USp?Z?_l@BAQ@8|!5Iw@jW*M@q{&Tj=^qi{p@P(iv&-ozmm0rJ~<@VB&We zyKlQwI%L=2#rY=7Zk+-+zkk5F{hftvpyy=RY7g||ts_$wdx4n!@Xj>oH5>TZ%X=k% z!M2ew`zZX|7S6s7$yY&&Agv>09084o^evz?2q*|dgBn8mRNyg4yC0H@!=4?m|0Tc` zt5JtN=78ByDh96T3C$jcYvw`i%}_cB!ZvxiEH2|bEP;2_6_!2^A8m&zA3)MF^Ntto z10v_a)I?};TkdJ)gwti==F_m!ouj|5z+%}Svl$+L7oLoPN*|l&m-qMm3zq%y)!pI! z12CyDB-tZNW)(%&(l4r=g3lg?Houu?dAS$v5L9dL5}4H)es2kXw}q1rm&bF|OB+{vSxm}IEp@w; z{+E>YjFdV~O06rU?2=NtODXlFlq;o_Mp8DZY{Fs#Vij)*Bece_HTJB^%t=^={ zO67J+_k~DbHIp`NloGG@a^5e)Iasy^5{^jUSCOuGJM-17r>~C&A6Qorw|8jGbst6hU9?0PITn!PV=8g3HKLyP~+kb42Zp)fbcOSjC(n}N@Mjkv+L zh3E>>=1G0JIFT=l@D%c_bZsZ;;~%6gd!*FNqHkRu82tklBdJ}FNWD^|h?$uPbDp@& zpz?50DdQdQXDy+Lbkh>=PyP{mrKb|5gTpL|drRH#iGFjr@12LG{qK#J25gs#z37A> zVCug77HRHlUgptKUx)TcUp^t-{Et*{W!7VGt}Y9m8y}W7H!_L)fx&9-wg4_tC)m^+ zN56$Pr@)u1A?e?X)gK;%q1kgijH;J68k5}O#~Y#B5{OI7rcCTdN-D!OtD$cLxcy2f zJlXQjWrrsI3(MA6>MQU=D;OLIyPKQm9^MkT<`tMFDD?hZV&vCnvxt^Ydw{0Y=N&bedf-oPJ?VNe>Z zZVVaLU}2t|t1Rx3Z%={Y1)y>g{xg1iT%<6@49WeZuUbe|7FZ;q+!#+}bKPE1N~z;( zSt{o;S>If$+2~?b=LMJ1m_#j-URWs|`pSXU<<&<1fn_zcY?O3eSud; zJ89oY_gv>a4M3fDq&W*M33^IBn#oG*Y-?%V9nyFINd2#o+5|{7ACQWFBSqgXg%*^8 zs!D-vrNFXM;6qZ-L@E3wsqkv4dIRa!TGHSN(qC(&Wcx^Z*8BC4Z(!LLJCh)djFf7O zcWyp-;6*9%P4BU`?|P|TkBheYzDNw^GuPawc&<3V!E#0l*=H>#vX=XeNbk z_g-ON+e(UU)DI#9rx+`Z=p}K`QrzG;WZTw%*W4)8&ajzrr&4?7CBG_mQQ} zJ#=Cw>?LW&Ht%O8V~O;zr%%F|tHF2D3agqwx2Jj>zE2O7_SBIk4Uqc%BVC&$75`QW zyfgQ_7eabuiL}=q(K6oqb&;=NnGd%0m!AAWiW!;3wtyK2qdG``oc10|-;b067kNpT zwT$I4KS}S@l;ZC;3CH@nGA@L71OVwmqmUn@A3u|tHj@IZAy_@M3TiN1I__r$E9u;% zo%WqH@MVcf7dH^c4$$~6Y2jfD4S#izky|*s|8=PdK4uU+xK`>A>-j72rOCvf%3aR(M|k zu*1?x_k1J0eL$)?KI=ks<*MdgqNxegw^pAA&`%OJ7XwpIVM^zGkLQaww8eyk13I{`qts33L?kcNCD)tsI?jXA#q7{ZLKh5t#Z(d_o#@N{Skh`AXLD3T`NsNR_T0E8QO` zz51>+?pA4bytJ;Wv~Qhs`k0iGM=M}Y;=Q}201v6u8x@vL4$D1HIbozH1OOzuOM||b zGVDUHD}$tE;!nF@TE19%>UOE3V;bJ{Lz2z)^fyx4J$453s4?Y7IMjLE3)0Ser2`Wr zJ!5WqVKKDy8L8m?9;j=J5o5{C(tt#1_h*)b{K(iZE99*JV26Whd)H`b$Xco9d@0}t z*DIoO2WejgUl--Y_-MKmc-&!vvuFX@){<7uw0v->?)O{p;j>b({an18J|Y6jOW`x5 zVkM=j-KA@yr8|mC-QJg8yGi=0wlwP>~I{b(s>a2RyGMT20mzD%dj~$STJ8q-+DprR{H|hmx?E1|4 zz6=-OrE>denH1D97xipuZw0za4{nl{e=f=DkH(Kz{Z{x!0I>qtfab)#)~`!WK4$pmR)M+@Ko0pZ^7VcOAq z-?&+~R_APgOSjx4&A3rYDPc(?pKagz))j$0b>kGJYC2s1vcoeckh~NUO8GP==MiLU zB40cSyF<)9i(`ozSHKrv!n*-b>_cp^uCb*AmD%80l>ML@98UYm!-XZ)s79+$HZx?0!P3;^0;?YL4{qlhVddEHC~SjD(Ct zyzEY?m_3%fKdjUouBaMPcHJbY2g`_=hR zBPnKD?)ZH2gcAu_w1e@n(%0`vSM>426@OM&0n@GqOV4eV4mY>t&6nB$Kea~BDHhbDf5ElSnt!rt z2ML_h0IuE$kF19tbzz;oj|b)Oy+0rph=Tan;e*<6_X3#m9;EE$yu09Z_sM6M_mtLf zY&vZH2UeDVrQgEV?vR`Ugz%r%M4SkP-P>IJC>{z=g^>qfNLwhq7hCyX0%N$}DJ&`g zl|$gT3*YEISX>$&`UiO1*ExWibK#qEaNrK869x6ELijr15zhOzzLZt|cBBF!@J|3t z?1L?2v$w)TyNfJ%$#~q>29M8y<-n+TDE24R-VfK7hU@QuE3bnxlOb@j&)0v`yJ1jD=&1V0S!hZ4F!Afvxw#-fnQBAH)xa zj5i_r3urqWULOP%6MbDUzQc}t;ZQ3VJ}`Z<)k5gB8~BrR{Db8YN{^Y;lM-%E@xAq3L?fKj#JXbW@CpC*525eVuE$FN<0 zo`JC4P;ojmIR&kO>%V|X`ylWQ%Xjt(EeF(G1XKog<&Mo`Qz4@U1QzvPQH0+Ekq6xW zzHmt>F&nto;elmP-TElJwg-NB3ew)d)|bV(pejCryTX}WSP6%?(eOPmbtznbBissH zvl}WbfP%*%EDQqsW=0!+SHrF$aI77~{|cl5@0gEXIRAaz zO)w7F*&IHLf%>P-11H<)rGgd5Aa1b>ADBA7sSO0R##Wz~$m9=xC;-q4nly(m)&LEh z|7?3%_<1fo2fmH66yoCjOBIPg1k7Ipzb-fT{B8B`EHY8?C(nUx*sky2f(p&yrqAHc zo8g8IP~;@%2i6?40u>5E*msb8UGCUC-V9QYLYOxNfMAHc51U%V4aBU6=#pG00K@}P zps(P!WO%tfY`Pnm&jr!c@)Ci!L0BZDkAsvbZ0$Cb^TuAT!mf4?fHU{OG+NPy(bChqIgDNP9T25)L(o6FVW%t|I*lxY3ym0U7YuLU?EZ zeEt+%^9kqsFb>QM`0$s)4#&K-C@=#d^V7K9S)&=!=8gHAB2we;ja2nZ7guL zd6-6~BKMls(5eueoR~XSn!W)uD?z~ry_em@Sh%A-%v<2z_stiH-A)jQfVjWl z)ZRn zrPv1zp?u(p=~BiA-%EjC_<==sUR@5J=PDPKo-HE%b4W_BZz&iDOY9vZr1DSYKK;7M z($R_Dt<#hvQilWX^Vs$iDapYKe&5&9gRxTJrVFjEy;(N_)uoavq}HRPSKCO_`$@Z} zOG)!G&-ap*(ha4vrk5YD+U2E1cUUrcDf=RkG|1IB7Uq;mr~9R}Jn*sM3;53|01FDX zg&Wqp_>qxbe@=mS1*yw{aBM4#%g8$zRp;Liz_3P;(VhR!_J@7H*Yv7gC*Z@Aa9dC4 zc^@o#4pQuv*kIfD1|pw_@Cmt3KK>U-TH)O+2Csku+jCJwj{p`8#Xno%fn)G(0m!I> zP0b$fA!e;B+H?qL0p&BG(|Q=40duFo@2|k?GvU?`q2jF&*1~~?sne!c!FP4w?k$%4 z`MF&O!sdPOcp&^~*H8uE7pJH^3e(5_Z3hz;S@P)&jJBj<6$qN^>x_5_zLr2Pf{{XJ z_mm=sx+t+37mZ>2rMKEk$%72d{N!KXSt;Bf-HV!#%=?n0>+Qb&!efT!u!?S`y=;xY;;sQ^SzWYQu^szsoHOr z=bm!m>##a6QdznqTKZhlw)dpeL78MKr+#OGI2|i0J<>)But#%r)19?nT&B-e?J3Q? z%aYf8=FKikm^w|LEA?yQUKxcikY*P4bw<1g{}TWVPM(mOzU0QhU|eyAPM7+JNGG4S z5cS9Kx>@j)xK7%?N?O)Snp9W%K1G@xBkidvrEj;q=r1ltjgWQbOR4KH_c~i(38~RW zsqGa~LrJCnmcs7!gMre+fsa-$m*P+s>Q_|5!Qq8WpPba3MwBk$eSM`8v-RH4T zMQL<5>G^$9fsL6@*twn1Kw_FyW3u$ZwbIi4QsSo$nQ%wlZ3Nsi-$~Dvk;2|HX?bJI zBCjs9Xew7l`l-L9<0h|{(DvzX3#3Am+?Y#{s=qGnTj1*)cn^Ln07%kMcSAPXrSf#? zj_J~>?=3{r<=efkOw!KypLF6z>7O)d+zIKKFQqmkrRpQ3LN`mnJ*2=prSKP}s-H>S zPD%6smQo5>i1<=!Hv?mQOX;aErGP(N>}+P>zOAivaH5nFB%O$tHh(P5XefPrx7266 zbn6FF{UE929x3uADew_L7(m?|aKSc#G+QM-HcN^rlY80`-J}K8ykFgK9dwgN6EZh+ zhUK0oCQr-6A9%HN)os$prKH`n9T@jSA2Dq`d7kuH1F7T$3m^H_F2K}5k*?D4Fe$~Z z4aiTLQ%4v(n{_Wrbq<+)M!HZYX6(9ewv=|guQTI4_~j`8yG81bH=%7S*l``MTiym^ zv$_T`8%B9YAezCR?Z-v}*=^ z=fX7=fUoi}PgbM=p>Xzkc%>M8Rus~|!nQw}>cscv1V`DsVNz+h`qONZDi3E1!SQrB zay=aC1xFr%!@!ZwaI_X2y&g_e&vS_6d~66e5YiWZ?F;Ry zdzba$Z^2Wqcz{rDt?4b_2Q-0(De(CB(D5oLVJ$~b`vpnDW?ux%{|jDT4ojXh&vIFZ zK0^T@7Q*77&s2DM02JMAp83+RN-ps41b8eC{_5`D_W@I3%y;nU59Iy0npg0(1dyrz~HsHJ@7qCxiI#n7oS2}Vi@ADB?NZL4B`nHzTbA!~ls#N%PiPpJW@s#{l8ki#O z{=kx0UTk$(R#SVvl6 zG?Y3vlp1f5%2boW*80J!%L`Xv3+cN(-mm(vp7YSkJvWynnq>9n(g)8=ha4kdrCSrUE2DP^hamuqsh`^KTA!zN+r^ypr^AaV_y%-E?y(fc&GfV__2W$RN6;* zwDje|t)yrEk+#=&U@$MY_)IXEv~|+djneh|qyX!p#Z!ijJ}BRc&q<#}OJ_f}BWb8ei};O$)WV^e26pOi9g_jSg+3;z`WEckM$6tc$y9m+u}FA*u--cI@`Mp{-t zI^I!Ad&xE4(tefBR+DzkmloEOMs1XOPm-=1CY4$z1#R+jhqaVP;CiX)Khl?dr6bcE z8O>!SIA|4imy-s}k%~6V-C!5IL>e>8M-8jFboy^;!)9s1C(^U8N;jlQ#b1&F9Id6Q%*>sjeL+lyVl_`sl}br>;+P~)$f6?jC?JIxW_t6!*)nDCphr#i}vI0 zSZP^Y1V1H6pFMg2063yaL_t*D7AMWQTS|G%l4pN8DPR#u&i*KU^r}?qkYz6^bCg|BZg_j9{6!AkV()7B@l#;@eX#jCkktdEmu*jizk;+wz{{NLXKumby|d7LaC<>` zbQ4_L2_m1eyypuW0gG47^wse9E%5#hm=OT!(LfZr@+a}g9{8dW1iKQIE+4|b1pqkb z(s$opc(4X6^t3zKoI2xP2)q_}AG8Xz75LrPg^~>%jLXWOhSr}!hZWFtHzD!=InS zu7Z%U(DIU>#W(0a2}a-P-87c9gw}6ET(jKM$`KY}tJb^l&g0PGH3;~Wb8dwF3J#Ou z{*Ca*M=-HBtY{0zPh|3qn{6oYIVju~b-iU&lu_F@JORuA!wei7WIW$AfH+X-~bHDG8cP-Z92YX-p%;P*a*S?N@ z1s-E5TKJ4#XLl z?vw#$#~EYi9h2%0b_{Tm&)n)(qi(SS(r|YmBMl|7M3Oax$x7JCNF@4C`L`R;qgyyB z>6i}fgsj0+-nvbf4~XaZNnvnCRoFKsm&2$GA`cz3lim}z<%@grs7*)^DTMIH2J)GBar$*QhY z$$B5ghy>yNUk7r-$+2%j@jVJsF046U@}K=Mst}UNC%c9Tt{f!NQy-@~*X%|C?6E(e z<5#4{e*PHES>RW^X^a--ITnK2z_l*ZnlgeQs5zc_wJsL&j|!UFRtCOi!pr9PtDobT z80=fEMWoq?+`XKU=(jo*$B3hM8aKH>Dkm1x``ZVapEpS-mvpUPQS%8Y+nEz)h7pz_ z0R1Lb!{HBQ;JI0>0yX3M$syXX%ZQmN zYIbALLDMa6H!`+H;BJl9toM`vEkw7CRQ=~6KKr+zUe9JliC!^Gh_-V<+iqR5WGL1S zbLS53E3F8gnweTCgZAfb9ygA+PhxQHybtIj%c6J!?hSX`(>m_Ky9oz6Big6qmLpMO zw0I6i39`E?T1D?otL4)~slE$qRz5Sub3yZ=yaQT;($FKitDDhZ?kAtpwRg6DRQFl2 z9J>UydOtzdj||2RZSkJD89L_C*BE6Dzoyn`fqhL+CUyuaq#(%vb(*9P8U+pWh(mC7MV z4ywqo9v_B>yUeyJW4fvBChk#XD@56}1o47NY=aFzTM=@}4K&_4hvB9~8#zk@n+>Ji z*C=3ZTik2Bt?Q;(cqL47&v= z=SNRSS@8?Xx7BIPrgPbfFe9VOlX&Z3J*+dHZSM{g4AW%w6|H^u0}0&?q9g({``5C^ z%-3U#$d8>oqOHH^U;i^@_e{?A%3+=$F^EM<=>3Z?RVnNQspWA7op;SDZ)4kj?y+Sp zZx7zNy?@yjH^2njS1oHh~*m-XKQ9pst&w+>MzNYpdK!XHGA z9amadWZ<8v3d$)?e@LS$3&qW-^UvQ zDzqLGb3+Ty=3xaq_du=D=z@Graat@tp?Rwy^p=x~me0pNRwW+fIN$*VLp%j8ketPi zt(gVH?hk0{RUx#i^VG5EmPD;c(3(?#;5s*`+HE1eNX?FCJw0LT@g1unZ)Yh2HQ<(V z(gUYcb2E1;j^xIg7^lxDI-Z8VO<(9&dcp7kNqu^Yr8|B({M?sL%)EcbD5}^t=8kCL z7`K!kSa#LqJ=38}dAR&Fhj9;tl)G^h*(T~d6qlgUn}ZD6IfUPAxOqg~QGzObVNVp; z6;tS3*#V0kfZvse*VeY`6!S_!XHIyx>2_L3ZylT+$B9a($|P3i7`eja$AdezwpK1K z4rEME0MEr^ZtNEvaGEx-nVr#hZ=za@cpMqYY!TNXv${58=U_2WN+f9mZkhZ=X<2rM zgQ-wp-LtNoz3~s*rxLjVBDnLB1j>2mW){^dfu{tU zEBDO!co8teD!dw}yzQqtvq#mIY!Od>xnKtjo@5%%FsV5l*#X7LG_>!g|%kR1vDd!nX*qRFUQ*24H9?MPmO@B6pF*NE1n0bQBg4+?@dO#QNBb^<@P4o{u06?FP!rm!c4j$?DY;lMul!=mlgoMG8D20_!LV;Bjt+o< z#o>0^pu*E9BEb~?8l+RinE_&d^_s|1^P@(t{iuQeiovLb&em#gRx^bOhuFfnj$5f0 zgIPDRh5Z3W5i_l`%Mum!FoCkKjcbzr`dN5-deA)ybeUY?ytYViLlCaQr#_yT4Zwk9 z8Gqi;S!L}~1OQWcSDr#8$gtdi@%x&~``x3wO<%n5TLKnRuqDRmyAwD~PJ?f4X96I; z0zA(L8#YV1=m|^Ar6S%ruO7n;;jm?gc>MV^Jhy1po>juSDUkkt>Et@Nc!=Jn<Cr{6A34k$x(2aElyqX@ONb89iB$z47qFP6ft2T$I2F`0;eO0B~O%%KF^dila?(t zS=QTo>wrlq7G>|~k-w(BtDlY^v-dD&kfRJ~;JFIo6bIa>gnMnDK2@AcjO~+i5U3oJ zbbeknm;q5iqIFEgp}DZ3rUF-(*$VtCSNOACT(_HPsUYK*XmrzL<>Lgzdn^jVJD=uF z2y9_etyNk++!K7VK{Y?M=Vtmv==7X;u&JW@{1I{fDA@gv5bxfVSVtgvyQrgnxucfH z*#0MrG7Hz|FTam(Hlp-zy^Bk$ra9^sPb?a!Zhnl6CE9dr^yw zv1gwH2>IcMJuIPXh#uwn!#jacm?GpMyl^P*{?L-;(W%i&%}Y+A*FcOG827Gv-a5{A z#2-tl`x6&WsPGRAM;9_;MfO~=OG;;hj-Y@&Yd|Q$8ge9r|^Q255gM#+vkB>9P z*K_eycqIH)kf|?6njNK;M0iz->4AV*GxWED<_fFNO~4^*GC^u#9nri!xZvYj#qwA| zv!8U6R=t%TB%~(|5c@W6R%fwuJ=rB zq2t7R7AsBgCG-Uvw>c<;2g63-=apP;mNOaeeT@#gb_;BBMt7SS<`Lp83>?$bM+Lv& zaT)OQnmZt#pJVYYB!YNNY>U{zVoYy>&*pN)z{8@FW|?Bz2X=7b2DEhhK1Rgb?X+;? zSaJQ9Uk19l_ZnL+$sDpntER4QZSMX7e<29ts6$K5nPd2B$3la;(=2WvzDlu~rm?4Q zv~a?Q_nMtddyA zy}g>tiL|!aqHswS*ifa5yKsPP$~OgBmEmU^O6BNUqrK%bChQ<9?kKi&fLV$Qx0_Tu z+n(L|wu6xU(1e450+_?Cxh$OeWnNc+_Xa@sXC$d1GQ{=Pm-SYy7-m1R#!GNm`xOj8 zuJEowS%#P`WlcOdrxj;{QuZaju)7e|8B*FW18J}G_Yo_m^`p5t4q3TDgQrCMBiXJ$ z)MFqCyS-9m@rdfK2AY*Hy{PHEyYKf<^H*DH!dpn2uv6;nmBn!RNKv+{Y zJC{eVJ@FY1L*EfXa(%QZim!rFa-RZKspmL=J`tnt&CRg_`FbP~W4A(m#FI|S8a?X< zfSujSQHh)(iKzkVil<9!E@lxE(JCCe?doh7W*C=5FH^gR)+GXk1Qm?8zT@iT6OY+3 zXDtgI0({#;P?Q1Nk6wsL^jCH37=YSK_Tm$FpAB+gwX`Rw^XLCDMv-|^i}aX*n_)TA zCzw~9`ZqJeokDiz>FIVa!h^1yd2+^Lt?j8Z)m$%V^!n18N*Q^gVVE@^X$MGBaITrg zTElAH>H5z6o_YA%iXxjeyu{$Yf3^kmD+-Y~0E>c21C%jO8wtlL{g}puPC>pUH~Int zHs4TC89hmWqzeJgFrit5<3cp8k{rP|E;i_&rioBR+lrAG;k-fuSr8&g{qb1IpjfO$ zP#rpU%$Og*_xAy>;=E#Y;`b>9f&+=@vG?ZgzK(h<2jr%4mg95ssL#_4Ih!n2|*1BI%yM1lC|SxBVxZ#0MudxG>i}ZlA9(&&M;cEjpF|l z`4@kIl#$1lYi&-IO{`^yn8O^x@oyK+imU$};7S>}Y`Mlie?nR#2dY$?S#B39Lxwc@ zA1P(&vw;rOhdnCC;Q=>y=AV2apV21?N`*z5{jbAP29szL1*WIRFE!2%x38|bG<*46 zHnU64uG4Mj5CrhK2`EywzKg33;DSv*A8yYMzQZwb7aC>+V!ST;Ps)`rs8yg_Vl{K% zXt9v_OiS-5jYQ09;m0^b-QHUuo|k%{J3K6%U-#>+)v&MMjBYMLW$(VJ12mJRbr_{V-g4+lET)3}C$_~|!-$$G< z`#sfhDs&_cx08ZHyFgtD9k1eJ@#Urrno$Nr-hi`>Qe$~J5>&Hw;3WVN!>po(dQO$2gg{^V9 zqteq?Rnb8A&g za+-h}88?v$cOQ3~=<0VNQ-12a{5TD9>Ly|OnERoM2yN4ca-mqy*{EmC!q}np4j8CGlHL!{2 zyRDIMQ6q7#BFLYX+~3-6vsX(d@}7MX`*71CoR5!&RNh_+oeFCaf<}(NK z`*yDg^}odnSN(%WMEOQ8QjOv6or2X+(kjXd6@xT|PKC#DD+9VEogAZ3%w#TuF7*)0foqf&#p^mtues#Y_1BcR^KRF{Mg^KnKI^w0 zr{tpcVBvMSowfbIvuo|jYET2x=+X$&&+QW~)(B}kG8P~Qe!}#_DHAAPOC)jPknQDR z$X=A@ccC@r3E3SUz7e;J1w68VbkvZp-X7itr+D%X4`Niuil!?xQYCYXypzK^FnYO6bw9ES4+{9*7r_%*oTu)D8-q@0Cp+^>zb zxJW!B#ul;WAKvt)1<{`i_Pi zI)5vV9%HNq)`Dt#BNIBHIv>b&#e~@9R8MrO6@?Bi>oEHUnSXFcYj&HKwfhEN*^yLF@25dmMm z)t~=zNbPBU`oduD0x!{5G}4l8Ha5vHWcNRB604&cQLo+is}qcbOfUy)X>^4QSx+T% z%a1*we)As((4?spJaU@bP%G9-wO@C>yI4_Z{+OUH)_;%Wz2 zfI;9@(mPcTw}ySc1!(Ni#tXGhh!I70c}o~AnaX%=7~S>w3m7wHL}9i_6F!D>n5cy! z5zbDvVTl}6bg!o=pvl|pvP4qBO>oh6wz_Dll>X`5C(84aQ~=b4AKdG(t>J~;O)1Ua z-~!?sDaD(w+97|zL{!F`_g@$|{%17YePg#dvgDZ;coGjk8Xdk;N5(hh0aItN{GQUt zhzRc^*7%ujO^QRI#rk^J%$3i5-UI+AzinCKk)iY?m z9U`T!+k@HP6|(~Fp|UD4Rp#H9W%VwNaGDo~C=?VoO$@F+@yS}RUNyI9$ZuL>PC5F< zt^!EO%_X{ttUoACVj2ZVZ+=IJNAExVbt;b(sqWa%0%?}pYK&1o@Y31U$1-=$N8Jl~uyuS*AdD2AZ1>%i z7%vHrDT4OUOamRZ)(7eyr*+1&thl-n(kjX{JBJE(NP;@8hl4kakDi;PbVA7o)--hz z2AO!f`afBB{w}ONgsc(wTSB#UWB`Gr%QJS3me$I5bjC{$I(YcDN!9OXm;7r*r;kPWMo3WM_Q0J&`>Dg+Mzw<0 zxlv_CX&&&>QwgBrF?wDmxE6ax`-R)SIc!MQ;vK16B-|inf|K;-FS}4W-R7H(>@&s5 z_XgfJzhdAC8LV+mjKC=MpZATw`x7!nB`kKoWh0C>W%xEpE(_9~RExf6G z`fFt?4WU`Pem;3l#HIBeS;d&lk`TzLxu2VM21u7JiWGr*3rLu`f5nLY?gY>0<%2~m zx5M4ejh@_l=!X2WiJ#|py25^hoXz-0VN_4%Y3ck(K_&a9YRbOvwtMIoR}kxNtz>y1 z*T`g3=(jaXA3+DQg8hwT?#_)U!(vSOy^SQDf6dR&Sb6bi8uya@p;cv{b^}1oIwd>z zc=P1GT%DK@XQk{E*s?=9%eODM;=t&?%gBWmj?I1cwX$PqX!Ma{gw#j|+(XGw4$KWS z(fu)zvTF$x6l)$jSNuOeO0sc zF4EQns^MOh5Ic6^8GcHmm}}ojDEkMJ&B+lwzRG|)8QYXs@#d=gGu|lOp{$%lF+jzz zpAb2Fcu?V7+E*DHd-)0Q~n%gL_kS^0wR!Mk5;7MdN;Xxga*>Nyp|e zJX@yB6{X5pgSHEwz9g8SG)TB!dWh;}k=g3mLif3Jc%_E2DRv6EyuPZhvpkc45aQle zS-uao2;r!TZI`^h4CMQn+(nQ&yu%Z-g1(Anp8FCC$+EAZtMMuxJiY#ocJsyGxW|-Imd@m9jA=T9V*|EibHQuet z1+V;hi80Ck23YzOpxRx+D01FilrQe0pLXmq#MLT|oVY!uSZHQ(LL){bmaIo&wxtB!*IekXtDk+0d;8qChB$9hF|Tk?$@!p7k$?yh|i^)GYqZsVuu}GCK3D{hN0bC z5ebK#Uh_?yJ8+Zp_cdde>N^RV1v3q8r*a(->I}XAWZC5}+g6$T)%#%_Et<>N%8Xa* zlu_a&TdqQt+zra4>TFT!a+Iha5kY_7NxfSVyv8J?|2$Ud!Vg$QXul`;MTXUugbQf> z*n#AS>6p0&(%f8-QeSFgX-Dmit*6NWEkEQtfXJ(+$Nn$p8R#@g3HOKvQYVRsdQP<1 zD)Xd!vdS7f-aTIsVzBP~&4zbvci3ac_H|*;=7leQ<`A)yLKEq629GZqw3IoQ*`Ce> z1XE01zy?rUsMGeKvxqiC{Gdu`muJ3o*u(qRJg$Ii`|EfWRQ>*=0d@M6=nMPQWLHlV z;@5U3(gm+*Kqj#)pDp3LYeA|~n!nU>_tWb=)w_XtK|&KO+hJF^srH}Sr@X!Be?2fzg;k|q`N&bCu{b|MLvF`=4l_fzc;Eiv~)c2wfFjLO$?@z zHgN``x*;7P?`=JDR7EaUay?U))l}dz2>}FBA>l5qN96^__dHaJa!+9K3@|WdHwH4R0I%}nRUTc>nmGmF>Ie&?dSsPDcZ#`T#^{2!|twK+wxkg4ftaFD|x=nrL z7<-Mj!=#!W;EGi6OxLumZ?HKu?pfehnzS;=yePjG|X;&3Ulz>pp|6Gu|7pi-vssaahr%? zM4Sib4$p3do<(KK(cS<`qO-G7L)BD{EbmM*Er7gH=ud2{8%gi=C6HGHb6dp@XOS3< zm-E`GppO%O$(Z6;z#oM1$8R)4z2{PT!1t3>+@scdLn5eH&x?hAD7yB2qw3&vN_&SL zZ|MQs7$;WWD(Rt&Gv<>$Ru%@8?##I^M|~2+>*|k%nD6=NWGLyjtCCFQzoY3Yt*Qnw zA8kBPpy@vkmBf~HwvTrm`Dd!p*m6+zxPX-e{F%J=exJcth{?Ae3Q1obk(&<=oNDm2 z<8w?nPt#p@oOB{S4G#Rg^t92<=KwLd>gdWnu#cPvMuZ0cDG>KQGZ3g7|V7!^xoiB&It?Zgfp$E{Z=%U0#X24uweUT|FVK@7o^OwC=-k6;Vnd9IP94~Vo(HwCHnaD5X6#4EA z^W--uQ_|IL_SvBhJ|r{A?Ip1QR?h(N1I8JKNhc2zf8d#l{R^aDY z<7DcpHiy0NlY$BNju^%MZ2s50x0mTUK66F5xv+85hn8yrtf_I`af3_jMZLWWDZUlN zr?it{tY%_lRfA69*XZApX|_|%qm<7L0~Z5|ddpfqm8@tq6=SMJarslYJfDwA>0MlSm)_A)DBeV1TY;U8(y-jwXLeIBYg~!E#fgR9OX|*a&dXD}S zG8rrx^5qSBgE@ub0-$x}lEL2xFnz4}i5o?eW$r&aum?N-K4u%Wr%JKszs!`AD!RX!JQo~fD>IPo=1?!~t)JWQmQVAVa)P;7eXm$RUTEB!}e?jOG`i(+RAtO>Y zW|z4WcCNgTj$3~~QmI{3cTemKbTgQAO5$PK#8ak6u#~NUtJaldfms{nelB{%zZMjm z^7{d=0?79srCWqFa}6GEDo1rFbhN7!p3=UUa1#)4QJIa*j-k#9?a;ixmmej;@`ous zK=$Bz*7ro-@0R%YwfVeXO|kJy_jy*>ei?E zTNS~@?X6v>%uk;6ADO1AvScVUpFkf<%68M|!d3vEFad0nW0aQVJj#_rz16@+-({O< zU{=&?NMMMjTljYDKb0~s%?`9=QqHvYEt+oABqxL(p0bZ(5$t5(m{Ch_wUH+3Lcx8> ztxAgQ+*i07Q1H_vP8~ORqY@S0yg|rSo>QflL(6wqRw+7Zd$)QlTapkUDM#ek0{P=x z^gNE?q+FKaI}PekT4ZH8xa7g1xffsE+Ocn@vn1#9Tcm5oU@yK7U3fC%B^~ymxF79@ zW!+K%JlY@K5bCmEYUn1D?0xMOQt?g|l-DW|NH( zg6RnCq#Uo}cc_6Y*uf%3+p5^(`j2XNv#Wj2PBOi5N42%$FW&V+{M@5wo#N>i_9Jbb zN}|5#OMht=KB)TLh9gYV5&(A)0-rLdKcK?7aR>f`5}HpKd44@O864S9+5q2!MgGp9 zcgYS3A^PBJvO+PAxELI7ch{oy$m=_zDK6B8NL2>SVMGLu|PbGI?T!r znZfB-&{H|m`bdT0p!tJ&yvNC|`!)Ps=Az#2b1C=;WD}xb1I;tib=iM?7EQIYY=BW| zz+6MLhG&P)YnIb8#c7dBdgzt7y!+9(+))S9V2eGGq3XvCWrR^F_$oNUXTeSHe(2$M zcF4?+>Vk^kvz|jWaQ1!`lX=I>6|Han@yPS_s8%|u_bMeS9Bcf19q&*tGO&bidiPZ! zo3zNVA|o%*vO3wXX}NTzA$GEBtEM0x`WM_?;j1>dp;`RarHVPLH!h#T+-u2VuE^|`wKl=Psb z0qD^jw_qej4eD%NY|u`kv>N43mEMus_c$ti$jH|LR9_BQ*{|Qm&h1jxZ;*4Ek5&(| z_#>4-hYxjpMr%ifE}Bdl)**UU~P|FYBf74^Ry;s_mqJ8ZAXr`!ANk@9x9zb z&ek$km=fh$l}_`jwsl^(l{LcQ=Wp8coYEqyY#tF6X+c1h-)AK}JCc&x95YC44H9lU zOnoG7*fChi@FB7h>|jRm#aer>;QmbLe#hYPUa|d-a#6`nP`nCi{w zwQNjPs{4kd5p7y-8a-fK>35DZI}(W8i&E*2J}+-ejWXTgv-0LQ909hj9M0*_)@565 zusvh+qA=S>7gHDR-u_kJ8PYRDQuVRyQu)#ED9{`UXezi%xxup7q`zVQ5x%HNp z7w3czetB!s-@V{Wa~3sHf7IYv>Pzf zN9^W6w2|HDC!7F5rTv>kR(r^#VTHz1Nk>`Gxm=sp#U32DDj7cLO zbl|P2Zg+lDC~%CY!xJ~;;-)tFDQ5V_+{IYofUEltls7XC6J3QR)Gt?>x^?<`Q04|jiP zJ&Hyq>?=03a*E=X&QRrSAGpaTX+0?TPq0q&{*BLp#(^id@bJpZ59a|#4%94l@Y9ER z$M@C%6JIY)$}<=@Fslx*^ysu7!h!t0P;M%d=1ZIoB5p6f3KSUUOoDRlBAu48*OxKC zTFvSRr!DG~7O)^-r;`#QA_v`?D2j^WY#+);Ttg}?iTC{zA5 zRtu7XPejd_w13Q3d{ZfT+WLI4Vo$;%Ouhs#(oDrpUGP>Wl6b#3LQi!i6`ZDXcr(x) zzWxoeZ#Pi(iZNb;w#)+<#Z8y1GKiTZ+ls+&ejS|YpGD4>)UN6)`Z9(1I_GS-OHcwh zU$;dGw-O*a89k2W#adq_Ufm3#(6gpM4#x|Or9d(MMOv)X_RPY2u5ieb=D^2_6ZBve z~FkM%voGjl!4G26A2D3g6i$z333h2EAr#jh=UC3$X~MDDecXaYxfEYu6bH#}8wmyQA888T)>?dHN^!qc|x&&c;3*`kuqe zwqDSb%(P|O?4`T-;SHa|L(@I-_cOjNCnA|4j896Ic{K}7cnxnc^3U}ZlxfHJ_Fgs;Z^KM7}Ok|MzGt6>3Ns(vj;YBl1ZF$jZcIYK<)SA$) zO&L4L=~y>kgO(*Rlppw14o}Q0$sC#eOC&{rv~>ZL{=c=F}kz1i9FZ5&Ml$>>-GwNzE)UIc{CG|oLl~r^eylcfT}Oz!KTjH z=o#8hJtjB_UAxO`8vZvz1LeZOq0aeilRPLFGsJyLjJm4fL7=-)tTRq9m1pTjMt-U^ zRbx7J#}e7exS~l1*pK1i#Bf|2ZP?rX8;ur7ZteJpkLAKoR5|LKU?+*Fren=w!-B=y zWDSlg4T?hz?Dp)z)ZGL0Yc;$pP*+H3JHypcg>5beF&&ImfnRM#=cw=oi!C(62wYwH zaKaidl20}ZV5Fxx{h*5o*y#t_(Jh#1_nUQbz*rSf0g8e7z)@e^AP0F|1U)L(K!Em4 z8xfCsq+u2Yd}X3Der`&SriYLyG@s|8<`9K}(v04bj@%wWtliu(JBy~%h)+ve`<5S` zQG+;njzl6iQC*LE9L~izkerQ&tWQ3;2=JQ%kf-2|gvbo_sKq2UYPPy5Zxw%zOm-bL z$gR<&sIW2{}cjQGE*^;P$+FPn)ux`WJ zP_fGJ>~eMm!mE&g83i0W;+sr?Td)WVg%LM8+@$dDuVkdcg0trIZM+exgqr8Xz6**z zQTNG5B;M@d?Y2v!N431U5<7_~yhWRdIHx@thznh7wxsvX0s~^~aj$Zg$BQ}e8ooEBg(Iw-_epinA(UXR}#4BCiZ~_rR z=+sW_;cX#bSk##g=?Y~CQPA=a?%JffPXungO5Rou{DXG79sf#Rs!H&$KBXqxpT|mK zw&b5pB8=c7+uGllucT`cltqw`?hc*rA5HzW_LM#U-ZveBUHPNA$brwN#>zkI4XW>= z)~wd{$pxX+3g>J^?7(+jv;wc^b|(ZChp+GDRAY0&dDFNvUgby0L67z*(i($#w)8}f zz?S)d4b;^8*6Gp$Kk~p$?SUId)VDy%67ju+Wno;l>d{B~ZcD8S=E0AZ5e$a@PxL;? zgc3+x1~KU~Z7GMX`@4m~eZd@aL4&EXB-C*e7-N^H2idmNRr1r(#m#6Hx2c>J^f`~5 zyj=LzgZkOE3bEH4?MT$t6_Boe);jE!z!{bK?k}6$TheLss$eI5UcQ%^cyXz%K-_#s zqHeD#C|U2Zf_A^C>F^jjHnzPdv$6iV{;L+44ak7MAq^u~T`+I$`V(ALg$*TFJV6%; zOO;geGtzz3XQ|R_Z7yY3p_MjF1^kNIeqW6#t~h10@DpWhh6wT(c-+`?3%<+sA&mM{ ze#Ghsj>r+-se?0v=D@LrJav4>!_9-%(7xzFj`@~+UPWf@78YVCb>VN?dSGj<&WZ$d z23%;x6GEnYmFK6}F`g$e22Wwnsaq!JW%ZgeC4*NL5qK$+rZ5O2Vowuk$op7eC^%*k zBMT)`q_D@Smp4fu@IsNynhU;;Ei%*8s?@XjJUc?jX2yr?S(rXrTi8vvb-Pa%>EQmy zZ`vG%@}uiG6%?7#MU+dnoTMXO+c*#Mb)9vqtD@L#7R3fYXl!VPzMKz#T|Kz7a{p`F zR|47)^Nm}vKjD@zXd%K+M)5}c(Pxwj<{Lusn7%3E0|$pNYMzEaT}sgsEkk{DxjyHH zk1C`euIXK5tE5;?(Fq>f=s;Lglr^CpaMp-KIUEbLpNMi&QnUlOQ2T5#o&D-xL6C1a zWbpc|@cXph?7HtYK?J_kB_ba2*fmPhrXB$R0Kq5MES@}Yc;c+=^w^p73vgBHs;sz_ zg1D5lnY6639O*||R7y%&N(y=4$@70r@brG*_Au!GJpumtcMfTS$p5bJ#Ld&$?}>w_ i&;K { - useKeepAlive(); // Initialize the keep-alive hook + // useKeepAlive(); // Initialize the keep-alive hook - TEMPORARILY DISABLED FOR DEBUGGING return children; }; diff --git a/frontend/src/components/admin/AdminHeader.jsx b/frontend/src/components/admin/AdminHeader.jsx new file mode 100644 index 0000000000..4b8d1a7c09 --- /dev/null +++ b/frontend/src/components/admin/AdminHeader.jsx @@ -0,0 +1,110 @@ +import styled from 'styled-components'; +import { useAuth } from '../../contexts/AuthContext'; + +const Header = styled.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`; + +const HeaderContent = styled.div` + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const BackLink = styled.a` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #10b981; + color: white; + text-decoration: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + transition: all 0.2s; + + &:hover { + background: #059669; + } +`; + +const AdminBadge = styled.span` + padding: 0.5rem 1rem; + background: #fee2e2; + color: #991b1b; + border-radius: 9999px; + font-size: 0.875rem; + font-weight: 500; +`; + +const UserInfo = styled.div` + display: flex; + align-items: center; + gap: 1rem; +`; + +const WelcomeText = styled.span` + font-size: 0.875rem; + color: #374151; +`; + +const LogoutButton = styled.button` + color: #374151; + background: none; + border: none; + padding: 0.5rem; + border-radius: 0.375rem; + cursor: pointer; + transition: color 0.2s; + + &:hover { + color: #10b981; + } +`; + +const BackIcon = () => ( + + + +); + +const LogoutIcon = () => ( + + + +); + +export const AdminHeader = () => { + const { user, logout } = useAuth(); + + const handleLogout = async () => { + await logout(); + }; + + return ( +
+ + + + Back to Dashboard + + + + Admin Panel + + Welcome, {user?.name} + + + + + + +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/admin/AdminPageLayout.jsx b/frontend/src/components/admin/AdminPageLayout.jsx new file mode 100644 index 0000000000..a6d92e232b --- /dev/null +++ b/frontend/src/components/admin/AdminPageLayout.jsx @@ -0,0 +1,54 @@ +import styled from 'styled-components'; + +const AdminContainer = styled.div` + min-height: 100vh; + background-color: #f9fafb; +`; + +const MainContent = styled.main` + max-width: 1200px; + margin: 0 auto; + padding: 2rem 1rem; +`; + +const PageHeader = styled.div` + margin-bottom: 2rem; +`; + +const PageTitle = styled.h1` + font-size: 2.5rem; + font-weight: 700; + color: #111827; + margin: 0 0 1rem 0; +`; + +const PageDescription = styled.p` + color: #6b7280; + font-size: 1.125rem; + margin: 0; +`; + +export const AdminPageLayout = ({ children }) => { + return ( + + {children} + + ); +}; + +export const AdminPageHeader = ({ title, description }) => { + return ( + + {title} + {description} + + ); +}; + +export const AdminPageContent = ({ children }) => { + return ( + + {children} + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/admin/AdminStats.jsx b/frontend/src/components/admin/AdminStats.jsx new file mode 100644 index 0000000000..d0ac35b81c --- /dev/null +++ b/frontend/src/components/admin/AdminStats.jsx @@ -0,0 +1,77 @@ +import styled from 'styled-components'; +import { StatCard } from './StatCard'; + +const StatsGrid = styled.div` + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 1.5rem; + margin-bottom: 2rem; +`; + +const UsersIcon = () => ( + + + +); + +const ActionsIcon = () => ( + + + +); + +const ErrorsIcon = () => ( + + + +); + +const ActivityIcon = () => ( + + + +); + +export const AdminStats = () => { + // TODO: Consider moving this stats data to Zustand store for better state management + const statsData = [ + { + icon: , + value: '42', + label: 'Active Users', + type: 'users' + }, + { + icon: , + value: '1,247', + label: 'Total Actions Today', + type: 'actions' + }, + { + icon: , + value: '3', + label: 'Failed Actions', + type: 'errors' + }, + { + icon: , + value: '98.5%', + label: 'System Uptime', + type: 'activity' + } + ]; + + return ( + + {statsData.map((stat, index) => ( + + ))} + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/admin/AuditLogFilters.jsx b/frontend/src/components/admin/AuditLogFilters.jsx new file mode 100644 index 0000000000..3d0826e980 --- /dev/null +++ b/frontend/src/components/admin/AuditLogFilters.jsx @@ -0,0 +1,30 @@ +import { FilterSection, SearchInput, FilterSelect } from '@components/ui/FormElements'; +import { AUDIT_ACTION_OPTIONS } from '@constants/auditLogConstants'; + +export const AuditLogFilters = ({ + searchTerm, + setSearchTerm, + actionFilter, + setActionFilter +}) => { + return ( + + setSearchTerm(e.target.value)} + /> + setActionFilter(e.target.value)} + > + {AUDIT_ACTION_OPTIONS.map(option => ( + + ))} + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/admin/AuditLogTable.jsx b/frontend/src/components/admin/AuditLogTable.jsx index a1da3ca2fa..3771874a51 100644 --- a/frontend/src/components/admin/AuditLogTable.jsx +++ b/frontend/src/components/admin/AuditLogTable.jsx @@ -1,478 +1,65 @@ -import { useState, useEffect } from 'react'; -import styled from 'styled-components'; - -const TableContainer = styled.div` - background: white; - border-radius: 0.75rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; - overflow: hidden; -`; - -const TableHeader = styled.div` - background: #f9fafb; - padding: 1.5rem; - border-bottom: 1px solid #e5e7eb; - display: flex; - justify-content: space-between; - align-items: center; -`; - -const TableTitle = styled.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`; - -const FilterSection = styled.div` - display: flex; - gap: 1rem; - align-items: center; -`; - -const SearchInput = styled.input` - padding: 0.5rem 0.75rem; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - font-size: 0.875rem; - min-width: 200px; - - &:focus { - outline: none; - border-color: #10b981; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`; - -const FilterSelect = styled.select` - padding: 0.5rem 0.75rem; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - font-size: 0.875rem; - - &:focus { - outline: none; - border-color: #10b981; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`; - -const Table = styled.table` - width: 100%; - border-collapse: collapse; -`; - -const TableHead = styled.thead` - background: #f9fafb; - border-bottom: 1px solid #e5e7eb; -`; - -const TableRow = styled.tr` - border-bottom: 1px solid #f3f4f6; - - &:hover { - background: #f9fafb; - } - - &:last-child { - border-bottom: none; - } -`; - -const TableHeaderCell = styled.th` - padding: 0.75rem 1rem; - text-align: left; - font-size: 0.875rem; - font-weight: 600; - color: #374151; - cursor: pointer; - user-select: none; - - &:hover { - background: #f3f4f6; - } -`; - -const TableCell = styled.td` - padding: 0.75rem 1rem; - font-size: 0.875rem; - color: #111827; - vertical-align: top; -`; - -const ActionBadge = styled.span` - padding: 0.25rem 0.75rem; - border-radius: 9999px; - font-size: 0.75rem; - font-weight: 500; - - ${props => { - switch (props.action) { - case 'CREATE': - return 'background: #d1fae5; color: #065f46;'; - case 'UPDATE': - return 'background: #dbeafe; color: #1e40af;'; - case 'DELETE': - return 'background: #fee2e2; color: #991b1b;'; - case 'LOGIN': - return 'background: #fef3c7; color: #92400e;'; - case 'LOGOUT': - return 'background: #f3f4f6; color: #374151;'; - default: - return 'background: #f3f4f6; color: #374151;'; - } - }} -`; - -const PaginationContainer = styled.div` - padding: 1rem 1.5rem; - background: #f9fafb; - border-top: 1px solid #e5e7eb; - display: flex; - justify-content: between; - align-items: center; -`; - -const PaginationInfo = styled.div` - font-size: 0.875rem; - color: #6b7280; -`; - -const PaginationControls = styled.div` - display: flex; - gap: 0.5rem; - align-items: center; - margin-left: auto; -`; - -const PaginationButton = styled.button` - padding: 0.5rem 0.75rem; - background: white; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - font-size: 0.875rem; - cursor: pointer; - transition: all 0.2s; - - &:hover:not(:disabled) { - background: #f9fafb; - border-color: #9ca3af; - } - - &:disabled { - opacity: 0.5; - cursor: not-allowed; - } - - &.active { - background: #10b981; - color: white; - border-color: #10b981; - } -`; - -const LoadingSpinner = styled.div` - display: flex; - justify-content: center; - align-items: center; - padding: 3rem; - - .spinner { - width: 40px; - height: 40px; - border: 4px solid #f3f4f6; - border-top: 4px solid #10b981; - border-radius: 50%; - animation: spin 1s linear infinite; - } - - @keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } - } -`; - -const EmptyState = styled.div` - text-align: center; - padding: 3rem; - color: #6b7280; -`; - -const SortIcon = styled.span` - margin-left: 0.5rem; - font-size: 0.75rem; - color: #9ca3af; -`; - -// Mock audit log data -const mockAuditLogs = [ - { - id: 1, - timestamp: '2024-01-15T10:30:00Z', - user: 'admin@nanwa.com', - action: 'CREATE', - resource: 'Tree', - resourceId: 'tree_001', - details: 'Created new tree record for Forest A', - ipAddress: '192.168.1.100', - userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' - }, - { - id: 2, - timestamp: '2024-01-15T10:25:00Z', - user: 'user@nanwa.com', - action: 'UPDATE', - resource: 'Tree', - resourceId: 'tree_002', - details: 'Updated height measurement from 2.3m to 2.4m', - ipAddress: '192.168.1.101', - userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' - }, - { - id: 3, - timestamp: '2024-01-15T10:20:00Z', - user: 'admin@nanwa.com', - action: 'DELETE', - resource: 'Forest', - resourceId: 'forest_003', - details: 'Deleted forest record due to data cleanup', - ipAddress: '192.168.1.100', - userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' - }, - { - id: 4, - timestamp: '2024-01-15T10:15:00Z', - user: 'user@nanwa.com', - action: 'LOGIN', - resource: 'Authentication', - resourceId: 'auth_session_001', - details: 'User logged in successfully', - ipAddress: '192.168.1.101', - userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' - }, - { - id: 5, - timestamp: '2024-01-15T10:10:00Z', - user: 'admin@nanwa.com', - action: 'UPDATE', - resource: 'User', - resourceId: 'user_001', - details: 'Updated user permissions to admin level', - ipAddress: '192.168.1.100', - userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' - }, - { - id: 6, - timestamp: '2024-01-15T10:05:00Z', - user: 'system', - action: 'CREATE', - resource: 'Measurement', - resourceId: 'measurement_001', - details: 'Automated measurement recorded for tree batch', - ipAddress: '127.0.0.1', - userAgent: 'System/1.0' - }, - { - id: 7, - timestamp: '2024-01-15T10:00:00Z', - user: 'user@nanwa.com', - action: 'LOGOUT', - resource: 'Authentication', - resourceId: 'auth_session_002', - details: 'User logged out', - ipAddress: '192.168.1.101', - userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' - } -]; +import { TableContainer, TableHeader, TableTitle } from '@components/ui/Table'; +import LoadingSpinner from '@components/ui/LoadingSpinner'; +import { Pagination } from '@components/ui/Pagination'; +import { AuditLogFilters } from './AuditLogFilters'; +import { AuditLogTableBody } from './AuditLogTableBody'; +import { useAuditLogs, useAuditLogFilters, usePagination } from '@hooks/useAuditLogs'; +import { AUDIT_LOG_PAGINATION_SIZE } from '@constants/auditLogConstants'; export const AuditLogTable = () => { - const [auditLogs, setAuditLogs] = useState([]); - const [loading, setLoading] = useState(false); - const [searchTerm, setSearchTerm] = useState(''); - const [actionFilter, setActionFilter] = useState(''); - const [sortField, setSortField] = useState('timestamp'); - const [sortDirection, setSortDirection] = useState('desc'); - const [currentPage, setCurrentPage] = useState(1); - const [pageSize] = useState(10); - - useEffect(() => { - fetchAuditLogs(); - }, []); - - const fetchAuditLogs = async () => { - setLoading(true); - try { - // Simulate API call - await new Promise(resolve => setTimeout(resolve, 500)); - setAuditLogs(mockAuditLogs); - } catch (error) { - console.error('Failed to fetch audit logs:', error); - } finally { - setLoading(false); - } - }; - - const handleSort = (field) => { - if (sortField === field) { - setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc'); - } else { - setSortField(field); - setSortDirection('desc'); - } - }; - - const filteredAndSortedLogs = auditLogs - .filter(log => { - const matchesSearch = searchTerm === '' || - log.user.toLowerCase().includes(searchTerm.toLowerCase()) || - log.details.toLowerCase().includes(searchTerm.toLowerCase()) || - log.resource.toLowerCase().includes(searchTerm.toLowerCase()); - - const matchesAction = actionFilter === '' || log.action === actionFilter; - - return matchesSearch && matchesAction; - }) - .sort((a, b) => { - const aValue = a[sortField]; - const bValue = b[sortField]; - - if (sortDirection === 'asc') { - return aValue > bValue ? 1 : -1; - } else { - return aValue < bValue ? 1 : -1; - } - }); - - const totalPages = Math.ceil(filteredAndSortedLogs.length / pageSize); - const startIndex = (currentPage - 1) * pageSize; - const paginatedLogs = filteredAndSortedLogs.slice(startIndex, startIndex + pageSize); - - const formatTimestamp = (timestamp) => { - return new Date(timestamp).toLocaleString(); - }; - - const getSortIcon = (field) => { - if (sortField !== field) return '⇅'; - return sortDirection === 'asc' ? '↑' : '↓'; - }; + // TODO: Consider moving audit log state to Zustand store for better state management + const { auditLogs, loading } = useAuditLogs(); + const { + searchTerm, + setSearchTerm, + actionFilter, + setActionFilter, + sortField, + sortDirection, + filteredAndSortedLogs, + handleSort + } = useAuditLogFilters(auditLogs); + + const { + currentPage, + setCurrentPage, + totalPages, + startIndex, + paginatedData: paginatedLogs, + pageSize + } = usePagination(filteredAndSortedLogs, AUDIT_LOG_PAGINATION_SIZE); return ( Audit Log - - setSearchTerm(e.target.value)} - /> - setActionFilter(e.target.value)} - > - - - - - - - - + {loading ? ( - -
-
- ) : paginatedLogs.length === 0 ? ( - -

No audit logs found matching your criteria.

-
+ ) : ( - - - - handleSort('timestamp')}> - Timestamp {getSortIcon('timestamp')} - - handleSort('user')}> - User {getSortIcon('user')} - - handleSort('action')}> - Action {getSortIcon('action')} - - handleSort('resource')}> - Resource {getSortIcon('resource')} - - Details - IP Address - - - - {paginatedLogs.map(log => ( - - {formatTimestamp(log.timestamp)} - {log.user} - - {log.action} - - {log.resource} - {log.details} - {log.ipAddress} - - ))} - -
+ )} - - - Showing {startIndex + 1} to {Math.min(startIndex + pageSize, filteredAndSortedLogs.length)} of {filteredAndSortedLogs.length} entries - - - setCurrentPage(1)} - disabled={currentPage === 1} - > - First - - setCurrentPage(currentPage - 1)} - disabled={currentPage === 1} - > - Previous - - {Array.from({ length: Math.min(5, totalPages) }, (_, i) => { - const pageNumber = currentPage - 2 + i; - if (pageNumber > 0 && pageNumber <= totalPages) { - return ( - setCurrentPage(pageNumber)} - className={currentPage === pageNumber ? 'active' : ''} - > - {pageNumber} - - ); - } - return null; - })} - setCurrentPage(currentPage + 1)} - disabled={currentPage === totalPages} - > - Next - - setCurrentPage(totalPages)} - disabled={currentPage === totalPages} - > - Last - - - +
); }; \ No newline at end of file diff --git a/frontend/src/components/admin/AuditLogTableBody.jsx b/frontend/src/components/admin/AuditLogTableBody.jsx new file mode 100644 index 0000000000..21b7d776de --- /dev/null +++ b/frontend/src/components/admin/AuditLogTableBody.jsx @@ -0,0 +1,105 @@ +import { + Table, + TableHead, + TableRow, + TableHeaderCell, + TableCell, + EmptyState, + SortIcon +} from '@components/ui/Table'; +import { ActionBadge } from '@components/ui/ActionBadge'; +import { formatTimestamp } from '@utils/dateUtils'; +import { getSortIcon } from '@utils/sortUtils'; + +// Reusable sortable header cell component +const SortableHeaderCell = ({ field, sortField, sortDirection, onSort, children }) => ( + onSort(field)}> + {children} {getSortIcon(field, sortField, sortDirection)} + +); + +// Table header component with all sortable columns +const AuditLogTableHeader = ({ sortField, sortDirection, onSort }) => ( + + + + Timestamp + + + User + + + Action + + + Resource + + Details + IP Address + + +); + +// Individual audit log row component +const AuditLogTableRow = ({ log }) => ( + + {formatTimestamp(log.timestamp)} + {log.user} + + {log.action} + + {log.resource} + {log.details} + {log.ipAddress} + +); + +export const AuditLogTableBody = ({ + logs, + sortField, + sortDirection, + onSort +}) => { + if (logs.length === 0) { + return ( + +

No audit logs found matching your criteria.

+
+ ); + } + + return ( + + + + {logs.map(log => ( + + ))} + +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/admin/StatCard.jsx b/frontend/src/components/admin/StatCard.jsx new file mode 100644 index 0000000000..c95b153f29 --- /dev/null +++ b/frontend/src/components/admin/StatCard.jsx @@ -0,0 +1,59 @@ +import styled from 'styled-components'; + +const StatCardContainer = styled.div` + background: white; + padding: 1.5rem; + border-radius: 0.75rem; + border: 1px solid #e5e7eb; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +`; + +const StatValue = styled.div` + font-size: 2rem; + font-weight: 700; + color: #111827; + margin-bottom: 0.5rem; +`; + +const StatLabel = styled.div` + font-size: 0.875rem; + color: #6b7280; + font-weight: 500; +`; + +const StatIcon = styled.div` + display: inline-flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + border-radius: 0.75rem; + margin-bottom: 1rem; + + ${props => { + switch (props.type) { + case 'users': + return 'background: #dbeafe; color: #1e40af;'; + case 'actions': + return 'background: #d1fae5; color: #065f46;'; + case 'errors': + return 'background: #fee2e2; color: #991b1b;'; + case 'activity': + return 'background: #fef3c7; color: #92400e;'; + default: + return 'background: #f3f4f6; color: #374151;'; + } + }} +`; + +export const StatCard = ({ icon, value, label, type }) => { + return ( + + + {icon} + + {value} + {label} + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/admin/index.js b/frontend/src/components/admin/index.js new file mode 100644 index 0000000000..e51d445170 --- /dev/null +++ b/frontend/src/components/admin/index.js @@ -0,0 +1,8 @@ +// Admin Components +export { AuditLogFilters } from './AuditLogFilters'; +export { AuditLogTable } from './AuditLogTable'; +export { AuditLogTableBody } from './AuditLogTableBody'; +export { StatCard } from './StatCard'; +export { AdminStats } from './AdminStats'; +export { AdminPageLayout } from './AdminPageLayout'; +export { AdminHeader } from './AdminHeader'; \ No newline at end of file diff --git a/frontend/src/components/auth/DemoCredentials.jsx b/frontend/src/components/auth/DemoCredentials.jsx new file mode 100644 index 0000000000..9c25d71ce2 --- /dev/null +++ b/frontend/src/components/auth/DemoCredentials.jsx @@ -0,0 +1,11 @@ +export const DemoCredentials = () => { + return ( +
+

Demo credentials:

+
+

Admin: admin@nanwa.com / admin123

+

User: user@nanwa.com / user123

+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/auth/LoginForm.jsx b/frontend/src/components/auth/LoginForm.jsx new file mode 100644 index 0000000000..ec1e6e9c1f --- /dev/null +++ b/frontend/src/components/auth/LoginForm.jsx @@ -0,0 +1,163 @@ +import { Link } from 'react-router-dom'; +import { useFormValidation } from '../../hooks/useFormValidation'; +import { FormField } from '../ui/FormField'; +import { PasswordInput } from '../ui/PasswordInput'; + +// Login form validation rules +const validateLoginForm = (values) => { + const errors = {}; + + if (!values.email) { + errors.email = 'Email is required'; + } else if (!/\S+@\S+\.\S+/.test(values.email)) { + errors.email = 'Email is invalid'; + } + + if (!values.password) { + errors.password = 'Password is required'; + } else if (values.password.length < 6) { + errors.password = 'Password must be at least 6 characters'; + } + + return errors; +}; + +export const LoginForm = ({ onSubmit, isSubmitting, errors: externalErrors }) => { + const { + values, + errors, + handleChange, + handleBlur, + validateForm, + setErrors + } = useFormValidation( + { email: '', password: '' }, + validateLoginForm + ); + + // Merge external errors (like server errors) with form validation errors + const combinedErrors = { ...errors, ...externalErrors }; + + const handleSubmit = (e) => { + e.preventDefault(); + + if (!validateForm()) { + return; + } + + onSubmit(values); + }; + + return ( +
+ {combinedErrors.general && ( +
+ {combinedErrors.general} +
+ )} + + + + + + + + + +
+ + +
+ + + + + + ); +}; + +// Sub-components for better organization +const RememberMeCheckbox = ({ disabled }) => ( +
+ + +
+); + +const ForgotPasswordLink = () => ( +
+); + +const SubmitButton = ({ isSubmitting }) => ( + +); + +const SignUpPrompt = () => ( +
+

+ Don't have an account?{' '} + + Sign up + +

+
+); \ No newline at end of file diff --git a/frontend/src/components/auth/PasswordStrengthIndicator.jsx b/frontend/src/components/auth/PasswordStrengthIndicator.jsx new file mode 100644 index 0000000000..141f67e78a --- /dev/null +++ b/frontend/src/components/auth/PasswordStrengthIndicator.jsx @@ -0,0 +1,59 @@ +import styled from 'styled-components'; + +const PasswordStrengthBar = styled.div` + width: 100%; + height: 4px; + background-color: #e5e7eb; + border-radius: 2px; + overflow: hidden; + margin-top: 0.5rem; +`; + +const PasswordStrengthFill = styled.div` + height: 100%; + background-color: ${props => { + if (props.strength === 'weak') return '#ef4444'; + if (props.strength === 'medium') return '#f59e0b'; + if (props.strength === 'strong') return '#10b981'; + return '#e5e7eb'; + }}; + width: ${props => { + if (props.strength === 'weak') return '33%'; + if (props.strength === 'medium') return '66%'; + if (props.strength === 'strong') return '100%'; + return '0%'; + }}; + transition: all 0.3s ease; +`; + +const getPasswordStrengthText = (strength) => { + switch (strength) { + case 'weak': + return 'Weak password'; + case 'medium': + return 'Medium strength password'; + case 'strong': + return 'Strong password'; + default: + return ''; + } +}; + +export const PasswordStrengthIndicator = ({ strength, show }) => { + if (!show) return null; + + return ( +
+ + + +

+ {getPasswordStrengthText(strength)} +

+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/auth/ProtectedRoute.jsx b/frontend/src/components/auth/ProtectedRoute.jsx index 4738d4c084..f07bfa2729 100644 --- a/frontend/src/components/auth/ProtectedRoute.jsx +++ b/frontend/src/components/auth/ProtectedRoute.jsx @@ -1,18 +1,21 @@ import { Navigate } from 'react-router-dom'; -import { useAuth } from '../../contexts/AuthContext'; +import { useProtectedRoute } from '../../hooks/useProtectedRoute'; +import LoadingSpinner from '../ui/LoadingSpinner'; export const ProtectedRoute = ({ children }) => { - const { user, loading } = useAuth(); + const { isAuthenticated, isLoading } = useProtectedRoute(); - if (loading) { + if (isLoading) { return ( -
-
-
+ ); } - if (!user) { + if (!isAuthenticated) { return ; } diff --git a/frontend/src/components/auth/RegisterForm.jsx b/frontend/src/components/auth/RegisterForm.jsx new file mode 100644 index 0000000000..95ee1ea495 --- /dev/null +++ b/frontend/src/components/auth/RegisterForm.jsx @@ -0,0 +1,146 @@ +import { useState } from 'react'; +import { Link } from 'react-router-dom'; +import { FormField } from '../ui/FormField'; +import { PasswordInput } from '../ui/PasswordInput'; +import { PasswordStrengthIndicator } from './PasswordStrengthIndicator'; +import { useRegisterForm } from '../../hooks/useRegisterForm'; + +export const RegisterForm = () => { + const { + formData, + errors, + isSubmitting, + passwordStrength, + handleInputChange, + handleSubmit + } = useRegisterForm(); + + return ( +
+ {errors.general && ( +
+ {errors.general} +
+ )} + + + + + + + + 0} + /> + + + + + + + + + + + + + ); +}; + +// Sub-components for better organization +const TermsCheckbox = ({ disabled }) => ( +
+ + +
+); + +const SubmitButton = ({ isSubmitting }) => ( + +); + +const SignInPrompt = () => ( +
+

+ Already have an account?{' '} + + Sign in + +

+
+); \ No newline at end of file diff --git a/frontend/src/components/auth/index.js b/frontend/src/components/auth/index.js new file mode 100644 index 0000000000..66df15a894 --- /dev/null +++ b/frontend/src/components/auth/index.js @@ -0,0 +1,6 @@ +// Auth Components +export { ProtectedRoute } from './ProtectedRoute'; +export { LoginForm } from './LoginForm'; +export { DemoCredentials } from './DemoCredentials'; +export { PasswordStrengthIndicator } from './PasswordStrengthIndicator'; +export { RegisterForm } from './RegisterForm'; \ No newline at end of file diff --git a/frontend/src/components/charts/AverageHeightChart.jsx b/frontend/src/components/charts/AverageHeightChart.jsx index 82828b2bff..7c7cd7b6a1 100644 --- a/frontend/src/components/charts/AverageHeightChart.jsx +++ b/frontend/src/components/charts/AverageHeightChart.jsx @@ -1,65 +1,24 @@ import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'; -import styled from 'styled-components'; +import { ChartContainer, ChartHeader, ChartTitle, ChartTooltip } from '../ui/ChartComponents'; +import { useChartConfig } from '../../hooks/useChartConfig'; -const ChartContainer = styled.div` - background: white; - border-radius: 0.75rem; - padding: 1.5rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; -`; +const DEFAULT_DATA = [ + { month: 'Jan', height: 1.2 }, + { month: 'Feb', height: 1.4 }, + { month: 'Mar', height: 1.6 }, + { month: 'Apr', height: 1.8 }, + { month: 'May', height: 2.0 }, + { month: 'Jun', height: 2.2 }, + { month: 'Jul', height: 2.4 }, + { month: 'Aug', height: 2.6 }, + { month: 'Sep', height: 2.8 }, + { month: 'Oct', height: 3.0 }, + { month: 'Nov', height: 3.2 }, + { month: 'Dec', height: 3.4 } +]; -const ChartHeader = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; -`; - -const ChartTitle = styled.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`; - -const CustomTooltip = styled.div` - background: white; - border: 1px solid #e5e7eb; - border-radius: 0.5rem; - padding: 0.75rem; - box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); -`; - -export const AverageHeightChart = ({ - data = [ - { month: 'Jan', height: 1.2 }, - { month: 'Feb', height: 1.4 }, - { month: 'Mar', height: 1.6 }, - { month: 'Apr', height: 1.8 }, - { month: 'May', height: 2.0 }, - { month: 'Jun', height: 2.2 }, - { month: 'Jul', height: 2.4 }, - { month: 'Aug', height: 2.6 }, - { month: 'Sep', height: 2.8 }, - { month: 'Oct', height: 3.0 }, - { month: 'Nov', height: 3.2 }, - { month: 'Dec', height: 3.4 } - ] -}) => { - const CustomTooltipContent = ({ active, payload, label }) => { - if (active && payload && payload.length) { - return ( - -

{label}

-

- Average Height: {payload[0].value}m -

-
- ); - } - return null; - }; +export const AverageHeightChart = ({ data = DEFAULT_DATA }) => { + const chartConfig = useChartConfig('line'); return ( @@ -68,26 +27,24 @@ export const AverageHeightChart = ({ - - + + - } /> + `Average Height: ${value}m`} />} /> diff --git a/frontend/src/components/charts/CO2AbsorptionChart.jsx b/frontend/src/components/charts/CO2AbsorptionChart.jsx index 957d391b8d..3ef30adb17 100644 --- a/frontend/src/components/charts/CO2AbsorptionChart.jsx +++ b/frontend/src/components/charts/CO2AbsorptionChart.jsx @@ -1,65 +1,24 @@ import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'; -import styled from 'styled-components'; +import { ChartContainer, ChartHeader, ChartTitle, ChartTooltip } from '../ui/ChartComponents'; +import { useChartConfig } from '../../hooks/useChartConfig'; -const ChartContainer = styled.div` - background: white; - border-radius: 0.75rem; - padding: 1.5rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; -`; +const DEFAULT_DATA = [ + { month: 'Jan', co2: 0.8 }, + { month: 'Feb', co2: 1.2 }, + { month: 'Mar', co2: 1.6 }, + { month: 'Apr', co2: 2.0 }, + { month: 'May', co2: 2.4 }, + { month: 'Jun', co2: 2.8 }, + { month: 'Jul', co2: 3.2 }, + { month: 'Aug', co2: 3.6 }, + { month: 'Sep', co2: 4.0 }, + { month: 'Oct', co2: 4.4 }, + { month: 'Nov', co2: 4.8 }, + { month: 'Dec', co2: 5.2 } +]; -const ChartHeader = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; -`; - -const ChartTitle = styled.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`; - -const CustomTooltip = styled.div` - background: white; - border: 1px solid #e5e7eb; - border-radius: 0.5rem; - padding: 0.75rem; - box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); -`; - -export const CO2AbsorptionChart = ({ - data = [ - { month: 'Jan', co2: 0.8 }, - { month: 'Feb', co2: 1.2 }, - { month: 'Mar', co2: 1.6 }, - { month: 'Apr', co2: 2.0 }, - { month: 'May', co2: 2.4 }, - { month: 'Jun', co2: 2.8 }, - { month: 'Jul', co2: 3.2 }, - { month: 'Aug', co2: 3.6 }, - { month: 'Sep', co2: 4.0 }, - { month: 'Oct', co2: 4.4 }, - { month: 'Nov', co2: 4.8 }, - { month: 'Dec', co2: 5.2 } - ] -}) => { - const CustomTooltipContent = ({ active, payload, label }) => { - if (active && payload && payload.length) { - return ( - -

{label}

-

- CO₂ Absorption: {payload[0].value} tons -

-
- ); - } - return null; - }; +export const CO2AbsorptionChart = ({ data = DEFAULT_DATA }) => { + const chartConfig = useChartConfig('bar'); return ( @@ -68,23 +27,21 @@ export const CO2AbsorptionChart = ({ - - + + - } /> + `CO₂ Absorption: ${value} tons`} />} /> diff --git a/frontend/src/components/charts/SurvivalRateChart.jsx b/frontend/src/components/charts/SurvivalRateChart.jsx index c1f5a4861a..ef5469db33 100644 --- a/frontend/src/components/charts/SurvivalRateChart.jsx +++ b/frontend/src/components/charts/SurvivalRateChart.jsx @@ -1,82 +1,22 @@ import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } from 'recharts'; -import styled from 'styled-components'; +import { ChartContainer, ChartHeader, ChartTitle, ChartTooltip, ChartPercentageDisplay, ChartLegend } from '../ui/ChartComponents'; +import { useChartConfig } from '../../hooks/useChartConfig'; -const ChartContainer = styled.div` - background: white; - border-radius: 0.75rem; - padding: 1.5rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; -`; - -const ChartHeader = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; -`; - -const ChartTitle = styled.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`; - -const PercentageDisplay = styled.div` - text-align: center; - margin-bottom: 1rem; -`; - -const PercentageValue = styled.div` - font-size: 2.5rem; - font-weight: 700; - color: #10b981; - line-height: 1; -`; - -const PercentageLabel = styled.div` - font-size: 0.875rem; - color: #6b7280; - margin-top: 0.25rem; -`; - -const CustomTooltip = styled.div` - background: white; - border: 1px solid #e5e7eb; - border-radius: 0.5rem; - padding: 0.75rem; - box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); -`; export const SurvivalRateChart = ({ data = { survived: 95.2, lost: 4.8 } }) => { + const chartConfig = useChartConfig('pie'); const chartData = [ { name: 'Survived', value: data.survived, color: '#10b981' }, { name: 'Lost', value: data.lost, color: '#ef4444' } ]; - const CustomTooltipContent = ({ active, payload }) => { - if (active && payload && payload.length) { - return ( - -

{payload[0].name}

-

{payload[0].value}%

-
- ); - } - return null; - }; - return ( Tree Survival Rate - - {data.survived}% - Survival Rate - + @@ -84,29 +24,20 @@ export const SurvivalRateChart = ({ data = { survived: 95.2, lost: 4.8 } }) => { data={chartData} cx="50%" cy="50%" - innerRadius={60} - outerRadius={80} - paddingAngle={5} + innerRadius={chartConfig.innerRadius} + outerRadius={chartConfig.outerRadius} + paddingAngle={chartConfig.paddingAngle} dataKey="value" > {chartData.map((entry, index) => ( ))} - } /> + `${value}%`} />} /> -
-
-
- Survived ({data.survived}%) -
-
-
- Lost ({data.lost}%) -
-
+
); }; \ No newline at end of file diff --git a/frontend/src/components/charts/index.js b/frontend/src/components/charts/index.js index 62cfafaa1a..bf0305a404 100644 --- a/frontend/src/components/charts/index.js +++ b/frontend/src/components/charts/index.js @@ -1,3 +1,14 @@ +// Chart Components export { SurvivalRateChart } from './SurvivalRateChart'; export { AverageHeightChart } from './AverageHeightChart'; -export { CO2AbsorptionChart } from './CO2AbsorptionChart'; \ No newline at end of file +export { CO2AbsorptionChart } from './CO2AbsorptionChart'; + +// Shared Chart Utilities +export { + ChartContainer, + ChartHeader, + ChartTitle, + ChartTooltip, + CustomTooltipContainer +} from '../ui/ChartComponents'; +export { useChartConfig } from '../../hooks/useChartConfig'; \ No newline at end of file diff --git a/frontend/src/components/filters/DateInput.jsx b/frontend/src/components/filters/DateInput.jsx new file mode 100644 index 0000000000..28381d971c --- /dev/null +++ b/frontend/src/components/filters/DateInput.jsx @@ -0,0 +1,32 @@ +import { DateInputWrapper, DateLabel, StyledDatePicker } from './DateRangePicker.styles'; + +export const DateInput = ({ + label, + selected, + onChange, + selectsStart, + selectsEnd, + startDate, + endDate, + minDate, + maxDate, + placeholderText +}) => { + return ( + + {label} + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/filters/DateRangePicker.jsx b/frontend/src/components/filters/DateRangePicker.jsx index 6699dcc873..8edd56f080 100644 --- a/frontend/src/components/filters/DateRangePicker.jsx +++ b/frontend/src/components/filters/DateRangePicker.jsx @@ -1,144 +1,24 @@ -import { useState, useEffect, useRef } from 'react'; -import DatePicker from 'react-datepicker'; -import styled from 'styled-components'; import 'react-datepicker/dist/react-datepicker.css'; - -const FilterContainer = styled.div` - background: white; - border-radius: 0.75rem; - padding: 1.5rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; -`; - -const FilterHeader = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; -`; - -const FilterTitle = styled.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`; - -const DateInputGroup = styled.div` - display: flex; - gap: 1rem; - align-items: center; - flex-wrap: wrap; -`; - -const DateInputWrapper = styled.div` - display: flex; - flex-direction: column; - min-width: 150px; -`; - -const DateLabel = styled.label` - font-size: 0.875rem; - font-weight: 500; - color: #374151; - margin-bottom: 0.5rem; -`; - -const StyledDatePicker = styled(DatePicker)` - width: 100%; - padding: 0.5rem 0.75rem; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - font-size: 0.875rem; - color: #111827; - background-color: white; - - &:focus { - outline: none; - border-color: #10b981; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } - - &:hover { - border-color: #9ca3af; - } -`; - -const ResetButton = styled.button` - padding: 0.5rem 1rem; - background-color: #f3f4f6; - color: #374151; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background-color: #e5e7eb; - border-color: #9ca3af; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`; +import { useDateRange } from '../../hooks/useDateRange'; +import { DateInput } from './DateInput'; +import { + FilterContainer, + FilterHeader, + FilterTitle, + DateInputGroup, + DateSeparator, + ResetButton +} from './DateRangePicker.styles'; export const DateRangePicker = ({ onDateChange, initialStartDate, initialEndDate }) => { - const [startDate, setStartDate] = useState(initialStartDate || new Date(new Date().getFullYear(), 0, 1)); // Start of current year - const [endDate, setEndDate] = useState(initialEndDate || new Date()); // Today - const [isUpdating, setIsUpdating] = useState(false); - const onDateChangeRef = useRef(onDateChange); - const hasMounted = useRef(false); - - // Keep the ref up to date - useEffect(() => { - onDateChangeRef.current = onDateChange; - }, [onDateChange]); - - // Debounced update effect - FIXED: removed onDateChange from dependencies and prevent initial call - useEffect(() => { - // Don't call callback on initial mount - if (!hasMounted.current) { - hasMounted.current = true; - return; - } - - const timer = setTimeout(() => { - if (onDateChangeRef.current && startDate && endDate) { - onDateChangeRef.current({ startDate, endDate }); - } - }, 1000); // 1 second debounce - - return () => clearTimeout(timer); - }, [startDate, endDate]); // Only depend on the date values, not the callback function - - const handleStartDateChange = (date) => { - setStartDate(date); - if (date && endDate && date > endDate) { - setEndDate(date); - } - }; - - const handleEndDateChange = (date) => { - setEndDate(date); - if (date && startDate && date < startDate) { - setStartDate(date); - } - }; - - const handleReset = () => { - const defaultStartDate = new Date(new Date().getFullYear(), 0, 1); - const defaultEndDate = new Date(); - setStartDate(defaultStartDate); - setEndDate(defaultEndDate); - if (onDateChangeRef.current) { - onDateChangeRef.current({ startDate: defaultStartDate, endDate: defaultEndDate }); - } - }; + // TODO: Consider moving date range state to Zustand store for global access + const { + startDate, + endDate, + handleStartDateChange, + handleEndDateChange, + handleReset + } = useDateRange(onDateChange, initialStartDate, initialEndDate); return ( @@ -150,38 +30,32 @@ export const DateRangePicker = ({ onDateChange, initialStartDate, initialEndDate - - Start Date - - + -
+ to -
+ - - End Date - - +
); diff --git a/frontend/src/components/filters/DateRangePicker.styles.js b/frontend/src/components/filters/DateRangePicker.styles.js new file mode 100644 index 0000000000..a7b858a7b1 --- /dev/null +++ b/frontend/src/components/filters/DateRangePicker.styles.js @@ -0,0 +1,93 @@ +import styled from 'styled-components'; +import DatePicker from 'react-datepicker'; + +export const FilterContainer = styled.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`; + +export const FilterHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`; + +export const FilterTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +export const DateInputGroup = styled.div` + display: flex; + gap: 1rem; + align-items: center; + flex-wrap: wrap; +`; + +export const DateInputWrapper = styled.div` + display: flex; + flex-direction: column; + min-width: 150px; +`; + +export const DateLabel = styled.label` + font-size: 0.875rem; + font-weight: 500; + color: #374151; + margin-bottom: 0.5rem; +`; + +export const StyledDatePicker = styled(DatePicker)` + width: 100%; + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + color: #111827; + background-color: white; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:hover { + border-color: #9ca3af; + } +`; + +export const ResetButton = styled.button` + padding: 0.5rem 1rem; + background-color: #f3f4f6; + color: #374151; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #e5e7eb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +export const DateSeparator = styled.div` + display: flex; + align-items: center; + color: #6b7280; + font-size: 0.875rem; +`; \ No newline at end of file diff --git a/frontend/src/components/filters/FilterErrors.jsx b/frontend/src/components/filters/FilterErrors.jsx new file mode 100644 index 0000000000..4c5568df80 --- /dev/null +++ b/frontend/src/components/filters/FilterErrors.jsx @@ -0,0 +1,21 @@ +export const FilterErrors = ({ errors }) => { + if (!errors || Object.keys(errors).length === 0) { + return null; + } + + return ( +
+
+ + + + Filter Validation Errors +
+
    + {Object.entries(errors).map(([field, error]) => ( +
  • • {error}
  • + ))} +
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/filters/FilterHeader.jsx b/frontend/src/components/filters/FilterHeader.jsx new file mode 100644 index 0000000000..bb766da1ca --- /dev/null +++ b/frontend/src/components/filters/FilterHeader.jsx @@ -0,0 +1,60 @@ +import styled from 'styled-components'; + +const FiltersHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.5rem; +`; + +const FiltersTitle = styled.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`; + +const FiltersSubtitle = styled.p` + color: #6b7280; + margin: 0.5rem 0 0 0; + font-size: 0.875rem; +`; + +const ClearAllButton = styled.button` + padding: 0.5rem 1rem; + background-color: #ef4444; + color: white; + border: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #dc2626; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); + } +`; + +export const FilterHeader = ({ hasActiveFilters, onClearAll }) => { + return ( + +
+ Global Filters + + Filter your data by date range and forest selection + +
+ {hasActiveFilters && ( + + Clear All + + )} +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/filters/GlobalFilters.jsx b/frontend/src/components/filters/GlobalFilters.jsx index e1b6b15e78..5a7954ed64 100644 --- a/frontend/src/components/filters/GlobalFilters.jsx +++ b/frontend/src/components/filters/GlobalFilters.jsx @@ -3,6 +3,9 @@ import { useSearchParams } from 'react-router-dom'; import styled from 'styled-components'; import { DateRangePicker } from './DateRangePicker'; import { ForestSelector } from './ForestSelector'; +import { FilterErrors } from './FilterErrors'; +import { formatDateForInput } from '@utils/dateUtils'; +import { validateFilters, createDefaultFilters } from '@utils/filterValidation'; const FiltersContainer = styled.div` background: #f9fafb; @@ -138,11 +141,7 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { const [filters, setFilters] = useState(() => { const urlFilters = getFiltersFromURL(); return { - dateRange: { - startDate: new Date(new Date().getFullYear(), 0, 1), - endDate: new Date() - }, - selectedForests: [], + ...createDefaultFilters(), ...initialFilters, ...urlFilters // URL parameters take precedence }; @@ -150,36 +149,9 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { const [filterErrors, setFilterErrors] = useState({}); - // Validate filters - const validateFilters = useCallback((filtersToValidate) => { - const errors = {}; - - // Validate date range - if (filtersToValidate.dateRange) { - const { startDate, endDate } = filtersToValidate.dateRange; - - if (startDate && endDate) { - if (startDate > endDate) { - errors.dateRange = 'Start date must be before or equal to end date'; - } - - if (endDate > new Date()) { - errors.dateRange = 'End date cannot be in the future'; - } - - // Check if date range is too large (more than 5 years) - const diffYears = (endDate - startDate) / (1000 * 60 * 60 * 24 * 365); - if (diffYears > 5) { - errors.dateRange = 'Date range cannot exceed 5 years'; - } - } - } - - // Validate selected forests (optional - could check against available forests) - if (filtersToValidate.selectedForests && filtersToValidate.selectedForests.length > 10) { - errors.selectedForests = 'Cannot select more than 10 forests at once'; - } - + // Validate filters using centralized validation utility + const validateFiltersWithState = useCallback((filtersToValidate) => { + const errors = validateFilters(filtersToValidate); setFilterErrors(errors); return Object.keys(errors).length === 0; }, []); @@ -190,8 +162,8 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { // Add date range to URL if (newFilters.dateRange?.startDate && newFilters.dateRange?.endDate) { - params.set('startDate', newFilters.dateRange.startDate.toISOString().split('T')[0]); - params.set('endDate', newFilters.dateRange.endDate.toISOString().split('T')[0]); + params.set('startDate', formatDateForInput(newFilters.dateRange.startDate)); + params.set('endDate', formatDateForInput(newFilters.dateRange.endDate)); } // Add selected forests to URL @@ -236,7 +208,7 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { const timer = setTimeout(() => { // Validate filters before applying - const isValid = validateFilters(filters); + const isValid = validateFiltersWithState(filters); if (isValid) { // Update URL parameters @@ -250,7 +222,7 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { }, 1000); // 1 second debounce return () => clearTimeout(timer); - }, [filters, validateFilters, updateURLParams]); + }, [filters, validateFiltersWithState, updateURLParams]); const handleDateChange = useCallback((dateRange) => { setFilters(prev => ({ @@ -267,13 +239,7 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { }, []); const handleClearAll = useCallback(() => { - const clearedFilters = { - dateRange: { - startDate: new Date(new Date().getFullYear(), 0, 1), - endDate: new Date() - }, - selectedForests: [] - }; + const clearedFilters = createDefaultFilters(); setFilters(clearedFilters); setFilterErrors({}); @@ -297,22 +263,7 @@ export const GlobalFilters = ({ onFiltersChange, initialFilters = {} }) => { )} - {/* Display filter errors */} - {Object.keys(filterErrors).length > 0 && ( -
-
- - - - Filter Validation Errors -
-
    - {Object.entries(filterErrors).map(([field, error]) => ( -
  • • {error}
  • - ))} -
-
- )} + { + const sizeCategory = getClusterSizeCategory(count); + const { dimension, fontSize } = CLUSTER_SIZES[sizeCategory]; + const { backgroundColor, className, iconSize } = CLUSTER_ICON_CONFIG; + + return L.divIcon({ + html: getClusterIconHTML(backgroundColor, dimension, fontSize, count), + className, + iconSize + }); +}; + +const getClusterSizeCategory = (count) => { + if (count > CLUSTER_SIZES.large.threshold) return 'large'; + if (count > CLUSTER_SIZES.medium.threshold) return 'medium'; + return 'small'; +}; + +const getClusterIconHTML = (backgroundColor, dimension, fontSize, count) => ` +
${count}
+`; + +export default { createClusterIcon }; \ No newline at end of file diff --git a/frontend/src/components/map/ForestMap.jsx b/frontend/src/components/map/ForestMap.jsx index e761114ecc..8f81c249e5 100644 --- a/frontend/src/components/map/ForestMap.jsx +++ b/frontend/src/components/map/ForestMap.jsx @@ -1,11 +1,23 @@ -import { useState, useEffect, useCallback } from 'react'; -import { MapContainer, TileLayer, Marker, Popup, useMap } from 'react-leaflet'; +import { useState, useCallback } from 'react'; +import { MapContainer, TileLayer } from 'react-leaflet'; import L from 'leaflet'; import 'leaflet.markercluster/dist/MarkerCluster.css'; import 'leaflet.markercluster/dist/MarkerCluster.Default.css'; -import 'leaflet.markercluster'; -import styled from 'styled-components'; import 'leaflet/dist/leaflet.css'; +import LoadingSpinner from '@/components/ui/LoadingSpinner'; +import { useTreeFiltering } from '@/hooks/useTreeFiltering'; +import { useMapControls } from '@/hooks/useMapControls'; +import MarkerCluster from './MarkerCluster'; +import MapLoadingHandler from './MapLoadingHandler'; +import MapController from './MapController'; +import MapHeader from './MapHeader'; +import MapLegend from './MapLegend'; +import { + MapContainerStyled, + LoadingOverlay, + ErrorOverlay, + ErrorContent +} from './ForestMap.styles'; // Fix for default markers in react-leaflet delete L.Icon.Default.prototype._getIconUrl; @@ -15,307 +27,6 @@ L.Icon.Default.mergeOptions({ shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png', }); -const MapContainerStyled = styled.div` - height: 600px; - width: 100%; - border-radius: 0.75rem; - overflow: hidden; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; - position: relative; -`; - -const MapHeader = styled.div` - background: white; - padding: 1rem 1.5rem; - border-bottom: 1px solid #e5e7eb; - display: flex; - justify-content: space-between; - align-items: center; -`; - -const MapTitle = styled.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`; - -const MapControls = styled.div` - display: flex; - gap: 0.5rem; -`; - -const ControlButton = styled.button` - padding: 0.5rem; - background: white; - border: 1px solid #d1d5db; - border-radius: 0.375rem; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background: #f9fafb; - border-color: #9ca3af; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`; - -const LoadingOverlay = styled.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.9); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - border-radius: 0.75rem; -`; - -const ErrorOverlay = styled.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.95); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - border-radius: 0.75rem; -`; - -const ErrorContent = styled.div` - text-align: center; - padding: 2rem; - max-width: 300px; -`; - -const LoadingSpinner = styled.div` - width: 40px; - height: 40px; - border: 4px solid #f3f4f6; - border-top: 4px solid #10b981; - border-radius: 50%; - animation: spin 1s linear infinite; - - @keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } - } -`; - -// Custom tree marker icon -const createTreeIcon = (type = 'healthy') => { - const colors = { - healthy: '#10b981', - warning: '#f59e0b', - critical: '#ef4444' - }; - - return L.divIcon({ - className: 'custom-tree-marker', - html: ` -
- 🌳 -
- `, - iconSize: [20, 20], - iconAnchor: [10, 10] - }); -}; - -// Custom MarkerCluster component -const MarkerCluster = ({ trees, onTreeClick, zoom }) => { - const map = useMap(); - - useEffect(() => { - if (!map || !trees.length) return; - - // Remove existing cluster layer if it exists - map.eachLayer(layer => { - if (layer instanceof L.MarkerClusterGroup) { - map.removeLayer(layer); - } - }); - - // Only use clustering for zoom levels < 12 - if (zoom < 12) { - // Create cluster group - const clusterGroup = L.markerClusterGroup({ - chunkedLoading: true, - spiderfyOnMaxZoom: true, - showCoverageOnHover: false, - zoomToBoundsOnClick: true, - maxClusterRadius: 50, - iconCreateFunction: (cluster) => { - const count = cluster.getChildCount(); - let size = 'small'; - if (count > 10) size = 'medium'; - if (count > 50) size = 'large'; - - return L.divIcon({ - html: `
${count}
`, - className: 'custom-cluster-icon', - iconSize: [30, 30] - }); - } - }); - - // Add markers to cluster group - trees.forEach(tree => { - const marker = L.marker([tree.lat, tree.lng], { - icon: createTreeIcon(tree.health) - }); - - marker.bindPopup(` -
-

${tree.name}

-

Species: ${tree.species}

-

Height: ${tree.height}m

-

Health: - ${tree.health} -

-
- `); - - marker.on('click', () => onTreeClick(tree)); - clusterGroup.addLayer(marker); - }); - - map.addLayer(clusterGroup); - } else { - // For zoom >= 12, show individual markers without clustering - trees.forEach(tree => { - const marker = L.marker([tree.lat, tree.lng], { - icon: createTreeIcon(tree.health) - }); - - marker.bindPopup(` -
-

${tree.name}

-

Species: ${tree.species}

-

Height: ${tree.height}m

-

Health: - ${tree.health} -

-
- `); - - marker.on('click', () => onTreeClick(tree)); - marker.addTo(map); - }); - } - - // Cleanup function - return () => { - map.eachLayer(layer => { - if (layer instanceof L.MarkerClusterGroup) { - map.removeLayer(layer); - } - }); - }; - }, [map, trees, onTreeClick, zoom]); - - return null; -}; - -// Map loading handler component -const MapLoadingHandler = ({ onMapReady, onMapError }) => { - const map = useMap(); - - useEffect(() => { - const handleMapReady = () => { - if (onMapReady) { - onMapReady(); - } - }; - - const handleMapError = (error) => { - console.error('Map error:', error); - if (onMapError) { - onMapError(error); - } - }; - - // Map is ready when tiles are loaded - map.whenReady(() => { - handleMapReady(); - }); - - // Handle tile errors - map.on('tileerror', handleMapError); - - return () => { - map.off('tileerror', handleMapError); - }; - }, [map, onMapReady, onMapError]); - - return null; -}; - -// Map controller component - FIXED: removed function dependency from useEffect -const MapController = ({ onZoomChange }) => { - const map = useMap(); - - useEffect(() => { - const handleZoomEnd = () => { - if (onZoomChange) { - onZoomChange(map.getZoom()); - } - }; - - map.on('zoomend', handleZoomEnd); - return () => { - map.off('zoomend', handleZoomEnd); - }; - }, [map]); // Only depend on map, not the callback function - - return null; -}; - export const ForestMap = ({ trees = [ { id: 1, lat: 59.3293, lng: 18.0686, name: 'Tree A-001', health: 'healthy', height: 2.4, species: 'Pine' }, diff --git a/frontend/src/components/map/ForestMap.styles.js b/frontend/src/components/map/ForestMap.styles.js new file mode 100644 index 0000000000..475846511c --- /dev/null +++ b/frontend/src/components/map/ForestMap.styles.js @@ -0,0 +1,85 @@ +import styled from 'styled-components'; + +export const MapContainerStyled = styled.div` + height: 600px; + width: 100%; + border-radius: 0.75rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; + position: relative; +`; + +export const MapHeader = styled.div` + background: white; + padding: 1rem 1.5rem; + border-bottom: 1px solid #e5e7eb; + display: flex; + justify-content: space-between; + align-items: center; +`; + +export const MapTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +export const MapControls = styled.div` + display: flex; + gap: 0.5rem; +`; + +export const ControlButton = styled.button` + padding: 0.5rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.375rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #f9fafb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +export const LoadingOverlay = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`; + +export const ErrorOverlay = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.95); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`; + +export const ErrorContent = styled.div` + text-align: center; + padding: 2rem; + max-width: 300px; +`; \ No newline at end of file diff --git a/frontend/src/components/map/MapController.jsx b/frontend/src/components/map/MapController.jsx new file mode 100644 index 0000000000..43038eb5c5 --- /dev/null +++ b/frontend/src/components/map/MapController.jsx @@ -0,0 +1,23 @@ +import { useEffect } from 'react'; +import { useMap } from 'react-leaflet'; + +const MapController = ({ onZoomChange }) => { + const map = useMap(); + + useEffect(() => { + const handleZoomEnd = () => { + if (onZoomChange) { + onZoomChange(map.getZoom()); + } + }; + + map.on('zoomend', handleZoomEnd); + return () => { + map.off('zoomend', handleZoomEnd); + }; + }, [map]); + + return null; +}; + +export default MapController; \ No newline at end of file diff --git a/frontend/src/components/map/MapHeader.jsx b/frontend/src/components/map/MapHeader.jsx new file mode 100644 index 0000000000..7d8b11f56d --- /dev/null +++ b/frontend/src/components/map/MapHeader.jsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { MapHeader as StyledMapHeader, MapTitle, MapControls, ControlButton } from './ForestMap.styles'; + +const MapHeader = ({ onCenterMap, onFitBounds }) => { + return ( + + Forest Map + + + + + + + + + + + + + + + ); +}; + +export default MapHeader; \ No newline at end of file diff --git a/frontend/src/components/map/MapLegend.jsx b/frontend/src/components/map/MapLegend.jsx new file mode 100644 index 0000000000..c83426982b --- /dev/null +++ b/frontend/src/components/map/MapLegend.jsx @@ -0,0 +1,32 @@ +import React from 'react'; + +const MapLegend = ({ filteredTrees, totalTrees, zoom }) => { + return ( +
+

Legend

+
+
+
+ Healthy Trees +
+
+
+ Warning +
+
+
+ Critical +
+
+ Showing {filteredTrees.length} of {totalTrees} trees +
+
+ Zoom level: {zoom} + {zoom < 12 && (Clustering enabled)} +
+
+
+ ); +}; + +export default MapLegend; \ No newline at end of file diff --git a/frontend/src/components/map/MapLoadingHandler.jsx b/frontend/src/components/map/MapLoadingHandler.jsx new file mode 100644 index 0000000000..1d579fb63a --- /dev/null +++ b/frontend/src/components/map/MapLoadingHandler.jsx @@ -0,0 +1,37 @@ +import { useEffect } from 'react'; +import { useMap } from 'react-leaflet'; + +const MapLoadingHandler = ({ onMapReady, onMapError }) => { + const map = useMap(); + + useEffect(() => { + const handleMapReady = () => { + if (onMapReady) { + onMapReady(); + } + }; + + const handleMapError = (error) => { + console.error('Map error:', error); + if (onMapError) { + onMapError(error); + } + }; + + // Map is ready when tiles are loaded + map.whenReady(() => { + handleMapReady(); + }); + + // Handle tile errors + map.on('tileerror', handleMapError); + + return () => { + map.off('tileerror', handleMapError); + }; + }, [map, onMapReady, onMapError]); + + return null; +}; + +export default MapLoadingHandler; \ No newline at end of file diff --git a/frontend/src/components/map/MarkerCluster.jsx b/frontend/src/components/map/MarkerCluster.jsx new file mode 100644 index 0000000000..4aaded4f1d --- /dev/null +++ b/frontend/src/components/map/MarkerCluster.jsx @@ -0,0 +1,73 @@ +import { useEffect } from 'react'; +import { useMap } from 'react-leaflet'; +import L from 'leaflet'; +import 'leaflet.markercluster'; +import { createTreeIcon, createClusterIcon, getTreePopupContent } from '@/utils/mapIcons'; + +const MarkerCluster = ({ trees, onTreeClick, zoom }) => { + const map = useMap(); + + useEffect(() => { + if (!map || !trees.length) return; + + // Remove existing cluster layer if it exists + map.eachLayer(layer => { + if (layer instanceof L.MarkerClusterGroup) { + map.removeLayer(layer); + } + }); + + // Only use clustering for zoom levels < 12 + if (zoom < 12) { + // Create cluster group + const clusterGroup = L.markerClusterGroup({ + chunkedLoading: true, + spiderfyOnMaxZoom: true, + showCoverageOnHover: false, + zoomToBoundsOnClick: true, + maxClusterRadius: 50, + iconCreateFunction: (cluster) => { + const count = cluster.getChildCount(); + return createClusterIcon(count); + } + }); + + // Add markers to cluster group + trees.forEach(tree => { + const marker = L.marker([tree.lat, tree.lng], { + icon: createTreeIcon(tree.health) + }); + + marker.bindPopup(getTreePopupContent(tree)); + marker.on('click', () => onTreeClick(tree)); + clusterGroup.addLayer(marker); + }); + + map.addLayer(clusterGroup); + } else { + // For zoom >= 12, show individual markers without clustering + trees.forEach(tree => { + const marker = L.marker([tree.lat, tree.lng], { + icon: createTreeIcon(tree.health) + }); + + marker.bindPopup(getTreePopupContent(tree)); + marker.on('click', () => onTreeClick(tree)); + marker.addTo(map); + }); + } + + // Cleanup function + return () => { + map.eachLayer(layer => { + if (layer instanceof L.MarkerClusterGroup) { + map.removeLayer(layer); + } + }); + }; + }, [map, trees, onTreeClick, zoom]); + + return null; +}; + +export default MarkerCluster; \ No newline at end of file diff --git a/frontend/src/components/map/TreeIcon.jsx b/frontend/src/components/map/TreeIcon.jsx new file mode 100644 index 0000000000..1e5d691048 --- /dev/null +++ b/frontend/src/components/map/TreeIcon.jsx @@ -0,0 +1,35 @@ +import L from 'leaflet'; +import { TREE_HEALTH_COLORS, TREE_ICON_CONFIG } from '@/constants/mapConstants'; + +export const createTreeIcon = (healthType = 'healthy') => { + const color = TREE_HEALTH_COLORS[healthType] || TREE_HEALTH_COLORS.healthy; + const { size, emoji, className } = TREE_ICON_CONFIG; + + return L.divIcon({ + className, + html: getTreeIconHTML(color, size, emoji), + iconSize: [size, size], + iconAnchor: [size / 2, size / 2] + }); +}; + +const getTreeIconHTML = (color, size, emoji) => ` +
+ ${emoji} +
+`; + +export default { createTreeIcon }; \ No newline at end of file diff --git a/frontend/src/components/map/TreePopup.jsx b/frontend/src/components/map/TreePopup.jsx new file mode 100644 index 0000000000..2b9b48782e --- /dev/null +++ b/frontend/src/components/map/TreePopup.jsx @@ -0,0 +1,55 @@ +import { TREE_HEALTH_STYLES } from '@/constants/mapConstants'; + +export const getTreePopupContent = (tree) => { + const healthStyle = TREE_HEALTH_STYLES[tree.health] || TREE_HEALTH_STYLES.healthy; + + return getPopupHTML(tree, healthStyle); +}; + +const getPopupHTML = (tree, healthStyle) => ` +
+

${tree.name}

+

Species: ${tree.species}

+

Height: ${tree.height}m

+

Health: + ${tree.health} +

+
+`; + +export const TreePopupContent = ({ tree }) => { + const healthStyle = TREE_HEALTH_STYLES[tree.health] || TREE_HEALTH_STYLES.healthy; + + return ( +
+

{tree.name}

+

Species: {tree.species}

+

Height: {tree.height}m

+

+ Health: + + {tree.health} + +

+
+ ); +}; + +const parseStyleString = (styleString) => { + const styles = {}; + styleString.split(';').forEach(style => { + const [property, value] = style.split(':').map(s => s.trim()); + if (property && value) { + const camelCaseProperty = property.replace(/-([a-z])/g, (g) => g[1].toUpperCase()); + styles[camelCaseProperty] = value; + } + }); + return styles; +}; + +export default { getTreePopupContent, TreePopupContent }; \ No newline at end of file diff --git a/frontend/src/components/map/index.js b/frontend/src/components/map/index.js new file mode 100644 index 0000000000..783029688c --- /dev/null +++ b/frontend/src/components/map/index.js @@ -0,0 +1,14 @@ +// Map Components + +// Components with default exports +export { default as MarkerCluster } from './MarkerCluster'; +export { default as MapLoadingHandler } from './MapLoadingHandler'; +export { default as MapController } from './MapController'; +export { default as MapHeader } from './MapHeader'; +export { default as MapLegend } from './MapLegend'; +export { default as ClusterIcon } from './ClusterIcon'; +export { default as TreeIcon } from './TreeIcon'; +export { default as TreePopup } from './TreePopup'; + +// Component with named export +export { ForestMap } from './ForestMap'; \ No newline at end of file diff --git a/frontend/src/components/ui/AboutSection.jsx b/frontend/src/components/ui/AboutSection.jsx new file mode 100644 index 0000000000..d80cdd00f1 --- /dev/null +++ b/frontend/src/components/ui/AboutSection.jsx @@ -0,0 +1,31 @@ +import { Link } from 'react-router-dom'; +import { StatsGrid } from './StatsGrid'; + +export const AboutSection = () => { + return ( +
+
+
+
+

+ Empowering Sustainable Forestry +

+

+ Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects. +

+

+ Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs. +

+ + Join Nanwa Today + +
+ +
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ActionBadge.jsx b/frontend/src/components/ui/ActionBadge.jsx new file mode 100644 index 0000000000..51609cd9f6 --- /dev/null +++ b/frontend/src/components/ui/ActionBadge.jsx @@ -0,0 +1,31 @@ +import styled from 'styled-components'; + +const StyledActionBadge = styled.span` + padding: 0.25rem 0.75rem; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + + ${props => { + switch (props.action) { + case 'CREATE': + return 'background: #d1fae5; color: #065f46;'; + case 'UPDATE': + return 'background: #dbeafe; color: #1e40af;'; + case 'DELETE': + return 'background: #fee2e2; color: #991b1b;'; + case 'LOGIN': + return 'background: #fef3c7; color: #92400e;'; + case 'LOGOUT': + return 'background: #f3f4f6; color: #374151;'; + default: + return 'background: #f3f4f6; color: #374151;'; + } + }} +`; + +export const ActionBadge = ({ action, children }) => ( + + {children || action} + +); \ No newline at end of file diff --git a/frontend/src/components/ui/BackIcon.jsx b/frontend/src/components/ui/BackIcon.jsx new file mode 100644 index 0000000000..b32b88d390 --- /dev/null +++ b/frontend/src/components/ui/BackIcon.jsx @@ -0,0 +1,21 @@ +import React from 'react'; + +export const BackIcon = ({ className = '', ...props }) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/Button.jsx b/frontend/src/components/ui/Button.jsx index d70601ef1c..b58aea5ebc 100644 --- a/frontend/src/components/ui/Button.jsx +++ b/frontend/src/components/ui/Button.jsx @@ -5,27 +5,54 @@ const buttonVariants = { primary: 'btn-primary', secondary: 'btn-secondary', outline: 'btn-outline', + ghost: 'btn-ghost', + link: 'btn-link', + destructive: 'btn-destructive', + success: 'btn-success', }; const buttonSizes = { sm: 'h-8 px-3 text-xs', md: 'h-10 px-4 py-2', lg: 'h-12 px-8', + xl: 'h-14 px-10 text-lg', + icon: 'h-10 w-10', }; export const Button = React.forwardRef( - ({ className, variant = 'primary', size = 'md', ...props }, ref) => { + ({ + className, + variant = 'primary', + size = 'md', + disabled = false, + loading = false, + children, + ...props + }, ref) => { return ( ); } ); diff --git a/frontend/src/components/ui/ButtonGroup.jsx b/frontend/src/components/ui/ButtonGroup.jsx new file mode 100644 index 0000000000..d265372f3c --- /dev/null +++ b/frontend/src/components/ui/ButtonGroup.jsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { cn } from '@/lib/utils'; + +export const ButtonGroup = React.forwardRef( + ({ + className, + orientation = 'horizontal', + size = 'md', + variant = 'outline', + children, + ...props + }, ref) => { + const childrenWithProps = React.Children.map(children, (child) => { + if (React.isValidElement(child)) { + return React.cloneElement(child, { + size: child.props.size || size, + variant: child.props.variant || variant, + }); + } + return child; + }); + + return ( +
+ {childrenWithProps} +
+ ); + } +); + +ButtonGroup.displayName = 'ButtonGroup'; \ No newline at end of file diff --git a/frontend/src/components/ui/ChartComponents.jsx b/frontend/src/components/ui/ChartComponents.jsx new file mode 100644 index 0000000000..399f0ebc12 --- /dev/null +++ b/frontend/src/components/ui/ChartComponents.jsx @@ -0,0 +1,123 @@ +import styled from 'styled-components'; + +// Common styled components for charts +export const ChartContainer = styled.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`; + +export const ChartHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`; + +export const ChartTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`; + +export const CustomTooltipContainer = styled.div` + background: white; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + padding: 0.75rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); +`; + +// Chart percentage display components +export const PercentageDisplay = styled.div` + text-align: center; + margin-bottom: 1rem; +`; + +export const PercentageValue = styled.div` + font-size: 2.5rem; + font-weight: 700; + color: #10b981; + line-height: 1; +`; + +export const PercentageLabel = styled.div` + font-size: 0.875rem; + color: #6b7280; + margin-top: 0.25rem; +`; + +// Chart legend components +export const LegendContainer = styled.div` + display: flex; + justify-content: center; + gap: 1rem; + margin-top: 1rem; + flex-wrap: wrap; +`; + +export const LegendItem = styled.div` + display: flex; + align-items: center; +`; + +export const LegendDot = styled.div` + width: 0.75rem; + height: 0.75rem; + border-radius: 50%; + margin-right: 0.5rem; + background-color: ${props => props.color}; +`; + +export const LegendText = styled.span` + font-size: 0.875rem; + color: #6b7280; +`; + +// Helper function to format tooltip values +const formatTooltipValue = (value, valueFormatter, unit) => { + if (valueFormatter) { + return valueFormatter(value); + } + return `${value}${unit}`; +}; + +// Reusable tooltip component with enhanced multi-series support +export const ChartTooltip = ({ active, payload, label, valueFormatter, unit = '' }) => { + if (active && payload && payload.length) { + return ( + +

{label}

+ {payload.map((entry, index) => ( +

+ {formatTooltipValue(entry.value, valueFormatter, unit)} +

+ ))} +
+ ); + } + return null; +}; + +// Reusable percentage display component +export const ChartPercentageDisplay = ({ value, label }) => ( + + {value}% + {label} + +); + +// Reusable chart legend component +export const ChartLegend = ({ data }) => ( + + {data.map((item, index) => ( + + + {item.name} ({item.value}%) + + ))} + +); \ No newline at end of file diff --git a/frontend/src/components/ui/CloseIcon.jsx b/frontend/src/components/ui/CloseIcon.jsx new file mode 100644 index 0000000000..fabd709ef8 --- /dev/null +++ b/frontend/src/components/ui/CloseIcon.jsx @@ -0,0 +1,21 @@ +import React from 'react'; + +export const CloseIcon = ({ className = '', ...props }) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/DarkModeToggle.jsx b/frontend/src/components/ui/DarkModeToggle.jsx index 8f9473f15e..71046584ab 100644 --- a/frontend/src/components/ui/DarkModeToggle.jsx +++ b/frontend/src/components/ui/DarkModeToggle.jsx @@ -1,14 +1,12 @@ import { useDarkMode } from '../../contexts/DarkModeContext'; +import { IconButton } from './IconButton'; +import { SunIcon } from './SunIcon'; +import { MoonIcon } from './MoonIcon'; +import { cn } from '@/lib/utils'; export const DarkModeToggle = ({ className = '', size = 'md' }) => { const { isDarkMode, toggleDarkMode } = useDarkMode(); - const sizeClasses = { - sm: 'w-8 h-8', - md: 'w-10 h-10', - lg: 'w-12 h-12', - }; - const iconSizes = { sm: 'w-4 h-4', md: 'w-5 h-5', @@ -16,55 +14,33 @@ export const DarkModeToggle = ({ className = '', size = 'md' }) => { }; return ( - + )} + /> + ); }; \ No newline at end of file diff --git a/frontend/src/components/ui/DashboardHeader.jsx b/frontend/src/components/ui/DashboardHeader.jsx new file mode 100644 index 0000000000..39e1b31a6b --- /dev/null +++ b/frontend/src/components/ui/DashboardHeader.jsx @@ -0,0 +1,52 @@ +import { useAuth } from '../../contexts/AuthContext'; +import { DarkModeToggle } from './DarkModeToggle'; + +export const DashboardHeader = ({ onToggleSidebar }) => { + const { user, logout, isAdmin } = useAuth(); + + const handleLogout = async () => { + await logout(); + }; + + return ( +
+
+
+ +

+ Nanwa Dashboard +

+
+
+ + Welcome, {user?.firstName || user?.name} + {isAdmin() && ( + + Admin + + )} + + + +
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/DashboardSidebar.jsx b/frontend/src/components/ui/DashboardSidebar.jsx new file mode 100644 index 0000000000..cfcd35e6b7 --- /dev/null +++ b/frontend/src/components/ui/DashboardSidebar.jsx @@ -0,0 +1,68 @@ +import { useAuth } from '../../contexts/AuthContext'; + +export const DashboardSidebar = ({ isOpen, onClose }) => { + const { isAdmin } = useAuth(); + + return ( + <> + {/* Sidebar Overlay */} +
+ + {/* Sidebar */} + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/DashboardStatCard.jsx b/frontend/src/components/ui/DashboardStatCard.jsx new file mode 100644 index 0000000000..790736a9b3 --- /dev/null +++ b/frontend/src/components/ui/DashboardStatCard.jsx @@ -0,0 +1,22 @@ +export const DashboardStatCard = ({ icon, title, value, color = 'green' }) => { + const colorClasses = { + green: 'bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400', + blue: 'bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400', + yellow: 'bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400', + purple: 'bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400' + }; + + return ( +
+
+
+ {icon} +
+
+

{title}

+

{value}

+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ErrorActions.jsx b/frontend/src/components/ui/ErrorActions.jsx new file mode 100644 index 0000000000..fb30a7bab4 --- /dev/null +++ b/frontend/src/components/ui/ErrorActions.jsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { Button } from './Button'; +import { ButtonGroup } from './ButtonGroup'; + +export const ErrorActions = ({ onRetry, onReload, onReportError }) => { + return ( + + + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ErrorBoundary.jsx b/frontend/src/components/ui/ErrorBoundary.jsx index 4ba3a19236..3829909cef 100644 --- a/frontend/src/components/ui/ErrorBoundary.jsx +++ b/frontend/src/components/ui/ErrorBoundary.jsx @@ -1,110 +1,25 @@ import React from 'react'; -import styled from 'styled-components'; - -const ErrorContainer = styled.div` - min-height: 100vh; - display: flex; - align-items: center; - justify-content: center; - padding: 2rem; - background-color: #f8f9fa; -`; - -const ErrorCard = styled.div` - background: white; - border-radius: 8px; - padding: 2rem; - max-width: 600px; - width: 100%; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - text-align: center; -`; - -const ErrorTitle = styled.h1` - color: #dc3545; - font-size: 2rem; - margin-bottom: 1rem; - font-weight: 600; -`; - -const ErrorMessage = styled.p` - color: #6c757d; - font-size: 1.1rem; - line-height: 1.6; - margin-bottom: 2rem; -`; - -const ErrorDetails = styled.details` - margin-bottom: 2rem; - text-align: left; - - summary { - cursor: pointer; - color: #007bff; - font-weight: 500; - margin-bottom: 0.5rem; - - &:hover { - color: #0056b3; - } - } -`; - -const ErrorCode = styled.pre` - background: #f8f9fa; - padding: 1rem; - border-radius: 4px; - overflow-x: auto; - font-size: 0.9rem; - color: #495057; - white-space: pre-wrap; - word-break: break-word; -`; - -const ButtonGroup = styled.div` - display: flex; - gap: 1rem; - justify-content: center; - flex-wrap: wrap; -`; - -const Button = styled.button` - padding: 0.75rem 1.5rem; - border: none; - border-radius: 4px; - font-size: 1rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s ease; - - &:focus { - outline: 2px solid #007bff; - outline-offset: 2px; - } - - &:disabled { - opacity: 0.6; - cursor: not-allowed; - } -`; - -const PrimaryButton = styled(Button)` - background-color: #007bff; - color: white; - - &:hover:not(:disabled) { - background-color: #0056b3; - } -`; - -const SecondaryButton = styled(Button)` - background-color: #6c757d; - color: white; - - &:hover:not(:disabled) { - background-color: #5a6268; - } -`; +import { cn } from '@/lib/utils'; +import { ErrorCard, ErrorTitle, ErrorMessage, ErrorDetails } from './ErrorCard'; +import { ErrorActions } from './ErrorActions'; +import { useErrorReporting } from '../../hooks/useErrorReporting'; +import { formatDateTimeForAPI } from '@utils/dateUtils'; + +const ErrorContainer = ({ children, className, ...props }) => { + return ( +
+ {children} +
+ ); +}; class ErrorBoundary extends React.Component { constructor(props) { @@ -114,6 +29,32 @@ class ErrorBoundary extends React.Component { error: null, errorInfo: null }; + + // Initialize error reporting utilities + this.errorReporting = { + reportError: (error, errorInfo) => { + const errorData = { + error: error?.toString(), + stack: error?.stack, + componentStack: errorInfo?.componentStack, + userAgent: navigator.userAgent, + timestamp: formatDateTimeForAPI(new Date()), + url: window.location.href + }; + + navigator.clipboard.writeText(JSON.stringify(errorData, null, 2)) + .then(() => { + alert('Error details copied to clipboard. Please send this to support.'); + }) + .catch(() => { + alert('Failed to copy error details. Please try again.'); + }); + }, + logError: (error, errorInfo) => { + console.error('Error caught by boundary:', error, errorInfo); + // TODO: In production, you might want to send this to an error reporting service + } + }; } static getDerivedStateFromError(error) { @@ -126,11 +67,7 @@ class ErrorBoundary extends React.Component { errorInfo: errorInfo }); - // Log error to console for debugging - console.error('Error caught by boundary:', error, errorInfo); - - // In production, you might want to send this to an error reporting service - // reportError(error, errorInfo); + this.errorReporting.logError(error, errorInfo); } handleRetry = () => { @@ -146,29 +83,13 @@ class ErrorBoundary extends React.Component { }; handleReportError = () => { - const errorData = { - error: this.state.error?.toString(), - stack: this.state.error?.stack, - componentStack: this.state.errorInfo?.componentStack, - userAgent: navigator.userAgent, - timestamp: new Date().toISOString(), - url: window.location.href - }; - - // Copy error details to clipboard - navigator.clipboard.writeText(JSON.stringify(errorData, null, 2)) - .then(() => { - alert('Error details copied to clipboard. Please send this to support.'); - }) - .catch(() => { - alert('Failed to copy error details. Please try again.'); - }); + this.errorReporting.reportError(this.state.error, this.state.errorInfo); }; render() { if (this.state.hasError) { return ( - + Oops! Something went wrong @@ -177,26 +98,17 @@ class ErrorBoundary extends React.Component { {this.state.error && ( - - Show technical details - - {this.state.error.toString()} - {this.state.errorInfo?.componentStack} - - + )} - - - Try Again - - - Refresh Page - - - Report Error - - + ); diff --git a/frontend/src/components/ui/ErrorCard.jsx b/frontend/src/components/ui/ErrorCard.jsx new file mode 100644 index 0000000000..fbccf2d32f --- /dev/null +++ b/frontend/src/components/ui/ErrorCard.jsx @@ -0,0 +1,64 @@ +import React from 'react'; +import { cn } from '@/lib/utils'; + +export const ErrorCard = ({ className, children, ...props }) => { + return ( +
+ {children} +
+ ); +}; + +export const ErrorTitle = ({ className, children, ...props }) => { + return ( +

+ {children} +

+ ); +}; + +export const ErrorMessage = ({ className, children, ...props }) => { + return ( +

+ {children} +

+ ); +}; + +export const ErrorDetails = ({ className, error, errorInfo, ...props }) => { + return ( +
+ + Show technical details + +
+        {error?.toString()}
+        {errorInfo?.componentStack}
+      
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ErrorPageContainer.jsx b/frontend/src/components/ui/ErrorPageContainer.jsx new file mode 100644 index 0000000000..996cd8b791 --- /dev/null +++ b/frontend/src/components/ui/ErrorPageContainer.jsx @@ -0,0 +1,90 @@ +import React from 'react'; +import { cn } from '@/lib/utils'; + +export const ErrorPageContainer = ({ className, children, ...props }) => { + return ( +
+ {children} +
+ ); +}; + +export const ErrorPageCard = ({ className, children, ...props }) => { + return ( +
+ {children} +
+ ); +}; + +export const ErrorPageIllustration = ({ className, children, ...props }) => { + return ( +
svg]:w-30 [&>svg]:h-30 [&>svg]:opacity-70', + 'md:[&>svg]:w-20 md:[&>svg]:h-20', + className + )} + {...props} + > + {children} +
+ ); +}; + +export const ErrorPageCode = ({ className, children, ...props }) => { + return ( +

+ {children} +

+ ); +}; + +export const ErrorPageTitle = ({ className, children, ...props }) => { + return ( +

+ {children} +

+ ); +}; + +export const ErrorPageMessage = ({ className, children, ...props }) => { + return ( +

+ {children} +

+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ErrorPageIllustrations.jsx b/frontend/src/components/ui/ErrorPageIllustrations.jsx new file mode 100644 index 0000000000..bc5d2083c3 --- /dev/null +++ b/frontend/src/components/ui/ErrorPageIllustrations.jsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { SearchIcon, ServerIcon } from './'; + +export const NotFoundIllustration = ({ className = '', ...props }) => { + return ( +
+ + + + + +
+ ); +}; + +export const ServerErrorIllustration = ({ className = '', ...props }) => { + return ( +
+ +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ErrorPageLayout.jsx b/frontend/src/components/ui/ErrorPageLayout.jsx new file mode 100644 index 0000000000..5567009cf6 --- /dev/null +++ b/frontend/src/components/ui/ErrorPageLayout.jsx @@ -0,0 +1,66 @@ +import React from 'react'; +import { + ErrorPageContainer, + ErrorPageCard, + ErrorPageIllustration, + ErrorPageCode, + ErrorPageTitle, + ErrorPageMessage, + Button, + ButtonGroup, + BackIcon, + HomeIcon, + RefreshIcon +} from './'; +import { useErrorPageNavigation } from '@/hooks/useErrorPageNavigation'; + +export const ErrorPageLayout = ({ + code, + title, + message, + illustration, + showBackButton = true, + showHomeButton = true, + showReloadButton = false, + className, + ...props +}) => { + const { goBack, goHome, reload } = useErrorPageNavigation(); + + return ( + + + + {illustration} + + + {code} + {title} + {message} + + + {showBackButton && ( + + )} + + {showReloadButton && ( + + )} + + {showHomeButton && ( + + )} + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ExportButton.jsx b/frontend/src/components/ui/ExportButton.jsx index a3446fc1fc..f6965926bb 100644 --- a/frontend/src/components/ui/ExportButton.jsx +++ b/frontend/src/components/ui/ExportButton.jsx @@ -2,6 +2,7 @@ import { useState } from 'react'; import Papa from 'papaparse'; import * as XLSX from 'xlsx'; import styled from 'styled-components'; +import { formatDateForInput } from '@utils/dateUtils'; const ExportContainer = styled.div` position: relative; @@ -178,7 +179,7 @@ export const ExportButtonComponent = ({ 'Latitude': item.lat, 'Longitude': item.lng, 'Forest': item.id <= 4 ? 'Forest A' : 'Forest B', - 'Export Date': new Date().toISOString().split('T')[0] + 'Export Date': formatDateForInput(new Date()) })); // Generate CSV @@ -189,7 +190,7 @@ export const ExportButtonComponent = ({ const link = document.createElement('a'); const url = URL.createObjectURL(blob); link.setAttribute('href', url); - link.setAttribute('download', `${fileName}_${new Date().toISOString().split('T')[0]}.csv`); + link.setAttribute('download', `${fileName}_${formatDateForInput(new Date())}.csv`); link.style.visibility = 'hidden'; document.body.appendChild(link); link.click(); @@ -226,7 +227,7 @@ export const ExportButtonComponent = ({ 'Latitude': item.lat, 'Longitude': item.lng, 'Forest': item.id <= 4 ? 'Forest A' : 'Forest B', - 'Export Date': new Date().toISOString().split('T')[0] + 'Export Date': formatDateForInput(new Date()) })); // Create workbook and worksheet @@ -237,7 +238,7 @@ export const ExportButtonComponent = ({ XLSX.utils.book_append_sheet(wb, ws, 'Tree Data'); // Generate and trigger download - XLSX.writeFile(wb, `${fileName}_${new Date().toISOString().split('T')[0]}.xlsx`); + XLSX.writeFile(wb, `${fileName}_${formatDateForInput(new Date())}.xlsx`); showStatus(`XLSX exported successfully (${filteredData.length} records)`, 'success'); if (onExportComplete) onExportComplete('xlsx', filteredData.length); diff --git a/frontend/src/components/ui/FeatureCard.jsx b/frontend/src/components/ui/FeatureCard.jsx new file mode 100644 index 0000000000..996c665c29 --- /dev/null +++ b/frontend/src/components/ui/FeatureCard.jsx @@ -0,0 +1,13 @@ +export const FeatureCard = ({ icon, title, description }) => { + return ( +
+
+ {icon} +
+

{title}

+

+ {description} +

+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/FeaturesSection.jsx b/frontend/src/components/ui/FeaturesSection.jsx new file mode 100644 index 0000000000..ce96daa730 --- /dev/null +++ b/frontend/src/components/ui/FeaturesSection.jsx @@ -0,0 +1,60 @@ +import { FeatureCard } from './FeatureCard'; + +export const FeaturesSection = () => { + const features = [ + { + icon: ( + + + + ), + title: "Real-Time Analytics", + description: "Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics." + }, + { + icon: ( + + + + + ), + title: "Interactive Mapping", + description: "Visualize forests and individual trees with marker clustering and detailed tree information." + }, + { + icon: ( + + + + ), + title: "Data Export", + description: "Export filtered datasets to CSV or XLSX format for reporting and analysis." + } + ]; + + return ( +
+
+
+

+ Powerful Features for Tree Management +

+

+ Everything you need to monitor, analyze, and export tree data with precision and ease. +

+
+ +
+ {features.map((feature, index) => ( + + ))} +
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/Footer.jsx b/frontend/src/components/ui/Footer.jsx new file mode 100644 index 0000000000..226c262f1d --- /dev/null +++ b/frontend/src/components/ui/Footer.jsx @@ -0,0 +1,45 @@ +import { Link } from 'react-router-dom'; + +export const Footer = () => { + return ( +
+
+
+
+

Nanwa

+

+ Empowering sustainable forestry through data-driven insights and real-time monitoring. +

+
+
+

Product

+ +
+
+

Company

+ +
+
+

Support

+ +
+
+
+

© 2024 Nanwa. All rights reserved.

+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ForestOverviewSection.jsx b/frontend/src/components/ui/ForestOverviewSection.jsx new file mode 100644 index 0000000000..bacd6f11bc --- /dev/null +++ b/frontend/src/components/ui/ForestOverviewSection.jsx @@ -0,0 +1,46 @@ +export const ForestOverviewSection = () => { + return ( +
+

Forest Overview

+

+ Your forests are performing excellently with strong growth indicators and high survival rates. +

+
+
+

Recent Activity

+
    +
  • +
    + New measurements recorded for Forest A +
  • +
  • +
    + Survival rate improved by 2.3% +
  • +
  • +
    + CO₂ absorption increased by 15% +
  • +
+
+
+

Next Actions

+
    +
  • +
    + Schedule maintenance for Forest B +
  • +
  • +
    + Review growth data for Q4 report +
  • +
  • +
    + Address low-performing areas in Forest C +
  • +
+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/FormElements.jsx b/frontend/src/components/ui/FormElements.jsx new file mode 100644 index 0000000000..2dabb86446 --- /dev/null +++ b/frontend/src/components/ui/FormElements.jsx @@ -0,0 +1,141 @@ +import styled from 'styled-components'; + +// Base form element styles +const baseInputStyles = ` + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + background: white; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:disabled { + background-color: #f3f4f6; + cursor: not-allowed; + opacity: 0.6; + } +`; + +// Container Components +export const FilterSection = styled.div` + display: flex; + gap: 1rem; + align-items: center; +`; + +export const FormGroup = styled.div` + display: flex; + flex-direction: column; + gap: 0.5rem; +`; + +export const FormRow = styled.div` + display: flex; + gap: 1rem; + align-items: center; + flex-wrap: wrap; +`; + +// Input Components +export const SearchInput = styled.input` + ${baseInputStyles} + min-width: 200px; + flex: 1; +`; + +export const TextInput = styled.input` + ${baseInputStyles} + width: 100%; +`; + +export const FilterSelect = styled.select` + ${baseInputStyles} + cursor: pointer; +`; + +export const Textarea = styled.textarea` + ${baseInputStyles} + width: 100%; + min-height: 100px; + resize: vertical; +`; + +// Label Components +export const Label = styled.label` + display: block; + font-size: 0.875rem; + font-weight: 500; + color: #374151; + margin-bottom: 0.25rem; +`; + +export const RequiredLabel = styled(Label)` + &::after { + content: ' *'; + color: #ef4444; + } +`; + +// Error Components +export const ErrorMessage = styled.span` + font-size: 0.75rem; + color: #ef4444; + margin-top: 0.25rem; +`; + +// Checkbox and Radio Components +export const CheckboxWrapper = styled.div` + display: flex; + align-items: center; + gap: 0.5rem; +`; + +export const Checkbox = styled.input.attrs({ type: 'checkbox' })` + width: 1rem; + height: 1rem; + accent-color: #10b981; + cursor: pointer; +`; + +export const RadioWrapper = styled.div` + display: flex; + align-items: center; + gap: 0.5rem; +`; + +export const Radio = styled.input.attrs({ type: 'radio' })` + width: 1rem; + height: 1rem; + accent-color: #10b981; + cursor: pointer; +`; + +// Field Sets +export const FieldSet = styled.fieldset` + border: 1px solid #d1d5db; + border-radius: 0.5rem; + padding: 1rem; + margin: 0; + + legend { + font-size: 0.875rem; + font-weight: 600; + color: #374151; + padding: 0 0.5rem; + } +`; + +// Helper Components +export const HelpText = styled.span` + font-size: 0.75rem; + color: #6b7280; + margin-top: 0.25rem; +`; + +// TODO: Consider moving form validation state to Zustand store +// TODO: Consider adding form validation hooks for consistent error handling \ No newline at end of file diff --git a/frontend/src/components/ui/FormField.jsx b/frontend/src/components/ui/FormField.jsx new file mode 100644 index 0000000000..610ff9082f --- /dev/null +++ b/frontend/src/components/ui/FormField.jsx @@ -0,0 +1,26 @@ +export const FormField = ({ + label, + id, + error, + required = false, + children, + className = '' +}) => { + return ( +
+ + {children} + {error && ( +

+ {error} +

+ )} +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/HealthBadge.jsx b/frontend/src/components/ui/HealthBadge.jsx new file mode 100644 index 0000000000..d7ea6128ab --- /dev/null +++ b/frontend/src/components/ui/HealthBadge.jsx @@ -0,0 +1,27 @@ +import styled from 'styled-components'; + +const StyledHealthBadge = styled.span` + padding: 0.25rem 0.75rem; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + + ${props => { + switch (props.health) { + case 'healthy': + return 'background: #d1fae5; color: #065f46;'; + case 'warning': + return 'background: #fef3c7; color: #92400e;'; + case 'critical': + return 'background: #fee2e2; color: #991b1b;'; + default: + return 'background: #f3f4f6; color: #374151;'; + } + }} +`; + +export const HealthBadge = ({ health, children }) => ( + + {children || health} + +); \ No newline at end of file diff --git a/frontend/src/components/ui/HeroSection.jsx b/frontend/src/components/ui/HeroSection.jsx new file mode 100644 index 0000000000..b4c3536e2d --- /dev/null +++ b/frontend/src/components/ui/HeroSection.jsx @@ -0,0 +1,39 @@ +import { Link } from 'react-router-dom'; + +export const HeroSection = () => { + return ( +
+
+
+
+

+ Discover, Monitor & Export + Real-Time Tree Insights +

+

+ Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights. +

+
+ + Start Your Free Trial + + + Learn More + +
+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/HomeIcon.jsx b/frontend/src/components/ui/HomeIcon.jsx new file mode 100644 index 0000000000..09617562eb --- /dev/null +++ b/frontend/src/components/ui/HomeIcon.jsx @@ -0,0 +1,27 @@ +import React from 'react'; + +export const HomeIcon = ({ className = '', ...props }) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/IconButton.jsx b/frontend/src/components/ui/IconButton.jsx new file mode 100644 index 0000000000..efca6b46c4 --- /dev/null +++ b/frontend/src/components/ui/IconButton.jsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Button } from './Button'; +import { cn } from '@/lib/utils'; + +export const IconButton = React.forwardRef( + ({ + className, + children, + 'aria-label': ariaLabel, + size = 'md', + variant = 'ghost', + ...props + }, ref) => { + return ( + + ); + } +); + +IconButton.displayName = 'IconButton'; \ No newline at end of file diff --git a/frontend/src/components/ui/ImageGallery.jsx b/frontend/src/components/ui/ImageGallery.jsx new file mode 100644 index 0000000000..91765da1ea --- /dev/null +++ b/frontend/src/components/ui/ImageGallery.jsx @@ -0,0 +1,52 @@ +import styled from 'styled-components'; + +const Gallery = styled.div` + display: grid; + grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + gap: 1rem; + margin-top: 1rem; +`; + +const ImageCard = styled.div` + background: #f9fafb; + border-radius: 0.5rem; + padding: 1rem; + text-align: center; + border: 1px solid #e5e7eb; +`; + +const ImagePlaceholder = styled.div` + width: 100%; + height: 100px; + background: #e5e7eb; + border-radius: 0.5rem; + display: flex; + align-items: center; + justify-content: center; + color: #6b7280; + font-size: 0.875rem; + margin-bottom: 0.5rem; +`; + +const ImageIcon = () => ( + + + +); + +const ImageCardItem = ({ caption }) => ( + + + + +
{caption}
+
+); + +export const ImageGallery = () => ( + + + + + +); \ No newline at end of file diff --git a/frontend/src/components/ui/InfoCard.jsx b/frontend/src/components/ui/InfoCard.jsx new file mode 100644 index 0000000000..cc209b4859 --- /dev/null +++ b/frontend/src/components/ui/InfoCard.jsx @@ -0,0 +1,52 @@ +import styled from 'styled-components'; + +const CardContainer = styled.div` + background: #f9fafb; + border-radius: 0.75rem; + padding: 1.5rem; + border: 1px solid #e5e7eb; +`; + +const CardTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`; + +const InfoItem = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.5rem 0; + border-bottom: 1px solid #e5e7eb; + + &:last-child { + border-bottom: none; + } +`; + +const InfoLabel = styled.span` + color: #6b7280; + font-size: 0.875rem; +`; + +const InfoValue = styled.span` + font-weight: 500; + color: #111827; + font-size: 0.875rem; +`; + +export const InfoCard = ({ title, children }) => ( + + {title} + {children} + +); + +export const InfoCardItem = ({ label, children }) => ( + + {label}: + {children} + +); \ No newline at end of file diff --git a/frontend/src/components/ui/LoadingButton.jsx b/frontend/src/components/ui/LoadingButton.jsx new file mode 100644 index 0000000000..b135433205 --- /dev/null +++ b/frontend/src/components/ui/LoadingButton.jsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { Button } from './Button'; + +export const LoadingButton = React.forwardRef( + ({ + loading, + loadingText = 'Loading...', + children, + ...props + }, ref) => { + return ( + + ); + } +); + +LoadingButton.displayName = 'LoadingButton'; \ No newline at end of file diff --git a/frontend/src/components/ui/LoadingSpinner.jsx b/frontend/src/components/ui/LoadingSpinner.jsx index 81ff1d0fd7..e8ea30a187 100644 --- a/frontend/src/components/ui/LoadingSpinner.jsx +++ b/frontend/src/components/ui/LoadingSpinner.jsx @@ -1,10 +1,6 @@ import React from 'react'; -import styled, { keyframes } from 'styled-components'; - -const spin = keyframes` - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -`; +import styled from 'styled-components'; +import { Spinner } from './Spinner'; const LoadingContainer = styled.div` display: flex; @@ -26,13 +22,7 @@ const LoadingContainer = styled.div` `} `; -const Spinner = styled.div` - width: ${({ size }) => size || '40px'}; - height: ${({ size }) => size || '40px'}; - border: 3px solid #f3f3f3; - border-top: 3px solid #007bff; - border-radius: 50%; - animation: ${spin} 1s linear infinite; +const SpinnerWrapper = styled.div` margin-bottom: 1rem; `; @@ -47,7 +37,8 @@ const LoadingSpinner = ({ text = 'Loading...', size = '40px', fullscreen = false, - className = '' + className = '', + spinnerColor = '#007bff' }) => { return ( - + + + {text} ); diff --git a/frontend/src/components/ui/Logo.jsx b/frontend/src/components/ui/Logo.jsx new file mode 100644 index 0000000000..09d20f4460 --- /dev/null +++ b/frontend/src/components/ui/Logo.jsx @@ -0,0 +1,13 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; + +export const Logo = ({ className = '' }) => { + return ( + + Nanwa + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/MapPageHeader.jsx b/frontend/src/components/ui/MapPageHeader.jsx new file mode 100644 index 0000000000..ec11a9375d --- /dev/null +++ b/frontend/src/components/ui/MapPageHeader.jsx @@ -0,0 +1,46 @@ +import { useAuth } from '../../contexts/AuthContext'; +import styled from 'styled-components'; + +const Header = styled.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`; + +export const MapPageHeader = () => { + const { user, logout, isAdmin } = useAuth(); + + const handleLogout = async () => { + await logout(); + }; + + return ( +
+
+
+
+

Nanwa Map View

+
+
+
+ Welcome, {user?.name} + {isAdmin() && ( + + Admin + + )} +
+ +
+
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/MapPageHeaderSection.jsx b/frontend/src/components/ui/MapPageHeaderSection.jsx new file mode 100644 index 0000000000..05f317f28f --- /dev/null +++ b/frontend/src/components/ui/MapPageHeaderSection.jsx @@ -0,0 +1,26 @@ +import { ExportButtonComponent } from './ExportButton'; + +export const MapPageHeaderSection = ({ filters, onExportStart, onExportComplete, onExportError, mockTreeData }) => { + return ( +
+
+
+

Forest Map

+

+ Explore your forests and individual trees with interactive mapping. +

+
+
+ +
+
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/MapSidebar.jsx b/frontend/src/components/ui/MapSidebar.jsx new file mode 100644 index 0000000000..4f378471d7 --- /dev/null +++ b/frontend/src/components/ui/MapSidebar.jsx @@ -0,0 +1,67 @@ +import { useAuth } from '../../contexts/AuthContext'; +import styled from 'styled-components'; + +const Sidebar = styled.aside` + background: white; + border-right: 1px solid #e5e7eb; + width: 250px; + position: fixed; + top: 0; + left: 0; + height: 100vh; + overflow-y: auto; + z-index: 10; +`; + +export const MapSidebar = () => { + const { isAdmin } = useAuth(); + + return ( + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/MenuIcon.jsx b/frontend/src/components/ui/MenuIcon.jsx new file mode 100644 index 0000000000..d33c6d67ea --- /dev/null +++ b/frontend/src/components/ui/MenuIcon.jsx @@ -0,0 +1,21 @@ +import React from 'react'; + +export const MenuIcon = ({ className = '', ...props }) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/MobileMenuDropdown.jsx b/frontend/src/components/ui/MobileMenuDropdown.jsx new file mode 100644 index 0000000000..f1c8eb9362 --- /dev/null +++ b/frontend/src/components/ui/MobileMenuDropdown.jsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { NavMenuItems } from './NavMenuItems'; + +export const MobileMenuDropdown = ({ isOpen }) => { + if (!isOpen) return null; + + return ( +
+ +
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/Modal.jsx b/frontend/src/components/ui/Modal.jsx new file mode 100644 index 0000000000..48ba9634d2 --- /dev/null +++ b/frontend/src/components/ui/Modal.jsx @@ -0,0 +1,99 @@ +import styled from 'styled-components'; + +const ModalOverlay = styled.div` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + padding: 1rem; +`; + +const ModalContent = styled.div` + background: white; + border-radius: 0.75rem; + max-width: 800px; + width: 100%; + max-height: 90vh; + overflow-y: auto; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + position: relative; +`; + +const ModalHeader = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 1.5rem; + border-bottom: 1px solid #e5e7eb; + background: #f9fafb; + border-radius: 0.75rem 0.75rem 0 0; +`; + +const ModalTitle = styled.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`; + +const CloseButton = styled.button` + padding: 0.5rem; + background: transparent; + border: none; + border-radius: 0.375rem; + cursor: pointer; + color: #6b7280; + transition: all 0.2s; + + &:hover { + background: #f3f4f6; + color: #111827; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +const ModalBody = styled.div` + padding: 1.5rem; +`; + +const CloseIcon = () => ( + + + +); + +export const Modal = ({ isOpen, onClose, title, children, containerRef }) => { + const handleOverlayClick = (e) => { + if (e.target === e.currentTarget) { + onClose(); + } + }; + + if (!isOpen) return null; + + return ( + + + + {title} + + + + + + {children} + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/MoonIcon.jsx b/frontend/src/components/ui/MoonIcon.jsx new file mode 100644 index 0000000000..889cfebb25 --- /dev/null +++ b/frontend/src/components/ui/MoonIcon.jsx @@ -0,0 +1,21 @@ +import React from 'react'; + +export const MoonIcon = ({ className = '', ...props }) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/NavMenuItems.jsx b/frontend/src/components/ui/NavMenuItems.jsx new file mode 100644 index 0000000000..87c9fb8b9a --- /dev/null +++ b/frontend/src/components/ui/NavMenuItems.jsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; + +export const NavMenuItems = () => { + const linkBase = + 'text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 transition-colors px-4 py-2 text-base font-medium'; + + return ( + <> + + Features + + + About + + + Login + + + Get Started + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/Navbar.jsx b/frontend/src/components/ui/Navbar.jsx index 9e2e477450..303e2a94d9 100644 --- a/frontend/src/components/ui/Navbar.jsx +++ b/frontend/src/components/ui/Navbar.jsx @@ -1,7 +1,12 @@ import { useState, useRef, useEffect } from 'react'; -import { Link } from 'react-router-dom'; import { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation'; import { DarkModeToggle } from './DarkModeToggle'; +import { Logo } from './Logo'; +import { NavMenuItems } from './NavMenuItems'; +import { MobileMenuDropdown } from './MobileMenuDropdown'; +import { IconButton } from './IconButton'; +import { MenuIcon } from './MenuIcon'; +import { CloseIcon } from './CloseIcon'; export const Navbar = () => { const [open, setOpen] = useState(false); @@ -40,72 +45,45 @@ export const Navbar = () => { } }; - const linkBase = - 'text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 transition-colors px-4 py-2 text-base font-medium'; - - const menuItems = ( - <> - - Features - - - About - - - Login - - - Get Started - - - ); + // TODO: Consider moving menu open state to Zustand store for better state management across components return ( ); }; \ No newline at end of file diff --git a/frontend/src/components/ui/PageNumbers.jsx b/frontend/src/components/ui/PageNumbers.jsx new file mode 100644 index 0000000000..1b046ae65d --- /dev/null +++ b/frontend/src/components/ui/PageNumbers.jsx @@ -0,0 +1,43 @@ +import styled from 'styled-components'; + +const PageButton = styled.button` + padding: 0.5rem 0.75rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + cursor: pointer; + transition: all 0.2s; + + &:hover:not(:disabled) { + background: #f9fafb; + border-color: #9ca3af; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + &.active { + background: #10b981; + color: white; + border-color: #10b981; + } +`; + +export const PageNumbers = ({ pageNumbers, currentPage, onPageChange }) => { + return ( + <> + {pageNumbers.map(pageNumber => ( + onPageChange(pageNumber)} + className={currentPage === pageNumber ? 'active' : ''} + > + {pageNumber} + + ))} + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/Pagination.jsx b/frontend/src/components/ui/Pagination.jsx new file mode 100644 index 0000000000..6b2d598041 --- /dev/null +++ b/frontend/src/components/ui/Pagination.jsx @@ -0,0 +1,99 @@ +import styled from 'styled-components'; +import { usePagination } from '../../hooks/usePagination'; +import { PaginationInfo } from './PaginationInfo'; +import { PageNumbers } from './PageNumbers'; + +const PaginationContainer = styled.div` + padding: 1rem 1.5rem; + background: #f9fafb; + border-top: 1px solid #e5e7eb; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const PaginationControls = styled.div` + display: flex; + gap: 0.5rem; + align-items: center; +`; + +const PaginationButton = styled.button` + padding: 0.5rem 0.75rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + cursor: pointer; + transition: all 0.2s; + + &:hover:not(:disabled) { + background: #f9fafb; + border-color: #9ca3af; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +`; + +export const Pagination = ({ + currentPage, + totalPages, + startIndex, + pageSize, + totalItems, + onPageChange +}) => { + const { + pageNumbers, + canGoFirst, + canGoPrevious, + canGoNext, + canGoLast + } = usePagination({ currentPage, totalPages }); + + // TODO: Consider moving pagination state to Zustand store for better state management across components + + return ( + + + + onPageChange(1)} + disabled={!canGoFirst} + > + First + + onPageChange(currentPage - 1)} + disabled={!canGoPrevious} + > + Previous + + + onPageChange(currentPage + 1)} + disabled={!canGoNext} + > + Next + + onPageChange(totalPages)} + disabled={!canGoLast} + > + Last + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/PaginationInfo.jsx b/frontend/src/components/ui/PaginationInfo.jsx new file mode 100644 index 0000000000..01ee58e011 --- /dev/null +++ b/frontend/src/components/ui/PaginationInfo.jsx @@ -0,0 +1,16 @@ +import styled from 'styled-components'; + +const InfoContainer = styled.div` + font-size: 0.875rem; + color: #6b7280; +`; + +export const PaginationInfo = ({ startIndex, pageSize, totalItems }) => { + const endIndex = Math.min(startIndex + pageSize, totalItems); + + return ( + + Showing {startIndex + 1} to {endIndex} of {totalItems} entries + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/PasswordInput.jsx b/frontend/src/components/ui/PasswordInput.jsx new file mode 100644 index 0000000000..b109b6cacb --- /dev/null +++ b/frontend/src/components/ui/PasswordInput.jsx @@ -0,0 +1,67 @@ +import { useState } from 'react'; + +export const PasswordInput = ({ + id, + name, + value, + onChange, + onBlur, + className = '', + placeholder = '', + disabled = false, + error = '', + ...props +}) => { + const [showPassword, setShowPassword] = useState(false); + + const togglePasswordVisibility = () => { + setShowPassword(!showPassword); + }; + + return ( +
+ + +
+ ); +}; + +// Eye icon components +const EyeIcon = ({ className }) => ( + + + + +); + +const EyeOffIcon = ({ className }) => ( + + + +); \ No newline at end of file diff --git a/frontend/src/components/ui/RefreshIcon.jsx b/frontend/src/components/ui/RefreshIcon.jsx new file mode 100644 index 0000000000..695ec8f4cc --- /dev/null +++ b/frontend/src/components/ui/RefreshIcon.jsx @@ -0,0 +1,39 @@ +import React from 'react'; + +export const RefreshIcon = ({ className = '', ...props }) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/SearchIcon.jsx b/frontend/src/components/ui/SearchIcon.jsx new file mode 100644 index 0000000000..67e4e47520 --- /dev/null +++ b/frontend/src/components/ui/SearchIcon.jsx @@ -0,0 +1,29 @@ +import React from 'react'; + +export const SearchIcon = ({ className = '', ...props }) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/ServerIcon.jsx b/frontend/src/components/ui/ServerIcon.jsx new file mode 100644 index 0000000000..76087d3883 --- /dev/null +++ b/frontend/src/components/ui/ServerIcon.jsx @@ -0,0 +1,58 @@ +import React from 'react'; + +export const ServerIcon = ({ className = '', ...props }) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/Spinner.jsx b/frontend/src/components/ui/Spinner.jsx new file mode 100644 index 0000000000..35b96dbb24 --- /dev/null +++ b/frontend/src/components/ui/Spinner.jsx @@ -0,0 +1,36 @@ +import React from 'react'; +import styled, { keyframes } from 'styled-components'; + +const spin = keyframes` + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +`; + +const SpinnerElement = styled.div` + width: ${({ size }) => size || '40px'}; + height: ${({ size }) => size || '40px'}; + border: 3px solid #f3f3f3; + border-top: 3px solid #007bff; + border-radius: 50%; + animation: ${spin} 1s linear infinite; + + ${({ color }) => color && ` + border-top-color: ${color}; + `} +`; + +export const Spinner = ({ + size = '40px', + color = '#007bff', + className = '', + ...props +}) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/StatsGrid.jsx b/frontend/src/components/ui/StatsGrid.jsx new file mode 100644 index 0000000000..dc82ed8cc1 --- /dev/null +++ b/frontend/src/components/ui/StatsGrid.jsx @@ -0,0 +1,25 @@ +export const StatsGrid = () => { + const stats = [ + { value: "10K+", label: "Trees Monitored" }, + { value: "95%", label: "Survival Rate" }, + { value: "50+", label: "Forest Projects" }, + { value: "24/7", label: "Real-Time Data" } + ]; + + return ( +
+
+ {stats.map((stat, index) => ( +
+
+ {stat.value} +
+
+ {stat.label} +
+
+ ))} +
+
+ ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/SunIcon.jsx b/frontend/src/components/ui/SunIcon.jsx new file mode 100644 index 0000000000..9efc468ca9 --- /dev/null +++ b/frontend/src/components/ui/SunIcon.jsx @@ -0,0 +1,21 @@ +import React from 'react'; + +export const SunIcon = ({ className = '', ...props }) => { + return ( + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/Table.jsx b/frontend/src/components/ui/Table.jsx new file mode 100644 index 0000000000..43de0b02af --- /dev/null +++ b/frontend/src/components/ui/Table.jsx @@ -0,0 +1,133 @@ +import styled from 'styled-components'; + +// Base theme colors - supports both light and dark modes +const getThemeColors = () => { + const isDark = document.documentElement.classList.contains('dark'); + + return { + // Container colors + containerBg: isDark ? '#1f2937' : '#ffffff', + containerBorder: isDark ? '#374151' : '#e5e7eb', + containerShadow: isDark + ? '0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)' + : '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)', + + // Header colors + headerBg: isDark ? '#374151' : '#f9fafb', + headerBorder: isDark ? '#4b5563' : '#e5e7eb', + headerText: isDark ? '#f9fafb' : '#111827', + + // Cell colors + cellText: isDark ? '#e5e7eb' : '#111827', + cellBorder: isDark ? '#4b5563' : '#f3f4f6', + cellHover: isDark ? '#374151' : '#f9fafb', + cellHeaderText: isDark ? '#d1d5db' : '#374151', + cellHeaderHover: isDark ? '#4b5563' : '#f3f4f6', + + // Accent colors + mutedText: isDark ? '#9ca3af' : '#6b7280', + sortIcon: isDark ? '#6b7280' : '#9ca3af' + }; +}; + +// Container Components +export const TableContainer = styled.div` + background: ${() => getThemeColors().containerBg}; + border-radius: 0.75rem; + box-shadow: ${() => getThemeColors().containerShadow}; + border: 1px solid ${() => getThemeColors().containerBorder}; + overflow: hidden; + transition: background-color 0.2s ease, border-color 0.2s ease; +`; + +export const TableHeader = styled.div` + background: ${() => getThemeColors().headerBg}; + padding: 1.5rem; + border-bottom: 1px solid ${() => getThemeColors().headerBorder}; + display: flex; + justify-content: space-between; + align-items: center; + transition: background-color 0.2s ease, border-color 0.2s ease; +`; + +export const TableTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: ${() => getThemeColors().headerText}; + margin: 0; + transition: color 0.2s ease; +`; + +// Table Structure Components +export const Table = styled.table` + width: 100%; + border-collapse: collapse; +`; + +export const TableHead = styled.thead` + background: ${() => getThemeColors().headerBg}; + border-bottom: 1px solid ${() => getThemeColors().headerBorder}; + transition: background-color 0.2s ease, border-color 0.2s ease; +`; + +export const TableRow = styled.tr` + border-bottom: 1px solid ${() => getThemeColors().cellBorder}; + transition: background-color 0.2s ease, border-color 0.2s ease; + + &:hover { + background: ${() => getThemeColors().cellHover}; + } + + &:last-child { + border-bottom: none; + } +`; + +// Cell Components +export const TableHeaderCell = styled.th` + padding: 0.75rem 1rem; + text-align: left; + font-size: 0.875rem; + font-weight: 600; + color: ${() => getThemeColors().cellHeaderText}; + cursor: pointer; + user-select: none; + transition: background-color 0.2s ease, color 0.2s ease; + + &:hover { + background: ${() => getThemeColors().cellHeaderHover}; + } +`; + +export const TableCell = styled.td` + padding: 0.75rem 1rem; + font-size: 0.875rem; + color: ${() => getThemeColors().cellText}; + vertical-align: top; + transition: color 0.2s ease; +`; + +// Utility Components +export const EmptyState = styled.div` + text-align: center; + padding: 3rem; + color: ${() => getThemeColors().mutedText}; + transition: color 0.2s ease; +`; + +export const SortIcon = styled.span` + margin-left: 0.5rem; + font-size: 0.75rem; + color: ${() => getThemeColors().sortIcon}; + transition: color 0.2s ease; +`; + +// Reusable Wrapper Components +export const SortableHeaderCell = ({ field, sortField, sortDirection, onSort, children, getSortIcon }) => ( + onSort(field)}> + {children} {getSortIcon?.(field, sortField, sortDirection)} + +); + +// TODO: Consider moving table state to Zustand store for better state management +// Common pattern: sortField, sortDirection, and onSort are passed to multiple components \ No newline at end of file diff --git a/frontend/src/components/ui/Toast.jsx b/frontend/src/components/ui/Toast.jsx index e8b5693e49..8409ba6ade 100644 --- a/frontend/src/components/ui/Toast.jsx +++ b/frontend/src/components/ui/Toast.jsx @@ -1,237 +1,40 @@ -import React, { useEffect, useState } from 'react'; -import styled, { keyframes, css } from 'styled-components'; +import React, { useState } from 'react'; import { useToast } from '../../contexts/ToastContext'; +import { ToastIcon } from './ToastIcon'; +import { useToastTimer } from '../../hooks/useToastTimer'; +import { getToastTitle } from '../../constants/toastTheme'; +import { + ToastContainer, + ToastWrapper, + ToastCard, + ToastContent, + CloseButton, + ProgressBar +} from './Toast.styles'; -const slideIn = keyframes` - from { - transform: translateX(100%); - opacity: 0; - } - to { - transform: translateX(0); - opacity: 1; - } -`; - -const slideOut = keyframes` - from { - transform: translateX(0); - opacity: 1; - } - to { - transform: translateX(100%); - opacity: 0; - } -`; - -const ToastContainer = styled.div` - position: fixed; - top: 1rem; - right: 1rem; - z-index: 9999; - display: flex; - flex-direction: column; - gap: 0.5rem; - max-width: 420px; - - @media (max-width: 768px) { - left: 1rem; - right: 1rem; - max-width: none; - } -`; - -const ToastWrapper = styled.div` - ${({ isExiting }) => css` - animation: ${isExiting ? slideOut : slideIn} 0.3s ease-out; - `} -`; - -const ToastCard = styled.div` - background: white; - border-radius: 8px; - padding: 1rem; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - border-left: 4px solid ${({ type }) => { - switch (type) { - case 'success': return '#28a745'; - case 'error': return '#dc3545'; - case 'warning': return '#ffc107'; - case 'info': return '#17a2b8'; - default: return '#17a2b8'; - } - }}; - display: flex; - align-items: flex-start; - gap: 0.75rem; - position: relative; - - &:focus-within { - outline: 2px solid #007bff; - outline-offset: 2px; - } -`; - -const ToastIcon = styled.div` - width: 20px; - height: 20px; - flex-shrink: 0; - margin-top: 0.125rem; - - svg { - width: 100%; - height: 100%; - fill: ${({ type }) => { - switch (type) { - case 'success': return '#28a745'; - case 'error': return '#dc3545'; - case 'warning': return '#ffc107'; - case 'info': return '#17a2b8'; - default: return '#17a2b8'; - } - }}; - } -`; - -const ToastContent = styled.div` - flex: 1; - - h4 { - margin: 0 0 0.25rem 0; - font-size: 0.9rem; - font-weight: 600; - color: #333; - } - - p { - margin: 0; - font-size: 0.875rem; - line-height: 1.4; - color: #666; - } -`; - -const CloseButton = styled.button` - background: none; - border: none; - cursor: pointer; - padding: 0.25rem; - color: #999; - flex-shrink: 0; - border-radius: 4px; - - &:hover { - color: #666; - background-color: rgba(0, 0, 0, 0.05); - } - - &:focus { - outline: 2px solid #007bff; - outline-offset: 2px; - } - - svg { - width: 16px; - height: 16px; - fill: currentColor; - } -`; - -const ProgressBar = styled.div` - position: absolute; - bottom: 0; - left: 0; - height: 3px; - background-color: ${({ type }) => { - switch (type) { - case 'success': return '#28a745'; - case 'error': return '#dc3545'; - case 'warning': return '#ffc107'; - case 'info': return '#17a2b8'; - default: return '#17a2b8'; - } - }}; - border-radius: 0 0 8px 8px; - width: ${({ progress }) => progress}%; - transition: width 0.1s linear; -`; - -const getToastIcon = (type) => { - switch (type) { - case 'success': - return ( - - - - ); - case 'error': - return ( - - - - ); - case 'warning': - return ( - - - - ); - case 'info': - default: - return ( - - - - ); - } -}; const Toast = ({ toast, onRemove }) => { const [isExiting, setIsExiting] = useState(false); - const [progress, setProgress] = useState(100); - - useEffect(() => { - if (toast.duration > 0) { - const interval = setInterval(() => { - setProgress((prev) => { - const newProgress = prev - (100 / (toast.duration / 100)); - return newProgress <= 0 ? 0 : newProgress; - }); - }, 100); - - return () => clearInterval(interval); - } - }, [toast.duration]); + const progress = useToastTimer(toast.duration); const handleClose = () => { setIsExiting(true); setTimeout(() => onRemove(toast.id), 300); }; - const getTitle = (type) => { - switch (type) { - case 'success': return 'Success'; - case 'error': return 'Error'; - case 'warning': return 'Warning'; - case 'info': return 'Info'; - default: return 'Notification'; - } - }; return ( - + - - {getToastIcon(toast.type)} - + -

{toast.title || getTitle(toast.type)}

+

{toast.title || getToastTitle(toast.type)}

{toast.message}

@@ -246,7 +49,7 @@ const Toast = ({ toast, onRemove }) => { {toast.duration > 0 && ( - + )}
diff --git a/frontend/src/components/ui/Toast.styles.js b/frontend/src/components/ui/Toast.styles.js new file mode 100644 index 0000000000..d6c519b71e --- /dev/null +++ b/frontend/src/components/ui/Toast.styles.js @@ -0,0 +1,119 @@ +import styled, { keyframes, css } from 'styled-components'; +import { getToastColor } from '../../constants/toastTheme'; + +export const slideIn = keyframes` + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0); + opacity: 1; + } +`; + +export const slideOut = keyframes` + from { + transform: translateX(0); + opacity: 1; + } + to { + transform: translateX(100%); + opacity: 0; + } +`; + +export const ToastContainer = styled.div` + position: fixed; + top: 1rem; + right: 1rem; + z-index: 9999; + display: flex; + flex-direction: column; + gap: 0.5rem; + max-width: 420px; + + @media (max-width: 768px) { + left: 1rem; + right: 1rem; + max-width: none; + } +`; + +export const ToastWrapper = styled.div` + ${({ $isExiting }) => css` + animation: ${$isExiting ? slideOut : slideIn} 0.3s ease-out; + `} +`; + +export const ToastCard = styled.div` + background: white; + border-radius: 8px; + padding: 1rem; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + border-left: 4px solid ${({ $type }) => getToastColor($type)}; + display: flex; + align-items: flex-start; + gap: 0.75rem; + position: relative; + + &:focus-within { + outline: 2px solid #007bff; + outline-offset: 2px; + } +`; + +export const ToastContent = styled.div` + flex: 1; + + h4 { + margin: 0 0 0.25rem 0; + font-size: 0.9rem; + font-weight: 600; + color: #333; + } + + p { + margin: 0; + font-size: 0.875rem; + line-height: 1.4; + color: #666; + } +`; + +export const CloseButton = styled.button` + background: none; + border: none; + cursor: pointer; + padding: 0.25rem; + color: #999; + flex-shrink: 0; + border-radius: 4px; + + &:hover { + color: #666; + background-color: rgba(0, 0, 0, 0.05); + } + + &:focus { + outline: 2px solid #007bff; + outline-offset: 2px; + } + + svg { + width: 16px; + height: 16px; + fill: currentColor; + } +`; + +export const ProgressBar = styled.div` + position: absolute; + bottom: 0; + left: 0; + height: 3px; + background-color: ${({ $type }) => getToastColor($type)}; + border-radius: 0 0 8px 8px; + width: ${({ $progress }) => $progress}%; + transition: width 0.1s linear; +`; \ No newline at end of file diff --git a/frontend/src/components/ui/ToastIcon.jsx b/frontend/src/components/ui/ToastIcon.jsx new file mode 100644 index 0000000000..395fa913b2 --- /dev/null +++ b/frontend/src/components/ui/ToastIcon.jsx @@ -0,0 +1,62 @@ +import React from 'react'; +import styled from 'styled-components'; +import { getToastColor } from '../../constants/toastTheme'; + +const IconWrapper = styled.div` + width: 20px; + height: 20px; + flex-shrink: 0; + margin-top: 0.125rem; + + svg { + width: 100%; + height: 100%; + fill: ${({ $type }) => getToastColor($type)}; + } +`; + +const SuccessIcon = () => ( + + + +); + +const ErrorIcon = () => ( + + + +); + +const WarningIcon = () => ( + + + +); + +const InfoIcon = () => ( + + + +); + +const getIconComponent = (type) => { + switch (type) { + case 'success': + return ; + case 'error': + return ; + case 'warning': + return ; + case 'info': + default: + return ; + } +}; + +export const ToastIcon = ({ type }) => { + return ( + + {getIconComponent(type)} + + ); +}; \ No newline at end of file diff --git a/frontend/src/components/ui/TreeActionButtons.jsx b/frontend/src/components/ui/TreeActionButtons.jsx new file mode 100644 index 0000000000..400eb27044 --- /dev/null +++ b/frontend/src/components/ui/TreeActionButtons.jsx @@ -0,0 +1,70 @@ +import { Link } from 'react-router-dom'; +import styled from 'styled-components'; + +const ShareButton = styled.button` + padding: 0.75rem 1.5rem; + background: #10b981; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #059669; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`; + +const ViewPageButton = styled(Link)` + padding: 0.75rem 1.5rem; + background: #3b82f6; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + text-decoration: none; + display: inline-flex; + align-items: center; + gap: 0.5rem; + transition: all 0.2s; + + &:hover { + background: #2563eb; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); + } +`; + +const ExternalLinkIcon = () => ( + + + +); + +const ShareIcon = () => ( + + + +); + +export const TreeActionButtons = ({ tree, onShare }) => ( +
+ + + View Full Page + + + + Share Tree + +
+); \ No newline at end of file diff --git a/frontend/src/components/ui/TreeBasicInfo.jsx b/frontend/src/components/ui/TreeBasicInfo.jsx new file mode 100644 index 0000000000..237f06994c --- /dev/null +++ b/frontend/src/components/ui/TreeBasicInfo.jsx @@ -0,0 +1,22 @@ +import { InfoCard, InfoCardItem } from './InfoCard'; +import { HealthBadge } from './HealthBadge'; + +export const TreeBasicInfo = ({ tree }) => ( + + + {tree.name} + + + {tree.species} + + + {tree.height}m + + + {tree.health} + + + March 15, 2023 + + +); \ No newline at end of file diff --git a/frontend/src/components/ui/TreeDetailHeader.jsx b/frontend/src/components/ui/TreeDetailHeader.jsx new file mode 100644 index 0000000000..567dfd1a1c --- /dev/null +++ b/frontend/src/components/ui/TreeDetailHeader.jsx @@ -0,0 +1,120 @@ +import { Link } from 'react-router-dom'; +import styled from 'styled-components'; +import { BackIcon } from './BackIcon'; + +const Header = styled.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`; + +const HeaderContent = styled.div` + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const Navigation = styled.nav` + display: flex; + align-items: center; + gap: 1rem; +`; + +const NavButton = styled.button` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #f3f4f6; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + color: #374151; + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #e5e7eb; + border-color: #9ca3af; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +`; + +const BackLink = styled(Link)` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #10b981; + color: white; + text-decoration: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + transition: all 0.2s; + + &:hover { + background: #059669; + } +`; + +const ArrowLeftIcon = () => ( + + + +); + +const ArrowRightIcon = () => ( + + + +); + +const ShareIcon = () => ( + + + +); + +export const TreeDetailHeader = ({ + onPrevious, + onNext, + onShare, + hasPrevious, + hasNext +}) => ( +
+ + + + Back to Map + + + + + + Previous + + + + Next + + + + + + Share + + + +
+); \ No newline at end of file diff --git a/frontend/src/components/ui/TreeDetailInfo.jsx b/frontend/src/components/ui/TreeDetailInfo.jsx new file mode 100644 index 0000000000..3eecdefce1 --- /dev/null +++ b/frontend/src/components/ui/TreeDetailInfo.jsx @@ -0,0 +1,70 @@ +import styled from 'styled-components'; +import { InfoCard } from './InfoCard'; +import { HealthBadge } from './HealthBadge'; + +const InfoGrid = styled.div` + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + margin-bottom: 1.5rem; +`; + +const InfoItem = styled.div` + padding: 1rem; + background: #f9fafb; + border-radius: 0.5rem; + border: 1px solid #e5e7eb; +`; + +const InfoLabel = styled.div` + font-size: 0.875rem; + color: #6b7280; + margin-bottom: 0.5rem; +`; + +const InfoValue = styled.div` + font-size: 1.125rem; + font-weight: 600; + color: #111827; +`; + +const CardTitle = styled.h2` + font-size: 1.5rem; + font-weight: 600; + color: #111827; + margin: 0 0 1.5rem 0; +`; + +const Card = styled.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`; + +export const TreeDetailInfo = ({ tree }) => ( + + Tree Information + + + Current Height + {tree.height}m + + + Health Status + + {tree.health} + + + + Species + {tree.species} + + + Planted Date + Mar 15, 2023 + + + +); \ No newline at end of file diff --git a/frontend/src/components/ui/TreeDetailLayout.jsx b/frontend/src/components/ui/TreeDetailLayout.jsx new file mode 100644 index 0000000000..8cbf0812c9 --- /dev/null +++ b/frontend/src/components/ui/TreeDetailLayout.jsx @@ -0,0 +1,50 @@ +import styled from 'styled-components'; + +export const PageContainer = styled.div` + min-height: 100vh; + background-color: #f9fafb; +`; + +export const MainContent = styled.main` + max-width: 1200px; + margin: 0 auto; + padding: 2rem 1rem; +`; + +export const TreeHeader = styled.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + margin-bottom: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`; + +export const TreeTitle = styled.h1` + font-size: 2.5rem; + font-weight: 700; + color: #111827; + margin: 0 0 1rem 0; +`; + +export const TreeSubtitle = styled.p` + color: #6b7280; + font-size: 1.125rem; + margin: 0; +`; + +export const ContentGrid = styled.div` + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + + @media (min-width: 1024px) { + grid-template-columns: 2fr 1fr; + } +`; + +export const MainSection = styled.div` + display: flex; + flex-direction: column; + gap: 2rem; +`; \ No newline at end of file diff --git a/frontend/src/components/ui/TreeDetailMeasurements.jsx b/frontend/src/components/ui/TreeDetailMeasurements.jsx new file mode 100644 index 0000000000..d2549b5553 --- /dev/null +++ b/frontend/src/components/ui/TreeDetailMeasurements.jsx @@ -0,0 +1,79 @@ +import styled from 'styled-components'; +import { HealthBadge } from './HealthBadge'; +import { formatDate } from '@utils/dateUtils'; + +const InfoCard = styled.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`; + +const CardTitle = styled.h2` + font-size: 1.5rem; + font-weight: 600; + color: #111827; + margin: 0 0 1.5rem 0; +`; + +const MeasurementTable = styled.table` + width: 100%; + border-collapse: collapse; + margin-top: 1rem; +`; + +const TableHeader = styled.thead` + background: #f9fafb; +`; + +const TableRow = styled.tr` + border-bottom: 1px solid #e5e7eb; + + &:last-child { + border-bottom: none; + } +`; + +const TableCell = styled.td` + padding: 0.75rem; + text-align: left; + font-size: 0.875rem; + color: #111827; +`; + +const TableHeaderCell = styled.th` + padding: 0.75rem; + text-align: left; + font-size: 0.875rem; + font-weight: 600; + color: #374151; +`; + +export const TreeDetailMeasurements = ({ measurements }) => ( + + Measurement History + + + + Date + Height (m) + Diameter (cm) + Health + + + + {measurements.slice(0, 10).map((measurement, index) => ( + + {formatDate(measurement.date)} + {measurement.height} + {measurement.diameter} + + {measurement.health} + + + ))} + + + +); \ No newline at end of file diff --git a/frontend/src/components/ui/TreeDetailModal.jsx b/frontend/src/components/ui/TreeDetailModal.jsx index c3e8e8b36d..e9a174e35e 100644 --- a/frontend/src/components/ui/TreeDetailModal.jsx +++ b/frontend/src/components/ui/TreeDetailModal.jsx @@ -1,73 +1,13 @@ -import { useState, useEffect } from 'react'; -import { Link } from 'react-router-dom'; import styled from 'styled-components'; import { useKeyboardNavigation } from '../../hooks/useKeyboardNavigation'; - -const ModalOverlay = styled.div` - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.5); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - padding: 1rem; -`; - -const ModalContent = styled.div` - background: white; - border-radius: 0.75rem; - max-width: 800px; - width: 100%; - max-height: 90vh; - overflow-y: auto; - box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); - position: relative; -`; - -const ModalHeader = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - padding: 1.5rem; - border-bottom: 1px solid #e5e7eb; - background: #f9fafb; - border-radius: 0.75rem 0.75rem 0 0; -`; - -const ModalTitle = styled.h2` - font-size: 1.5rem; - font-weight: 700; - color: #111827; - margin: 0; -`; - -const CloseButton = styled.button` - padding: 0.5rem; - background: transparent; - border: none; - border-radius: 0.375rem; - cursor: pointer; - color: #6b7280; - transition: all 0.2s; - - &:hover { - background: #f3f4f6; - color: #111827; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`; - -const ModalBody = styled.div` - padding: 1.5rem; -`; +import { useTreeMeasurements } from '../../hooks/useTreeMeasurements'; +import { useTreeShare } from '../../hooks/useTreeShare'; +import { Modal } from './Modal'; +import { TreeBasicInfo } from './TreeBasicInfo'; +import { TreeLocationInfo } from './TreeLocationInfo'; +import { TreeMeasurementHistory } from './TreeMeasurementHistory'; +import { ImageGallery } from './ImageGallery'; +import { TreeActionButtons } from './TreeActionButtons'; const InfoGrid = styled.div` display: grid; @@ -80,62 +20,6 @@ const InfoGrid = styled.div` } `; -const InfoCard = styled.div` - background: #f9fafb; - border-radius: 0.75rem; - padding: 1.5rem; - border: 1px solid #e5e7eb; -`; - -const InfoTitle = styled.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0 0 1rem 0; -`; - -const InfoItem = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - padding: 0.5rem 0; - border-bottom: 1px solid #e5e7eb; - - &:last-child { - border-bottom: none; - } -`; - -const InfoLabel = styled.span` - color: #6b7280; - font-size: 0.875rem; -`; - -const InfoValue = styled.span` - font-weight: 500; - color: #111827; - font-size: 0.875rem; -`; - -const HealthBadge = styled.span` - padding: 0.25rem 0.75rem; - border-radius: 9999px; - font-size: 0.75rem; - font-weight: 500; - ${props => { - switch (props.health) { - case 'healthy': - return 'background: #d1fae5; color: #065f46;'; - case 'warning': - return 'background: #fef3c7; color: #92400e;'; - case 'critical': - return 'background: #fee2e2; color: #991b1b;'; - default: - return 'background: #f3f4f6; color: #374151;'; - } - }} -`; - const Section = styled.div` margin-bottom: 2rem; `; @@ -147,308 +31,39 @@ const SectionTitle = styled.h3` margin: 0 0 1rem 0; `; -const MeasurementTable = styled.table` - width: 100%; - border-collapse: collapse; - background: white; - border-radius: 0.5rem; - overflow: hidden; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); -`; - -const TableHeader = styled.thead` - background: #f3f4f6; -`; - -const TableRow = styled.tr` - border-bottom: 1px solid #e5e7eb; - - &:last-child { - border-bottom: none; - } -`; - -const TableCell = styled.td` - padding: 0.75rem; - text-align: left; - font-size: 0.875rem; - color: #111827; -`; - -const TableHeaderCell = styled.th` - padding: 0.75rem; - text-align: left; - font-size: 0.875rem; - font-weight: 600; - color: #374151; -`; - -const ImageGallery = styled.div` - display: grid; - grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); - gap: 1rem; - margin-top: 1rem; -`; - -const ImageCard = styled.div` - background: #f9fafb; - border-radius: 0.5rem; - padding: 1rem; - text-align: center; - border: 1px solid #e5e7eb; -`; - -const ImagePlaceholder = styled.div` - width: 100%; - height: 100px; - background: #e5e7eb; - border-radius: 0.5rem; - display: flex; - align-items: center; - justify-content: center; - color: #6b7280; - font-size: 0.875rem; - margin-bottom: 0.5rem; -`; - -const ShareButton = styled.button` - padding: 0.75rem 1.5rem; - background: #10b981; - color: white; - border: none; - border-radius: 0.5rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background: #059669; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`; - -const ViewPageButton = styled(Link)` - padding: 0.75rem 1.5rem; - background: #3b82f6; - color: white; - border: none; - border-radius: 0.5rem; - font-weight: 500; - text-decoration: none; - display: inline-flex; - align-items: center; - gap: 0.5rem; - transition: all 0.2s; - - &:hover { - background: #2563eb; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); - } -`; - -// Mock data for demonstration -const mockMeasurementHistory = [ - { date: '2024-01-15', height: 2.4, diameter: 8.2, health: 'healthy' }, - { date: '2024-02-15', height: 2.3, diameter: 8.1, health: 'healthy' }, - { date: '2024-03-15', height: 2.2, diameter: 8.0, health: 'healthy' }, - { date: '2024-04-15', height: 2.1, diameter: 7.9, health: 'warning' }, - { date: '2024-05-15', height: 2.0, diameter: 7.8, health: 'warning' }, - { date: '2024-06-15', height: 1.9, diameter: 7.7, health: 'warning' }, - { date: '2024-07-15', height: 1.8, diameter: 7.6, health: 'critical' }, - { date: '2024-08-15', height: 1.7, diameter: 7.5, health: 'critical' }, - { date: '2024-09-15', height: 1.6, diameter: 7.4, health: 'critical' }, - { date: '2024-10-15', height: 1.5, diameter: 7.3, health: 'critical' }, -]; - export const TreeDetailModal = ({ tree, isOpen, onClose }) => { - const [measurementHistory, setMeasurementHistory] = useState([]); - - const { containerRef, focusFirst } = useKeyboardNavigation({ + // TODO: Consider moving modal state to Zustand store for better state management + const { containerRef } = useKeyboardNavigation({ onEscape: onClose, trapFocus: true, autoFocus: true, }); - useEffect(() => { - if (tree && isOpen) { - // In a real application, this would fetch from an API - setMeasurementHistory(mockMeasurementHistory); - } - }, [tree, isOpen]); - - const handleOverlayClick = (e) => { - if (e.target === e.currentTarget) { - onClose(); - } - }; + const measurementHistory = useTreeMeasurements(tree, isOpen); + const handleShare = useTreeShare(tree); - const handleShare = () => { - if (navigator.share) { - navigator.share({ - title: `Tree Details - ${tree.name}`, - text: `Check out this tree: ${tree.name} (${tree.species})`, - url: window.location.href - }); - } else { - // Fallback: copy to clipboard - navigator.clipboard.writeText(window.location.href); - alert('Tree URL copied to clipboard!'); - } - }; - - if (!isOpen || !tree) return null; + if (!tree) return null; return ( - - - - {tree.name} - - - - - - - - - {/* Basic Information */} - - - Basic Information - - Tree ID: - {tree.name} - - - Species: - {tree.species} - - - Current Height: - {tree.height}m - - - Health Status: - {tree.health} - - - Planted Date: - March 15, 2023 - - - - - Location & Contract - - Latitude: - {tree.lat.toFixed(6)} - - - Longitude: - {tree.lng.toFixed(6)} - - - Forest: - Forest {tree.id <= 4 ? 'A' : 'B'} - - - Contract Status: - - - Active - - - - - Last Inspection: - Jan 15, 2024 - - - - - {/* Measurement History */} -
- Measurement History (Last 10 Entries) - - - - Date - Height (m) - Diameter (cm) - Health - - - - {measurementHistory.slice(0, 10).map((measurement, index) => ( - - {new Date(measurement.date).toLocaleDateString()} - {measurement.height} - {measurement.diameter} - - {measurement.health} - - - ))} - - -
- - {/* Tree Images */} -
- Tree Images - - - - - - - -
Latest Photo
-
- - - - - - -
Growth Progress
-
- - - - - - -
Planting Day
-
-
-
- - {/* Action Buttons */} -
- - - - - View Full Page - - - - - - Share Tree - -
-
-
-
+ + + + + + + + +
+ Tree Images + +
+ + +
); }; \ No newline at end of file diff --git a/frontend/src/components/ui/TreeDetailSidebar.jsx b/frontend/src/components/ui/TreeDetailSidebar.jsx new file mode 100644 index 0000000000..3b62c62d94 --- /dev/null +++ b/frontend/src/components/ui/TreeDetailSidebar.jsx @@ -0,0 +1,84 @@ +import styled from 'styled-components'; + +const SideSection = styled.div` + display: flex; + flex-direction: column; + gap: 2rem; +`; + +const InfoCard = styled.div` + background: white; + border-radius: 0.75rem; + padding: 2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #e5e7eb; +`; + +const CardTitle = styled.h2` + font-size: 1.5rem; + font-weight: 600; + color: #111827; + margin: 0 0 1.5rem 0; +`; + +const InfoGrid = styled.div` + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; + margin-bottom: 1.5rem; +`; + +const InfoItem = styled.div` + padding: 1rem; + background: #f9fafb; + border-radius: 0.5rem; + border: 1px solid #e5e7eb; +`; + +const InfoLabel = styled.div` + font-size: 0.875rem; + color: #6b7280; + margin-bottom: 0.5rem; +`; + +const InfoValue = styled.div` + font-size: 1.125rem; + font-weight: 600; + color: #111827; +`; + +export const TreeDetailSidebar = ({ tree }) => ( + + + Location + + + Latitude + {tree.lat.toFixed(6)} + + + Longitude + {tree.lng.toFixed(6)} + + + + + + Contract Details + + + Status + + + Active + + + + + Last Inspection + Jan 15, 2024 + + + + +); \ No newline at end of file diff --git a/frontend/src/components/ui/TreeLocationInfo.jsx b/frontend/src/components/ui/TreeLocationInfo.jsx new file mode 100644 index 0000000000..22cafe1b2a --- /dev/null +++ b/frontend/src/components/ui/TreeLocationInfo.jsx @@ -0,0 +1,23 @@ +import { InfoCard, InfoCardItem } from './InfoCard'; + +export const TreeLocationInfo = ({ tree }) => ( + + + {tree.lat.toFixed(6)} + + + {tree.lng.toFixed(6)} + + + Forest {tree.id <= 4 ? 'A' : 'B'} + + + + Active + + + + Jan 15, 2024 + + +); \ No newline at end of file diff --git a/frontend/src/components/ui/TreeMeasurementHistory.jsx b/frontend/src/components/ui/TreeMeasurementHistory.jsx new file mode 100644 index 0000000000..c4ef92c10c --- /dev/null +++ b/frontend/src/components/ui/TreeMeasurementHistory.jsx @@ -0,0 +1,54 @@ +import styled from 'styled-components'; +import { Table, TableRow, TableHeaderCell, TableCell } from './Table'; +import { HealthBadge } from './HealthBadge'; +import { formatDate } from '@utils/dateUtils'; + +const Section = styled.div` + margin-bottom: 2rem; +`; + +const SectionTitle = styled.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`; + +const MeasurementTable = styled(Table)` + background: white; + border-radius: 0.5rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +`; + +const TableHeader = styled.thead` + background: #f3f4f6; +`; + +export const TreeMeasurementHistory = ({ measurementHistory }) => ( +
+ Measurement History (Last 10 Entries) + + + + Date + Height (m) + Diameter (cm) + Health + + + + {measurementHistory.slice(0, 10).map((measurement, index) => ( + + {formatDate(measurement.date)} + {measurement.height} + {measurement.diameter} + + {measurement.health} + + + ))} + + +
+); \ No newline at end of file diff --git a/frontend/src/components/ui/index.js b/frontend/src/components/ui/index.js new file mode 100644 index 0000000000..b43e6ecb6d --- /dev/null +++ b/frontend/src/components/ui/index.js @@ -0,0 +1,98 @@ +export { Button } from './Button'; +export { IconButton } from './IconButton'; +export { LoadingButton } from './LoadingButton'; +export { ButtonGroup } from './ButtonGroup'; +export { ExportButtonComponent } from './ExportButton'; +export { ActionBadge } from './ActionBadge'; +export { Pagination } from './Pagination'; +export { PaginationInfo } from './PaginationInfo'; +export { PageNumbers } from './PageNumbers'; +export { Table } from './Table'; +export { + ChartContainer, + ChartHeader, + ChartTitle, + ChartTooltip, + CustomTooltipContainer, + ChartPercentageDisplay, + ChartLegend +} from './ChartComponents'; +export { + FilterSection, + FormGroup, + FormRow, + SearchInput, + TextInput, + FilterSelect, + Textarea, + Label, + RequiredLabel, + ErrorMessage, + CheckboxWrapper, + Checkbox, + RadioWrapper, + Radio, + FieldSet, + HelpText +} from './FormElements'; +export { default as LoadingSpinner } from './LoadingSpinner'; +export { Spinner } from './Spinner'; +export { DarkModeToggle } from './DarkModeToggle'; +export { SunIcon } from './SunIcon'; +export { MoonIcon } from './MoonIcon'; +export { MenuIcon } from './MenuIcon'; +export { CloseIcon } from './CloseIcon'; +export { BackIcon } from './BackIcon'; +export { HomeIcon } from './HomeIcon'; +export { RefreshIcon } from './RefreshIcon'; +export { SearchIcon } from './SearchIcon'; +export { ServerIcon } from './ServerIcon'; +export { default as Toast, ToastNotifications } from './Toast'; +export { ToastIcon } from './ToastIcon'; +export { TreeDetailModal } from './TreeDetailModal'; +export { default as ErrorBoundary } from './ErrorBoundary'; +export { ErrorCard, ErrorTitle, ErrorDetails } from './ErrorCard'; +export { + ErrorPageContainer, + ErrorPageCard, + ErrorPageIllustration, + ErrorPageCode, + ErrorPageTitle, + ErrorPageMessage +} from './ErrorPageContainer'; +export { ErrorPageLayout } from './ErrorPageLayout'; +export { NotFoundIllustration, ServerErrorIllustration } from './ErrorPageIllustrations'; +export { ErrorActions } from './ErrorActions'; +export { ColdStartLoader } from './ColdStartLoader'; +export { Navbar } from './Navbar'; +export { Logo } from './Logo'; +export { NavMenuItems } from './NavMenuItems'; +export { MobileMenuDropdown } from './MobileMenuDropdown'; +export { DashboardHeader } from './DashboardHeader'; +export { DashboardSidebar } from './DashboardSidebar'; +export { DashboardStatCard } from './DashboardStatCard'; +export { ForestOverviewSection } from './ForestOverviewSection'; +export { HeroSection } from './HeroSection'; +export { FeatureCard } from './FeatureCard'; +export { FeaturesSection } from './FeaturesSection'; +export { StatsGrid } from './StatsGrid'; +export { AboutSection } from './AboutSection'; +export { Footer } from './Footer'; +export { TreeDetailHeader } from './TreeDetailHeader'; +export { TreeDetailInfo } from './TreeDetailInfo'; +export { TreeDetailSidebar } from './TreeDetailSidebar'; +export { TreeDetailMeasurements } from './TreeDetailMeasurements'; +export { PageContainer, MainContent, TreeHeader, TreeTitle, TreeSubtitle, ContentGrid, MainSection } from './TreeDetailLayout'; +export { ImageGallery } from './ImageGallery'; +export { InfoCard } from './InfoCard'; +export { FormField } from './FormField'; +export { HealthBadge } from './HealthBadge'; +export { MapPageHeader } from './MapPageHeader'; +export { MapPageHeaderSection } from './MapPageHeaderSection'; +export { MapSidebar } from './MapSidebar'; +export { Modal } from './Modal'; +export { PasswordInput } from './PasswordInput'; +export { TreeActionButtons } from './TreeActionButtons'; +export { TreeBasicInfo } from './TreeBasicInfo'; +export { TreeLocationInfo } from './TreeLocationInfo'; +export { TreeMeasurementHistory } from './TreeMeasurementHistory'; \ No newline at end of file diff --git a/frontend/src/constants/auditLogConstants.js b/frontend/src/constants/auditLogConstants.js new file mode 100644 index 0000000000..2942f5b225 --- /dev/null +++ b/frontend/src/constants/auditLogConstants.js @@ -0,0 +1,18 @@ +export const AUDIT_ACTIONS = { + CREATE: 'CREATE', + UPDATE: 'UPDATE', + DELETE: 'DELETE', + LOGIN: 'LOGIN', + LOGOUT: 'LOGOUT' +}; + +export const AUDIT_ACTION_OPTIONS = [ + { value: '', label: 'All Actions' }, + { value: AUDIT_ACTIONS.CREATE, label: 'Create' }, + { value: AUDIT_ACTIONS.UPDATE, label: 'Update' }, + { value: AUDIT_ACTIONS.DELETE, label: 'Delete' }, + { value: AUDIT_ACTIONS.LOGIN, label: 'Login' }, + { value: AUDIT_ACTIONS.LOGOUT, label: 'Logout' } +]; + +export const AUDIT_LOG_PAGINATION_SIZE = 10; \ No newline at end of file diff --git a/frontend/src/constants/keepAliveConstants.js b/frontend/src/constants/keepAliveConstants.js new file mode 100644 index 0000000000..41c5ac93ff --- /dev/null +++ b/frontend/src/constants/keepAliveConstants.js @@ -0,0 +1,7 @@ +// Keep-alive service configuration +export const KEEP_ALIVE_CONFIG = { + intervalMs: 10 * 60 * 1000, // 10 minutes + endpoint: '/auth/profile', // Simple endpoint to keep server warm + enabledInProduction: true, + enabledInDevelopment: false, +}; \ No newline at end of file diff --git a/frontend/src/constants/mapConstants.js b/frontend/src/constants/mapConstants.js new file mode 100644 index 0000000000..bc1d28de4e --- /dev/null +++ b/frontend/src/constants/mapConstants.js @@ -0,0 +1,41 @@ +export const TREE_HEALTH_COLORS = { + healthy: '#10b981', + warning: '#f59e0b', + critical: '#ef4444' +}; + +export const TREE_HEALTH_STYLES = { + healthy: 'background: #d1fae5; color: #065f46;', + warning: 'background: #fef3c7; color: #92400e;', + critical: 'background: #fee2e2; color: #991b1b;' +}; + +export const CLUSTER_SIZES = { + small: { + dimension: '30px', + fontSize: '12px', + threshold: 0 + }, + medium: { + dimension: '40px', + fontSize: '14px', + threshold: 10 + }, + large: { + dimension: '50px', + fontSize: '16px', + threshold: 50 + } +}; + +export const TREE_ICON_CONFIG = { + size: 20, + emoji: '🌳', + className: 'custom-tree-marker' +}; + +export const CLUSTER_ICON_CONFIG = { + backgroundColor: '#10b981', + className: 'custom-cluster-icon', + iconSize: [30, 30] +}; \ No newline at end of file diff --git a/frontend/src/constants/toastTheme.js b/frontend/src/constants/toastTheme.js new file mode 100644 index 0000000000..1b10cbb93d --- /dev/null +++ b/frontend/src/constants/toastTheme.js @@ -0,0 +1,28 @@ +export const TOAST_TYPES = { + SUCCESS: 'success', + ERROR: 'error', + WARNING: 'warning', + INFO: 'info' +}; + +export const TOAST_COLORS = { + [TOAST_TYPES.SUCCESS]: '#28a745', + [TOAST_TYPES.ERROR]: '#dc3545', + [TOAST_TYPES.WARNING]: '#ffc107', + [TOAST_TYPES.INFO]: '#17a2b8' +}; + +export const TOAST_TITLES = { + [TOAST_TYPES.SUCCESS]: 'Success', + [TOAST_TYPES.ERROR]: 'Error', + [TOAST_TYPES.WARNING]: 'Warning', + [TOAST_TYPES.INFO]: 'Info' +}; + +export const getToastColor = (type) => { + return TOAST_COLORS[type] || TOAST_COLORS[TOAST_TYPES.INFO]; +}; + +export const getToastTitle = (type) => { + return TOAST_TITLES[type] || 'Notification'; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useAuditLogs.js b/frontend/src/hooks/useAuditLogs.js new file mode 100644 index 0000000000..8361acff7c --- /dev/null +++ b/frontend/src/hooks/useAuditLogs.js @@ -0,0 +1,179 @@ +import { useState, useEffect, useMemo } from 'react'; +import { AUDIT_LOG_PAGINATION_SIZE } from '@constants/auditLogConstants'; + +const mockAuditLogs = [ + { + id: 1, + timestamp: '2024-01-15T10:30:00Z', + user: 'admin@nanwa.com', + action: 'CREATE', + resource: 'Tree', + resourceId: 'tree_001', + details: 'Created new tree record for Forest A', + ipAddress: '192.168.1.100', + userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' + }, + { + id: 2, + timestamp: '2024-01-15T10:25:00Z', + user: 'user@nanwa.com', + action: 'UPDATE', + resource: 'Tree', + resourceId: 'tree_002', + details: 'Updated height measurement from 2.3m to 2.4m', + ipAddress: '192.168.1.101', + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' + }, + { + id: 3, + timestamp: '2024-01-15T10:20:00Z', + user: 'admin@nanwa.com', + action: 'DELETE', + resource: 'Forest', + resourceId: 'forest_003', + details: 'Deleted forest record due to data cleanup', + ipAddress: '192.168.1.100', + userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' + }, + { + id: 4, + timestamp: '2024-01-15T10:15:00Z', + user: 'user@nanwa.com', + action: 'LOGIN', + resource: 'Authentication', + resourceId: 'auth_session_001', + details: 'User logged in successfully', + ipAddress: '192.168.1.101', + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' + }, + { + id: 5, + timestamp: '2024-01-15T10:10:00Z', + user: 'admin@nanwa.com', + action: 'UPDATE', + resource: 'User', + resourceId: 'user_001', + details: 'Updated user permissions to admin level', + ipAddress: '192.168.1.100', + userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' + }, + { + id: 6, + timestamp: '2024-01-15T10:05:00Z', + user: 'system', + action: 'CREATE', + resource: 'Measurement', + resourceId: 'measurement_001', + details: 'Automated measurement recorded for tree batch', + ipAddress: '127.0.0.1', + userAgent: 'System/1.0' + }, + { + id: 7, + timestamp: '2024-01-15T10:00:00Z', + user: 'user@nanwa.com', + action: 'LOGOUT', + resource: 'Authentication', + resourceId: 'auth_session_002', + details: 'User logged out', + ipAddress: '192.168.1.101', + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' + } +]; + +export const useAuditLogs = () => { + const [auditLogs, setAuditLogs] = useState([]); + const [loading, setLoading] = useState(false); + + const fetchAuditLogs = async () => { + setLoading(true); + try { + // Simulate API call + await new Promise(resolve => setTimeout(resolve, 500)); + setAuditLogs(mockAuditLogs); + } catch (error) { + console.error('Failed to fetch audit logs:', error); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + fetchAuditLogs(); + }, []); + + return { auditLogs, loading, refetchAuditLogs: fetchAuditLogs }; +}; + +export const useAuditLogFilters = (auditLogs) => { + const [searchTerm, setSearchTerm] = useState(''); + const [actionFilter, setActionFilter] = useState(''); + const [sortField, setSortField] = useState('timestamp'); + const [sortDirection, setSortDirection] = useState('desc'); + + const filteredAndSortedLogs = useMemo(() => { + return auditLogs + .filter(log => { + const matchesSearch = searchTerm === '' || + log.user.toLowerCase().includes(searchTerm.toLowerCase()) || + log.details.toLowerCase().includes(searchTerm.toLowerCase()) || + log.resource.toLowerCase().includes(searchTerm.toLowerCase()); + + const matchesAction = actionFilter === '' || log.action === actionFilter; + + return matchesSearch && matchesAction; + }) + .sort((a, b) => { + const aValue = a[sortField]; + const bValue = b[sortField]; + + if (sortDirection === 'asc') { + return aValue > bValue ? 1 : -1; + } else { + return aValue < bValue ? 1 : -1; + } + }); + }, [auditLogs, searchTerm, actionFilter, sortField, sortDirection]); + + const handleSort = (field) => { + if (sortField === field) { + setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc'); + } else { + setSortField(field); + setSortDirection('desc'); + } + }; + + return { + searchTerm, + setSearchTerm, + actionFilter, + setActionFilter, + sortField, + sortDirection, + filteredAndSortedLogs, + handleSort + }; +}; + +export const usePagination = (data, pageSize = AUDIT_LOG_PAGINATION_SIZE) => { + const [currentPage, setCurrentPage] = useState(1); + + const totalPages = Math.ceil(data.length / pageSize); + const startIndex = (currentPage - 1) * pageSize; + const paginatedData = data.slice(startIndex, startIndex + pageSize); + + // Reset to first page when data changes + useEffect(() => { + setCurrentPage(1); + }, [data.length]); + + return { + currentPage, + setCurrentPage, + totalPages, + startIndex, + paginatedData, + pageSize + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useChartConfig.js b/frontend/src/hooks/useChartConfig.js new file mode 100644 index 0000000000..4fac6e72c0 --- /dev/null +++ b/frontend/src/hooks/useChartConfig.js @@ -0,0 +1,40 @@ +import { useMemo } from 'react'; + +export const useChartConfig = (chartType = 'line') => { + const config = useMemo(() => { + const baseConfig = { + margin: { top: 5, right: 30, left: 20, bottom: 5 }, + gridProps: { + strokeDasharray: "3 3", + stroke: "#f3f4f6" + }, + axisProps: { + stroke: "#6b7280", + fontSize: 12 + } + }; + + const typeSpecificConfig = { + line: { + strokeWidth: 3, + dot: { strokeWidth: 2, r: 4 }, + activeDot: { r: 6, strokeWidth: 2 } + }, + bar: { + radius: [4, 4, 0, 0] + }, + pie: { + innerRadius: 60, + outerRadius: 80, + paddingAngle: 5 + } + }; + + return { + ...baseConfig, + ...typeSpecificConfig[chartType] + }; + }, [chartType]); + + return config; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useDateRange.js b/frontend/src/hooks/useDateRange.js new file mode 100644 index 0000000000..4c9180f7de --- /dev/null +++ b/frontend/src/hooks/useDateRange.js @@ -0,0 +1,64 @@ +import { useState, useEffect, useRef } from 'react'; + +export const useDateRange = (onDateChange, initialStartDate, initialEndDate) => { + const [startDate, setStartDate] = useState( + initialStartDate || new Date(new Date().getFullYear(), 0, 1) + ); + const [endDate, setEndDate] = useState(initialEndDate || new Date()); + const onDateChangeRef = useRef(onDateChange); + const hasMounted = useRef(false); + + // Keep the ref up to date + useEffect(() => { + onDateChangeRef.current = onDateChange; + }, [onDateChange]); + + // Debounced update effect - prevent initial call + useEffect(() => { + // Don't call callback on initial mount + if (!hasMounted.current) { + hasMounted.current = true; + return; + } + + const timer = setTimeout(() => { + if (onDateChangeRef.current && startDate && endDate) { + onDateChangeRef.current({ startDate, endDate }); + } + }, 1000); // 1 second debounce + + return () => clearTimeout(timer); + }, [startDate, endDate]); + + const handleStartDateChange = (date) => { + setStartDate(date); + if (date && endDate && date > endDate) { + setEndDate(date); + } + }; + + const handleEndDateChange = (date) => { + setEndDate(date); + if (date && startDate && date < startDate) { + setStartDate(date); + } + }; + + const handleReset = () => { + const defaultStartDate = new Date(new Date().getFullYear(), 0, 1); + const defaultEndDate = new Date(); + setStartDate(defaultStartDate); + setEndDate(defaultEndDate); + if (onDateChangeRef.current) { + onDateChangeRef.current({ startDate: defaultStartDate, endDate: defaultEndDate }); + } + }; + + return { + startDate, + endDate, + handleStartDateChange, + handleEndDateChange, + handleReset, + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useErrorPageNavigation.js b/frontend/src/hooks/useErrorPageNavigation.js new file mode 100644 index 0000000000..90890b1b69 --- /dev/null +++ b/frontend/src/hooks/useErrorPageNavigation.js @@ -0,0 +1,23 @@ +import { useNavigate } from 'react-router-dom'; + +export const useErrorPageNavigation = () => { + const navigate = useNavigate(); + + const goBack = () => { + navigate(-1); + }; + + const goHome = () => { + navigate('/'); + }; + + const reload = () => { + window.location.reload(); + }; + + return { + goBack, + goHome, + reload + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useErrorReporting.js b/frontend/src/hooks/useErrorReporting.js new file mode 100644 index 0000000000..d3cfbd0f8a --- /dev/null +++ b/frontend/src/hooks/useErrorReporting.js @@ -0,0 +1,34 @@ +import { useCallback } from 'react'; +import { formatDateTimeForAPI } from '@utils/dateUtils'; + +export const useErrorReporting = () => { + const reportError = useCallback((error, errorInfo) => { + const errorData = { + error: error?.toString(), + stack: error?.stack, + componentStack: errorInfo?.componentStack, + userAgent: navigator.userAgent, + timestamp: formatDateTimeForAPI(new Date()), + url: window.location.href + }; + + // Copy error details to clipboard + navigator.clipboard.writeText(JSON.stringify(errorData, null, 2)) + .then(() => { + alert('Error details copied to clipboard. Please send this to support.'); + }) + .catch(() => { + alert('Failed to copy error details. Please try again.'); + }); + }, []); + + const logError = useCallback((error, errorInfo) => { + // Log error to console for debugging + console.error('Error caught by boundary:', error, errorInfo); + + // TODO: In production, you might want to send this to an error reporting service + // reportError(error, errorInfo); + }, []); + + return { reportError, logError }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useFilterParams.js b/frontend/src/hooks/useFilterParams.js new file mode 100644 index 0000000000..049e94f160 --- /dev/null +++ b/frontend/src/hooks/useFilterParams.js @@ -0,0 +1,79 @@ +import { useCallback } from 'react'; +import { useSearchParams } from 'react-router-dom'; +import { formatDateForInput } from '@utils/dateUtils'; + +/** + * Custom hook for handling filter parameters in URL + * Manages URL synchronization for GlobalFilters component + */ +export const useFilterParams = () => { + const [searchParams, setSearchParams] = useSearchParams(); + + // Parse filters from URL on initial load + const getFiltersFromURL = useCallback(() => { + const startDateParam = searchParams.get('startDate'); + const endDateParam = searchParams.get('endDate'); + const forestsParam = searchParams.get('forests'); + + const urlFilters = {}; + + // Parse date range from URL + if (startDateParam && endDateParam) { + try { + const startDate = new Date(startDateParam); + const endDate = new Date(endDateParam); + + // Validate dates + if (!isNaN(startDate.getTime()) && !isNaN(endDate.getTime()) && startDate <= endDate) { + urlFilters.dateRange = { startDate, endDate }; + } + } catch (error) { + console.warn('Invalid date parameters in URL:', error); + } + } + + // Parse selected forests from URL + if (forestsParam) { + try { + const forestIds = forestsParam.split(',').map(id => parseInt(id, 10)).filter(id => !isNaN(id)); + if (forestIds.length > 0) { + urlFilters.selectedForests = forestIds; + } + } catch (error) { + console.warn('Invalid forest parameters in URL:', error); + } + } + + return urlFilters; + }, [searchParams]); + + // Update URL parameters when filters change + const updateURLParams = useCallback((newFilters) => { + const params = new URLSearchParams(); + + // Add date range to URL + if (newFilters.dateRange?.startDate && newFilters.dateRange?.endDate) { + params.set('startDate', formatDateForInput(newFilters.dateRange.startDate)); + params.set('endDate', formatDateForInput(newFilters.dateRange.endDate)); + } + + // Add selected forests to URL + if (newFilters.selectedForests && newFilters.selectedForests.length > 0) { + params.set('forests', newFilters.selectedForests.join(',')); + } + + // Update URL without triggering navigation + setSearchParams(params, { replace: true }); + }, [setSearchParams]); + + // Clear all URL parameters + const clearURLParams = useCallback(() => { + setSearchParams({}, { replace: true }); + }, [setSearchParams]); + + return { + getFiltersFromURL, + updateURLParams, + clearURLParams + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useFormValidation.js b/frontend/src/hooks/useFormValidation.js new file mode 100644 index 0000000000..9930d9cde0 --- /dev/null +++ b/frontend/src/hooks/useFormValidation.js @@ -0,0 +1,60 @@ +import { useState, useCallback } from 'react'; + +/** + * Custom hook for form validation + * @param {Object} initialValues - Initial form values + * @param {Function} validate - Validation function that returns errors object + * @returns {Object} Form validation state and handlers + */ +export const useFormValidation = (initialValues, validate) => { + const [values, setValues] = useState(initialValues); + const [errors, setErrors] = useState({}); + const [touched, setTouched] = useState({}); + + const handleChange = useCallback((e) => { + const { name, value } = e.target; + setValues(prev => ({ + ...prev, + [name]: value + })); + + // Clear error when user starts typing + if (errors[name]) { + setErrors(prev => ({ + ...prev, + [name]: '' + })); + } + }, [errors]); + + const handleBlur = useCallback((e) => { + const { name } = e.target; + setTouched(prev => ({ + ...prev, + [name]: true + })); + }, []); + + const validateForm = useCallback(() => { + const newErrors = validate(values); + setErrors(newErrors); + return Object.keys(newErrors).length === 0; + }, [values, validate]); + + const resetForm = useCallback(() => { + setValues(initialValues); + setErrors({}); + setTouched({}); + }, [initialValues]); + + return { + values, + errors, + touched, + handleChange, + handleBlur, + validateForm, + resetForm, + setErrors + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useKeepAlive.js b/frontend/src/hooks/useKeepAlive.js index e1300beadd..947ac0a5dc 100644 --- a/frontend/src/hooks/useKeepAlive.js +++ b/frontend/src/hooks/useKeepAlive.js @@ -1,13 +1,7 @@ import { useEffect, useRef } from 'react'; import { useAuth } from '../contexts/AuthContext'; - -// Keep-alive configuration -const KEEP_ALIVE_CONFIG = { - intervalMs: 10 * 60 * 1000, // 10 minutes - endpoint: '/auth/profile', // Simple endpoint to keep server warm - enabledInProduction: true, - enabledInDevelopment: false, -}; +import { api } from '../lib/api'; +import { KEEP_ALIVE_CONFIG } from '../constants/keepAliveConstants'; export const useKeepAlive = () => { const { user } = useAuth(); @@ -24,20 +18,9 @@ export const useKeepAlive = () => { const performKeepAlive = async () => { try { - // Make a lightweight request to keep the server warm - const response = await fetch(`${import.meta.env.VITE_API_URL}${KEEP_ALIVE_CONFIG.endpoint}`, { - method: 'GET', - headers: { - 'Authorization': `Bearer ${localStorage.getItem('authToken')}`, - 'Content-Type': 'application/json', - }, - }); - - if (response.ok) { - console.log('Keep-alive ping successful'); - } else { - console.log('Keep-alive ping failed, but continuing...'); - } + // Make a lightweight request to keep the server warm using existing API client + await api.auth.getProfile(); + console.log('Keep-alive ping successful'); } catch (error) { // Silently fail - this is just a keep-alive, not critical console.log('Keep-alive ping error:', error.message); @@ -58,18 +41,11 @@ export const useKeepAlive = () => { // Manual keep-alive trigger (can be used by components) const triggerKeepAlive = async () => { - if (!user || !isEnabled) return; + if (!user || !isEnabled) return false; try { - const response = await fetch(`${import.meta.env.VITE_API_URL}${KEEP_ALIVE_CONFIG.endpoint}`, { - method: 'GET', - headers: { - 'Authorization': `Bearer ${localStorage.getItem('authToken')}`, - 'Content-Type': 'application/json', - }, - }); - - return response.ok; + await api.auth.getProfile(); + return true; } catch (error) { console.log('Manual keep-alive failed:', error.message); return false; diff --git a/frontend/src/hooks/useLogin.js b/frontend/src/hooks/useLogin.js new file mode 100644 index 0000000000..5ae994349b --- /dev/null +++ b/frontend/src/hooks/useLogin.js @@ -0,0 +1,59 @@ +import { useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { useAuth } from '../contexts/AuthContext'; +import { useColdStartDetection } from './useColdStartDetection'; + +export const useLogin = () => { + const [errors, setErrors] = useState({}); + const [isSubmitting, setIsSubmitting] = useState(false); + + const { login } = useAuth(); + const navigate = useNavigate(); + + const { + connectionState, + handleRetry, + startConnection, + connectionSuccess, + connectionFailed, + resetConnection + } = useColdStartDetection(); + + const handleLogin = async (formData) => { + setIsSubmitting(true); + setErrors({}); + startConnection(); + + try { + const result = await login(formData.email, formData.password, handleRetry); + + if (result.success) { + connectionSuccess(); + // Navigation will be handled by the auth context + } else { + connectionFailed(new Error(result.error)); + setErrors({ general: result.error }); + } + } catch (error) { + connectionFailed(error); + setErrors({ general: 'Connection failed. Please check your internet connection and try again.' }); + } finally { + setIsSubmitting(false); + } + }; + + const handleCancelConnection = () => { + resetConnection(); + setIsSubmitting(false); + }; + + return { + errors, + isSubmitting, + connectionState, + handleLogin, + handleCancelConnection + }; +}; + +// TODO: Consider moving authentication state to Zustand store for better state management across components \ No newline at end of file diff --git a/frontend/src/hooks/useMapControls.js b/frontend/src/hooks/useMapControls.js new file mode 100644 index 0000000000..0243cdc7bd --- /dev/null +++ b/frontend/src/hooks/useMapControls.js @@ -0,0 +1,87 @@ +import { useState, useCallback } from 'react'; + +export const useMapControls = () => { + const [zoom, setZoom] = useState(13); + const [selectedTree, setSelectedTree] = useState(null); + const [mapLoading, setMapLoading] = useState(true); + const [mapError, setMapError] = useState(null); + + const handleTreeClick = useCallback((tree, onTreeSelect) => { + setSelectedTree(tree); + if (onTreeSelect) { + onTreeSelect(tree); + } + }, []); + + const handleZoomChange = useCallback((newZoom) => { + setZoom(newZoom); + }, []); + + const handleMapReady = useCallback(() => { + setMapLoading(false); + setMapError(null); + }, []); + + const handleMapError = useCallback((error) => { + setMapLoading(false); + setMapError(error?.message || 'Failed to load map'); + }, []); + + const retryMap = useCallback(() => { + setMapLoading(true); + setMapError(null); + // In a real implementation, this would reload the map + setTimeout(() => { + setMapLoading(false); + }, 1000); + }, []); + + const centerMap = useCallback((filteredTrees) => { + if (filteredTrees.length === 0) return; + + // Calculate center point of all filtered trees + const totalLat = filteredTrees.reduce((sum, tree) => sum + tree.lat, 0); + const totalLng = filteredTrees.reduce((sum, tree) => sum + tree.lng, 0); + const centerLat = totalLat / filteredTrees.length; + const centerLng = totalLng / filteredTrees.length; + + // This would need to be implemented with a map ref in a real implementation + console.log('Center map at:', centerLat, centerLng); + }, []); + + const fitBounds = useCallback((filteredTrees) => { + if (filteredTrees.length === 0) return; + + // Calculate bounds of all filtered trees + const bounds = filteredTrees.reduce((acc, tree) => { + return { + minLat: Math.min(acc.minLat, tree.lat), + maxLat: Math.max(acc.maxLat, tree.lat), + minLng: Math.min(acc.minLng, tree.lng), + maxLng: Math.max(acc.maxLng, tree.lng) + }; + }, { + minLat: filteredTrees[0].lat, + maxLat: filteredTrees[0].lat, + minLng: filteredTrees[0].lng, + maxLng: filteredTrees[0].lng + }); + + // This would need to be implemented with a map ref in a real implementation + console.log('Fit bounds:', bounds); + }, []); + + return { + zoom, + selectedTree, + mapLoading, + mapError, + handleTreeClick, + handleZoomChange, + handleMapReady, + handleMapError, + retryMap, + centerMap, + fitBounds + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useMapFilters.js b/frontend/src/hooks/useMapFilters.js new file mode 100644 index 0000000000..b273140762 --- /dev/null +++ b/frontend/src/hooks/useMapFilters.js @@ -0,0 +1,21 @@ +import { useState, useCallback } from 'react'; + +export const useMapFilters = () => { + const [filters, setFilters] = useState({}); + + const handleFiltersChange = useCallback((newFilters) => { + setFilters(newFilters); + // TODO: Update map data based on filters + console.log('Map filters changed:', newFilters); + }, []); + + const resetFilters = useCallback(() => { + setFilters({}); + }, []); + + return { + filters, + handleFiltersChange, + resetFilters + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/usePagination.js b/frontend/src/hooks/usePagination.js new file mode 100644 index 0000000000..6c755c1dba --- /dev/null +++ b/frontend/src/hooks/usePagination.js @@ -0,0 +1,29 @@ +import { useMemo } from 'react'; + +export const usePagination = ({ currentPage, totalPages, maxVisiblePages = 5 }) => { + const pageNumbers = useMemo(() => { + const pages = []; + + for (let i = 0; i < Math.min(maxVisiblePages, totalPages); i++) { + const pageNumber = currentPage - 2 + i; + if (pageNumber > 0 && pageNumber <= totalPages) { + pages.push(pageNumber); + } + } + + return pages; + }, [currentPage, totalPages, maxVisiblePages]); + + const canGoFirst = currentPage > 1; + const canGoPrevious = currentPage > 1; + const canGoNext = currentPage < totalPages; + const canGoLast = currentPage < totalPages; + + return { + pageNumbers, + canGoFirst, + canGoPrevious, + canGoNext, + canGoLast, + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/usePasswordStrength.js b/frontend/src/hooks/usePasswordStrength.js new file mode 100644 index 0000000000..d2d0cf2bd4 --- /dev/null +++ b/frontend/src/hooks/usePasswordStrength.js @@ -0,0 +1,23 @@ +import { useMemo } from 'react'; + +/** + * Custom hook for password strength validation + * @param {string} password - The password to validate + * @returns {Object} Password strength information + */ +export const usePasswordStrength = (password) => { + return useMemo(() => { + if (!password) return { strength: 'none', score: 0 }; + + let score = 0; + if (password.length >= 8) score += 1; + if (/[a-z]/.test(password)) score += 1; + if (/[A-Z]/.test(password)) score += 1; + if (/[0-9]/.test(password)) score += 1; + if (/[^A-Za-z0-9]/.test(password)) score += 1; + + if (score <= 2) return { strength: 'weak', score }; + if (score <= 3) return { strength: 'medium', score }; + return { strength: 'strong', score }; + }, [password]); +}; \ No newline at end of file diff --git a/frontend/src/hooks/usePerformanceMetrics.js b/frontend/src/hooks/usePerformanceMetrics.js new file mode 100644 index 0000000000..6e35ab606a --- /dev/null +++ b/frontend/src/hooks/usePerformanceMetrics.js @@ -0,0 +1,33 @@ +import { useState, useEffect } from 'react'; + +// Custom hook for performance metrics monitoring +export const usePerformanceMetrics = (updateInterval = 5000) => { + const [metrics, setMetrics] = useState({}); + const [isSupported] = useState( + typeof window !== 'undefined' && 'performance' in window + ); + + useEffect(() => { + if (!isSupported) return; + + // Import performance monitor dynamically to avoid issues during SSR + const updateMetrics = async () => { + try { + const { default: performanceMonitor } = await import('../utils/performance.js'); + setMetrics(performanceMonitor.getMetrics()); + } catch (error) { + console.warn('Failed to update performance metrics:', error); + } + }; + + // Initial update + updateMetrics(); + + // Set up interval for periodic updates + const interval = setInterval(updateMetrics, updateInterval); + + return () => clearInterval(interval); + }, [isSupported, updateInterval]); + + return { metrics, isSupported }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useProtectedRoute.js b/frontend/src/hooks/useProtectedRoute.js new file mode 100644 index 0000000000..c2bf31d00e --- /dev/null +++ b/frontend/src/hooks/useProtectedRoute.js @@ -0,0 +1,16 @@ +import { useAuth } from '../contexts/AuthContext'; + +/** + * Custom hook for protected route logic + * Returns authentication state and helper functions + */ +export const useProtectedRoute = () => { + const { user, loading } = useAuth(); + + return { + user, + loading, + isAuthenticated: !!user, + isLoading: loading + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useRegisterForm.js b/frontend/src/hooks/useRegisterForm.js new file mode 100644 index 0000000000..182abcc835 --- /dev/null +++ b/frontend/src/hooks/useRegisterForm.js @@ -0,0 +1,94 @@ +import { useState } from 'react'; +import { useAuth } from '../contexts/AuthContext'; +import { usePasswordStrength } from './usePasswordStrength'; + +/** + * Custom hook for registration form logic + * @returns {Object} Registration form state and handlers + */ +export const useRegisterForm = () => { + const [formData, setFormData] = useState({ + email: '', + password: '', + confirmPassword: '', + }); + const [errors, setErrors] = useState({}); + const [isSubmitting, setIsSubmitting] = useState(false); + + const { register } = useAuth(); + const passwordStrength = usePasswordStrength(formData.password); + + const validateForm = () => { + const newErrors = {}; + + if (!formData.email) { + newErrors.email = 'Email is required'; + } else if (!/\S+@\S+\.\S+/.test(formData.email)) { + newErrors.email = 'Email is invalid'; + } + + if (!formData.password) { + newErrors.password = 'Password is required'; + } else if (formData.password.length < 6) { + newErrors.password = 'Password must be at least 6 characters'; + } else if (passwordStrength.strength === 'weak') { + newErrors.password = 'Password is too weak. Include uppercase, lowercase, numbers, and special characters.'; + } + + if (!formData.confirmPassword) { + newErrors.confirmPassword = 'Please confirm your password'; + } else if (formData.password !== formData.confirmPassword) { + newErrors.confirmPassword = 'Passwords do not match'; + } + + setErrors(newErrors); + return Object.keys(newErrors).length === 0; + }; + + const handleInputChange = (e) => { + const { name, value } = e.target; + setFormData(prev => ({ + ...prev, + [name]: value + })); + + // Clear error when user starts typing + if (errors[name]) { + setErrors(prev => ({ + ...prev, + [name]: '' + })); + } + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + + if (!validateForm()) { + return; + } + + setIsSubmitting(true); + + try { + const result = await register(formData.email, formData.password, formData.confirmPassword); + + if (!result.success) { + setErrors({ general: result.error }); + } + } catch (error) { + setErrors({ general: 'An unexpected error occurred. Please try again.' }); + } finally { + setIsSubmitting(false); + } + }; + + return { + formData, + errors, + isSubmitting, + passwordStrength, + handleInputChange, + handleSubmit + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useSidebarState.js b/frontend/src/hooks/useSidebarState.js new file mode 100644 index 0000000000..bd2d39d7e8 --- /dev/null +++ b/frontend/src/hooks/useSidebarState.js @@ -0,0 +1,24 @@ +import { useState, useCallback } from 'react'; + +export const useSidebarState = (initialState = false) => { + const [sidebarOpen, setSidebarOpen] = useState(initialState); + + const toggleSidebar = useCallback(() => { + setSidebarOpen(prevState => !prevState); + }, []); + + const openSidebar = useCallback(() => { + setSidebarOpen(true); + }, []); + + const closeSidebar = useCallback(() => { + setSidebarOpen(false); + }, []); + + return { + sidebarOpen, + toggleSidebar, + openSidebar, + closeSidebar + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useToastTimer.js b/frontend/src/hooks/useToastTimer.js new file mode 100644 index 0000000000..fa5a343f12 --- /dev/null +++ b/frontend/src/hooks/useToastTimer.js @@ -0,0 +1,20 @@ +import { useEffect, useState } from 'react'; + +export const useToastTimer = (duration) => { + const [progress, setProgress] = useState(100); + + useEffect(() => { + if (duration > 0) { + const interval = setInterval(() => { + setProgress((prev) => { + const newProgress = prev - (100 / (duration / 100)); + return newProgress <= 0 ? 0 : newProgress; + }); + }, 100); + + return () => clearInterval(interval); + } + }, [duration]); + + return progress; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useTreeDetail.js b/frontend/src/hooks/useTreeDetail.js new file mode 100644 index 0000000000..9a179ea20c --- /dev/null +++ b/frontend/src/hooks/useTreeDetail.js @@ -0,0 +1,72 @@ +import { useState, useEffect } from 'react'; + +const mockTrees = [ + { id: 1, name: 'Tree A-001', species: 'Pine', height: 2.4, health: 'healthy', lat: 59.3293, lng: 18.0686 }, + { id: 2, name: 'Tree A-002', species: 'Oak', height: 2.1, health: 'healthy', lat: 59.3300, lng: 18.0690 }, + { id: 3, name: 'Tree A-003', species: 'Birch', height: 1.8, health: 'warning', lat: 59.3285, lng: 18.0675 }, + { id: 4, name: 'Tree A-004', species: 'Spruce', height: 1.5, health: 'critical', lat: 59.3310, lng: 18.0700 }, + { id: 5, name: 'Tree A-005', species: 'Pine', height: 2.7, health: 'healthy', lat: 59.3275, lng: 18.0660 }, + { id: 6, name: 'Tree A-006', species: 'Oak', height: 2.3, health: 'healthy', lat: 59.3320, lng: 18.0710 }, + { id: 7, name: 'Tree A-007', species: 'Birch', height: 1.9, health: 'warning', lat: 59.3265, lng: 18.0650 }, + { id: 8, name: 'Tree A-008', species: 'Spruce', height: 2.5, health: 'healthy', lat: 59.3330, lng: 18.0720 }, +]; + +const mockMeasurementHistory = [ + { date: '2024-01-15', height: 2.4, diameter: 8.2, health: 'healthy' }, + { date: '2024-02-15', height: 2.3, diameter: 8.1, health: 'healthy' }, + { date: '2024-03-15', height: 2.2, diameter: 8.0, health: 'healthy' }, + { date: '2024-04-15', height: 2.1, diameter: 7.9, health: 'warning' }, + { date: '2024-05-15', height: 2.0, diameter: 7.8, health: 'warning' }, + { date: '2024-06-15', height: 1.9, diameter: 7.7, health: 'warning' }, + { date: '2024-07-15', height: 1.8, diameter: 7.6, health: 'critical' }, + { date: '2024-08-15', height: 1.7, diameter: 7.5, health: 'critical' }, + { date: '2024-09-15', height: 1.6, diameter: 7.4, health: 'critical' }, + { date: '2024-10-15', height: 1.5, diameter: 7.3, health: 'critical' }, +]; + +export const useTreeDetail = (id) => { + const [tree, setTree] = useState(null); + const [measurements, setMeasurements] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const fetchTreeData = async () => { + try { + setLoading(true); + setError(null); + + // Simulate API call + await new Promise(resolve => setTimeout(resolve, 500)); + + const treeData = mockTrees.find(t => t.id === parseInt(id)); + if (!treeData) { + setError('Tree not found'); + return; + } + + setTree(treeData); + setMeasurements(mockMeasurementHistory); + } catch (err) { + setError('Failed to load tree data'); + } finally { + setLoading(false); + } + }; + + if (id) { + fetchTreeData(); + } + }, [id]); + + // TODO: Consider moving tree data state to Zustand store for better state management + // This hook could fetch from API in real implementation + + return { + tree, + measurements, + loading, + error, + trees: mockTrees // Used for navigation + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useTreeFiltering.js b/frontend/src/hooks/useTreeFiltering.js new file mode 100644 index 0000000000..1c844941f5 --- /dev/null +++ b/frontend/src/hooks/useTreeFiltering.js @@ -0,0 +1,31 @@ +import { useMemo } from 'react'; + +export const useTreeFiltering = (trees, filters) => { + const filteredTrees = useMemo(() => { + return trees.filter(tree => { + // Apply forest filters if selected forests exist + if (filters.selectedForests && filters.selectedForests.length > 0) { + // For now, assume tree has a forestId property (will be updated when backend is ready) + // Currently using a mock forestId based on tree position + const mockForestId = tree.id <= 4 ? 1 : 2; // Mock forest assignment + if (!filters.selectedForests.includes(mockForestId)) { + return false; + } + } + + // Apply date range filters if specified + if (filters.dateRange) { + // For now, assume tree has a plantedDate property (will be updated when backend is ready) + // Currently using a mock date based on tree ID + const mockPlantedDate = new Date(2023, tree.id % 12, tree.id % 28 + 1); // Mock planting date + if (mockPlantedDate < filters.dateRange.startDate || mockPlantedDate > filters.dateRange.endDate) { + return false; + } + } + + return true; + }); + }, [trees, filters]); + + return filteredTrees; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useTreeMeasurements.js b/frontend/src/hooks/useTreeMeasurements.js new file mode 100644 index 0000000000..705bf884f1 --- /dev/null +++ b/frontend/src/hooks/useTreeMeasurements.js @@ -0,0 +1,27 @@ +import { useState, useEffect } from 'react'; + +const mockMeasurementHistory = [ + { date: '2024-01-15', height: 2.4, diameter: 8.2, health: 'healthy' }, + { date: '2024-02-15', height: 2.3, diameter: 8.1, health: 'healthy' }, + { date: '2024-03-15', height: 2.2, diameter: 8.0, health: 'healthy' }, + { date: '2024-04-15', height: 2.1, diameter: 7.9, health: 'warning' }, + { date: '2024-05-15', height: 2.0, diameter: 7.8, health: 'warning' }, + { date: '2024-06-15', height: 1.9, diameter: 7.7, health: 'warning' }, + { date: '2024-07-15', height: 1.8, diameter: 7.6, health: 'critical' }, + { date: '2024-08-15', height: 1.7, diameter: 7.5, health: 'critical' }, + { date: '2024-09-15', height: 1.6, diameter: 7.4, health: 'critical' }, + { date: '2024-10-15', height: 1.5, diameter: 7.3, health: 'critical' }, +]; + +export const useTreeMeasurements = (tree, isOpen) => { + const [measurementHistory, setMeasurementHistory] = useState([]); + + useEffect(() => { + if (tree && isOpen) { + // TODO: In a real application, this would fetch from an API + setMeasurementHistory(mockMeasurementHistory); + } + }, [tree, isOpen]); + + return measurementHistory; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useTreeNavigation.js b/frontend/src/hooks/useTreeNavigation.js new file mode 100644 index 0000000000..ad881b6cb5 --- /dev/null +++ b/frontend/src/hooks/useTreeNavigation.js @@ -0,0 +1,34 @@ +import { useNavigate } from 'react-router-dom'; +import { useCallback, useMemo } from 'react'; + +export const useTreeNavigation = (currentTreeId, trees) => { + const navigate = useNavigate(); + + const currentIndex = useMemo(() => + trees.findIndex(t => t.id === parseInt(currentTreeId)), + [trees, currentTreeId] + ); + + const hasPrevious = currentIndex > 0; + const hasNext = currentIndex < trees.length - 1; + + const handlePreviousTree = useCallback(() => { + if (hasPrevious) { + navigate(`/tree/${trees[currentIndex - 1].id}`); + } + }, [navigate, trees, currentIndex, hasPrevious]); + + const handleNextTree = useCallback(() => { + if (hasNext) { + navigate(`/tree/${trees[currentIndex + 1].id}`); + } + }, [navigate, trees, currentIndex, hasNext]); + + return { + hasPrevious, + hasNext, + handlePreviousTree, + handleNextTree, + currentIndex + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useTreeSelection.js b/frontend/src/hooks/useTreeSelection.js new file mode 100644 index 0000000000..3303aabd7c --- /dev/null +++ b/frontend/src/hooks/useTreeSelection.js @@ -0,0 +1,29 @@ +import { useState, useCallback } from 'react'; + +export const useTreeSelection = () => { + const [selectedTree, setSelectedTree] = useState(null); + const [isModalOpen, setIsModalOpen] = useState(false); + + const handleTreeSelect = useCallback((tree) => { + setSelectedTree(tree); + setIsModalOpen(true); + }, []); + + const handleCloseTreeDetail = useCallback(() => { + setSelectedTree(null); + setIsModalOpen(false); + }, []); + + const clearSelection = useCallback(() => { + setSelectedTree(null); + setIsModalOpen(false); + }, []); + + return { + selectedTree, + isModalOpen, + handleTreeSelect, + handleCloseTreeDetail, + clearSelection + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useTreeShare.js b/frontend/src/hooks/useTreeShare.js new file mode 100644 index 0000000000..c5c71abad1 --- /dev/null +++ b/frontend/src/hooks/useTreeShare.js @@ -0,0 +1,20 @@ +import { useCallback } from 'react'; + +export const useTreeShare = (tree) => { + const handleShare = useCallback(() => { + if (!tree) return; + + if (navigator.share) { + navigator.share({ + title: `Tree Details - ${tree.name}`, + text: `Check out this tree: ${tree.name} (${tree.species})`, + url: window.location.href + }); + } else { + navigator.clipboard.writeText(window.location.href); + alert('Tree URL copied to clipboard!'); + } + }, [tree]); + + return handleShare; +}; \ No newline at end of file diff --git a/frontend/src/lib/api.js b/frontend/src/lib/api.js index 94bebe988e..797056f708 100644 --- a/frontend/src/lib/api.js +++ b/frontend/src/lib/api.js @@ -1,259 +1,24 @@ -// API configuration and client for Nanwa Forestry -const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:5000/api'; -const API_TIMEOUT = parseInt(import.meta.env.VITE_API_TIMEOUT) || 10000; - -// Cold start detection and retry configuration -const COLD_START_INDICATORS = [ - 'failed to fetch', - 'network request failed', - 'timeout', - 'connection refused', - 'service unavailable', - 'internal server error' -]; - -const RETRY_CONFIG = { - maxAttempts: 4, - baseDelay: 5000, // Start with 5 seconds - maxDelay: 20000, // Max 20 seconds between retries - backoffMultiplier: 1.5, // Gentler backoff - coldStartTimeouts: [15000, 20000, 25000, 30000], // Progressive timeouts for cold starts - retryDelays: [5000, 10000, 15000, 20000], // Fixed delays: 5s, 10s, 15s, 20s (total: 50s + initial attempt) -}; - -// API client with authentication and error handling -class ApiClient { - constructor() { - this.baseURL = API_BASE_URL; - this.timeout = API_TIMEOUT; - } - - // Get auth token from localStorage - getAuthToken() { - return localStorage.getItem('authToken'); - } - - // Default headers with authentication - getHeaders(customHeaders = {}) { - const headers = { - 'Content-Type': 'application/json', - ...customHeaders, - }; - - const token = this.getAuthToken(); - if (token) { - headers.Authorization = `Bearer ${token}`; - } - - return headers; - } - - // Helper method to detect cold start conditions - isColdStartError(error) { - const errorMessage = error.message.toLowerCase(); - return COLD_START_INDICATORS.some(indicator => - errorMessage.includes(indicator) - ); - } - - // Helper method to calculate retry delay with fixed delays for predictable timing - calculateRetryDelay(attempt) { - // Use fixed delays instead of exponential backoff for predictable 1-minute span - return RETRY_CONFIG.retryDelays[attempt - 1] || RETRY_CONFIG.maxDelay; - } - - // Generic fetch wrapper with error handling and retry logic - async request(endpoint, options = {}) { - const url = `${this.baseURL}${endpoint}`; - const { retryAttempts = 0, onRetry } = options; - - // Use progressive timeout for cold starts - const timeoutDuration = retryAttempts < RETRY_CONFIG.coldStartTimeouts.length - ? RETRY_CONFIG.coldStartTimeouts[retryAttempts] - : RETRY_CONFIG.coldStartTimeouts[RETRY_CONFIG.coldStartTimeouts.length - 1]; - - const config = { - timeout: timeoutDuration, - headers: this.getHeaders(options.headers), - ...options, - }; - - try { - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), timeoutDuration); - - const response = await fetch(url, { - ...config, - signal: controller.signal, - }); - - clearTimeout(timeoutId); - - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - const error = new Error(errorData.message || `HTTP error! status: ${response.status}`); - error.status = response.status; - throw error; - } - - return await response.json(); - } catch (error) { - if (error.name === 'AbortError') { - const timeoutError = new Error('Request timeout'); - timeoutError.name = 'AbortError'; - timeoutError.status = 408; - error = timeoutError; - } - - // Check if this is a cold start error and if we should retry - const shouldRetry = this.isColdStartError(error) && retryAttempts < RETRY_CONFIG.maxAttempts - 1; - - if (shouldRetry) { - const nextAttempt = retryAttempts + 1; - const delay = this.calculateRetryDelay(nextAttempt); - - // Notify about retry attempt - if (onRetry) { - onRetry({ - attempt: nextAttempt, - totalAttempts: RETRY_CONFIG.maxAttempts, - delay, - error: error.message, - isColdStart: true - }); - } - - // Wait before retrying - await new Promise(resolve => setTimeout(resolve, delay)); - - // Retry with incremented attempt count - return this.request(endpoint, { - ...options, - retryAttempts: nextAttempt, - onRetry - }); - } - - console.error('API request failed:', error); - throw error; - } - } - - // HTTP methods - async get(endpoint, params = {}) { - const queryString = new URLSearchParams(params).toString(); - const url = queryString ? `${endpoint}?${queryString}` : endpoint; - return this.request(url, { method: 'GET' }); - } - - async post(endpoint, data = {}, options = {}) { - return this.request(endpoint, { - method: 'POST', - body: JSON.stringify(data), - ...options, - }); - } - - async put(endpoint, data = {}) { - return this.request(endpoint, { - method: 'PUT', - body: JSON.stringify(data), - }); - } - - async patch(endpoint, data = {}) { - return this.request(endpoint, { - method: 'PATCH', - body: JSON.stringify(data), - }); - } - - async delete(endpoint) { - return this.request(endpoint, { method: 'DELETE' }); - } - - // File upload method - async uploadFile(endpoint, formData) { - return this.request(endpoint, { - method: 'POST', - body: formData, - headers: { - // Don't set Content-Type for FormData, let browser set it - ...this.getHeaders(), - 'Content-Type': undefined, - }, - }); - } -} - -// Create singleton instance +// Main API client entry point - refactored for better modularity +import { ApiClient } from './core/ApiClient.js'; + +// Re-export all service APIs for backward compatibility +export { + authAPI, + forestAPI, + treeAPI, + dashboardAPI, + chartAPI, + exportAPI, + uploadAPI, + auditAPI, + bulkAPI +} from './services/index.js'; + +// Create singleton instance for direct client access const apiClient = new ApiClient(); -// Authentication API methods -export const authAPI = { - register: (userData, options = {}) => apiClient.post('/auth/register', userData, options), - login: (credentials, options = {}) => apiClient.post('/auth/login', credentials, options), - logout: () => apiClient.post('/auth/logout'), - logoutAll: () => apiClient.post('/auth/logout-all'), - refreshToken: () => apiClient.post('/auth/refresh'), - getProfile: () => apiClient.get('/auth/profile'), - updateProfile: (userData) => apiClient.put('/auth/profile', userData), -}; - -// Forest API methods -export const forestAPI = { - getAll: (filters = {}) => apiClient.get('/forests', filters), - getById: (id) => apiClient.get(`/forests/${id}`), - getAnalytics: (id) => apiClient.get(`/forests/${id}/analytics`), - create: (forestData) => apiClient.post('/forests', forestData), - update: (id, forestData) => apiClient.put(`/forests/${id}`, forestData), - delete: (id) => apiClient.delete(`/forests/${id}`), -}; - -// Tree API methods -export const treeAPI = { - getAll: (filters = {}) => apiClient.get('/trees', filters), - getById: (id) => apiClient.get(`/trees/${id}`), - getMeasurements: (id) => apiClient.get(`/trees/${id}/measurements`), - getByForest: (forestId) => apiClient.get(`/trees/forest/${forestId}`), - create: (treeData) => apiClient.post('/trees', treeData), - update: (id, treeData) => apiClient.put(`/trees/${id}`, treeData), - delete: (id) => apiClient.delete(`/trees/${id}`), - addMeasurement: (id, measurementData) => apiClient.post(`/trees/${id}/measurements`, measurementData), - markDead: (id) => apiClient.patch(`/trees/${id}/mark-dead`), -}; - -// Dashboard API methods -export const dashboardAPI = { - getStats: () => apiClient.get('/dashboard/stats'), -}; - -// Chart API methods -export const chartAPI = { - getSurvivalRate: () => apiClient.get('/charts/survival-rate'), - getHeightGrowth: () => apiClient.get('/charts/height-growth'), - getCO2Absorption: () => apiClient.get('/charts/co2-absorption'), -}; - -// Export API methods -export const exportAPI = { - exportTrees: (filters = {}) => apiClient.post('/exports/trees', filters), -}; - -// Upload API methods -export const uploadAPI = { - uploadTreeImages: (formData) => apiClient.uploadFile('/uploads/tree-images', formData), -}; - -// Audit API methods -export const auditAPI = { - getLogs: (filters = {}) => apiClient.get('/audit', filters), -}; - -// Bulk operations API methods -export const bulkAPI = { - bulkTreeOperations: (operations) => apiClient.post('/bulk/trees', operations), -}; +// TODO: Consider moving API state to Zustand store for better state management +// This would help with handling loading states, error states, and caching across components // Default export export default apiClient; \ No newline at end of file diff --git a/frontend/src/lib/config/apiConfig.js b/frontend/src/lib/config/apiConfig.js new file mode 100644 index 0000000000..2991d0fa0e --- /dev/null +++ b/frontend/src/lib/config/apiConfig.js @@ -0,0 +1,22 @@ +// API configuration constants +export const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:5000/api'; +export const API_TIMEOUT = parseInt(import.meta.env.VITE_API_TIMEOUT) || 10000; + +// Cold start detection and retry configuration +export const COLD_START_INDICATORS = [ + 'failed to fetch', + 'network request failed', + 'timeout', + 'connection refused', + 'service unavailable', + 'internal server error' +]; + +export const RETRY_CONFIG = { + maxAttempts: 4, + baseDelay: 5000, // Start with 5 seconds + maxDelay: 20000, // Max 20 seconds between retries + backoffMultiplier: 1.5, // Gentler backoff + coldStartTimeouts: [15000, 20000, 25000, 30000], // Progressive timeouts for cold starts + retryDelays: [5000, 10000, 15000, 20000], // Fixed delays: 5s, 10s, 15s, 20s (total: 50s + initial attempt) +}; \ No newline at end of file diff --git a/frontend/src/lib/core/ApiClient.js b/frontend/src/lib/core/ApiClient.js new file mode 100644 index 0000000000..2ee01e9c68 --- /dev/null +++ b/frontend/src/lib/core/ApiClient.js @@ -0,0 +1,128 @@ +import { API_BASE_URL, RETRY_CONFIG } from '../config/apiConfig.js'; +import { isColdStartError, calculateRetryDelay, getHeaders, getFileUploadHeaders } from '../utils/apiUtils.js'; + +// API client with authentication and error handling +export class ApiClient { + constructor() { + this.baseURL = API_BASE_URL; + } + + // Generic fetch wrapper with error handling and retry logic + async request(endpoint, options = {}) { + const url = `${this.baseURL}${endpoint}`; + const { retryAttempts = 0, onRetry } = options; + + // Use progressive timeout for cold starts + const timeoutDuration = retryAttempts < RETRY_CONFIG.coldStartTimeouts.length + ? RETRY_CONFIG.coldStartTimeouts[retryAttempts] + : RETRY_CONFIG.coldStartTimeouts[RETRY_CONFIG.coldStartTimeouts.length - 1]; + + const config = { + timeout: timeoutDuration, + headers: getHeaders(options.headers), + ...options, + }; + + try { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), timeoutDuration); + + const response = await fetch(url, { + ...config, + signal: controller.signal, + }); + + clearTimeout(timeoutId); + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + const error = new Error(errorData.message || `HTTP error! status: ${response.status}`); + error.status = response.status; + throw error; + } + + return await response.json(); + } catch (error) { + if (error.name === 'AbortError') { + const timeoutError = new Error('Request timeout'); + timeoutError.name = 'AbortError'; + timeoutError.status = 408; + throw timeoutError; + } + + // Check if this is a cold start error and if we should retry + const shouldRetry = isColdStartError(error) && retryAttempts < RETRY_CONFIG.maxAttempts - 1; + + if (shouldRetry) { + const nextAttempt = retryAttempts + 1; + const delay = calculateRetryDelay(nextAttempt); + + // Notify about retry attempt + if (onRetry) { + onRetry({ + attempt: nextAttempt, + totalAttempts: RETRY_CONFIG.maxAttempts, + delay, + error: error.message, + isColdStart: true + }); + } + + // Wait before retrying + await new Promise(resolve => setTimeout(resolve, delay)); + + // Retry with incremented attempt count + return this.request(endpoint, { + ...options, + retryAttempts: nextAttempt, + onRetry + }); + } + + console.error('API request failed:', error); + throw error; + } + } + + // HTTP methods + async get(endpoint, params = {}) { + const queryString = new URLSearchParams(params).toString(); + const url = queryString ? `${endpoint}?${queryString}` : endpoint; + return this.request(url, { method: 'GET' }); + } + + async post(endpoint, data = {}, options = {}) { + return this.request(endpoint, { + method: 'POST', + body: JSON.stringify(data), + ...options, + }); + } + + async put(endpoint, data = {}) { + return this.request(endpoint, { + method: 'PUT', + body: JSON.stringify(data), + }); + } + + async patch(endpoint, data = {}) { + return this.request(endpoint, { + method: 'PATCH', + body: JSON.stringify(data), + }); + } + + async delete(endpoint) { + return this.request(endpoint, { method: 'DELETE' }); + } + + // File upload method + async uploadFile(endpoint, formData) { + return this.request(endpoint, { + method: 'POST', + body: formData, + headers: getFileUploadHeaders(), + }); + } +} \ No newline at end of file diff --git a/frontend/src/lib/services/authService.js b/frontend/src/lib/services/authService.js new file mode 100644 index 0000000000..a078211049 --- /dev/null +++ b/frontend/src/lib/services/authService.js @@ -0,0 +1,14 @@ +import { ApiClient } from '../core/ApiClient.js'; + +const apiClient = new ApiClient(); + +// Authentication API methods +export const authAPI = { + register: (userData, options = {}) => apiClient.post('/auth/register', userData, options), + login: (credentials, options = {}) => apiClient.post('/auth/login', credentials, options), + logout: () => apiClient.post('/auth/logout'), + logoutAll: () => apiClient.post('/auth/logout-all'), + refreshToken: () => apiClient.post('/auth/refresh'), + getProfile: () => apiClient.get('/auth/profile'), + updateProfile: (userData) => apiClient.put('/auth/profile', userData), +}; \ No newline at end of file diff --git a/frontend/src/lib/services/dashboardService.js b/frontend/src/lib/services/dashboardService.js new file mode 100644 index 0000000000..239b48d724 --- /dev/null +++ b/frontend/src/lib/services/dashboardService.js @@ -0,0 +1,15 @@ +import { ApiClient } from '../core/ApiClient.js'; + +const apiClient = new ApiClient(); + +// Dashboard API methods +export const dashboardAPI = { + getStats: () => apiClient.get('/dashboard/stats'), +}; + +// Chart API methods +export const chartAPI = { + getSurvivalRate: () => apiClient.get('/charts/survival-rate'), + getHeightGrowth: () => apiClient.get('/charts/height-growth'), + getCO2Absorption: () => apiClient.get('/charts/co2-absorption'), +}; \ No newline at end of file diff --git a/frontend/src/lib/services/dataService.js b/frontend/src/lib/services/dataService.js new file mode 100644 index 0000000000..7cad8745ee --- /dev/null +++ b/frontend/src/lib/services/dataService.js @@ -0,0 +1,23 @@ +import { ApiClient } from '../core/ApiClient.js'; + +const apiClient = new ApiClient(); + +// Export API methods +export const exportAPI = { + exportTrees: (filters = {}) => apiClient.post('/exports/trees', filters), +}; + +// Upload API methods +export const uploadAPI = { + uploadTreeImages: (formData) => apiClient.uploadFile('/uploads/tree-images', formData), +}; + +// Audit API methods +export const auditAPI = { + getLogs: (filters = {}) => apiClient.get('/audit', filters), +}; + +// Bulk operations API methods +export const bulkAPI = { + bulkTreeOperations: (operations) => apiClient.post('/bulk/trees', operations), +}; \ No newline at end of file diff --git a/frontend/src/lib/services/forestService.js b/frontend/src/lib/services/forestService.js new file mode 100644 index 0000000000..17121a847c --- /dev/null +++ b/frontend/src/lib/services/forestService.js @@ -0,0 +1,13 @@ +import { ApiClient } from '../core/ApiClient.js'; + +const apiClient = new ApiClient(); + +// Forest API methods +export const forestAPI = { + getAll: (filters = {}) => apiClient.get('/forests', filters), + getById: (id) => apiClient.get(`/forests/${id}`), + getAnalytics: (id) => apiClient.get(`/forests/${id}/analytics`), + create: (forestData) => apiClient.post('/forests', forestData), + update: (id, forestData) => apiClient.put(`/forests/${id}`, forestData), + delete: (id) => apiClient.delete(`/forests/${id}`), +}; \ No newline at end of file diff --git a/frontend/src/lib/services/index.js b/frontend/src/lib/services/index.js new file mode 100644 index 0000000000..1235f7810f --- /dev/null +++ b/frontend/src/lib/services/index.js @@ -0,0 +1,6 @@ +// Service exports for easy importing +export { authAPI } from './authService.js'; +export { forestAPI } from './forestService.js'; +export { treeAPI } from './treeService.js'; +export { dashboardAPI, chartAPI } from './dashboardService.js'; +export { exportAPI, uploadAPI, auditAPI, bulkAPI } from './dataService.js'; \ No newline at end of file diff --git a/frontend/src/lib/services/treeService.js b/frontend/src/lib/services/treeService.js new file mode 100644 index 0000000000..a310af9c76 --- /dev/null +++ b/frontend/src/lib/services/treeService.js @@ -0,0 +1,16 @@ +import { ApiClient } from '../core/ApiClient.js'; + +const apiClient = new ApiClient(); + +// Tree API methods +export const treeAPI = { + getAll: (filters = {}) => apiClient.get('/trees', filters), + getById: (id) => apiClient.get(`/trees/${id}`), + getMeasurements: (id) => apiClient.get(`/trees/${id}/measurements`), + getByForest: (forestId) => apiClient.get(`/trees/forest/${forestId}`), + create: (treeData) => apiClient.post('/trees', treeData), + update: (id, treeData) => apiClient.put(`/trees/${id}`, treeData), + delete: (id) => apiClient.delete(`/trees/${id}`), + addMeasurement: (id, measurementData) => apiClient.post(`/trees/${id}/measurements`, measurementData), + markDead: (id) => apiClient.patch(`/trees/${id}/mark-dead`), +}; \ No newline at end of file diff --git a/frontend/src/lib/store.js b/frontend/src/lib/store.js index 9034fe2835..db405fd3a9 100644 --- a/frontend/src/lib/store.js +++ b/frontend/src/lib/store.js @@ -1,105 +1,14 @@ -import { create } from 'zustand'; -import { devtools, persist } from 'zustand/middleware'; +// Legacy store file - individual stores have been moved to separate files +// This file maintains backward compatibility while the new modular structure is being adopted -// Auth store -export const useAuthStore = create( - devtools( - persist( - (set, get) => ({ - user: null, - token: null, - isAuthenticated: false, - isLoading: false, - - login: (userData, token) => { - localStorage.setItem('authToken', token); - set({ - user: userData, - token, - isAuthenticated: true, - isLoading: false, - }); - }, - - logout: () => { - localStorage.removeItem('authToken'); - set({ - user: null, - token: null, - isAuthenticated: false, - isLoading: false, - }); - }, - - setLoading: (loading) => set({ isLoading: loading }), - - updateUser: (userData) => set({ user: userData }), - }), - { - name: 'auth-storage', - partialize: (state) => ({ - user: state.user, - token: state.token, - isAuthenticated: state.isAuthenticated - }), - } - ), - { name: 'auth-store' } - ) -); +// Re-export all stores from the new modular structure +export { + useAuthStore, + useFiltersStore, + useUIStore, + useDataStore +} from './stores/index.js'; -// App store for global state -export const useAppStore = create( - devtools( - (set, get) => ({ - // Global filters - filters: { - dateRange: { start: null, end: null }, - forests: [], - regions: [], - }, - - // UI state - sidebarOpen: false, - darkMode: false, - - // Data - forests: [], - trees: [], - loading: false, - error: null, - - // Actions - setFilters: (filters) => set((state) => ({ - filters: { ...state.filters, ...filters } - })), - - clearFilters: () => set({ - filters: { - dateRange: { start: null, end: null }, - forests: [], - regions: [], - } - }), - - setSidebarOpen: (open) => set({ sidebarOpen: open }), - - setDarkMode: (dark) => { - if (dark) { - document.documentElement.classList.add('dark'); - } else { - document.documentElement.classList.remove('dark'); - } - set({ darkMode: dark }); - }, - - setForests: (forests) => set({ forests }), - setTrees: (trees) => set({ trees }), - setLoading: (loading) => set({ loading }), - setError: (error) => set({ error }), - - clearError: () => set({ error: null }), - }), - { name: 'app-store' } - ) -); \ No newline at end of file +// Backward compatibility: export useAppStore pointing to the most commonly used store +// TODO: Update components to use specific stores instead of the combined useAppStore +export { useFiltersStore as useAppStore } from './stores/index.js'; \ No newline at end of file diff --git a/frontend/src/lib/stores/authStore.js b/frontend/src/lib/stores/authStore.js new file mode 100644 index 0000000000..4141c517dc --- /dev/null +++ b/frontend/src/lib/stores/authStore.js @@ -0,0 +1,48 @@ +import { create } from 'zustand'; +import { devtools, persist } from 'zustand/middleware'; + +export const useAuthStore = create( + devtools( + persist( + (set, get) => ({ + user: null, + token: null, + isAuthenticated: false, + isLoading: false, + + login: (userData, token) => { + localStorage.setItem('authToken', token); + set({ + user: userData, + token, + isAuthenticated: true, + isLoading: false, + }); + }, + + logout: () => { + localStorage.removeItem('authToken'); + set({ + user: null, + token: null, + isAuthenticated: false, + isLoading: false, + }); + }, + + setLoading: (loading) => set({ isLoading: loading }), + + updateUser: (userData) => set({ user: userData }), + }), + { + name: 'auth-storage', + partialize: (state) => ({ + user: state.user, + token: state.token, + isAuthenticated: state.isAuthenticated + }), + } + ), + { name: 'auth-store' } + ) +); \ No newline at end of file diff --git a/frontend/src/lib/stores/dataStore.js b/frontend/src/lib/stores/dataStore.js new file mode 100644 index 0000000000..1741038543 --- /dev/null +++ b/frontend/src/lib/stores/dataStore.js @@ -0,0 +1,50 @@ +import { create } from 'zustand'; +import { devtools } from 'zustand/middleware'; + +export const useDataStore = create( + devtools( + (set, get) => ({ + forests: [], + trees: [], + loading: false, + error: null, + + setForests: (forests) => set({ forests }), + setTrees: (trees) => set({ trees }), + setLoading: (loading) => set({ loading }), + setError: (error) => set({ error }), + + clearError: () => set({ error: null }), + + // Convenience methods for data management + addForest: (forest) => set((state) => ({ + forests: [...state.forests, forest] + })), + + updateForest: (forestId, updatedForest) => set((state) => ({ + forests: state.forests.map(f => + f.id === forestId ? { ...f, ...updatedForest } : f + ) + })), + + removeForest: (forestId) => set((state) => ({ + forests: state.forests.filter(f => f.id !== forestId) + })), + + addTree: (tree) => set((state) => ({ + trees: [...state.trees, tree] + })), + + updateTree: (treeId, updatedTree) => set((state) => ({ + trees: state.trees.map(t => + t.id === treeId ? { ...t, ...updatedTree } : t + ) + })), + + removeTree: (treeId) => set((state) => ({ + trees: state.trees.filter(t => t.id !== treeId) + })), + }), + { name: 'data-store' } + ) +); \ No newline at end of file diff --git a/frontend/src/lib/stores/filtersStore.js b/frontend/src/lib/stores/filtersStore.js new file mode 100644 index 0000000000..46cc6492a4 --- /dev/null +++ b/frontend/src/lib/stores/filtersStore.js @@ -0,0 +1,40 @@ +import { create } from 'zustand'; +import { devtools } from 'zustand/middleware'; + +export const useFiltersStore = create( + devtools( + (set, get) => ({ + filters: { + dateRange: { start: null, end: null }, + forests: [], + regions: [], + }, + + setFilters: (filters) => set((state) => ({ + filters: { ...state.filters, ...filters } + })), + + clearFilters: () => set({ + filters: { + dateRange: { start: null, end: null }, + forests: [], + regions: [], + } + }), + + // Specific filter setters for convenience + setDateRange: (dateRange) => set((state) => ({ + filters: { ...state.filters, dateRange } + })), + + setForestFilter: (forests) => set((state) => ({ + filters: { ...state.filters, forests } + })), + + setRegionFilter: (regions) => set((state) => ({ + filters: { ...state.filters, regions } + })), + }), + { name: 'filters-store' } + ) +); \ No newline at end of file diff --git a/frontend/src/lib/stores/index.js b/frontend/src/lib/stores/index.js new file mode 100644 index 0000000000..c15c2aa40f --- /dev/null +++ b/frontend/src/lib/stores/index.js @@ -0,0 +1,5 @@ +// Re-export all stores from individual files +export { useAuthStore } from './authStore.js'; +export { useFiltersStore } from './filtersStore.js'; +export { useUIStore } from './uiStore.js'; +export { useDataStore } from './dataStore.js'; \ No newline at end of file diff --git a/frontend/src/lib/stores/storeUtils.js b/frontend/src/lib/stores/storeUtils.js new file mode 100644 index 0000000000..6a72d773bb --- /dev/null +++ b/frontend/src/lib/stores/storeUtils.js @@ -0,0 +1,74 @@ +// Utility functions for store operations + +/** + * Creates a basic loading state handler + * @param {Function} set - Zustand set function + * @returns {Object} Loading state actions + */ +export const createLoadingState = (set) => ({ + loading: false, + setLoading: (loading) => set({ loading }), +}); + +/** + * Creates a basic error state handler + * @param {Function} set - Zustand set function + * @returns {Object} Error state actions + */ +export const createErrorState = (set) => ({ + error: null, + setError: (error) => set({ error }), + clearError: () => set({ error: null }), +}); + +/** + * Creates array manipulation helpers for store items + * @param {Function} set - Zustand set function + * @param {string} stateKey - The key in state to manipulate + * @returns {Object} Array manipulation actions + */ +export const createArrayActions = (set, stateKey) => ({ + [`add${capitalize(stateKey.slice(0, -1))}`]: (item) => set((state) => ({ + [stateKey]: [...state[stateKey], item] + })), + + [`update${capitalize(stateKey.slice(0, -1))}`]: (itemId, updatedItem) => set((state) => ({ + [stateKey]: state[stateKey].map(item => + item.id === itemId ? { ...item, ...updatedItem } : item + ) + })), + + [`remove${capitalize(stateKey.slice(0, -1))}`]: (itemId) => set((state) => ({ + [stateKey]: state[stateKey].filter(item => item.id !== itemId) + })), + + [`clear${capitalize(stateKey)}`]: () => set({ [stateKey]: [] }), +}); + +/** + * Capitalize first letter of string + * @param {string} str - String to capitalize + * @returns {string} Capitalized string + */ +const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1); + +/** + * Creates a toggle action for boolean state + * @param {Function} set - Zustand set function + * @param {Function} get - Zustand get function + * @param {string} stateKey - The boolean state key to toggle + * @returns {Function} Toggle function + */ +export const createToggleAction = (set, get, stateKey) => () => { + set({ [stateKey]: !get()[stateKey] }); +}; + +/** + * Creates a reset action that returns state to initial values + * @param {Function} set - Zustand set function + * @param {Object} initialState - Initial state object + * @returns {Function} Reset function + */ +export const createResetAction = (set, initialState) => () => { + set(initialState); +}; \ No newline at end of file diff --git a/frontend/src/lib/stores/uiStore.js b/frontend/src/lib/stores/uiStore.js new file mode 100644 index 0000000000..587e80634d --- /dev/null +++ b/frontend/src/lib/stores/uiStore.js @@ -0,0 +1,35 @@ +import { create } from 'zustand'; +import { devtools } from 'zustand/middleware'; + +export const useUIStore = create( + devtools( + (set, get) => ({ + sidebarOpen: false, + darkMode: false, + + setSidebarOpen: (open) => set({ sidebarOpen: open }), + + toggleSidebar: () => set((state) => ({ sidebarOpen: !state.sidebarOpen })), + + setDarkMode: (dark) => { + if (dark) { + document.documentElement.classList.add('dark'); + } else { + document.documentElement.classList.remove('dark'); + } + set({ darkMode: dark }); + }, + + toggleDarkMode: () => { + const newDarkMode = !get().darkMode; + if (newDarkMode) { + document.documentElement.classList.add('dark'); + } else { + document.documentElement.classList.remove('dark'); + } + set({ darkMode: newDarkMode }); + }, + }), + { name: 'ui-store' } + ) +); \ No newline at end of file diff --git a/frontend/src/lib/utils.js b/frontend/src/lib/utils.js index 5f1dc6001a..59efb68003 100644 --- a/frontend/src/lib/utils.js +++ b/frontend/src/lib/utils.js @@ -1,5 +1,37 @@ import { clsx } from 'clsx'; +/** + * Combines class names using clsx utility + * @param {...any} inputs - Class names to combine + * @returns {string} Combined class names + */ export function cn(...inputs) { return clsx(inputs); +} + +/** + * Generates a CSS class name with variants + * @param {string} base - Base class name + * @param {Object} variants - Variant object with boolean values + * @returns {string} Combined class names + */ +export function cva(base, variants = {}) { + const variantClasses = Object.entries(variants) + .filter(([_, value]) => value) + .map(([key]) => key); + + return cn(base, ...variantClasses); +} + +/** + * Conditionally applies classes based on state + * @param {Object} conditions - Object with condition-class pairs + * @returns {string} Combined class names + */ +export function conditionalClasses(conditions) { + return cn( + Object.entries(conditions) + .filter(([_, condition]) => condition) + .map(([className]) => className) + ); } \ No newline at end of file diff --git a/frontend/src/lib/utils/apiUtils.js b/frontend/src/lib/utils/apiUtils.js new file mode 100644 index 0000000000..18b483f579 --- /dev/null +++ b/frontend/src/lib/utils/apiUtils.js @@ -0,0 +1,125 @@ +import { COLD_START_INDICATORS, RETRY_CONFIG } from '../config/apiConfig.js'; + +// ============================================================================ +// ERROR HANDLING UTILITIES +// ============================================================================ + +/** + * Detects if an error is related to cold start conditions + * @param {Error} error - The error object to check + * @returns {boolean} - True if error indicates cold start + */ +export const isColdStartError = (error) => { + if (!error || !error.message) return false; + + const errorMessage = error.message.toLowerCase(); + return COLD_START_INDICATORS.some(indicator => + errorMessage.includes(indicator) + ); +}; + +/** + * Calculates retry delay with fixed delays for predictable timing + * @param {number} attempt - The current attempt number (1-based) + * @returns {number} - Delay in milliseconds + */ +export const calculateRetryDelay = (attempt) => { + // Use fixed delays instead of exponential backoff for predictable 1-minute span + return RETRY_CONFIG.retryDelays[attempt - 1] || RETRY_CONFIG.maxDelay; +}; + +// ============================================================================ +// AUTHENTICATION UTILITIES +// ============================================================================ + +/** + * Retrieves the authentication token from localStorage + * @returns {string|null} - The auth token or null if not found + */ +export const getAuthToken = () => { + try { + return localStorage.getItem('authToken'); + } catch (error) { + console.warn('Failed to retrieve auth token from localStorage:', error); + return null; + } +}; + +/** + * Checks if user is currently authenticated + * @returns {boolean} - True if user has a valid token + */ +export const isAuthenticated = () => { + const token = getAuthToken(); + return Boolean(token); +}; + +// ============================================================================ +// HEADER UTILITIES +// ============================================================================ + +/** + * Creates default headers with optional authentication + * @param {Object} customHeaders - Additional headers to merge + * @returns {Object} - Complete headers object + */ +export const getHeaders = (customHeaders = {}) => { + const headers = { + 'Content-Type': 'application/json', + ...customHeaders, + }; + + const token = getAuthToken(); + if (token) { + headers.Authorization = `Bearer ${token}`; + } + + return headers; +}; + +/** + * Creates headers specifically for file uploads + * @param {Object} customHeaders - Additional headers to merge + * @returns {Object} - Headers object without Content-Type for multipart uploads + */ +export const getFileUploadHeaders = (customHeaders = {}) => { + const headers = { + ...customHeaders, + }; + + const token = getAuthToken(); + if (token) { + headers.Authorization = `Bearer ${token}`; + } + + // Don't set Content-Type for FormData, let browser set it + return headers; +}; + +// ============================================================================ +// UTILITY FUNCTIONS +// ============================================================================ + +/** + * Validates if a response status indicates success + * @param {number} status - HTTP status code + * @returns {boolean} - True if status indicates success + */ +export const isSuccessStatus = (status) => { + return status >= 200 && status < 300; +}; + +/** + * Checks if an error is a network-related error + * @param {Error} error - The error to check + * @returns {boolean} - True if error is network-related + */ +export const isNetworkError = (error) => { + if (!error) return false; + + return error.name === 'TypeError' && error.message.includes('fetch') || + error.name === 'AbortError' || + error.code === 'NETWORK_ERROR'; +}; + +// TODO: Consider moving authentication state to Zustand store to eliminate localStorage duplication with authStore.js \ No newline at end of file diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index 51294f3998..529857fe45 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -3,8 +3,57 @@ import ReactDOM from "react-dom/client"; import { App } from "./App.jsx"; import "./index.css"; -ReactDOM.createRoot(document.getElementById("root")).render( - - - -); +/** + * Validates that the root DOM element exists + * @param {string} elementId - The ID of the root element to find + * @returns {HTMLElement} The root element + * @throws {Error} If root element is not found + */ +const validateRootElement = (elementId = "root") => { + const rootElement = document.getElementById(elementId); + + if (!rootElement) { + throw new Error(`Root element with id '${elementId}' not found in the document`); + } + + return rootElement; +}; + +/** + * Creates and configures the React root + * @param {HTMLElement} rootElement - The DOM element to render into + * @returns {Root} The React root instance + */ +const createReactRoot = (rootElement) => { + return ReactDOM.createRoot(rootElement); +}; + +/** + * Renders the application with React.StrictMode + * @param {Root} root - The React root instance + */ +const renderApp = (root) => { + root.render( + + + + ); +}; + +/** + * Initialize and render the React application + * Main entry point that orchestrates the app initialization + */ +const initializeApp = () => { + try { + const rootElement = validateRootElement(); + const root = createReactRoot(rootElement); + renderApp(root); + } catch (error) { + console.error("Failed to initialize application:", error); + throw error; + } +}; + +// Initialize the application +initializeApp(); diff --git a/frontend/src/pages/AdminPage.jsx b/frontend/src/pages/AdminPage.jsx index d4b80406d6..15cdc25bad 100644 --- a/frontend/src/pages/AdminPage.jsx +++ b/frontend/src/pages/AdminPage.jsx @@ -1,225 +1,32 @@ import { useAuth } from '../contexts/AuthContext'; import { Navigate } from 'react-router-dom'; -import styled from 'styled-components'; import { AuditLogTable } from '../components/admin/AuditLogTable'; - -const AdminContainer = styled.div` - min-height: 100vh; - background-color: #f9fafb; -`; - -const Header = styled.header` - background: white; - border-bottom: 1px solid #e5e7eb; - padding: 1rem 0; -`; - -const HeaderContent = styled.div` - max-width: 1200px; - margin: 0 auto; - padding: 0 1rem; - display: flex; - justify-content: space-between; - align-items: center; -`; - -const BackLink = styled.a` - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem 1rem; - background: #10b981; - color: white; - text-decoration: none; - border-radius: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - transition: all 0.2s; - - &:hover { - background: #059669; - } -`; - -const AdminBadge = styled.span` - padding: 0.5rem 1rem; - background: #fee2e2; - color: #991b1b; - border-radius: 9999px; - font-size: 0.875rem; - font-weight: 500; -`; - -const MainContent = styled.main` - max-width: 1200px; - margin: 0 auto; - padding: 2rem 1rem; -`; - -const PageHeader = styled.div` - margin-bottom: 2rem; -`; - -const PageTitle = styled.h1` - font-size: 2.5rem; - font-weight: 700; - color: #111827; - margin: 0 0 1rem 0; -`; - -const PageDescription = styled.p` - color: #6b7280; - font-size: 1.125rem; - margin: 0; -`; - -const StatsGrid = styled.div` - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; -`; - -const StatCard = styled.div` - background: white; - padding: 1.5rem; - border-radius: 0.75rem; - border: 1px solid #e5e7eb; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); -`; - -const StatValue = styled.div` - font-size: 2rem; - font-weight: 700; - color: #111827; - margin-bottom: 0.5rem; -`; - -const StatLabel = styled.div` - font-size: 0.875rem; - color: #6b7280; - font-weight: 500; -`; - -const StatIcon = styled.div` - display: inline-flex; - align-items: center; - justify-content: center; - width: 3rem; - height: 3rem; - border-radius: 0.75rem; - margin-bottom: 1rem; - - ${props => { - switch (props.type) { - case 'users': - return 'background: #dbeafe; color: #1e40af;'; - case 'actions': - return 'background: #d1fae5; color: #065f46;'; - case 'errors': - return 'background: #fee2e2; color: #991b1b;'; - case 'activity': - return 'background: #fef3c7; color: #92400e;'; - default: - return 'background: #f3f4f6; color: #374151;'; - } - }} -`; +import { AdminHeader } from '../components/admin/AdminHeader'; +import { AdminStats } from '../components/admin/AdminStats'; +import { AdminPageLayout, AdminPageHeader, AdminPageContent } from '../components/admin/AdminPageLayout'; export const AdminPage = () => { - const { user, logout, isAdmin } = useAuth(); + const { isAdmin } = useAuth(); // Redirect non-admin users if (!isAdmin()) { return ; } - const handleLogout = () => { - logout(); - }; - return ( - -
- - - - - - Back to Dashboard - - -
- Admin Panel - - Welcome, {user?.name} - - -
-
-
- - - - System Administration - - Monitor system activity and user actions with comprehensive audit logging. - - - - {/* Admin Stats */} - - - - - - - - 42 - Active Users - - - - - - - - - 1,247 - Total Actions Today - - - - - - - - - 3 - Failed Actions - - - - - - - - - 98.5% - System Uptime - - - - {/* Audit Log Table */} + + + + + + + + - -
+ + ); }; \ No newline at end of file diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index 4f0b38bf01..ad5365313c 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -1,9 +1,12 @@ import { useState, useCallback } from 'react'; -import { useAuth } from '../contexts/AuthContext'; import { SurvivalRateChart, AverageHeightChart, CO2AbsorptionChart } from '../components/charts'; import { GlobalFilters } from '../components/filters'; import { ExportButtonComponent } from '../components/ui/ExportButton'; -import { DarkModeToggle } from '../components/ui/DarkModeToggle'; +import { DashboardHeader } from '../components/ui/DashboardHeader'; +import { DashboardSidebar } from '../components/ui/DashboardSidebar'; +import { DashboardStatCard } from '../components/ui/DashboardStatCard'; +import { ForestOverviewSection } from '../components/ui/ForestOverviewSection'; +import { useSidebarState } from '../hooks/useSidebarState'; // Mock data for export const mockTreeData = [ @@ -18,21 +21,9 @@ const mockTreeData = [ ]; export const DashboardPage = () => { - const { user, logout, isAdmin } = useAuth(); + const { sidebarOpen, toggleSidebar, closeSidebar } = useSidebarState(); + // TODO: Consider moving filters state to Zustand store for better global state management const [filters, setFilters] = useState({}); - const [sidebarOpen, setSidebarOpen] = useState(false); - - const handleLogout = () => { - logout(); - }; - - const toggleSidebar = () => { - setSidebarOpen(!sidebarOpen); - }; - - const closeSidebar = () => { - setSidebarOpen(false); - }; const handleFiltersChange = useCallback((newFilters) => { setFilters(newFilters); @@ -54,108 +45,11 @@ export const DashboardPage = () => { return (
- {/* Top Header - Always visible */} -
-
-
- -

- Nanwa Dashboard -

-
-
- - Welcome, {user?.firstName || user?.name} - {isAdmin() && ( - - Admin - - )} - - - -
-
-
+ {/* Content Area with Sidebar */}
- - {/* Sidebar Overlay */} -
- - {/* Sidebar */} - + {/* Main Content */}
@@ -187,61 +81,46 @@ export const DashboardPage = () => { {/* Stats Cards */}
-
-
-
- - - -
-
-

Total Trees

-

10,247

-
-
-
- -
-
-
- - - -
-
-

Survival Rate

-

95.2%

-
-
-
- -
-
-
- - - -
-
-

Avg Height

-

2.4m

-
-
-
- -
-
-
- - - -
-
-

CO₂ Absorbed

-

1.2t

-
-
-
+ + + + } + title="Total Trees" + value="10,247" + color="green" + /> + + + + } + title="Survival Rate" + value="95.2%" + color="blue" + /> + + + + } + title="Avg Height" + value="2.4m" + color="yellow" + /> + + + + } + title="CO₂ Absorbed" + value="1.2t" + color="purple" + />
{/* Charts Grid */} @@ -257,49 +136,7 @@ export const DashboardPage = () => {
- {/* Additional Dashboard Content */} -
-

Forest Overview

-

- Your forests are performing excellently with strong growth indicators and high survival rates. -

-
-
-

Recent Activity

-
    -
  • -
    - New measurements recorded for Forest A -
  • -
  • -
    - Survival rate improved by 2.3% -
  • -
  • -
    - CO₂ absorption increased by 15% -
  • -
-
-
-

Next Actions

-
    -
  • -
    - Schedule maintenance for Forest B -
  • -
  • -
    - Review growth data for Q4 report -
  • -
  • -
    - Address low-performing areas in Forest C -
  • -
-
-
-
+
diff --git a/frontend/src/pages/ErrorPages.jsx b/frontend/src/pages/ErrorPages.jsx index 5c332e0543..50c99e1a50 100644 --- a/frontend/src/pages/ErrorPages.jsx +++ b/frontend/src/pages/ErrorPages.jsx @@ -1,246 +1,30 @@ import React from 'react'; -import { Link, useNavigate } from 'react-router-dom'; -import styled from 'styled-components'; - -const ErrorContainer = styled.div` - min-height: 100vh; - display: flex; - align-items: center; - justify-content: center; - padding: 2rem; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); -`; - -const ErrorCard = styled.div` - background: white; - border-radius: 16px; - padding: 3rem; - max-width: 500px; - width: 100%; - text-align: center; - box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1); - - @media (max-width: 768px) { - padding: 2rem; - margin: 1rem; - } -`; - -const ErrorCode = styled.h1` - font-size: 6rem; - font-weight: 800; - color: #dc3545; - margin: 0; - line-height: 1; - - @media (max-width: 768px) { - font-size: 4rem; - } -`; - -const ErrorTitle = styled.h2` - font-size: 2rem; - font-weight: 600; - color: #333; - margin: 1rem 0; - - @media (max-width: 768px) { - font-size: 1.5rem; - } -`; - -const ErrorMessage = styled.p` - font-size: 1.1rem; - color: #666; - line-height: 1.6; - margin: 1.5rem 0 2rem 0; -`; - -const ButtonGroup = styled.div` - display: flex; - gap: 1rem; - justify-content: center; - flex-wrap: wrap; - margin-top: 2rem; -`; - -const Button = styled.button` - padding: 0.75rem 2rem; - border: none; - border-radius: 8px; - font-size: 1rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s ease; - text-decoration: none; - display: inline-flex; - align-items: center; - gap: 0.5rem; - - &:focus { - outline: 2px solid #007bff; - outline-offset: 2px; - } - - &:disabled { - opacity: 0.6; - cursor: not-allowed; - } -`; - -const PrimaryButton = styled(Button)` - background-color: #007bff; - color: white; - - &:hover:not(:disabled) { - background-color: #0056b3; - transform: translateY(-2px); - } -`; - -const SecondaryButton = styled(Button)` - background-color: transparent; - color: #6c757d; - border: 2px solid #6c757d; - - &:hover:not(:disabled) { - background-color: #6c757d; - color: white; - transform: translateY(-2px); - } -`; - -const StyledLink = styled(Link)` - text-decoration: none; - color: inherit; -`; - -const Illustration = styled.div` - margin-bottom: 2rem; - - svg { - width: 120px; - height: 120px; - opacity: 0.7; - - @media (max-width: 768px) { - width: 80px; - height: 80px; - } - } -`; - -const NotFoundIllustration = () => ( - - - - - - -); - -const ServerErrorIllustration = () => ( - - - - - - - -); +import { ErrorPageLayout, NotFoundIllustration, ServerErrorIllustration } from '@/components/ui'; export const NotFoundPage = () => { - const navigate = useNavigate(); - - const handleGoBack = () => { - navigate(-1); - }; - - const handleGoHome = () => { - navigate('/'); - }; - return ( - - - - - - - 404 - Page Not Found - - The page you're looking for doesn't exist. It might have been moved, - deleted, or you entered the wrong URL. - - - - - - - - - Go Back - - - - - - - - Go Home - - - - + } + showBackButton={true} + showHomeButton={true} + showReloadButton={false} + /> ); }; export const ServerErrorPage = () => { - const navigate = useNavigate(); - - const handleReload = () => { - window.location.reload(); - }; - - const handleGoHome = () => { - navigate('/'); - }; - return ( - - - - - - - 500 - Internal Server Error - - Something went wrong on our end. We're working to fix it. - Please try again in a few moments. - - - - - - - - - - - Try Again - - - - - - - - Go Home - - - - + } + showBackButton={false} + showHomeButton={true} + showReloadButton={true} + /> ); }; \ No newline at end of file diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx index e294056de8..1fbf785bd1 100644 --- a/frontend/src/pages/LandingPage.jsx +++ b/frontend/src/pages/LandingPage.jsx @@ -1,185 +1,13 @@ -import { Link } from 'react-router-dom'; -import { Navbar } from '../components/ui/Navbar'; +import { Navbar, HeroSection, FeaturesSection, AboutSection, Footer } from '../components/ui'; export const LandingPage = () => { return (
- {/* Navigation Header */} - - {/* Hero Section */} -
-
-
-
-

- Discover, Monitor & Export - Real-Time Tree Insights -

-

- Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights. -

-
- - Start Your Free Trial - - - Learn More - -
-
-
-
- - {/* Features Section */} -
-
-
-

- Powerful Features for Tree Management -

-

- Everything you need to monitor, analyze, and export tree data with precision and ease. -

-
- -
-
-
- - - -
-

Real-Time Analytics

-

- Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics. -

-
- -
-
- - - - -
-

Interactive Mapping

-

- Visualize forests and individual trees with marker clustering and detailed tree information. -

-
- -
-
- - - -
-

Data Export

-

- Export filtered datasets to CSV or XLSX format for reporting and analysis. -

-
-
-
-
- - {/* About Section */} -
-
-
-
-

- Empowering Sustainable Forestry -

-

- Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects. -

-

- Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs. -

- - Join Nanwa Today - -
-
-
-
-
10K+
-
Trees Monitored
-
-
-
95%
-
Survival Rate
-
-
-
50+
-
Forest Projects
-
-
-
24/7
-
Real-Time Data
-
-
-
-
-
-
- - {/* Footer */} -
-
-
-
-

Nanwa

-

- Empowering sustainable forestry through data-driven insights and real-time monitoring. -

-
-
-

Product

- -
-
-

Company

- -
-
-

Support

- -
-
-
-

© 2024 Nanwa. All rights reserved.

-
-
-
+ + + +
); }; \ No newline at end of file diff --git a/frontend/src/pages/LoginPage.jsx b/frontend/src/pages/LoginPage.jsx index 306f6ea8e2..5c05359757 100644 --- a/frontend/src/pages/LoginPage.jsx +++ b/frontend/src/pages/LoginPage.jsx @@ -1,97 +1,18 @@ -import { useState } from 'react'; -import { Link, useNavigate } from 'react-router-dom'; -import { useAuth } from '../contexts/AuthContext'; +import { Link } from 'react-router-dom'; import { Navbar } from '../components/ui/Navbar'; -import { useColdStartDetection } from '../hooks/useColdStartDetection'; import { ColdStartLoader } from '../components/ui/ColdStartLoader'; +import { LoginForm } from '../components/auth/LoginForm'; +import { DemoCredentials } from '../components/auth/DemoCredentials'; +import { useLogin } from '../hooks/useLogin'; export const LoginPage = () => { - const [formData, setFormData] = useState({ - email: '', - password: '', - }); - const [errors, setErrors] = useState({}); - const [isSubmitting, setIsSubmitting] = useState(false); - const [showPassword, setShowPassword] = useState(false); - - const { login } = useAuth(); - const navigate = useNavigate(); - const { + errors, + isSubmitting, connectionState, - handleRetry, - startConnection, - connectionSuccess, - connectionFailed, - resetConnection - } = useColdStartDetection(); - - const validateForm = () => { - const newErrors = {}; - - if (!formData.email) { - newErrors.email = 'Email is required'; - } else if (!/\S+@\S+\.\S+/.test(formData.email)) { - newErrors.email = 'Email is invalid'; - } - - if (!formData.password) { - newErrors.password = 'Password is required'; - } else if (formData.password.length < 6) { - newErrors.password = 'Password must be at least 6 characters'; - } - - setErrors(newErrors); - return Object.keys(newErrors).length === 0; - }; - - const handleInputChange = (e) => { - const { name, value } = e.target; - setFormData(prev => ({ - ...prev, - [name]: value - })); - - // Clear error when user starts typing - if (errors[name]) { - setErrors(prev => ({ - ...prev, - [name]: '' - })); - } - }; - - const handleSubmit = async (e) => { - e.preventDefault(); - - if (!validateForm()) { - return; - } - - setIsSubmitting(true); - startConnection(); - - try { - const result = await login(formData.email, formData.password, handleRetry); - - if (result.success) { - connectionSuccess(); - } else { - connectionFailed(new Error(result.error)); - setErrors({ general: result.error }); - } - } catch (error) { - connectionFailed(error); - setErrors({ general: 'Connection failed. Please check your internet connection and try again.' }); - } finally { - setIsSubmitting(false); - } - }; - - const handleCancelConnection = () => { - resetConnection(); - setIsSubmitting(false); - }; + handleLogin, + handleCancelConnection + } = useLogin(); return ( <> @@ -103,145 +24,26 @@ export const LoginPage = () => { />
-
- -

Nanwa

- -

Welcome back

-

Sign in to your account to continue

-
- -
- {errors.general && ( -
- {errors.general} -
- )} - -
- - - {errors.email && ( -

- {errors.email} -

- )} -
- -
- -
- - -
- {errors.password && ( -

- {errors.password} -

- )} -
- -
-
- - -
- -
- - -
- -
-

- Don't have an account?{' '} - - Sign up - -

-
- - {/* Demo credentials */} -
-

Demo credentials:

-
-

Admin: admin@nanwa.com / admin123

-

User: user@nanwa.com / user123

-
-
+ + +
); -}; \ No newline at end of file +}; + +// Header component for the login page +const LoginHeader = () => ( +
+ +

Nanwa

+ +

Welcome back

+

Sign in to your account to continue

+
+); \ No newline at end of file diff --git a/frontend/src/pages/MapPage.jsx b/frontend/src/pages/MapPage.jsx index f58c6b3c39..2a7b5274f0 100644 --- a/frontend/src/pages/MapPage.jsx +++ b/frontend/src/pages/MapPage.jsx @@ -1,34 +1,18 @@ -import { useState, useCallback } from 'react'; -import { useAuth } from '../contexts/AuthContext'; import styled from 'styled-components'; import { ForestMap } from '../components/map/ForestMap'; import { GlobalFilters } from '../components/filters'; import { TreeDetailModal } from '../components/ui/TreeDetailModal'; -import { ExportButtonComponent } from '../components/ui/ExportButton'; +import { MapPageHeader } from '../components/ui/MapPageHeader'; +import { MapSidebar } from '../components/ui/MapSidebar'; +import { MapPageHeaderSection } from '../components/ui/MapPageHeaderSection'; +import { useMapFilters } from '../hooks/useMapFilters'; +import { useTreeSelection } from '../hooks/useTreeSelection'; const MapPageContainer = styled.div` min-height: 100vh; background-color: #f9fafb; `; -const Header = styled.header` - background: white; - border-bottom: 1px solid #e5e7eb; - padding: 1rem 0; -`; - -const Sidebar = styled.aside` - background: white; - border-right: 1px solid #e5e7eb; - width: 250px; - position: fixed; - top: 0; - left: 0; - height: 100vh; - overflow-y: auto; - z-index: 10; -`; - const MainContent = styled.main` margin-left: 250px; padding: 2rem; @@ -49,30 +33,8 @@ const mockTreeData = [ export const MapPage = () => { - const { user, logout, isAdmin } = useAuth(); - const [filters, setFilters] = useState({}); - const [selectedTree, setSelectedTree] = useState(null); - const [isModalOpen, setIsModalOpen] = useState(false); - - const handleLogout = () => { - logout(); - }; - - const handleFiltersChange = useCallback((newFilters) => { - setFilters(newFilters); - // TODO: Update map data based on filters - console.log('Map filters changed:', newFilters); - }, []); - - const handleTreeSelect = (tree) => { - setSelectedTree(tree); - setIsModalOpen(true); - }; - - const handleCloseTreeDetail = () => { - setSelectedTree(null); - setIsModalOpen(false); - }; + const { filters, handleFiltersChange } = useMapFilters(); + const { selectedTree, isModalOpen, handleTreeSelect, handleCloseTreeDetail } = useTreeSelection(); const handleExportStart = () => { console.log('Export started'); @@ -88,107 +50,19 @@ export const MapPage = () => { return ( - {/* Header */} -
-
-
-
-

Nanwa Map View

-
-
-
- Welcome, {user?.name} - {isAdmin() && ( - - Admin - - )} -
- -
-
-
-
- - {/* Sidebar */} - - - + + {/* Main Content */}
- {/* Page Header */} -
-
-
-

Forest Map

-

- Explore your forests and individual trees with interactive mapping. -

-
-
- -
-
-
+ {/* Global Filters */} diff --git a/frontend/src/pages/RegisterPage.jsx b/frontend/src/pages/RegisterPage.jsx index a241e1293c..870d289f51 100644 --- a/frontend/src/pages/RegisterPage.jsx +++ b/frontend/src/pages/RegisterPage.jsx @@ -1,6 +1,5 @@ -import { useState } from 'react'; import { Link } from 'react-router-dom'; -import { useAuth } from '../contexts/AuthContext'; +import { RegisterForm } from '../components/auth/RegisterForm'; import styled from 'styled-components'; const RegisterContainer = styled.div` @@ -21,332 +20,24 @@ const RegisterCard = styled.div` max-width: 450px; `; -const PasswordStrengthBar = styled.div` - width: 100%; - height: 4px; - background-color: #e5e7eb; - border-radius: 2px; - overflow: hidden; - margin-top: 0.5rem; -`; - -const PasswordStrengthFill = styled.div` - height: 100%; - background-color: ${props => { - if (props.strength === 'weak') return '#ef4444'; - if (props.strength === 'medium') return '#f59e0b'; - if (props.strength === 'strong') return '#10b981'; - return '#e5e7eb'; - }}; - width: ${props => { - if (props.strength === 'weak') return '33%'; - if (props.strength === 'medium') return '66%'; - if (props.strength === 'strong') return '100%'; - return '0%'; - }}; - transition: all 0.3s ease; -`; - export const RegisterPage = () => { - const [formData, setFormData] = useState({ - email: '', - password: '', - confirmPassword: '', - }); - const [errors, setErrors] = useState({}); - const [isSubmitting, setIsSubmitting] = useState(false); - const [showPassword, setShowPassword] = useState(false); - const [showConfirmPassword, setShowConfirmPassword] = useState(false); - - const { register } = useAuth(); - - const getPasswordStrength = (password) => { - if (!password) return { strength: 'none', score: 0 }; - - let score = 0; - if (password.length >= 8) score += 1; - if (/[a-z]/.test(password)) score += 1; - if (/[A-Z]/.test(password)) score += 1; - if (/[0-9]/.test(password)) score += 1; - if (/[^A-Za-z0-9]/.test(password)) score += 1; - - if (score <= 2) return { strength: 'weak', score }; - if (score <= 3) return { strength: 'medium', score }; - return { strength: 'strong', score }; - }; - - const passwordStrength = getPasswordStrength(formData.password); - - const validateForm = () => { - const newErrors = {}; - - if (!formData.email) { - newErrors.email = 'Email is required'; - } else if (!/\S+@\S+\.\S+/.test(formData.email)) { - newErrors.email = 'Email is invalid'; - } - - if (!formData.password) { - newErrors.password = 'Password is required'; - } else if (formData.password.length < 6) { - newErrors.password = 'Password must be at least 6 characters'; - } else if (passwordStrength.strength === 'weak') { - newErrors.password = 'Password is too weak. Include uppercase, lowercase, numbers, and special characters.'; - } - - if (!formData.confirmPassword) { - newErrors.confirmPassword = 'Please confirm your password'; - } else if (formData.password !== formData.confirmPassword) { - newErrors.confirmPassword = 'Passwords do not match'; - } - - setErrors(newErrors); - return Object.keys(newErrors).length === 0; - }; - - const handleInputChange = (e) => { - const { name, value } = e.target; - setFormData(prev => ({ - ...prev, - [name]: value - })); - - // Clear error when user starts typing - if (errors[name]) { - setErrors(prev => ({ - ...prev, - [name]: '' - })); - } - }; - - const handleSubmit = async (e) => { - e.preventDefault(); - - if (!validateForm()) { - return; - } - - setIsSubmitting(true); - - try { - const result = await register(formData.email, formData.password, formData.confirmPassword); - - if (!result.success) { - setErrors({ general: result.error }); - } - } catch (error) { - setErrors({ general: 'An unexpected error occurred. Please try again.' }); - } finally { - setIsSubmitting(false); - } - }; - - const getPasswordStrengthText = () => { - switch (passwordStrength.strength) { - case 'weak': - return 'Weak password'; - case 'medium': - return 'Medium strength password'; - case 'strong': - return 'Strong password'; - default: - return ''; - } - }; return ( -
- -

Nanwa

- -

Create your account

-

Join Nanwa to start monitoring your trees

-
- -
- {errors.general && ( -
- {errors.general} -
- )} - -
- - - {errors.email && ( -

- {errors.email} -

- )} -
- -
- -
- - -
- - {formData.password && ( -
- - - -

- {getPasswordStrengthText()} -

-
- )} - - {errors.password && ( -

- {errors.password} -

- )} -
- -
- -
- - -
- {errors.confirmPassword && ( -

- {errors.confirmPassword} -

- )} -
- -
- - -
- - -
- -
-

- Already have an account?{' '} - - Sign in - -

-
+ +
); -}; \ No newline at end of file +}; + +const RegisterHeader = () => ( +
+ +

Nanwa

+ +

Create your account

+

Join Nanwa to start monitoring your trees

+
+); \ No newline at end of file diff --git a/frontend/src/pages/TreeDetailPage.jsx b/frontend/src/pages/TreeDetailPage.jsx index 17b5a96f55..a17f8b98fd 100644 --- a/frontend/src/pages/TreeDetailPage.jsx +++ b/frontend/src/pages/TreeDetailPage.jsx @@ -1,242 +1,24 @@ -import { useState, useEffect } from 'react'; -import { useParams, useNavigate, Link } from 'react-router-dom'; +import { useParams } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; +import LoadingSpinner from '../components/ui/LoadingSpinner'; +import { + TreeDetailHeader, + TreeDetailInfo, + TreeDetailSidebar, + TreeDetailMeasurements, + PageContainer, + MainContent, + TreeHeader, + TreeTitle, + TreeSubtitle, + ContentGrid, + MainSection +} from '../components/ui'; +import { useTreeDetail } from '../hooks/useTreeDetail'; +import { useTreeNavigation } from '../hooks/useTreeNavigation'; +import { useTreeShare } from '../hooks/useTreeShare'; import styled from 'styled-components'; -const PageContainer = styled.div` - min-height: 100vh; - background-color: #f9fafb; -`; - -const Header = styled.header` - background: white; - border-bottom: 1px solid #e5e7eb; - padding: 1rem 0; -`; - -const HeaderContent = styled.div` - max-width: 1200px; - margin: 0 auto; - padding: 0 1rem; - display: flex; - justify-content: space-between; - align-items: center; -`; - -const Navigation = styled.nav` - display: flex; - align-items: center; - gap: 1rem; -`; - -const NavButton = styled.button` - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem 1rem; - background: #f3f4f6; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - color: #374151; - text-decoration: none; - font-size: 0.875rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background: #e5e7eb; - border-color: #9ca3af; - } - - &:disabled { - opacity: 0.5; - cursor: not-allowed; - } -`; - -const BackLink = styled(Link)` - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem 1rem; - background: #10b981; - color: white; - text-decoration: none; - border-radius: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - transition: all 0.2s; - - &:hover { - background: #059669; - } -`; - -const MainContent = styled.main` - max-width: 1200px; - margin: 0 auto; - padding: 2rem 1rem; -`; - -const TreeHeader = styled.div` - background: white; - border-radius: 0.75rem; - padding: 2rem; - margin-bottom: 2rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); - border: 1px solid #e5e7eb; -`; - -const TreeTitle = styled.h1` - font-size: 2.5rem; - font-weight: 700; - color: #111827; - margin: 0 0 1rem 0; -`; - -const TreeSubtitle = styled.p` - color: #6b7280; - font-size: 1.125rem; - margin: 0; -`; - -const ContentGrid = styled.div` - display: grid; - grid-template-columns: 1fr; - gap: 2rem; - - @media (min-width: 1024px) { - grid-template-columns: 2fr 1fr; - } -`; - -const MainSection = styled.div` - display: flex; - flex-direction: column; - gap: 2rem; -`; - -const SideSection = styled.div` - display: flex; - flex-direction: column; - gap: 2rem; -`; - -const InfoCard = styled.div` - background: white; - border-radius: 0.75rem; - padding: 2rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); - border: 1px solid #e5e7eb; -`; - -const CardTitle = styled.h2` - font-size: 1.5rem; - font-weight: 600; - color: #111827; - margin: 0 0 1.5rem 0; -`; - -const InfoGrid = styled.div` - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1rem; - margin-bottom: 1.5rem; -`; - -const InfoItem = styled.div` - padding: 1rem; - background: #f9fafb; - border-radius: 0.5rem; - border: 1px solid #e5e7eb; -`; - -const InfoLabel = styled.div` - font-size: 0.875rem; - color: #6b7280; - margin-bottom: 0.5rem; -`; - -const InfoValue = styled.div` - font-size: 1.125rem; - font-weight: 600; - color: #111827; -`; - -const HealthBadge = styled.span` - padding: 0.5rem 1rem; - border-radius: 9999px; - font-size: 0.875rem; - font-weight: 500; - ${props => { - switch (props.health) { - case 'healthy': - return 'background: #d1fae5; color: #065f46;'; - case 'warning': - return 'background: #fef3c7; color: #92400e;'; - case 'critical': - return 'background: #fee2e2; color: #991b1b;'; - default: - return 'background: #f3f4f6; color: #374151;'; - } - }} -`; - -const MeasurementTable = styled.table` - width: 100%; - border-collapse: collapse; - margin-top: 1rem; -`; - -const TableHeader = styled.thead` - background: #f9fafb; -`; - -const TableRow = styled.tr` - border-bottom: 1px solid #e5e7eb; - - &:last-child { - border-bottom: none; - } -`; - -const TableCell = styled.td` - padding: 0.75rem; - text-align: left; - font-size: 0.875rem; - color: #111827; -`; - -const TableHeaderCell = styled.th` - padding: 0.75rem; - text-align: left; - font-size: 0.875rem; - font-weight: 600; - color: #374151; -`; - -const LoadingSpinner = styled.div` - display: flex; - justify-content: center; - align-items: center; - height: 200px; - - .spinner { - width: 40px; - height: 40px; - border: 4px solid #f3f4f6; - border-top: 4px solid #10b981; - border-radius: 50%; - animation: spin 1s linear infinite; - } - - @keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } - } -`; - const ErrorMessage = styled.div` background: #fee2e2; color: #991b1b; @@ -246,104 +28,27 @@ const ErrorMessage = styled.div` text-align: center; `; -// Mock data - in real app this would come from API -const mockTrees = [ - { id: 1, name: 'Tree A-001', species: 'Pine', height: 2.4, health: 'healthy', lat: 59.3293, lng: 18.0686 }, - { id: 2, name: 'Tree A-002', species: 'Oak', height: 2.1, health: 'healthy', lat: 59.3300, lng: 18.0690 }, - { id: 3, name: 'Tree A-003', species: 'Birch', height: 1.8, health: 'warning', lat: 59.3285, lng: 18.0675 }, - { id: 4, name: 'Tree A-004', species: 'Spruce', height: 1.5, health: 'critical', lat: 59.3310, lng: 18.0700 }, - { id: 5, name: 'Tree A-005', species: 'Pine', height: 2.7, health: 'healthy', lat: 59.3275, lng: 18.0660 }, - { id: 6, name: 'Tree A-006', species: 'Oak', height: 2.3, health: 'healthy', lat: 59.3320, lng: 18.0710 }, - { id: 7, name: 'Tree A-007', species: 'Birch', height: 1.9, health: 'warning', lat: 59.3265, lng: 18.0650 }, - { id: 8, name: 'Tree A-008', species: 'Spruce', height: 2.5, health: 'healthy', lat: 59.3330, lng: 18.0720 }, -]; - -const mockMeasurementHistory = [ - { date: '2024-01-15', height: 2.4, diameter: 8.2, health: 'healthy' }, - { date: '2024-02-15', height: 2.3, diameter: 8.1, health: 'healthy' }, - { date: '2024-03-15', height: 2.2, diameter: 8.0, health: 'healthy' }, - { date: '2024-04-15', height: 2.1, diameter: 7.9, health: 'warning' }, - { date: '2024-05-15', height: 2.0, diameter: 7.8, health: 'warning' }, - { date: '2024-06-15', height: 1.9, diameter: 7.7, health: 'warning' }, - { date: '2024-07-15', height: 1.8, diameter: 7.6, health: 'critical' }, - { date: '2024-08-15', height: 1.7, diameter: 7.5, health: 'critical' }, - { date: '2024-09-15', height: 1.6, diameter: 7.4, health: 'critical' }, - { date: '2024-10-15', height: 1.5, diameter: 7.3, health: 'critical' }, -]; - export const TreeDetailPage = () => { const { id } = useParams(); - const navigate = useNavigate(); - const { user, logout } = useAuth(); - const [tree, setTree] = useState(null); - const [measurements, setMeasurements] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - const fetchTreeData = async () => { - try { - setLoading(true); - // Simulate API call - await new Promise(resolve => setTimeout(resolve, 500)); - - const treeData = mockTrees.find(t => t.id === parseInt(id)); - if (!treeData) { - setError('Tree not found'); - return; - } - - setTree(treeData); - setMeasurements(mockMeasurementHistory); - } catch (err) { - setError('Failed to load tree data'); - } finally { - setLoading(false); - } - }; - - fetchTreeData(); - }, [id]); - - const handlePreviousTree = () => { - const currentIndex = mockTrees.findIndex(t => t.id === parseInt(id)); - if (currentIndex > 0) { - navigate(`/tree/${mockTrees[currentIndex - 1].id}`); - } - }; - - const handleNextTree = () => { - const currentIndex = mockTrees.findIndex(t => t.id === parseInt(id)); - if (currentIndex < mockTrees.length - 1) { - navigate(`/tree/${mockTrees[currentIndex + 1].id}`); - } - }; - - const handleShare = () => { - if (navigator.share) { - navigator.share({ - title: `Tree Details - ${tree.name}`, - text: `Check out this tree: ${tree.name} (${tree.species})`, - url: window.location.href - }); - } else { - navigator.clipboard.writeText(window.location.href); - alert('Tree URL copied to clipboard!'); - } - }; + const { user } = useAuth(); + + // Custom hooks for data fetching and navigation + const { tree, measurements, loading, error, trees } = useTreeDetail(id); + const { hasPrevious, hasNext, handlePreviousTree, handleNextTree } = useTreeNavigation(id, trees); + const handleShare = useTreeShare(tree); if (loading) { return ( -
- - ← Back to Map - -
+ - -
-
+
); @@ -352,11 +57,13 @@ export const TreeDetailPage = () => { if (error || !tree) { return ( -
- - ← Back to Map - -
+ {error || 'Tree not found'} @@ -366,45 +73,15 @@ export const TreeDetailPage = () => { ); } - const currentIndex = mockTrees.findIndex(t => t.id === parseInt(id)); - const hasPrevious = currentIndex > 0; - const hasNext = currentIndex < mockTrees.length - 1; - return ( -
- - - - - - Back to Map - - - - - - - - Previous - - - - Next - - - - - - - - - - Share - - - -
+ @@ -414,94 +91,11 @@ export const TreeDetailPage = () => { - {/* Basic Information */} - - Tree Information - - - Current Height - {tree.height}m - - - Health Status - - {tree.health} - - - - Species - {tree.species} - - - Planted Date - Mar 15, 2023 - - - - - {/* Measurement History */} - - Measurement History - - - - Date - Height (m) - Diameter (cm) - Health - - - - {measurements.slice(0, 10).map((measurement, index) => ( - - {new Date(measurement.date).toLocaleDateString()} - {measurement.height} - {measurement.diameter} - - {measurement.health} - - - ))} - - - + + - - {/* Location */} - - Location - - - Latitude - {tree.lat.toFixed(6)} - - - Longitude - {tree.lng.toFixed(6)} - - - - - {/* Contract Status */} - - Contract Details - - - Status - - - Active - - - - - Last Inspection - Jan 15, 2024 - - - - +
diff --git a/frontend/src/test/setup.js b/frontend/src/test/setup.js index 0f9d923351..88f8419bcb 100644 --- a/frontend/src/test/setup.js +++ b/frontend/src/test/setup.js @@ -1,32 +1,5 @@ import '@testing-library/jest-dom'; +import { setupGlobalMocks } from './utils/globalMocks'; -// Mock IntersectionObserver -global.IntersectionObserver = class IntersectionObserver { - constructor() {} - disconnect() {} - observe() {} - unobserve() {} -}; - -// Mock ResizeObserver -global.ResizeObserver = class ResizeObserver { - constructor() {} - disconnect() {} - observe() {} - unobserve() {} -}; - -// Mock matchMedia -Object.defineProperty(window, 'matchMedia', { - writable: true, - value: vi.fn().mockImplementation((query) => ({ - matches: false, - media: query, - onchange: null, - addListener: vi.fn(), // deprecated - removeListener: vi.fn(), // deprecated - addEventListener: vi.fn(), - removeEventListener: vi.fn(), - dispatchEvent: vi.fn(), - })), -}); \ No newline at end of file +// Initialize all global mocks +setupGlobalMocks(); \ No newline at end of file diff --git a/frontend/src/test/utils/globalMocks.js b/frontend/src/test/utils/globalMocks.js new file mode 100644 index 0000000000..ec6dae6bea --- /dev/null +++ b/frontend/src/test/utils/globalMocks.js @@ -0,0 +1,60 @@ +/** + * Global mocks for testing environment + * Provides mock implementations for browser APIs that aren't available in jsdom + */ + +/** + * Mock IntersectionObserver API + * Used for components that implement lazy loading or visibility detection + */ +export const mockIntersectionObserver = () => { + global.IntersectionObserver = class IntersectionObserver { + constructor() {} + disconnect() {} + observe() {} + unobserve() {} + }; +}; + +/** + * Mock ResizeObserver API + * Used for components that need to respond to element size changes + */ +export const mockResizeObserver = () => { + global.ResizeObserver = class ResizeObserver { + constructor() {} + disconnect() {} + observe() {} + unobserve() {} + }; +}; + +/** + * Mock matchMedia API + * Used for responsive design and media query handling + */ +export const mockMatchMedia = () => { + Object.defineProperty(window, 'matchMedia', { + writable: true, + value: vi.fn().mockImplementation((query) => ({ + matches: false, + media: query, + onchange: null, + addListener: vi.fn(), // deprecated + removeListener: vi.fn(), // deprecated + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn(), + })), + }); +}; + +/** + * Setup all global mocks + * Call this function in test setup to initialize all necessary mocks + */ +export const setupGlobalMocks = () => { + mockIntersectionObserver(); + mockResizeObserver(); + mockMatchMedia(); +}; \ No newline at end of file diff --git a/frontend/src/test/utils/index.js b/frontend/src/test/utils/index.js new file mode 100644 index 0000000000..c644feff6c --- /dev/null +++ b/frontend/src/test/utils/index.js @@ -0,0 +1,7 @@ +/** + * Test utilities exports + * Centralized exports for all test-related utilities + */ + +export * from './globalMocks'; +export * from './testHelpers'; \ No newline at end of file diff --git a/frontend/src/test/utils/testHelpers.js b/frontend/src/test/utils/testHelpers.js new file mode 100644 index 0000000000..51f54d275f --- /dev/null +++ b/frontend/src/test/utils/testHelpers.js @@ -0,0 +1,87 @@ +/** + * Common test utilities and helpers + * Provides reusable functions for common testing patterns + */ + +import { render } from '@testing-library/react'; +import { BrowserRouter } from 'react-router-dom'; +import { AuthProvider } from '../../contexts/AuthContext'; +import { ToastProvider } from '../../contexts/ToastContext'; +import { DarkModeProvider } from '../../contexts/DarkModeContext'; + +/** + * Custom render function with common providers + * Wraps components with necessary context providers for testing + */ +export const renderWithProviders = (component, options = {}) => { + const { initialEntries = ['/'] } = options; + + const Wrapper = ({ children }) => ( + + + + + {children} + + + + + ); + + return render(component, { wrapper: Wrapper, ...options }); +}; + +/** + * Mock user object for testing authentication + */ +export const mockUser = { + id: 'test-user-id', + email: 'test@example.com', + role: 'user', + createdAt: new Date().toISOString(), +}; + +/** + * Mock admin user object for testing admin features + */ +export const mockAdminUser = { + ...mockUser, + role: 'admin', + email: 'admin@example.com', +}; + +/** + * Mock forest data for testing + */ +export const mockForest = { + _id: 'test-forest-id', + name: 'Test Forest', + location: 'Test Location', + coordinates: { lat: 59.3293, lng: 18.0686 }, + area: 1000, + createdAt: new Date().toISOString(), +}; + +/** + * Mock tree data for testing + */ +export const mockTree = { + _id: 'test-tree-id', + species: 'Oak', + height: 150, + diameter: 30, + status: 'healthy', + plantedDate: new Date().toISOString(), + location: { lat: 59.3293, lng: 18.0686 }, + forestId: 'test-forest-id', + createdAt: new Date().toISOString(), +}; + +/** + * Creates a mock API response + */ +export const createMockApiResponse = (data, status = 200) => ({ + data, + status, + message: status === 200 ? 'Success' : 'Error', +}); \ No newline at end of file diff --git a/frontend/src/utils/coreWebVitals.js b/frontend/src/utils/coreWebVitals.js new file mode 100644 index 0000000000..2497506e74 --- /dev/null +++ b/frontend/src/utils/coreWebVitals.js @@ -0,0 +1,123 @@ +// Core Web Vitals monitoring utility +export class CoreWebVitalsMonitor { + constructor() { + this.metrics = {}; + this.observers = new Map(); + this.isSupported = typeof window !== 'undefined' && 'PerformanceObserver' in window; + + if (this.isSupported) { + this.initializeObservers(); + } + } + + initializeObservers() { + this.observeLargestContentfulPaint(); + this.observeFirstInputDelay(); + this.observeCumulativeLayoutShift(); + } + + observeLargestContentfulPaint() { + try { + const observer = new PerformanceObserver((list) => { + const entries = list.getEntries(); + const lastEntry = entries[entries.length - 1]; + + this.metrics.lcp = { + value: lastEntry.startTime, + timestamp: Date.now(), + rating: this.rateLCP(lastEntry.startTime) + }; + + this.onMetricUpdate('LCP', this.metrics.lcp); + }); + + observer.observe({ type: 'largest-contentful-paint', buffered: true }); + this.observers.set('lcp', observer); + } catch (error) { + console.warn('LCP observer not supported:', error); + } + } + + observeFirstInputDelay() { + try { + const observer = new PerformanceObserver((list) => { + const entries = list.getEntries(); + entries.forEach((entry) => { + this.metrics.fid = { + value: entry.processingStart - entry.startTime, + timestamp: Date.now(), + rating: this.rateFID(entry.processingStart - entry.startTime) + }; + + this.onMetricUpdate('FID', this.metrics.fid); + }); + }); + + observer.observe({ type: 'first-input', buffered: true }); + this.observers.set('fid', observer); + } catch (error) { + console.warn('FID observer not supported:', error); + } + } + + observeCumulativeLayoutShift() { + try { + let clsValue = 0; + const observer = new PerformanceObserver((list) => { + const entries = list.getEntries(); + entries.forEach((entry) => { + if (!entry.hadRecentInput) { + clsValue += entry.value; + } + }); + + this.metrics.cls = { + value: clsValue, + timestamp: Date.now(), + rating: this.rateCLS(clsValue) + }; + + this.onMetricUpdate('CLS', this.metrics.cls); + }); + + observer.observe({ type: 'layout-shift', buffered: true }); + this.observers.set('cls', observer); + } catch (error) { + console.warn('CLS observer not supported:', error); + } + } + + rateLCP(value) { + if (value <= 2500) return 'good'; + if (value <= 4000) return 'needs-improvement'; + return 'poor'; + } + + rateFID(value) { + if (value <= 100) return 'good'; + if (value <= 300) return 'needs-improvement'; + return 'poor'; + } + + rateCLS(value) { + if (value <= 0.1) return 'good'; + if (value <= 0.25) return 'needs-improvement'; + return 'poor'; + } + + onMetricUpdate(type, data) { + // Override this method to handle metric updates + if (process.env.NODE_ENV === 'development') { + console.log(`[Core Web Vitals] ${type}:`, data); + } + } + + getMetrics() { + return { ...this.metrics }; + } + + disconnect() { + this.observers.forEach(observer => observer.disconnect()); + this.observers.clear(); + } +} \ No newline at end of file diff --git a/frontend/src/utils/dateUtils.js b/frontend/src/utils/dateUtils.js new file mode 100644 index 0000000000..3d628b92fb --- /dev/null +++ b/frontend/src/utils/dateUtils.js @@ -0,0 +1,56 @@ +const isValidDate = (date) => { + const parsed = new Date(date); + return !isNaN(parsed.getTime()); +}; + +const safeCreateDate = (date) => { + if (!date) return null; + const parsed = new Date(date); + return isNaN(parsed.getTime()) ? null : parsed; +}; + +export const formatTimestamp = (timestamp) => { + const date = safeCreateDate(timestamp); + return date ? date.toLocaleString() : 'Invalid date'; +}; + +export const formatDate = (date) => { + const parsed = safeCreateDate(date); + return parsed ? parsed.toLocaleDateString() : 'Invalid date'; +}; + +export const formatTime = (date) => { + const parsed = safeCreateDate(date); + return parsed ? parsed.toLocaleTimeString() : 'Invalid time'; +}; + +export const formatDateRange = (startDate, endDate) => { + const start = safeCreateDate(startDate); + const end = safeCreateDate(endDate); + + if (!start || !end) return 'Invalid date range'; + + return `${start.toLocaleDateString()} - ${end.toLocaleDateString()}`; +}; + +export const formatDateForInput = (date) => { + const parsed = safeCreateDate(date); + return parsed ? parsed.toISOString().split('T')[0] : ''; +}; + +export const formatDateTimeForAPI = (date) => { + const parsed = safeCreateDate(date); + return parsed ? parsed.toISOString() : null; +}; + +export const getDefaultDateRange = () => { + const startDate = new Date(new Date().getFullYear(), 0, 1); + const endDate = new Date(); + return { startDate, endDate }; +}; + +export const isValidDateRange = (startDate, endDate) => { + const start = safeCreateDate(startDate); + const end = safeCreateDate(endDate); + return start && end && start <= end; +}; \ No newline at end of file diff --git a/frontend/src/utils/filterValidation.js b/frontend/src/utils/filterValidation.js new file mode 100644 index 0000000000..1af2fd7576 --- /dev/null +++ b/frontend/src/utils/filterValidation.js @@ -0,0 +1,113 @@ +/** + * Utility functions for filter validation + */ + +// Validation constants +export const VALIDATION_LIMITS = { + MAX_DATE_RANGE_YEARS: 5, + MAX_SELECTED_FORESTS: 10, + MILLISECONDS_PER_YEAR: 1000 * 60 * 60 * 24 * 365 +}; + +// Validation error messages +export const VALIDATION_MESSAGES = { + DATE_ORDER: 'Start date must be before or equal to end date', + DATE_FUTURE: 'End date cannot be in the future', + DATE_RANGE_TOO_LARGE: `Date range cannot exceed ${VALIDATION_LIMITS.MAX_DATE_RANGE_YEARS} years`, + TOO_MANY_FORESTS: `Cannot select more than ${VALIDATION_LIMITS.MAX_SELECTED_FORESTS} forests at once` +}; + +/** + * Validates date range filter + * @param {Object} dateRange - The date range to validate + * @param {Date} dateRange.startDate - Start date + * @param {Date} dateRange.endDate - End date + * @returns {string|null} Error message or null if valid + */ +export const validateDateRange = (dateRange) => { + if (!dateRange || !dateRange.startDate || !dateRange.endDate) { + return null; + } + + const { startDate, endDate } = dateRange; + + if (startDate > endDate) { + return VALIDATION_MESSAGES.DATE_ORDER; + } + + if (endDate > new Date()) { + return VALIDATION_MESSAGES.DATE_FUTURE; + } + + // Check if date range is too large + const diffYears = (endDate - startDate) / VALIDATION_LIMITS.MILLISECONDS_PER_YEAR; + if (diffYears > VALIDATION_LIMITS.MAX_DATE_RANGE_YEARS) { + return VALIDATION_MESSAGES.DATE_RANGE_TOO_LARGE; + } + + return null; +}; + +/** + * Validates selected forests filter + * @param {Array} selectedForests - Array of selected forest IDs + * @returns {string|null} Error message or null if valid + */ +export const validateSelectedForests = (selectedForests) => { + if (!selectedForests || !Array.isArray(selectedForests)) { + return null; + } + + if (selectedForests.length > VALIDATION_LIMITS.MAX_SELECTED_FORESTS) { + return VALIDATION_MESSAGES.TOO_MANY_FORESTS; + } + + return null; +}; + +/** + * Validates filter values and returns validation errors + * @param {Object} filters - The filters object to validate + * @param {Object} filters.dateRange - Date range filter + * @param {Array} filters.selectedForests - Selected forests filter + * @returns {Object} Object containing validation errors, empty if valid + */ +export const validateFilters = (filters) => { + const errors = {}; + + // Validate date range + const dateRangeError = validateDateRange(filters.dateRange); + if (dateRangeError) { + errors.dateRange = dateRangeError; + } + + // Validate selected forests + const forestsError = validateSelectedForests(filters.selectedForests); + if (forestsError) { + errors.selectedForests = forestsError; + } + + return errors; +}; + +/** + * Checks if filters are valid (no validation errors) + * @param {Object} filters - The filters object to validate + * @returns {boolean} True if filters are valid, false otherwise + */ +export const areFiltersValid = (filters) => { + const errors = validateFilters(filters); + return Object.keys(errors).length === 0; +}; + +/** + * Creates default filter values + * @returns {Object} Default filter configuration + */ +export const createDefaultFilters = () => ({ + dateRange: { + startDate: new Date(new Date().getFullYear(), 0, 1), + endDate: new Date() + }, + selectedForests: [] +}); \ No newline at end of file diff --git a/frontend/src/utils/mapIcons.js b/frontend/src/utils/mapIcons.js new file mode 100644 index 0000000000..052418707e --- /dev/null +++ b/frontend/src/utils/mapIcons.js @@ -0,0 +1,4 @@ +// Re-export functions from modular components for backward compatibility +export { createTreeIcon } from '@/components/map/TreeIcon'; +export { createClusterIcon } from '@/components/map/ClusterIcon'; +export { getTreePopupContent } from '@/components/map/TreePopup'; \ No newline at end of file diff --git a/frontend/src/utils/performance.js b/frontend/src/utils/performance.js index 5c190f8d0d..2514c356d7 100644 --- a/frontend/src/utils/performance.js +++ b/frontend/src/utils/performance.js @@ -1,214 +1,51 @@ -// Performance monitoring utility +// Performance monitoring utility - main orchestrator +import { CoreWebVitalsMonitor } from './coreWebVitals.js'; +import { ResourceMonitor, getNavigationTiming } from './resourceMonitor.js'; +import { performanceRatings } from './performanceRatings.js'; +import { + measureMemoryUsage, + analyzeBundleSize, + generatePerformanceReport, + generateRecommendations, + reportMetric +} from './performanceReporting.js'; + class PerformanceMonitor { constructor() { - this.metrics = {}; - this.observers = new Map(); this.isSupported = typeof window !== 'undefined' && 'performance' in window; + this.coreWebVitals = null; + this.resourceMonitor = null; + this.navigationMetrics = null; if (this.isSupported) { - this.initializeObservers(); + this.initializeMonitors(); } } - initializeObservers() { - // Performance Observer for various entry types - if ('PerformanceObserver' in window) { - this.observeNavigationTiming(); - this.observeLargestContentfulPaint(); - this.observeFirstInputDelay(); - this.observeCumulativeLayoutShift(); - this.observeResourceTiming(); - } - } - - // Core Web Vitals - observeLargestContentfulPaint() { - try { - const observer = new PerformanceObserver((list) => { - const entries = list.getEntries(); - const lastEntry = entries[entries.length - 1]; - - this.metrics.lcp = { - value: lastEntry.startTime, - timestamp: Date.now(), - rating: this.rateLCP(lastEntry.startTime) - }; - - this.reportMetric('LCP', this.metrics.lcp); - }); - - observer.observe({ type: 'largest-contentful-paint', buffered: true }); - this.observers.set('lcp', observer); - } catch (error) { - console.warn('LCP observer not supported:', error); - } - } - - observeFirstInputDelay() { - try { - const observer = new PerformanceObserver((list) => { - const entries = list.getEntries(); - entries.forEach((entry) => { - this.metrics.fid = { - value: entry.processingStart - entry.startTime, - timestamp: Date.now(), - rating: this.rateFID(entry.processingStart - entry.startTime) - }; - - this.reportMetric('FID', this.metrics.fid); - }); - }); - - observer.observe({ type: 'first-input', buffered: true }); - this.observers.set('fid', observer); - } catch (error) { - console.warn('FID observer not supported:', error); - } - } - - observeCumulativeLayoutShift() { - try { - let clsValue = 0; - const observer = new PerformanceObserver((list) => { - const entries = list.getEntries(); - entries.forEach((entry) => { - if (!entry.hadRecentInput) { - clsValue += entry.value; - } - }); - - this.metrics.cls = { - value: clsValue, - timestamp: Date.now(), - rating: this.rateCLS(clsValue) - }; - - this.reportMetric('CLS', this.metrics.cls); - }); - - observer.observe({ type: 'layout-shift', buffered: true }); - this.observers.set('cls', observer); - } catch (error) { - console.warn('CLS observer not supported:', error); - } + initializeMonitors() { + // Initialize Core Web Vitals monitor + this.coreWebVitals = new CoreWebVitalsMonitor(); + this.coreWebVitals.onMetricUpdate = (type, data) => reportMetric(type, data); + + // Initialize resource monitor + this.resourceMonitor = new ResourceMonitor(); + this.resourceMonitor.onResourceTracked = (data) => reportMetric('Resource', data); + + // Initialize navigation timing + this.initializeNavigationTiming(); } - observeNavigationTiming() { + initializeNavigationTiming() { if (!this.isSupported) return; window.addEventListener('load', () => { - const navTiming = performance.getEntriesByType('navigation')[0]; - if (navTiming) { - this.metrics.navigation = { - domContentLoaded: navTiming.domContentLoadedEventEnd - navTiming.domContentLoadedEventStart, - domComplete: navTiming.domComplete - navTiming.navigationStart, - loadComplete: navTiming.loadEventEnd - navTiming.navigationStart, - firstByte: navTiming.responseStart - navTiming.requestStart, - timestamp: Date.now() - }; - - this.reportMetric('Navigation', this.metrics.navigation); + this.navigationMetrics = getNavigationTiming(); + if (this.navigationMetrics) { + reportMetric('Navigation', this.navigationMetrics); } }); } - observeResourceTiming() { - if (!this.isSupported) return; - - const observer = new PerformanceObserver((list) => { - const entries = list.getEntries(); - entries.forEach((entry) => { - if (entry.initiatorType === 'img' || entry.initiatorType === 'script' || entry.initiatorType === 'css') { - this.trackResourceLoad(entry); - } - }); - }); - - observer.observe({ type: 'resource', buffered: true }); - this.observers.set('resource', observer); - } - - trackResourceLoad(entry) { - const resourceMetrics = this.metrics.resources || []; - resourceMetrics.push({ - name: entry.name, - type: entry.initiatorType, - duration: entry.duration, - size: entry.transferSize, - timestamp: Date.now() - }); - - this.metrics.resources = resourceMetrics; - - // Keep only last 100 resource entries - if (resourceMetrics.length > 100) { - resourceMetrics.splice(0, resourceMetrics.length - 100); - } - } - - // Rating functions based on Core Web Vitals thresholds - rateLCP(value) { - if (value <= 2500) return 'good'; - if (value <= 4000) return 'needs-improvement'; - return 'poor'; - } - - rateFID(value) { - if (value <= 100) return 'good'; - if (value <= 300) return 'needs-improvement'; - return 'poor'; - } - - rateCLS(value) { - if (value <= 0.1) return 'good'; - if (value <= 0.25) return 'needs-improvement'; - return 'poor'; - } - - // Memory usage monitoring - measureMemoryUsage() { - if ('memory' in performance) { - return { - used: performance.memory.usedJSHeapSize, - total: performance.memory.totalJSHeapSize, - limit: performance.memory.jsHeapSizeLimit, - timestamp: Date.now() - }; - } - return null; - } - - // Bundle size analysis - analyzeBundleSize() { - const resources = performance.getEntriesByType('resource'); - const bundleStats = { - totalSize: 0, - javascript: 0, - css: 0, - images: 0, - fonts: 0, - other: 0 - }; - - resources.forEach(resource => { - const size = resource.transferSize || 0; - bundleStats.totalSize += size; - - if (resource.initiatorType === 'script') { - bundleStats.javascript += size; - } else if (resource.initiatorType === 'css') { - bundleStats.css += size; - } else if (resource.initiatorType === 'img') { - bundleStats.images += size; - } else if (resource.name.includes('font')) { - bundleStats.fonts += size; - } else { - bundleStats.other += size; - } - }); - - return bundleStats; - } // Track custom metrics mark(name) { @@ -226,97 +63,43 @@ class PerformanceMonitor { return null; } - // Report metrics (can be extended to send to analytics service) - reportMetric(type, data) { - if (process.env.NODE_ENV === 'development') { - console.log(`[Performance] ${type}:`, data); - } - - // In production, you might want to send to analytics service - // analytics.track('performance_metric', { type, ...data }); - } - // Get all metrics getMetrics() { + const coreWebVitalsMetrics = this.coreWebVitals?.getMetrics() || {}; + const resources = this.resourceMonitor?.getResources() || []; + return { - ...this.metrics, - memory: this.measureMemoryUsage(), - bundle: this.analyzeBundleSize(), + ...coreWebVitalsMetrics, + navigation: this.navigationMetrics, + memory: measureMemoryUsage(), + bundle: analyzeBundleSize(), + resources, timestamp: Date.now() }; } // Generate performance report generateReport() { - const metrics = this.getMetrics(); - const report = { - coreWebVitals: { - lcp: metrics.lcp, - fid: metrics.fid, - cls: metrics.cls - }, - navigation: metrics.navigation, - memory: metrics.memory, - bundle: metrics.bundle, - resources: metrics.resources?.length || 0, - timestamp: Date.now() - }; - - return report; + const coreWebVitalsMetrics = this.coreWebVitals?.getMetrics() || {}; + const resources = this.resourceMonitor?.getResources() || []; + + return generatePerformanceReport( + coreWebVitalsMetrics, + this.navigationMetrics, + resources + ); } // Performance recommendations getRecommendations() { const metrics = this.getMetrics(); - const recommendations = []; - - if (metrics.lcp?.rating === 'poor') { - recommendations.push({ - type: 'LCP', - message: 'Largest Contentful Paint is slow. Consider optimizing images and server response times.', - severity: 'high' - }); - } - - if (metrics.fid?.rating === 'poor') { - recommendations.push({ - type: 'FID', - message: 'First Input Delay is high. Consider reducing JavaScript execution time.', - severity: 'high' - }); - } - - if (metrics.cls?.rating === 'poor') { - recommendations.push({ - type: 'CLS', - message: 'Cumulative Layout Shift is high. Avoid inserting content without reserved space.', - severity: 'medium' - }); - } - - if (metrics.bundle?.javascript > 1000000) { // 1MB - recommendations.push({ - type: 'Bundle Size', - message: 'JavaScript bundle is large. Consider code splitting and tree shaking.', - severity: 'medium' - }); - } - - if (metrics.memory?.used > 50000000) { // 50MB - recommendations.push({ - type: 'Memory Usage', - message: 'High memory usage detected. Check for memory leaks.', - severity: 'low' - }); - } - - return recommendations; + return generateRecommendations(metrics); } // Clean up observers disconnect() { - this.observers.forEach(observer => observer.disconnect()); - this.observers.clear(); + this.coreWebVitals?.disconnect(); + this.resourceMonitor?.disconnect(); } } @@ -333,20 +116,10 @@ export const trackPerformance = { disconnect: () => performanceMonitor.disconnect() }; -// React hook for performance monitoring -export const usePerformanceMonitor = () => { - const [metrics, setMetrics] = React.useState({}); - const [isSupported] = React.useState(performanceMonitor.isSupported); - - React.useEffect(() => { - const interval = setInterval(() => { - setMetrics(performanceMonitor.getMetrics()); - }, 5000); // Update every 5 seconds +// TODO: Consider moving performance state to Zustand store for better state management across components +// The current singleton pattern works but could benefit from centralized state management - return () => clearInterval(interval); - }, []); - - return { metrics, isSupported, trackPerformance }; -}; +// Legacy hook export for backward compatibility +export { usePerformanceMetrics as usePerformanceMonitor } from '../hooks/usePerformanceMetrics.js'; export default performanceMonitor; \ No newline at end of file diff --git a/frontend/src/utils/performanceRatings.js b/frontend/src/utils/performanceRatings.js new file mode 100644 index 0000000000..bf2f117814 --- /dev/null +++ b/frontend/src/utils/performanceRatings.js @@ -0,0 +1,59 @@ +// Performance rating and threshold utilities +export const PERFORMANCE_THRESHOLDS = { + LCP: { + GOOD: 2500, + NEEDS_IMPROVEMENT: 4000 + }, + FID: { + GOOD: 100, + NEEDS_IMPROVEMENT: 300 + }, + CLS: { + GOOD: 0.1, + NEEDS_IMPROVEMENT: 0.25 + }, + BUNDLE_SIZE: { + JAVASCRIPT: 1000000, // 1MB + }, + MEMORY: { + HIGH_USAGE: 50000000 // 50MB + } +}; + +export const RATING_TYPES = { + GOOD: 'good', + NEEDS_IMPROVEMENT: 'needs-improvement', + POOR: 'poor' +}; + +export const performanceRatings = { + rateLCP(value) { + if (value <= PERFORMANCE_THRESHOLDS.LCP.GOOD) return RATING_TYPES.GOOD; + if (value <= PERFORMANCE_THRESHOLDS.LCP.NEEDS_IMPROVEMENT) return RATING_TYPES.NEEDS_IMPROVEMENT; + return RATING_TYPES.POOR; + }, + + rateFID(value) { + if (value <= PERFORMANCE_THRESHOLDS.FID.GOOD) return RATING_TYPES.GOOD; + if (value <= PERFORMANCE_THRESHOLDS.FID.NEEDS_IMPROVEMENT) return RATING_TYPES.NEEDS_IMPROVEMENT; + return RATING_TYPES.POOR; + }, + + rateCLS(value) { + if (value <= PERFORMANCE_THRESHOLDS.CLS.GOOD) return RATING_TYPES.GOOD; + if (value <= PERFORMANCE_THRESHOLDS.CLS.NEEDS_IMPROVEMENT) return RATING_TYPES.NEEDS_IMPROVEMENT; + return RATING_TYPES.POOR; + }, + + getBundleSizeRating(javascriptSize) { + return javascriptSize > PERFORMANCE_THRESHOLDS.BUNDLE_SIZE.JAVASCRIPT + ? RATING_TYPES.NEEDS_IMPROVEMENT + : RATING_TYPES.GOOD; + }, + + getMemoryUsageRating(memoryUsed) { + return memoryUsed > PERFORMANCE_THRESHOLDS.MEMORY.HIGH_USAGE + ? RATING_TYPES.NEEDS_IMPROVEMENT + : RATING_TYPES.GOOD; + } +}; \ No newline at end of file diff --git a/frontend/src/utils/performanceReporting.js b/frontend/src/utils/performanceReporting.js new file mode 100644 index 0000000000..8bd331779c --- /dev/null +++ b/frontend/src/utils/performanceReporting.js @@ -0,0 +1,123 @@ +// Performance reporting and analysis utilities +import { performanceRatings, PERFORMANCE_THRESHOLDS } from './performanceRatings.js'; + +export const measureMemoryUsage = () => { + if (typeof window === 'undefined' || !('performance' in window) || !('memory' in performance)) { + return null; + } + + return { + used: performance.memory.usedJSHeapSize, + total: performance.memory.totalJSHeapSize, + limit: performance.memory.jsHeapSizeLimit, + timestamp: Date.now() + }; +}; + +export const analyzeBundleSize = () => { + if (typeof window === 'undefined' || !('performance' in window)) { + return null; + } + + const resources = performance.getEntriesByType('resource'); + const bundleStats = { + totalSize: 0, + javascript: 0, + css: 0, + images: 0, + fonts: 0, + other: 0 + }; + + resources.forEach(resource => { + const size = resource.transferSize || 0; + bundleStats.totalSize += size; + + if (resource.initiatorType === 'script') { + bundleStats.javascript += size; + } else if (resource.initiatorType === 'css') { + bundleStats.css += size; + } else if (resource.initiatorType === 'img') { + bundleStats.images += size; + } else if (resource.name.includes('font')) { + bundleStats.fonts += size; + } else { + bundleStats.other += size; + } + }); + + return bundleStats; +}; + +export const generatePerformanceReport = (coreWebVitals, navigation, resources) => { + const memory = measureMemoryUsage(); + const bundle = analyzeBundleSize(); + + return { + coreWebVitals: { + lcp: coreWebVitals.lcp, + fid: coreWebVitals.fid, + cls: coreWebVitals.cls + }, + navigation, + memory, + bundle, + resources: resources?.length || 0, + timestamp: Date.now() + }; +}; + +export const generateRecommendations = (metrics) => { + const recommendations = []; + + if (metrics.lcp?.rating === 'poor') { + recommendations.push({ + type: 'LCP', + message: 'Largest Contentful Paint is slow. Consider optimizing images and server response times.', + severity: 'high' + }); + } + + if (metrics.fid?.rating === 'poor') { + recommendations.push({ + type: 'FID', + message: 'First Input Delay is high. Consider reducing JavaScript execution time.', + severity: 'high' + }); + } + + if (metrics.cls?.rating === 'poor') { + recommendations.push({ + type: 'CLS', + message: 'Cumulative Layout Shift is high. Avoid inserting content without reserved space.', + severity: 'medium' + }); + } + + if (metrics.bundle?.javascript > PERFORMANCE_THRESHOLDS.BUNDLE_SIZE.JAVASCRIPT) { + recommendations.push({ + type: 'Bundle Size', + message: 'JavaScript bundle is large. Consider code splitting and tree shaking.', + severity: 'medium' + }); + } + + if (metrics.memory?.used > PERFORMANCE_THRESHOLDS.MEMORY.HIGH_USAGE) { + recommendations.push({ + type: 'Memory Usage', + message: 'High memory usage detected. Check for memory leaks.', + severity: 'low' + }); + } + + return recommendations; +}; + +export const reportMetric = (type, data) => { + if (process.env.NODE_ENV === 'development') { + console.log(`[Performance] ${type}:`, data); + } + + // In production, you might want to send to analytics service + // analytics.track('performance_metric', { type, ...data }); +}; \ No newline at end of file diff --git a/frontend/src/utils/resourceMonitor.js b/frontend/src/utils/resourceMonitor.js new file mode 100644 index 0000000000..a5cdcdcc42 --- /dev/null +++ b/frontend/src/utils/resourceMonitor.js @@ -0,0 +1,101 @@ +// Resource monitoring utility +export class ResourceMonitor { + constructor() { + this.resources = []; + this.observer = null; + this.isSupported = typeof window !== 'undefined' && 'PerformanceObserver' in window; + + if (this.isSupported) { + this.initializeObserver(); + } + } + + initializeObserver() { + try { + this.observer = new PerformanceObserver((list) => { + const entries = list.getEntries(); + entries.forEach((entry) => { + if (this.shouldTrackResource(entry)) { + this.trackResourceLoad(entry); + } + }); + }); + + this.observer.observe({ type: 'resource', buffered: true }); + } catch (error) { + console.warn('Resource observer not supported:', error); + } + } + + shouldTrackResource(entry) { + const trackedTypes = ['img', 'script', 'css']; + return trackedTypes.includes(entry.initiatorType); + } + + trackResourceLoad(entry) { + const resourceData = { + name: entry.name, + type: entry.initiatorType, + duration: entry.duration, + size: entry.transferSize, + timestamp: Date.now() + }; + + this.resources.push(resourceData); + + // Keep only last 100 resource entries to prevent memory issues + if (this.resources.length > 100) { + this.resources.splice(0, this.resources.length - 100); + } + + this.onResourceTracked(resourceData); + } + + onResourceTracked(resourceData) { + // Override this method to handle resource tracking events + if (process.env.NODE_ENV === 'development') { + console.log('[Resource Monitor] Tracked:', resourceData); + } + } + + getResources() { + return [...this.resources]; + } + + getResourceCount() { + return this.resources.length; + } + + getResourcesByType(type) { + return this.resources.filter(resource => resource.type === type); + } + + getTotalResourceSize() { + return this.resources.reduce((total, resource) => total + (resource.size || 0), 0); + } + + disconnect() { + if (this.observer) { + this.observer.disconnect(); + this.observer = null; + } + } +} + +// Navigation timing utility +export const getNavigationTiming = () => { + if (typeof window === 'undefined' || !('performance' in window)) { + return null; + } + + const navTiming = performance.getEntriesByType('navigation')[0]; + if (!navTiming) return null; + + return { + domContentLoaded: navTiming.domContentLoadedEventEnd - navTiming.domContentLoadedEventStart, + domComplete: navTiming.domComplete - navTiming.navigationStart, + loadComplete: navTiming.loadEventEnd - navTiming.navigationStart, + firstByte: navTiming.responseStart - navTiming.requestStart, + timestamp: Date.now() + }; +}; \ No newline at end of file diff --git a/frontend/src/utils/responsive.js b/frontend/src/utils/responsive.js index c616ea3bd0..2262c67f97 100644 --- a/frontend/src/utils/responsive.js +++ b/frontend/src/utils/responsive.js @@ -1,264 +1,4 @@ -// Responsive breakpoints -export const breakpoints = { - mobile: '320px', - tablet: '768px', - desktop: '1024px', - wide: '1440px', - ultraWide: '1600px', -}; - -// Media query helpers -export const mediaQueries = { - mobile: `@media (max-width: ${breakpoints.tablet})`, - tablet: `@media (min-width: ${breakpoints.tablet}) and (max-width: ${breakpoints.desktop})`, - desktop: `@media (min-width: ${breakpoints.desktop})`, - wide: `@media (min-width: ${breakpoints.wide})`, - ultraWide: `@media (min-width: ${breakpoints.ultraWide})`, - - // Specific ranges - mobileOnly: `@media (max-width: 767px)`, - tabletUp: `@media (min-width: ${breakpoints.tablet})`, - desktopUp: `@media (min-width: ${breakpoints.desktop})`, - wideUp: `@media (min-width: ${breakpoints.wide})`, - - // Touch devices - touch: '@media (hover: none) and (pointer: coarse)', - hover: '@media (hover: hover) and (pointer: fine)', - - // Orientation - portrait: '@media (orientation: portrait)', - landscape: '@media (orientation: landscape)', - - // High DPI - retina: '@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)', -}; - -// Container sizes -export const containerSizes = { - mobile: '100%', - tablet: '768px', - desktop: '1024px', - wide: '1200px', - ultraWide: '1400px', -}; - -// Spacing scale -export const spacing = { - xs: '0.25rem', // 4px - sm: '0.5rem', // 8px - md: '1rem', // 16px - lg: '1.5rem', // 24px - xl: '2rem', // 32px - xxl: '3rem', // 48px - xxxl: '4rem', // 64px -}; - -// Typography scale -export const typography = { - mobile: { - h1: '2rem', // 32px - h2: '1.5rem', // 24px - h3: '1.25rem', // 20px - h4: '1.125rem', // 18px - body: '1rem', // 16px - small: '0.875rem', // 14px - }, - tablet: { - h1: '2.5rem', // 40px - h2: '2rem', // 32px - h3: '1.5rem', // 24px - h4: '1.25rem', // 20px - body: '1rem', // 16px - small: '0.875rem', // 14px - }, - desktop: { - h1: '3rem', // 48px - h2: '2.5rem', // 40px - h3: '2rem', // 32px - h4: '1.5rem', // 24px - body: '1.125rem', // 18px - small: '1rem', // 16px - }, -}; - -// Grid system -export const grid = { - columns: 12, - gutter: { - mobile: '1rem', - tablet: '1.5rem', - desktop: '2rem', - }, - container: { - mobile: '100%', - tablet: '768px', - desktop: '1024px', - wide: '1200px', - maxWidth: '1400px', - }, -}; - -// Helper functions -export const rem = (pixels) => `${pixels / 16}rem`; - -export const em = (pixels, baseFontSize = 16) => `${pixels / baseFontSize}em`; - -export const fluidSize = (minSize, maxSize, minWidth = 320, maxWidth = 1440) => { - const minSizeRem = typeof minSize === 'number' ? rem(minSize) : minSize; - const maxSizeRem = typeof maxSize === 'number' ? rem(maxSize) : maxSize; - const minWidthRem = typeof minWidth === 'number' ? rem(minWidth) : minWidth; - const maxWidthRem = typeof maxWidth === 'number' ? rem(maxWidth) : maxWidth; - - return `clamp(${minSizeRem}, ${minSizeRem} + ((${maxSizeRem} - ${minSizeRem}) * ((100vw - ${minWidthRem}) / (${maxWidthRem} - ${minWidthRem}))), ${maxSizeRem})`; -}; - -export const aspectRatio = (width, height) => ({ - paddingTop: `${(height / width) * 100}%`, - position: 'relative', - overflow: 'hidden', -}); - -// Touch-friendly sizing -export const touchTarget = { - minSize: '44px', - recommended: '48px', - comfortable: '56px', -}; - -// Common responsive mixins -export const responsiveContainer = ` - width: 100%; - margin: 0 auto; - padding: 0 ${spacing.md}; - - ${mediaQueries.tablet} { - padding: 0 ${spacing.lg}; - max-width: ${containerSizes.tablet}; - } - - ${mediaQueries.desktop} { - padding: 0 ${spacing.xl}; - max-width: ${containerSizes.desktop}; - } - - ${mediaQueries.wide} { - max-width: ${containerSizes.wide}; - } - - ${mediaQueries.ultraWide} { - max-width: ${containerSizes.ultraWide}; - } -`; - -export const responsiveGrid = (columns = 1, gap = spacing.md) => ` - display: grid; - grid-template-columns: repeat(${columns}, 1fr); - gap: ${gap}; - - ${mediaQueries.tablet} { - grid-template-columns: repeat(${Math.min(columns * 2, 12)}, 1fr); - gap: ${spacing.lg}; - } - - ${mediaQueries.desktop} { - grid-template-columns: repeat(${Math.min(columns * 3, 12)}, 1fr); - gap: ${spacing.xl}; - } -`; - -export const responsiveFlex = (direction = 'row', wrap = 'wrap') => ` - display: flex; - flex-direction: ${direction}; - flex-wrap: ${wrap}; - gap: ${spacing.md}; - - ${mediaQueries.mobile} { - flex-direction: ${direction === 'row' ? 'column' : 'row'}; - gap: ${spacing.sm}; - } - - ${mediaQueries.tablet} { - gap: ${spacing.lg}; - } -`; - -// Accessibility helpers -export const screenReaderOnly = ` - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -`; - -export const focusVisible = ` - outline: 2px solid #007bff; - outline-offset: 2px; - border-radius: 2px; -`; - -// Animation helpers -export const reduceMotion = '@media (prefers-reduced-motion: reduce)'; -export const noAnimation = ` - ${reduceMotion} { - animation: none !important; - transition: none !important; - } -`; - -// Print styles -export const printStyles = ` - @media print { - * { - -webkit-print-color-adjust: exact !important; - color-adjust: exact !important; - } - - body { - font-size: 12pt; - line-height: 1.4; - } - - h1, h2, h3, h4, h5, h6 { - page-break-after: avoid; - } - - p, li { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - height: auto !important; - } - - .no-print { - display: none !important; - } - } -`; - -export default { - breakpoints, - mediaQueries, - containerSizes, - spacing, - typography, - grid, - rem, - em, - fluidSize, - aspectRatio, - touchTarget, - responsiveContainer, - responsiveGrid, - responsiveFlex, - screenReaderOnly, - focusVisible, - noAnimation, - printStyles, -}; \ No newline at end of file +// Re-export everything from the modular responsive utilities +// This maintains backward compatibility while allowing access to the new modular structure +export * from './responsive/index.js'; +export { default } from './responsive/index.js'; \ No newline at end of file diff --git a/frontend/src/utils/responsive/accessibility.js b/frontend/src/utils/responsive/accessibility.js new file mode 100644 index 0000000000..324cf19c7c --- /dev/null +++ b/frontend/src/utils/responsive/accessibility.js @@ -0,0 +1,33 @@ +export const screenReaderOnly = ` + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +`; + +export const focusVisible = ` + outline: 2px solid #007bff; + outline-offset: 2px; + border-radius: 2px; +`; + +export const reduceMotion = '@media (prefers-reduced-motion: reduce)'; + +export const noAnimation = ` + ${reduceMotion} { + animation: none !important; + transition: none !important; + } +`; + +export default { + screenReaderOnly, + focusVisible, + reduceMotion, + noAnimation, +}; \ No newline at end of file diff --git a/frontend/src/utils/responsive/breakpoints.js b/frontend/src/utils/responsive/breakpoints.js new file mode 100644 index 0000000000..0cf5bc5483 --- /dev/null +++ b/frontend/src/utils/responsive/breakpoints.js @@ -0,0 +1,33 @@ +export const breakpoints = { + mobile: '320px', + tablet: '768px', + desktop: '1024px', + wide: '1440px', + ultraWide: '1600px', +}; + +export const mediaQueries = { + mobile: `@media (max-width: ${breakpoints.tablet})`, + tablet: `@media (min-width: ${breakpoints.tablet}) and (max-width: ${breakpoints.desktop})`, + desktop: `@media (min-width: ${breakpoints.desktop})`, + wide: `@media (min-width: ${breakpoints.wide})`, + ultraWide: `@media (min-width: ${breakpoints.ultraWide})`, + + mobileOnly: `@media (max-width: 767px)`, + tabletUp: `@media (min-width: ${breakpoints.tablet})`, + desktopUp: `@media (min-width: ${breakpoints.desktop})`, + wideUp: `@media (min-width: ${breakpoints.wide})`, + + touch: '@media (hover: none) and (pointer: coarse)', + hover: '@media (hover: hover) and (pointer: fine)', + + portrait: '@media (orientation: portrait)', + landscape: '@media (orientation: landscape)', + + retina: '@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)', +}; + +export default { + breakpoints, + mediaQueries, +}; \ No newline at end of file diff --git a/frontend/src/utils/responsive/helpers.js b/frontend/src/utils/responsive/helpers.js new file mode 100644 index 0000000000..e4648dcc15 --- /dev/null +++ b/frontend/src/utils/responsive/helpers.js @@ -0,0 +1,25 @@ +export const rem = (pixels) => `${pixels / 16}rem`; + +export const em = (pixels, baseFontSize = 16) => `${pixels / baseFontSize}em`; + +export const fluidSize = (minSize, maxSize, minWidth = 320, maxWidth = 1440) => { + const minSizeRem = typeof minSize === 'number' ? rem(minSize) : minSize; + const maxSizeRem = typeof maxSize === 'number' ? rem(maxSize) : maxSize; + const minWidthRem = typeof minWidth === 'number' ? rem(minWidth) : minWidth; + const maxWidthRem = typeof maxWidth === 'number' ? rem(maxWidth) : maxWidth; + + return `clamp(${minSizeRem}, ${minSizeRem} + ((${maxSizeRem} - ${minSizeRem}) * ((100vw - ${minWidthRem}) / (${maxWidthRem} - ${minWidthRem}))), ${maxSizeRem})`; +}; + +export const aspectRatio = (width, height) => ({ + paddingTop: `${(height / width) * 100}%`, + position: 'relative', + overflow: 'hidden', +}); + +export default { + rem, + em, + fluidSize, + aspectRatio, +}; \ No newline at end of file diff --git a/frontend/src/utils/responsive/index.js b/frontend/src/utils/responsive/index.js new file mode 100644 index 0000000000..2530ba1e48 --- /dev/null +++ b/frontend/src/utils/responsive/index.js @@ -0,0 +1,39 @@ +// Re-export all responsive utilities from their individual modules +export { breakpoints, mediaQueries } from './breakpoints.js'; +export { spacing, containerSizes, grid, touchTarget } from './spacing.js'; +export { typography } from './typography.js'; +export { rem, em, fluidSize, aspectRatio } from './helpers.js'; +export { responsiveContainer, responsiveGrid, responsiveFlex } from './mixins.js'; +export { screenReaderOnly, focusVisible, reduceMotion, noAnimation } from './accessibility.js'; +export { printStyles } from './print.js'; + +// Import all for default export to maintain backward compatibility +import { breakpoints, mediaQueries } from './breakpoints.js'; +import { spacing, containerSizes, grid, touchTarget } from './spacing.js'; +import { typography } from './typography.js'; +import { rem, em, fluidSize, aspectRatio } from './helpers.js'; +import { responsiveContainer, responsiveGrid, responsiveFlex } from './mixins.js'; +import { screenReaderOnly, focusVisible, noAnimation } from './accessibility.js'; +import { printStyles } from './print.js'; + +// Default export maintains backward compatibility with original responsive.js +export default { + breakpoints, + mediaQueries, + containerSizes, + spacing, + typography, + grid, + rem, + em, + fluidSize, + aspectRatio, + touchTarget, + responsiveContainer, + responsiveGrid, + responsiveFlex, + screenReaderOnly, + focusVisible, + noAnimation, + printStyles, +}; \ No newline at end of file diff --git a/frontend/src/utils/responsive/mixins.js b/frontend/src/utils/responsive/mixins.js new file mode 100644 index 0000000000..34005479f7 --- /dev/null +++ b/frontend/src/utils/responsive/mixins.js @@ -0,0 +1,64 @@ +import { mediaQueries } from './breakpoints.js'; +import { spacing, containerSizes } from './spacing.js'; + +export const responsiveContainer = ` + width: 100%; + margin: 0 auto; + padding: 0 ${spacing.md}; + + ${mediaQueries.tablet} { + padding: 0 ${spacing.lg}; + max-width: ${containerSizes.tablet}; + } + + ${mediaQueries.desktop} { + padding: 0 ${spacing.xl}; + max-width: ${containerSizes.desktop}; + } + + ${mediaQueries.wide} { + max-width: ${containerSizes.wide}; + } + + ${mediaQueries.ultraWide} { + max-width: ${containerSizes.ultraWide}; + } +`; + +export const responsiveGrid = (columns = 1, gap = spacing.md) => ` + display: grid; + grid-template-columns: repeat(${columns}, 1fr); + gap: ${gap}; + + ${mediaQueries.tablet} { + grid-template-columns: repeat(${Math.min(columns * 2, 12)}, 1fr); + gap: ${spacing.lg}; + } + + ${mediaQueries.desktop} { + grid-template-columns: repeat(${Math.min(columns * 3, 12)}, 1fr); + gap: ${spacing.xl}; + } +`; + +export const responsiveFlex = (direction = 'row', wrap = 'wrap') => ` + display: flex; + flex-direction: ${direction}; + flex-wrap: ${wrap}; + gap: ${spacing.md}; + + ${mediaQueries.mobile} { + flex-direction: ${direction === 'row' ? 'column' : 'row'}; + gap: ${spacing.sm}; + } + + ${mediaQueries.tablet} { + gap: ${spacing.lg}; + } +`; + +export default { + responsiveContainer, + responsiveGrid, + responsiveFlex, +}; \ No newline at end of file diff --git a/frontend/src/utils/responsive/print.js b/frontend/src/utils/responsive/print.js new file mode 100644 index 0000000000..cab6a042c9 --- /dev/null +++ b/frontend/src/utils/responsive/print.js @@ -0,0 +1,34 @@ +export const printStyles = ` + @media print { + * { + -webkit-print-color-adjust: exact !important; + color-adjust: exact !important; + } + + body { + font-size: 12pt; + line-height: 1.4; + } + + h1, h2, h3, h4, h5, h6 { + page-break-after: avoid; + } + + p, li { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + height: auto !important; + } + + .no-print { + display: none !important; + } + } +`; + +export default { + printStyles, +}; \ No newline at end of file diff --git a/frontend/src/utils/responsive/spacing.js b/frontend/src/utils/responsive/spacing.js new file mode 100644 index 0000000000..ae856e236e --- /dev/null +++ b/frontend/src/utils/responsive/spacing.js @@ -0,0 +1,46 @@ +export const spacing = { + xs: '0.25rem', // 4px + sm: '0.5rem', // 8px + md: '1rem', // 16px + lg: '1.5rem', // 24px + xl: '2rem', // 32px + xxl: '3rem', // 48px + xxxl: '4rem', // 64px +}; + +export const containerSizes = { + mobile: '100%', + tablet: '768px', + desktop: '1024px', + wide: '1200px', + ultraWide: '1400px', +}; + +export const grid = { + columns: 12, + gutter: { + mobile: '1rem', + tablet: '1.5rem', + desktop: '2rem', + }, + container: { + mobile: '100%', + tablet: '768px', + desktop: '1024px', + wide: '1200px', + maxWidth: '1400px', + }, +}; + +export const touchTarget = { + minSize: '44px', + recommended: '48px', + comfortable: '56px', +}; + +export default { + spacing, + containerSizes, + grid, + touchTarget, +}; \ No newline at end of file diff --git a/frontend/src/utils/responsive/typography.js b/frontend/src/utils/responsive/typography.js new file mode 100644 index 0000000000..54d2548261 --- /dev/null +++ b/frontend/src/utils/responsive/typography.js @@ -0,0 +1,30 @@ +export const typography = { + mobile: { + h1: '2rem', // 32px + h2: '1.5rem', // 24px + h3: '1.25rem', // 20px + h4: '1.125rem', // 18px + body: '1rem', // 16px + small: '0.875rem', // 14px + }, + tablet: { + h1: '2.5rem', // 40px + h2: '2rem', // 32px + h3: '1.5rem', // 24px + h4: '1.25rem', // 20px + body: '1rem', // 16px + small: '0.875rem', // 14px + }, + desktop: { + h1: '3rem', // 48px + h2: '2.5rem', // 40px + h3: '2rem', // 32px + h4: '1.5rem', // 24px + body: '1.125rem', // 18px + small: '1rem', // 16px + }, +}; + +export default { + typography, +}; \ No newline at end of file diff --git a/frontend/src/utils/sortUtils.js b/frontend/src/utils/sortUtils.js new file mode 100644 index 0000000000..fe85f28e09 --- /dev/null +++ b/frontend/src/utils/sortUtils.js @@ -0,0 +1,100 @@ +// Sorting direction constants +export const SORT_DIRECTIONS = { + ASC: 'asc', + DESC: 'desc' +}; + +// Sort icon constants +export const SORT_ICONS = { + NONE: '⇅', + ASC: '↑', + DESC: '↓' +}; + +// Default sort configuration +export const DEFAULT_SORT_CONFIG = { + field: null, + direction: SORT_DIRECTIONS.DESC +}; + +// Core sorting icon utilities +export const getSortIcon = (field, sortField, sortDirection) => { + if (sortField !== field) return SORT_ICONS.NONE; + return sortDirection === SORT_DIRECTIONS.ASC ? SORT_ICONS.ASC : SORT_ICONS.DESC; +}; + +export const getSortIconByDirection = (direction) => { + return direction === SORT_DIRECTIONS.ASC ? SORT_ICONS.ASC : SORT_ICONS.DESC; +}; + +// Sorting state management utilities +export const getNextSortDirection = (currentField, targetField, currentDirection) => { + if (currentField !== targetField) { + return SORT_DIRECTIONS.DESC; // Default to DESC for new fields + } + return currentDirection === SORT_DIRECTIONS.ASC ? SORT_DIRECTIONS.DESC : SORT_DIRECTIONS.ASC; +}; + +export const createSortHandler = (currentField, currentDirection, onSortChange) => { + return (field) => { + const newDirection = getNextSortDirection(currentField, field, currentDirection); + onSortChange(field, newDirection); + }; +}; + +// Generic sorting function for arrays +export const sortData = (data, field, direction = SORT_DIRECTIONS.ASC) => { + if (!data || !Array.isArray(data) || !field) { + return data; + } + + return [...data].sort((a, b) => { + const aValue = getNestedValue(a, field); + const bValue = getNestedValue(b, field); + + // Handle null/undefined values + if (aValue == null && bValue == null) return 0; + if (aValue == null) return direction === SORT_DIRECTIONS.ASC ? -1 : 1; + if (bValue == null) return direction === SORT_DIRECTIONS.ASC ? 1 : -1; + + // Handle different data types + const comparison = compareValues(aValue, bValue); + return direction === SORT_DIRECTIONS.ASC ? comparison : -comparison; + }); +}; + +// Helper function to get nested object values (e.g., 'user.name') +const getNestedValue = (obj, path) => { + return path.split('.').reduce((current, key) => current?.[key], obj); +}; + +// Helper function to compare different types of values +const compareValues = (a, b) => { + // Convert to strings for comparison if they're not numbers or dates + if (typeof a === 'number' && typeof b === 'number') { + return a - b; + } + + if (a instanceof Date && b instanceof Date) { + return a.getTime() - b.getTime(); + } + + // String comparison (case-insensitive) + const aStr = String(a).toLowerCase(); + const bStr = String(b).toLowerCase(); + + if (aStr < bStr) return -1; + if (aStr > bStr) return 1; + return 0; +}; + +// Validation utilities +export const isValidSortDirection = (direction) => { + return Object.values(SORT_DIRECTIONS).includes(direction); +}; + +export const isValidSortField = (field, validFields = []) => { + if (!field || typeof field !== 'string') return false; + if (validFields.length === 0) return true; // No restrictions + return validFields.includes(field); +}; \ No newline at end of file diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 18fd82041a..c2450845ee 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -16,6 +16,7 @@ export default defineConfig({ '@hooks': path.resolve(__dirname, './src/hooks'), '@utils': path.resolve(__dirname, './src/utils'), '@assets': path.resolve(__dirname, './src/assets'), + '@constants': path.resolve(__dirname, './src/constants'), }, }, build: { From eaed26387884bfa6c58bc5ae41cda93d7dc7827d Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 00:57:53 +0300 Subject: [PATCH 037/111] Complete refactor of the backend. --- backend/config/swagger/servers.js | 4 - backend/controllers/dashboardController.js | 391 +++++---------------- backend/controllers/exportController.js | 242 +++---------- backend/controllers/realtimeController.js | 291 +++------------ backend/controllers/treeController.js | 211 +++-------- backend/controllers/uploadController.js | 289 ++++----------- backend/controllers/userController.js | 285 +++------------ backend/middleware/auditLog.js | 144 ++------ backend/middleware/realtimeEvents.js | 236 ++----------- backend/middleware/validation.js | 257 ++++++-------- backend/utils/aggregationHelpers.js | 343 ++++++++++++++++++ backend/utils/auditHelpers.js | 184 ++++++++++ backend/utils/broadcastUtils.js | 103 ++++++ backend/utils/dashboardUtils.js | 231 ++++++++++++ backend/utils/dataFormatters.js | 187 ++++++++++ backend/utils/exportHelpers.js | 226 ++++++++++++ backend/utils/queryHelpers.js | 69 ++++ backend/utils/realtimeDataService.js | 157 +++++++++ backend/utils/realtimeEventEmitters.js | 205 +++++++++++ backend/utils/responseHelpers.js | 179 ++++++++++ backend/utils/responseInterceptor.js | 99 ++++++ backend/utils/roomManager.js | 213 +++++++++++ backend/utils/socketEventHandlers.js | 69 ++++ backend/utils/sseHelpers.js | 241 +++++++++++++ backend/utils/treeHelpers.js | 156 ++++++++ backend/utils/uploadHelpers.js | 175 +++++++++ backend/utils/userHelpers.js | 200 +++++++++++ backend/utils/validationHelpers.js | 42 +++ 28 files changed, 3591 insertions(+), 1838 deletions(-) create mode 100644 backend/utils/aggregationHelpers.js create mode 100644 backend/utils/auditHelpers.js create mode 100644 backend/utils/broadcastUtils.js create mode 100644 backend/utils/dashboardUtils.js create mode 100644 backend/utils/dataFormatters.js create mode 100644 backend/utils/exportHelpers.js create mode 100644 backend/utils/queryHelpers.js create mode 100644 backend/utils/realtimeDataService.js create mode 100644 backend/utils/realtimeEventEmitters.js create mode 100644 backend/utils/responseHelpers.js create mode 100644 backend/utils/responseInterceptor.js create mode 100644 backend/utils/roomManager.js create mode 100644 backend/utils/socketEventHandlers.js create mode 100644 backend/utils/sseHelpers.js create mode 100644 backend/utils/treeHelpers.js create mode 100644 backend/utils/uploadHelpers.js create mode 100644 backend/utils/userHelpers.js create mode 100644 backend/utils/validationHelpers.js diff --git a/backend/config/swagger/servers.js b/backend/config/swagger/servers.js index e8e65c3484..b2534d9ec8 100644 --- a/backend/config/swagger/servers.js +++ b/backend/config/swagger/servers.js @@ -3,10 +3,6 @@ export const servers = [ url: 'http://localhost:8080/api', description: 'Development server' }, - { - url: 'https://api-staging.nanwa-forestry.com/api', - description: 'Staging server' - }, { url: 'https://api.nanwa-forestry.com/api', description: 'Production server' diff --git a/backend/controllers/dashboardController.js b/backend/controllers/dashboardController.js index 75358746e2..d71f540724 100644 --- a/backend/controllers/dashboardController.js +++ b/backend/controllers/dashboardController.js @@ -1,29 +1,40 @@ import { Forest, Tree, User } from '../models/index.js'; +// TODO: Consider caching frequently accessed dashboard data to reduce database queries +import { + buildTreeQuery, + buildForestQuery, + getRecentDateFilter, + handleDashboardError +} from '../utils/dashboardUtils.js'; +import { + getSpeciesDistributionPipeline, + getHeightStatsPipeline, + getCO2StatsPipeline, + getHealthDistributionPipeline, + getForestStatsPipeline, + getLatestHeightPipeline, + getTotalCO2Pipeline, + getForestComparisonPipeline +} from '../utils/aggregationHelpers.js'; +import { + formatDashboardResponse, + formatQuickStatsResponse, + formatForestComparisonResponse +} from '../utils/dataFormatters.js'; // Get comprehensive dashboard statistics export const getDashboardStats = async (req, res) => { try { - const { - forestId, - startDate, - endDate, - species - } = req.query; + const filters = { + forestId: req.query.forestId, + startDate: req.query.startDate, + endDate: req.query.endDate, + species: req.query.species + }; - // Build base query conditions - const treeQuery = {}; - const forestQuery = { isActive: true }; - - if (forestId) { - treeQuery.forestId = forestId; - forestQuery._id = forestId; - } - if (species) treeQuery.species = new RegExp(species, 'i'); - if (startDate || endDate) { - treeQuery.plantedDate = {}; - if (startDate) treeQuery.plantedDate.$gte = new Date(startDate); - if (endDate) treeQuery.plantedDate.$lte = new Date(endDate); - } + // Build query conditions using utility functions + const treeQuery = buildTreeQuery(filters); + const forestQuery = buildForestQuery(filters); // Get basic counts const [ @@ -38,185 +49,58 @@ export const getDashboardStats = async (req, res) => { User.countDocuments({ isActive: true }) ]); - const deadTrees = totalTrees - aliveTrees; - const survivalRate = totalTrees > 0 ? (aliveTrees / totalTrees) * 100 : 0; - - // Get species distribution - const speciesDistribution = await Tree.aggregate([ - { $match: { ...treeQuery, isAlive: true } }, - { - $group: { - _id: '$species', - count: { $sum: 1 } - } - }, - { $sort: { count: -1 } }, - { $limit: 10 } - ]); - - // Get average height from latest measurements - const heightStats = await Tree.aggregate([ - { $match: { ...treeQuery, isAlive: true } }, - { $unwind: '$measurements' }, - { - $sort: { - 'treeId': 1, - 'measurements.measuredAt': -1 - } - }, - { - $group: { - _id: '$_id', - latestHeight: { $first: '$measurements.height' }, - latestMeasurement: { $first: '$measurements.measuredAt' } - } - }, - { - $group: { - _id: null, - avgHeight: { $avg: '$latestHeight' }, - minHeight: { $min: '$latestHeight' }, - maxHeight: { $max: '$latestHeight' }, - treesWithMeasurements: { $sum: 1 } - } - } - ]); - - const avgHeight = heightStats.length > 0 ? heightStats[0].avgHeight || 0 : 0; - const minHeight = heightStats.length > 0 ? heightStats[0].minHeight || 0 : 0; - const maxHeight = heightStats.length > 0 ? heightStats[0].maxHeight || 0 : 0; - const treesWithMeasurements = heightStats.length > 0 ? heightStats[0].treesWithMeasurements || 0 : 0; - - // Get total CO2 absorption - const co2Stats = await Tree.aggregate([ - { $match: { ...treeQuery, isAlive: true } }, - { $unwind: '$measurements' }, - { - $group: { - _id: null, - totalCO2: { $sum: '$measurements.co2Absorption' }, - avgCO2PerTree: { $avg: '$measurements.co2Absorption' }, - measurementCount: { $sum: 1 } - } - } - ]); - - const totalCO2 = co2Stats.length > 0 ? co2Stats[0].totalCO2 || 0 : 0; - const avgCO2PerTree = co2Stats.length > 0 ? co2Stats[0].avgCO2PerTree || 0 : 0; - const measurementCount = co2Stats.length > 0 ? co2Stats[0].measurementCount || 0 : 0; - - // Get health status distribution - const healthDistribution = await Tree.aggregate([ - { $match: { ...treeQuery, isAlive: true } }, - { $unwind: '$measurements' }, - { - $sort: { - 'treeId': 1, - 'measurements.measuredAt': -1 - } - }, - { - $group: { - _id: '$_id', - latestHealthStatus: { $first: '$measurements.healthStatus' } - } - }, - { - $group: { - _id: '$latestHealthStatus', - count: { $sum: 1 } - } - }, - { $sort: { count: -1 } } - ]); - - // Get forest coverage statistics - const forestStats = await Forest.aggregate([ - { $match: forestQuery }, - { - $group: { - _id: null, - totalArea: { $sum: '$area' }, - avgArea: { $avg: '$area' }, - minArea: { $min: '$area' }, - maxArea: { $max: '$area' } - } - } - ]); - - const totalArea = forestStats.length > 0 ? forestStats[0].totalArea || 0 : 0; - const avgForestArea = forestStats.length > 0 ? forestStats[0].avgArea || 0 : 0; - // Get recent activity (trees planted in last 30 days) - const thirtyDaysAgo = new Date(); - thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); - + const thirtyDaysAgo = getRecentDateFilter(30); const recentActivity = await Tree.countDocuments({ ...treeQuery, createdAt: { $gte: thirtyDaysAgo } }); - // Calculate tree density (trees per hectare) - const treeDensity = totalArea > 0 ? totalTrees / totalArea : 0; + // Execute aggregation pipelines in parallel + const [ + speciesDistribution, + heightStats, + co2Stats, + healthDistribution, + forestStats + ] = await Promise.all([ + Tree.aggregate(getSpeciesDistributionPipeline(treeQuery)), + Tree.aggregate(getHeightStatsPipeline(treeQuery)), + Tree.aggregate(getCO2StatsPipeline(treeQuery)), + Tree.aggregate(getHealthDistributionPipeline(treeQuery)), + Forest.aggregate(getForestStatsPipeline(forestQuery)) + ]); + + // Prepare raw data for formatting + const rawData = { + totalTrees, + aliveTrees, + totalForests, + totalUsers, + recentActivity, + speciesDistribution, + heightStats, + co2Stats, + healthDistribution, + forestStats + }; + + // Format and send response + const response = formatDashboardResponse(rawData, filters); + res.json(response); - res.json({ - success: true, - data: { - overview: { - totalTrees, - aliveTrees, - deadTrees, - survivalRate: Math.round(survivalRate * 100) / 100, - totalForests, - totalUsers, - recentActivity - }, - height: { - average: Math.round(avgHeight * 100) / 100, - minimum: Math.round(minHeight * 100) / 100, - maximum: Math.round(maxHeight * 100) / 100, - treesWithMeasurements - }, - co2: { - totalAbsorption: Math.round(totalCO2 * 100) / 100, - averagePerTree: Math.round(avgCO2PerTree * 100) / 100, - totalMeasurements: measurementCount - }, - forest: { - totalArea: Math.round(totalArea * 100) / 100, - averageArea: Math.round(avgForestArea * 100) / 100, - treeDensity: Math.round(treeDensity * 100) / 100 - }, - distributions: { - species: speciesDistribution, - health: healthDistribution - }, - filters: { - forestId, - startDate, - endDate, - species - }, - lastUpdated: new Date().toISOString() - } - }); } catch (error) { - console.error('Get dashboard stats error:', error); - res.status(500).json({ - success: false, - message: 'Failed to fetch dashboard statistics', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleDashboardError(res, error, 'Failed to fetch dashboard statistics'); } }; // Get quick stats for dashboard cards export const getQuickStats = async (req, res) => { try { - const { forestId } = req.query; - - const treeQuery = forestId ? { forestId } : {}; + const filters = { forestId: req.query.forestId }; + const treeQuery = buildTreeQuery(filters); + // Get basic counts const [ totalTrees, aliveTrees, @@ -227,136 +111,43 @@ export const getQuickStats = async (req, res) => { Forest.countDocuments({ isActive: true }) ]); - const survivalRate = totalTrees > 0 ? (aliveTrees / totalTrees) * 100 : 0; - - // Get latest average height - const heightResult = await Tree.aggregate([ - { $match: { ...treeQuery, isAlive: true } }, - { $unwind: '$measurements' }, - { $sort: { 'measurements.measuredAt': -1 } }, - { - $group: { - _id: '$_id', - latestHeight: { $first: '$measurements.height' } - } - }, - { - $group: { - _id: null, - avgHeight: { $avg: '$latestHeight' } - } - } + // Get aggregated data in parallel + const [heightResult, co2Result] = await Promise.all([ + Tree.aggregate(getLatestHeightPipeline(treeQuery)), + Tree.aggregate(getTotalCO2Pipeline(treeQuery)) ]); const avgHeight = heightResult.length > 0 ? heightResult[0].avgHeight || 0 : 0; + const totalCO2 = co2Result.length > 0 ? co2Result[0].totalCO2 || 0 : 0; - // Get total CO2 absorption - const co2Result = await Tree.aggregate([ - { $match: { ...treeQuery, isAlive: true } }, - { $unwind: '$measurements' }, - { - $group: { - _id: null, - totalCO2: { $sum: '$measurements.co2Absorption' } - } - } - ]); + // Format and send response + const rawData = { + totalTrees, + aliveTrees, + totalForests, + avgHeight, + totalCO2 + }; - const totalCO2 = co2Result.length > 0 ? co2Result[0].totalCO2 || 0 : 0; + const response = formatQuickStatsResponse(rawData); + res.json(response); - res.json({ - success: true, - data: { - totalTrees, - aliveTrees, - survivalRate: Math.round(survivalRate * 100) / 100, - averageHeight: Math.round(avgHeight * 100) / 100, - totalCO2Absorption: Math.round(totalCO2 * 100) / 100, - totalForests - } - }); } catch (error) { - console.error('Get quick stats error:', error); - res.status(500).json({ - success: false, - message: 'Failed to fetch quick statistics', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleDashboardError(res, error, 'Failed to fetch quick statistics'); } }; // Get forest comparison statistics export const getForestComparison = async (req, res) => { try { - const forestStats = await Forest.aggregate([ - { $match: { isActive: true } }, - { - $lookup: { - from: 'trees', - localField: '_id', - foreignField: 'forestId', - as: 'trees' - } - }, - { - $addFields: { - totalTrees: { $size: '$trees' }, - aliveTrees: { - $size: { - $filter: { - input: '$trees', - cond: { $eq: ['$$this.isAlive', true] } - } - } - } - } - }, - { - $addFields: { - survivalRate: { - $cond: { - if: { $gt: ['$totalTrees', 0] }, - then: { $multiply: [{ $divide: ['$aliveTrees', '$totalTrees'] }, 100] }, - else: 0 - } - }, - treeDensity: { - $cond: { - if: { $gt: ['$area', 0] }, - then: { $divide: ['$totalTrees', '$area'] }, - else: 0 - } - } - } - }, - { - $project: { - name: 1, - region: 1, - area: 1, - establishedDate: 1, - totalTrees: 1, - aliveTrees: 1, - survivalRate: { $round: ['$survivalRate', 2] }, - treeDensity: { $round: ['$treeDensity', 2] } - } - }, - { $sort: { totalTrees: -1 } } - ]); + // Execute forest comparison aggregation pipeline + const forestStats = await Forest.aggregate(getForestComparisonPipeline()); + + // Format and send response + const response = formatForestComparisonResponse(forestStats); + res.json(response); - res.json({ - success: true, - data: { - forests: forestStats, - totalForests: forestStats.length - } - }); } catch (error) { - console.error('Get forest comparison error:', error); - res.status(500).json({ - success: false, - message: 'Failed to fetch forest comparison data', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleDashboardError(res, error, 'Failed to fetch forest comparison data'); } }; \ No newline at end of file diff --git a/backend/controllers/exportController.js b/backend/controllers/exportController.js index 4a02895852..538c8cff61 100644 --- a/backend/controllers/exportController.js +++ b/backend/controllers/exportController.js @@ -1,33 +1,30 @@ import { validationResult } from 'express-validator'; import { Tree, Forest } from '../models/index.js'; import XLSX from 'xlsx'; -import path from 'path'; -import fs from 'fs'; +import { + buildExportTreeQuery, + processTreesForExport, + generateCSVContent, + generateExportFilename, + setCSVResponseHeaders, + setXLSXResponseHeaders, + calculateForestAnalytics, + generateExportStatistics, + transformTreeToExportRow +} from '../utils/exportHelpers.js'; +import { handleDashboardError } from '../utils/dashboardUtils.js'; // Export trees data to CSV export const exportTreesCSV = async (req, res) => { try { const { - forestId, - species, - isAlive, - startDate, - endDate, includeHealthStatus = true, - includeMeasurements = false + includeMeasurements = false, + ...queryParams } = req.query; - // Build query conditions - const queryConditions = {}; - if (forestId) queryConditions.forestId = forestId; - if (species) queryConditions.species = new RegExp(species, 'i'); - if (isAlive !== undefined) queryConditions.isAlive = isAlive === 'true'; - - if (startDate || endDate) { - queryConditions.plantedDate = {}; - if (startDate) queryConditions.plantedDate.$gte = new Date(startDate); - if (endDate) queryConditions.plantedDate.$lte = new Date(endDate); - } + // Build query conditions using helper + const queryConditions = buildExportTreeQuery(queryParams); // Get trees with forest information const trees = await Tree.find(queryConditions) @@ -41,81 +38,18 @@ export const exportTreesCSV = async (req, res) => { }); } - // Prepare CSV data - const csvData = []; - - trees.forEach(tree => { - const baseRow = { - 'Tree ID': tree.treeId, - 'Forest Name': tree.forestId?.name || 'Unknown', - 'Region': tree.forestId?.region || 'Unknown', - 'Species': tree.species, - 'Planted Date': tree.plantedDate.toISOString().split('T')[0], - 'Is Alive': tree.isAlive ? 'Yes' : 'No', - 'Longitude': tree.location.coordinates[0], - 'Latitude': tree.location.coordinates[1], - 'Age (Days)': Math.floor((new Date() - tree.plantedDate) / (1000 * 60 * 60 * 24)) - }; - - if (!tree.isAlive) { - baseRow['Death Date'] = tree.deathDate ? tree.deathDate.toISOString().split('T')[0] : ''; - baseRow['Death Cause'] = tree.deathCause || ''; - } - - if (includeHealthStatus === 'true' && tree.measurements.length > 0) { - const latestMeasurement = tree.measurements - .sort((a, b) => new Date(b.measuredAt) - new Date(a.measuredAt))[0]; - - baseRow['Current Height (m)'] = latestMeasurement.height || ''; - baseRow['Current Health Status'] = latestMeasurement.healthStatus || ''; - baseRow['Latest Measurement Date'] = latestMeasurement.measuredAt.toISOString().split('T')[0]; - } - - if (includeMeasurements === 'true') { - if (tree.measurements.length === 0) { - csvData.push(baseRow); - } else { - tree.measurements.forEach((measurement, index) => { - const row = { ...baseRow }; - row['Measurement #'] = index + 1; - row['Height (m)'] = measurement.height; - row['Diameter (cm)'] = measurement.diameter || ''; - row['CO2 Absorption (kg)'] = measurement.co2Absorption || ''; - row['Health Status'] = measurement.healthStatus; - row['Measurement Date'] = measurement.measuredAt.toISOString().split('T')[0]; - row['Notes'] = measurement.notes || ''; - csvData.push(row); - }); - } - } else { - csvData.push(baseRow); - } - }); - - // Convert to CSV format - const csvHeaders = Object.keys(csvData[0]); - const csvRows = csvData.map(row => - csvHeaders.map(header => { - const value = row[header]; - return typeof value === 'string' && value.includes(',') ? `"${value}"` : value; - }).join(',') - ); - const csvContent = [csvHeaders.join(','), ...csvRows].join('\n'); + // Process trees data for export + const csvData = processTreesForExport(trees, { includeHealthStatus, includeMeasurements }); - // Set response headers - const filename = `nanwa_trees_export_${new Date().toISOString().split('T')[0]}.csv`; - res.setHeader('Content-Type', 'text/csv'); - res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); - res.setHeader('Content-Length', Buffer.byteLength(csvContent)); + // Generate CSV content + const csvContent = generateCSVContent(csvData); + // Set response headers and send + const filename = generateExportFilename('nanwa_trees_export', 'csv'); + setCSVResponseHeaders(res, filename, csvContent); res.send(csvContent); } catch (error) { - console.error('Export trees CSV error:', error); - res.status(500).json({ - success: false, - message: 'Failed to export data', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleDashboardError(res, error, 'Failed to export data'); } }; @@ -123,26 +57,13 @@ export const exportTreesCSV = async (req, res) => { export const exportTreesXLSX = async (req, res) => { try { const { - forestId, - species, - isAlive, - startDate, - endDate, includeHealthStatus = true, - includeMeasurements = false + includeMeasurements = false, + ...queryParams } = req.query; - // Build query conditions (same as CSV) - const queryConditions = {}; - if (forestId) queryConditions.forestId = forestId; - if (species) queryConditions.species = new RegExp(species, 'i'); - if (isAlive !== undefined) queryConditions.isAlive = isAlive === 'true'; - - if (startDate || endDate) { - queryConditions.plantedDate = {}; - if (startDate) queryConditions.plantedDate.$gte = new Date(startDate); - if (endDate) queryConditions.plantedDate.$lte = new Date(endDate); - } + // Build query conditions using helper + const queryConditions = buildExportTreeQuery(queryParams); // Get trees with forest information const trees = await Tree.find(queryConditions) @@ -159,36 +80,8 @@ export const exportTreesXLSX = async (req, res) => { // Create workbook const workbook = XLSX.utils.book_new(); - // Prepare trees summary data - const treesData = trees.map(tree => { - const row = { - 'Tree ID': tree.treeId, - 'Forest Name': tree.forestId?.name || 'Unknown', - 'Region': tree.forestId?.region || 'Unknown', - 'Species': tree.species, - 'Planted Date': tree.plantedDate.toISOString().split('T')[0], - 'Is Alive': tree.isAlive ? 'Yes' : 'No', - 'Longitude': tree.location.coordinates[0], - 'Latitude': tree.location.coordinates[1], - 'Age (Days)': Math.floor((new Date() - tree.plantedDate) / (1000 * 60 * 60 * 24)) - }; - - if (!tree.isAlive) { - row['Death Date'] = tree.deathDate ? tree.deathDate.toISOString().split('T')[0] : ''; - row['Death Cause'] = tree.deathCause || ''; - } - - if (includeHealthStatus === 'true' && tree.measurements.length > 0) { - const latestMeasurement = tree.measurements - .sort((a, b) => new Date(b.measuredAt) - new Date(a.measuredAt))[0]; - - row['Current Height (m)'] = latestMeasurement.height || ''; - row['Current Health Status'] = latestMeasurement.healthStatus || ''; - row['Latest Measurement Date'] = latestMeasurement.measuredAt.toISOString().split('T')[0]; - } - - return row; - }); + // Prepare trees summary data using helper + const treesData = trees.map(tree => transformTreeToExportRow(tree, { includeHealthStatus })); // Add trees summary sheet const treesWorksheet = XLSX.utils.json_to_sheet(treesData); @@ -221,17 +114,8 @@ export const exportTreesXLSX = async (req, res) => { } } - // Add statistics sheet - const statistics = { - 'Total Trees': trees.length, - 'Alive Trees': trees.filter(t => t.isAlive).length, - 'Dead Trees': trees.filter(t => !t.isAlive).length, - 'Survival Rate (%)': ((trees.filter(t => t.isAlive).length / trees.length) * 100).toFixed(2), - 'Export Date': new Date().toISOString().split('T')[0], - 'Unique Forests': [...new Set(trees.map(t => t.forestId?.name).filter(Boolean))].length, - 'Unique Species': [...new Set(trees.map(t => t.species))].length - }; - + // Add statistics sheet using helper + const statistics = generateExportStatistics(trees); const statsData = Object.entries(statistics).map(([key, value]) => ({ 'Metric': key, 'Value': value @@ -243,20 +127,12 @@ export const exportTreesXLSX = async (req, res) => { // Convert workbook to buffer const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' }); - // Set response headers - const filename = `nanwa_trees_export_${new Date().toISOString().split('T')[0]}.xlsx`; - res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); - res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); - res.setHeader('Content-Length', buffer.length); - + // Set response headers and send + const filename = generateExportFilename('nanwa_trees_export', 'xlsx'); + setXLSXResponseHeaders(res, filename, buffer); res.send(buffer); } catch (error) { - console.error('Export trees XLSX error:', error); - res.status(500).json({ - success: false, - message: 'Failed to export data', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleDashboardError(res, error, 'Failed to export data'); } }; @@ -272,7 +148,6 @@ export const exportForestAnalytics = async (req, res) => { forests.map(async (forest) => { const totalTrees = await Tree.countDocuments({ forestId: forest._id }); const aliveTrees = await Tree.countDocuments({ forestId: forest._id, isAlive: true }); - const survivalRate = totalTrees > 0 ? (aliveTrees / totalTrees) * 100 : 0; // Get average height from latest measurements const avgHeightResult = await Tree.aggregate([ @@ -303,36 +178,16 @@ export const exportForestAnalytics = async (req, res) => { const totalCO2 = co2Result.length > 0 ? co2Result[0].totalCO2 : 0; - return { - 'Forest Name': forest.name, - 'Region': forest.region, - 'Area (hectares)': forest.area, - 'Established Date': forest.establishedDate.toISOString().split('T')[0], - 'Total Trees': totalTrees, - 'Alive Trees': aliveTrees, - 'Dead Trees': totalTrees - aliveTrees, - 'Survival Rate (%)': Math.round(survivalRate * 100) / 100, - 'Average Height (m)': Math.round(avgHeight * 100) / 100, - 'Total CO2 Absorption (kg)': Math.round(totalCO2 * 100) / 100, - 'Trees per Hectare': totalTrees > 0 ? Math.round((totalTrees / forest.area) * 100) / 100 : 0 - }; + // Use helper to calculate analytics + return calculateForestAnalytics(forest, totalTrees, aliveTrees, avgHeight, totalCO2); }) ); if (format === 'csv') { - // Export as CSV - const csvHeaders = Object.keys(forestAnalytics[0]); - const csvRows = forestAnalytics.map(row => - csvHeaders.map(header => { - const value = row[header]; - return typeof value === 'string' && value.includes(',') ? `"${value}"` : value; - }).join(',') - ); - const csvContent = [csvHeaders.join(','), ...csvRows].join('\n'); - - const filename = `nanwa_forest_analytics_${new Date().toISOString().split('T')[0]}.csv`; - res.setHeader('Content-Type', 'text/csv'); - res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); + // Export as CSV using helper + const csvContent = generateCSVContent(forestAnalytics); + const filename = generateExportFilename('nanwa_forest_analytics', 'csv'); + setCSVResponseHeaders(res, filename, csvContent); res.send(csvContent); } else { // Export as XLSX @@ -341,18 +196,11 @@ export const exportForestAnalytics = async (req, res) => { XLSX.utils.book_append_sheet(workbook, worksheet, 'Forest Analytics'); const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' }); - const filename = `nanwa_forest_analytics_${new Date().toISOString().split('T')[0]}.xlsx`; - - res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); - res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); + const filename = generateExportFilename('nanwa_forest_analytics', 'xlsx'); + setXLSXResponseHeaders(res, filename, buffer); res.send(buffer); } } catch (error) { - console.error('Export forest analytics error:', error); - res.status(500).json({ - success: false, - message: 'Failed to export forest analytics', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleDashboardError(res, error, 'Failed to export forest analytics'); } }; \ No newline at end of file diff --git a/backend/controllers/realtimeController.js b/backend/controllers/realtimeController.js index bad3f7bfce..624d6a676c 100644 --- a/backend/controllers/realtimeController.js +++ b/backend/controllers/realtimeController.js @@ -1,11 +1,16 @@ import { Tree, Forest, TreeImage, AuditLog } from '../models/index.js'; +import { SocketEventHandlers } from '../utils/socketEventHandlers.js'; +import { RealtimeDataService } from '../utils/realtimeDataService.js'; +import { BroadcastUtils } from '../utils/broadcastUtils.js'; +import { RoomManager } from '../utils/roomManager.js'; // Real-time event handlers export class RealtimeController { constructor(io) { this.io = io; - this.connectedUsers = new Map(); // Track connected users - this.activeRooms = new Set(); // Track active rooms + this.roomManager = new RoomManager(); + this.broadcastUtils = new BroadcastUtils(io); + this.eventHandlers = new SocketEventHandlers(this); } // Handle new socket connection @@ -13,21 +18,16 @@ export class RealtimeController { console.log(`New socket connection: ${socket.id} for user: ${socket.user.email}`); // Store connection info - this.connectedUsers.set(socket.userId, { - socketId: socket.id, - user: socket.user, - connectedAt: new Date(), - rooms: [] - }); + this.roomManager.addUserConnection(socket); // Set up event listeners - this.setupEventListeners(socket); + this.eventHandlers.setupEventListeners(socket); // Send initial data this.sendInitialData(socket); // Notify other users (admins) about new connection - this.notifyUserConnection(socket.user, true); + this.broadcastUtils.notifyUserConnection(socket.user, true); } // Handle socket disconnection @@ -36,44 +36,16 @@ export class RealtimeController { if (socket.userId) { // Remove from connected users - this.connectedUsers.delete(socket.userId); + this.roomManager.removeUserConnection(socket.userId); // Notify other users about disconnection - this.notifyUserConnection(socket.user, false); + this.broadcastUtils.notifyUserConnection(socket.user, false); } } - // Set up event listeners for socket + // Set up event listeners for socket (delegated to eventHandlers) setupEventListeners(socket) { - // Subscribe to specific tree updates - socket.on('subscribe:tree', (treeId) => { - this.subscribeToTree(socket, treeId); - }); - - // Unsubscribe from tree updates - socket.on('unsubscribe:tree', (treeId) => { - this.unsubscribeFromTree(socket, treeId); - }); - - // Subscribe to forest updates - socket.on('subscribe:forest', (forestId) => { - this.subscribeToForest(socket, forestId); - }); - - // Request live dashboard data - socket.on('request:dashboard', () => { - this.sendDashboardData(socket); - }); - - // Request connected users count - socket.on('request:users-online', () => { - this.sendOnlineUsersCount(socket); - }); - - // Handle real-time chat/messaging (if needed) - socket.on('message:send', (data) => { - this.handleMessage(socket, data); - }); + this.eventHandlers.setupEventListeners(socket); } // Send initial data when user connects @@ -83,18 +55,12 @@ export class RealtimeController { this.sendOnlineUsersCount(socket); // Send recent activity - const recentActivity = await this.getRecentActivity(); + const recentActivity = await RealtimeDataService.getRecentActivity(); socket.emit('data:recent-activity', recentActivity); // Send user's tree count - const userTreeCount = await Tree.countDocuments({ - // Add user filtering logic here if trees are user-specific - }); - - socket.emit('data:user-stats', { - treeCount: userTreeCount, - connectedAt: new Date() - }); + const userStats = await RealtimeDataService.getUserTreeStats(); + socket.emit('data:user-stats', userStats); } catch (error) { console.error('Error sending initial data:', error); @@ -105,20 +71,13 @@ export class RealtimeController { async subscribeToTree(socket, treeId) { try { // Validate tree exists - const tree = await Tree.findById(treeId); - if (!tree) { - socket.emit('error', { message: 'Tree not found' }); - return; - } + const tree = await RealtimeDataService.validateAndGetTree(treeId); - const treeRoom = `tree:${treeId}`; + const treeRoom = RoomManager.generateTreeRoom(treeId); socket.join(treeRoom); // Add to user's rooms - const userConnection = this.connectedUsers.get(socket.userId); - if (userConnection) { - userConnection.rooms.push(treeRoom); - } + this.roomManager.addUserToRoom(socket.userId, treeRoom); console.log(`User ${socket.user.email} subscribed to tree ${treeId}`); @@ -137,14 +96,11 @@ export class RealtimeController { // Unsubscribe from tree updates unsubscribeFromTree(socket, treeId) { - const treeRoom = `tree:${treeId}`; + const treeRoom = RoomManager.generateTreeRoom(treeId); socket.leave(treeRoom); // Remove from user's rooms - const userConnection = this.connectedUsers.get(socket.userId); - if (userConnection) { - userConnection.rooms = userConnection.rooms.filter(room => room !== treeRoom); - } + this.roomManager.removeUserFromRoom(socket.userId, treeRoom); console.log(`User ${socket.user.email} unsubscribed from tree ${treeId}`); } @@ -152,19 +108,15 @@ export class RealtimeController { // Subscribe to forest updates async subscribeToForest(socket, forestId) { try { - const forest = await Forest.findById(forestId); - if (!forest) { - socket.emit('error', { message: 'Forest not found' }); - return; - } + await RealtimeDataService.validateAndGetForest(forestId); - const forestRoom = `forest:${forestId}`; + const forestRoom = RoomManager.generateForestRoom(forestId); socket.join(forestRoom); console.log(`User ${socket.user.email} subscribed to forest ${forestId}`); // Send current forest data - const forestData = await this.getForestData(forestId); + const forestData = await RealtimeDataService.getForestData(forestId); socket.emit('forest:data', { forestId, forest: forestData, @@ -180,7 +132,7 @@ export class RealtimeController { // Send dashboard data async sendDashboardData(socket) { try { - const dashboardData = await this.getDashboardData(); + const dashboardData = await RealtimeDataService.getDashboardData(this.roomManager.connectedUsers.size); socket.emit('dashboard:data', dashboardData); } catch (error) { console.error('Error sending dashboard data:', error); @@ -190,18 +142,8 @@ export class RealtimeController { // Send online users count sendOnlineUsersCount(socket) { - const onlineCount = this.connectedUsers.size; - const onlineUsers = Array.from(this.connectedUsers.values()).map(conn => ({ - userId: conn.user._id, - email: conn.user.email, - role: conn.user.role, - connectedAt: conn.connectedAt - })); - - socket.emit('users:online', { - count: onlineCount, - users: socket.userRole === 'admin' ? onlineUsers : undefined - }); + const onlineData = this.roomManager.getOnlineUsersData(socket.userRole === 'admin'); + socket.emit('users:online', onlineData); } // Handle real-time messaging @@ -228,185 +170,40 @@ export class RealtimeController { timestamp: new Date() }; - // Broadcast message to appropriate room - if (targetRoom && socket.rooms.has(targetRoom)) { - this.io.to(targetRoom).emit('message:received', messageData); - } else { - // Broadcast to all admin users - this.io.to('admin').emit('message:received', messageData); - } + // Broadcast message using broadcast utility + const validTargetRoom = targetRoom && socket.rooms.has(targetRoom) ? targetRoom : null; + this.broadcastUtils.broadcastMessage(messageData, validTargetRoom); } - // Broadcast tree update to subscribed users + // Broadcast tree update to subscribed users (delegated to broadcastUtils) broadcastTreeUpdate(treeId, updateData, eventType = 'tree:updated') { - const treeRoom = `tree:${treeId}`; - - this.io.to(treeRoom).emit(eventType, { - treeId, - data: updateData, - timestamp: new Date() - }); - - console.log(`Broadcasted ${eventType} for tree ${treeId} to room ${treeRoom}`); + this.broadcastUtils.broadcastTreeUpdate(treeId, updateData, eventType); } - // Broadcast forest update + // Broadcast forest update (delegated to broadcastUtils) broadcastForestUpdate(forestId, updateData, eventType = 'forest:updated') { - const forestRoom = `forest:${forestId}`; - - this.io.to(forestRoom).emit(eventType, { - forestId, - data: updateData, - timestamp: new Date() - }); - - console.log(`Broadcasted ${eventType} for forest ${forestId} to room ${forestRoom}`); + this.broadcastUtils.broadcastForestUpdate(forestId, updateData, eventType); } - // Broadcast new image upload + // Broadcast new image upload (delegated to broadcastUtils) broadcastImageUpload(treeId, imageData) { - const treeRoom = `tree:${treeId}`; - - this.io.to(treeRoom).emit('tree:image-uploaded', { - treeId, - image: imageData, - timestamp: new Date() - }); - - // Also broadcast to forest room if applicable - Tree.findById(treeId).then(tree => { - if (tree) { - const forestRoom = `forest:${tree.forestId}`; - this.io.to(forestRoom).emit('forest:image-uploaded', { - forestId: tree.forestId, - treeId, - image: imageData, - timestamp: new Date() - }); - } - }); + this.broadcastUtils.broadcastImageUpload(treeId, imageData); } - // Broadcast system notification + // Broadcast system notification (delegated to broadcastUtils) broadcastSystemNotification(notification, targetAudience = 'all') { - const notificationData = { - id: Date.now().toString(), - ...notification, - timestamp: new Date() - }; - - switch (targetAudience) { - case 'admin': - this.io.to('admin').emit('notification:system', notificationData); - break; - case 'all': - default: - this.io.emit('notification:system', notificationData); - break; - } + this.broadcastUtils.broadcastSystemNotification(notification, targetAudience); } - // Notify about user connection/disconnection + // Notify about user connection/disconnection (delegated to broadcastUtils) notifyUserConnection(user, isConnected) { - const eventData = { - userId: user._id, - email: user.email, - isConnected, - timestamp: new Date() - }; - - // Notify admin users - this.io.to('admin').emit('user:connection-status', eventData); + this.broadcastUtils.notifyUserConnection(user, isConnected); } - // Helper: Get recent activity - async getRecentActivity(limit = 10) { - try { - const recentLogs = await AuditLog.find() - .sort({ timestamp: -1 }) - .limit(limit) - .populate('userId', 'firstName lastName email'); - - return recentLogs.map(log => ({ - id: log._id, - action: log.action, - resource: log.resource, - userId: log.userId?._id, - user: log.userId ? { - email: log.userId.email, - firstName: log.userId.firstName, - lastName: log.userId.lastName - } : null, - timestamp: log.timestamp, - changes: log.changes - })); - } catch (error) { - console.error('Error fetching recent activity:', error); - return []; - } - } + // TODO: Consider moving these database operations to Zustand store for better state management - // Helper: Get dashboard data - async getDashboardData() { - try { - const [totalTrees, totalForests, recentImages] = await Promise.all([ - Tree.countDocuments(), - Forest.countDocuments({ isActive: true }), - TreeImage.find({ isActive: true }) - .sort({ createdAt: -1 }) - .limit(5) - .populate('treeId', 'species') - ]); - - return { - stats: { - totalTrees, - totalForests, - onlineUsers: this.connectedUsers.size - }, - recentImages: recentImages.map(img => img.toPublicJSON()), - timestamp: new Date() - }; - } catch (error) { - console.error('Error fetching dashboard data:', error); - return null; - } - } - - // Helper: Get forest data - async getForestData(forestId) { - try { - const [forest, treeCount, recentTrees] = await Promise.all([ - Forest.findById(forestId), - Tree.countDocuments({ forestId }), - Tree.find({ forestId }) - .sort({ createdAt: -1 }) - .limit(10) - .select('species plantedDate isAlive measurements') - ]); - - return { - ...forest.toObject(), - treeCount, - recentTrees - }; - } catch (error) { - console.error('Error fetching forest data:', error); - return null; - } - } - - // Get connection statistics + // Get connection statistics (delegated to roomManager) getConnectionStats() { - return { - connectedUsers: this.connectedUsers.size, - activeRooms: this.activeRooms.size, - connections: Array.from(this.connectedUsers.values()).map(conn => ({ - userId: conn.user._id, - email: conn.user.email, - connectedAt: conn.connectedAt, - rooms: conn.rooms.length - })) - }; + return this.roomManager.getConnectionStats(); } } \ No newline at end of file diff --git a/backend/controllers/treeController.js b/backend/controllers/treeController.js index 4afd4e41da..ccb79fd7a9 100644 --- a/backend/controllers/treeController.js +++ b/backend/controllers/treeController.js @@ -1,5 +1,17 @@ -import { validationResult } from 'express-validator'; -import { Tree, Forest } from '../models/index.js'; +import { Tree } from '../models/index.js'; +import { buildTreeQuery, buildPaginationOptions } from '../utils/dashboardUtils.js'; +import { + handleValidationErrors, + verifyForestExists, + transformTreesForMapping, + createMeasurementData, + handleTreeError, + sendTreeListResponse, + sendTreeResponse, + sendTreeMappingResponse, + sendMeasurementResponse, + sendMeasurementsHistoryResponse +} from '../utils/treeHelpers.js'; // Get all trees with optional filtering export const getTrees = async (req, res) => { @@ -16,53 +28,25 @@ export const getTrees = async (req, res) => { sortOrder = 'desc' } = req.query; - // Build query conditions - const queryConditions = {}; - - if (forestId) queryConditions.forestId = forestId; - if (species) queryConditions.species = new RegExp(species, 'i'); - if (isAlive !== undefined) queryConditions.isAlive = isAlive === 'true'; - - if (startDate || endDate) { - queryConditions.plantedDate = {}; - if (startDate) queryConditions.plantedDate.$gte = new Date(startDate); - if (endDate) queryConditions.plantedDate.$lte = new Date(endDate); - } - - // Calculate pagination - const skip = (page - 1) * limit; - const sortDirection = sortOrder === 'desc' ? -1 : 1; + // Build query conditions using utility + const queryConditions = buildTreeQuery({ forestId, species, isAlive, startDate, endDate }); + + // Build pagination options using utility + const { skip, sort } = buildPaginationOptions({ page, limit, sortBy, sortOrder }); // Execute query with pagination const trees = await Tree.find(queryConditions) .populate('forestId', 'name region') - .sort({ [sortBy]: sortDirection }) + .sort(sort) .skip(skip) .limit(parseInt(limit)); // Get total count for pagination const totalCount = await Tree.countDocuments(queryConditions); - res.json({ - success: true, - data: { - trees, - pagination: { - currentPage: parseInt(page), - totalPages: Math.ceil(totalCount / limit), - totalCount, - hasNextPage: page * limit < totalCount, - hasPrevPage: page > 1 - } - } - }); + sendTreeListResponse(res, trees, totalCount, page, limit); } catch (error) { - console.error('Get trees error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleTreeError(res, error, 'Get trees'); } }; @@ -82,17 +66,9 @@ export const getTreeById = async (req, res) => { }); } - res.json({ - success: true, - data: { tree } - }); + sendTreeResponse(res, tree); } catch (error) { - console.error('Get tree by ID error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleTreeError(res, error, 'Get tree by ID'); } }; @@ -100,18 +76,11 @@ export const getTreeById = async (req, res) => { export const createTree = async (req, res) => { try { // Check for validation errors - const errors = validationResult(req); - if (!errors.isEmpty()) { - return res.status(400).json({ - success: false, - message: 'Validation failed', - errors: errors.array() - }); - } + if (handleValidationErrors(req, res)) return; // Verify forest exists - const forest = await Forest.findById(req.body.forestId); - if (!forest || !forest.isActive) { + const forest = await verifyForestExists(req.body.forestId); + if (!forest) { return res.status(404).json({ success: false, message: 'Forest not found' @@ -133,18 +102,9 @@ export const createTree = async (req, res) => { // Populate forest information await tree.populate('forestId', 'name region'); - res.status(201).json({ - success: true, - message: 'Tree created successfully', - data: { tree } - }); + sendTreeResponse(res, tree, 'Tree created successfully', 201); } catch (error) { - console.error('Create tree error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleTreeError(res, error, 'Create tree'); } }; @@ -166,18 +126,9 @@ export const updateTree = async (req, res) => { }); } - res.json({ - success: true, - message: 'Tree updated successfully', - data: { tree } - }); + sendTreeResponse(res, tree, 'Tree updated successfully'); } catch (error) { - console.error('Update tree error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleTreeError(res, error, 'Update tree'); } }; @@ -199,12 +150,7 @@ export const deleteTree = async (req, res) => { message: 'Tree deleted successfully' }); } catch (error) { - console.error('Delete tree error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleTreeError(res, error, 'Delete tree'); } }; @@ -212,21 +158,10 @@ export const deleteTree = async (req, res) => { export const addMeasurement = async (req, res) => { try { // Check for validation errors - const errors = validationResult(req); - if (!errors.isEmpty()) { - return res.status(400).json({ - success: false, - message: 'Validation failed', - errors: errors.array() - }); - } + if (handleValidationErrors(req, res)) return; const { id } = req.params; - const measurementData = { - ...req.body, - measuredBy: req.user._id, - measuredAt: new Date() - }; + const measurementData = createMeasurementData(req.body, req.user._id); const tree = await Tree.findById(id); if (!tree) { @@ -242,21 +177,9 @@ export const addMeasurement = async (req, res) => { // Populate the new measurement await tree.populate('measurements.measuredBy', 'firstName lastName'); - res.status(201).json({ - success: true, - message: 'Measurement added successfully', - data: { - tree, - latestMeasurement: tree.measurements[tree.measurements.length - 1] - } - }); + sendMeasurementResponse(res, tree); } catch (error) { - console.error('Add measurement error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleTreeError(res, error, 'Add measurement'); } }; @@ -279,20 +202,9 @@ export const getTreeMeasurements = async (req, res) => { // Get latest measurements const measurements = tree.getLatestMeasurements(parseInt(limit)); - res.json({ - success: true, - data: { - treeId: tree.treeId, - measurements - } - }); + sendMeasurementsHistoryResponse(res, tree.treeId, measurements); } catch (error) { - console.error('Get tree measurements error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleTreeError(res, error, 'Get tree measurements'); } }; @@ -303,8 +215,8 @@ export const getTreesByForest = async (req, res) => { const { isAlive = true } = req.query; // Verify forest exists - const forest = await Forest.findById(forestId); - if (!forest || !forest.isActive) { + const forest = await verifyForestExists(forestId); + if (!forest) { return res.status(404).json({ success: false, message: 'Forest not found' @@ -317,35 +229,11 @@ export const getTreesByForest = async (req, res) => { }).select('treeId location species measurements'); // Transform data for mapping - const treeMarkers = trees.map(tree => ({ - id: tree._id, - treeId: tree.treeId, - coordinates: tree.location.coordinates, - species: tree.species, - currentHeight: tree.currentHeight, - currentHealthStatus: tree.currentHealthStatus, - measurementCount: tree.measurements.length - })); + const treeMarkers = transformTreesForMapping(trees); - res.json({ - success: true, - data: { - forest: { - id: forest._id, - name: forest.name, - region: forest.region - }, - trees: treeMarkers, - totalCount: trees.length - } - }); + sendTreeMappingResponse(res, forest, treeMarkers); } catch (error) { - console.error('Get trees by forest error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleTreeError(res, error, 'Get trees by forest'); } }; @@ -373,17 +261,8 @@ export const markTreeDead = async (req, res) => { }); } - res.json({ - success: true, - message: 'Tree marked as dead', - data: { tree } - }); + sendTreeResponse(res, tree, 'Tree marked as dead'); } catch (error) { - console.error('Mark tree dead error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + handleTreeError(res, error, 'Mark tree dead'); } }; \ No newline at end of file diff --git a/backend/controllers/uploadController.js b/backend/controllers/uploadController.js index 48779e4f64..60f908c540 100644 --- a/backend/controllers/uploadController.js +++ b/backend/controllers/uploadController.js @@ -1,13 +1,19 @@ -import path from 'path'; -import fs from 'fs/promises'; -import { Tree } from '../models/index.js'; import TreeImage from '../models/TreeImage.js'; -import { - processImage, - generateThumbnail, - cleanupTempFile, - validateImageFile -} from '../middleware/upload.js'; +import { + validateTreeExists, + validateImageOwnership, + cleanupUploadedFiles, + processSingleImageUpload, + buildPaginationOptions, + buildPaginationResponse +} from '../utils/uploadHelpers.js'; +import { + sendSuccessResponse, + sendErrorResponse, + sendNotFoundResponse, + sendUnauthorizedResponse, + sendBadRequestResponse +} from '../utils/responseHelpers.js'; // Upload images for a tree export const uploadTreeImages = async (req, res) => { @@ -16,127 +22,51 @@ export const uploadTreeImages = async (req, res) => { const { description, imageType = 'tree_photo', tags } = req.body; // Validate tree exists - const tree = await Tree.findById(treeId); + const tree = await validateTreeExists(treeId); if (!tree) { - // Clean up uploaded files - if (req.files) { - for (const file of req.files) { - await cleanupTempFile(file.path); - } - } - - return res.status(404).json({ - success: false, - message: 'Tree not found' - }); + await cleanupUploadedFiles(req.files); + return sendNotFoundResponse(res, 'Tree'); } if (!req.files || req.files.length === 0) { - return res.status(400).json({ - success: false, - message: 'No files uploaded' - }); + return sendBadRequestResponse(res, 'No files uploaded'); } const uploadedImages = []; - const uploadDir = path.join(process.cwd(), 'uploads', 'trees'); - const thumbnailDir = path.join(process.cwd(), 'uploads', 'thumbnails'); - - // Ensure upload directories exist - await fs.mkdir(uploadDir, { recursive: true }); - await fs.mkdir(thumbnailDir, { recursive: true }); + const uploadOptions = { + description, + imageType, + tags, + uploadedBy: req.user._id + }; for (const file of req.files) { try { - // Validate image - const imageMetadata = await validateImageFile(file.path); - - // Generate unique filename - const timestamp = Date.now(); - const random = Math.round(Math.random() * 1E9); - const ext = path.extname(file.originalname).toLowerCase(); - const filename = `tree-${treeId}-${timestamp}-${random}${ext}`; - const thumbnailFilename = `thumb-${filename}`; - - const finalPath = path.join(uploadDir, filename); - const thumbnailPath = path.join(thumbnailDir, thumbnailFilename); - - // Process and save main image - await processImage(file.path, finalPath, { - width: 1200, - height: 800, - quality: 85 - }); - - // Generate thumbnail - await generateThumbnail(file.path, thumbnailPath); - - // Save to database - const treeImage = new TreeImage({ - treeId, - filename, - originalName: file.originalname, - mimeType: file.mimetype, - size: file.size, - path: finalPath, - thumbnailPath, - metadata: imageMetadata, - imageType, - description, - tags: tags ? tags.split(',').map(tag => tag.trim()) : [], - uploadedBy: req.user._id, - capturedAt: new Date() - }); - - await treeImage.save(); - uploadedImages.push(treeImage.toPublicJSON()); - - // Clean up temp file - await cleanupTempFile(file.path); - + const processedImage = await processSingleImageUpload(file, treeId, uploadOptions); + uploadedImages.push(processedImage); } catch (error) { console.error(`Error processing file ${file.originalname}:`, error); - - // Clean up temp file - await cleanupTempFile(file.path); - // Continue with other files continue; } } if (uploadedImages.length === 0) { - return res.status(400).json({ - success: false, - message: 'No images were successfully processed' - }); + return sendBadRequestResponse(res, 'No images were successfully processed'); } - res.status(201).json({ - success: true, - message: `Successfully uploaded ${uploadedImages.length} image(s)`, - data: { - images: uploadedImages, - treeId, - uploadCount: uploadedImages.length - } - }); + const responseData = { + images: uploadedImages, + treeId, + uploadCount: uploadedImages.length + }; + + sendSuccessResponse(res, responseData, `Successfully uploaded ${uploadedImages.length} image(s)`, 201); } catch (error) { console.error('Upload error:', error); - - // Clean up any uploaded files on error - if (req.files) { - for (const file of req.files) { - await cleanupTempFile(file.path); - } - } - - res.status(500).json({ - success: false, - message: 'Image upload failed', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + await cleanupUploadedFiles(req.files); + sendErrorResponse(res, 'Image upload failed', 500, error.message); } }; @@ -144,28 +74,15 @@ export const uploadTreeImages = async (req, res) => { export const getTreeImages = async (req, res) => { try { const { treeId } = req.params; - const { - imageType, - page = 1, - limit = 20, - sortBy = '-capturedAt' - } = req.query; // Validate tree exists - const tree = await Tree.findById(treeId); + const tree = await validateTreeExists(treeId); if (!tree) { - return res.status(404).json({ - success: false, - message: 'Tree not found' - }); + return sendNotFoundResponse(res, 'Tree'); } - const options = { - imageType, - limit: parseInt(limit), - skip: (parseInt(page) - 1) * parseInt(limit), - sortBy - }; + const options = buildPaginationOptions(req.query); + const { imageType, page = 1, limit = 20 } = req.query; const images = await TreeImage.findByTree(treeId, options); const totalImages = await TreeImage.countDocuments({ @@ -174,26 +91,16 @@ export const getTreeImages = async (req, res) => { ...(imageType && { imageType }) }); - res.json({ - success: true, - data: { - images: images.map(img => img.toPublicJSON()), - pagination: { - page: parseInt(page), - limit: parseInt(limit), - total: totalImages, - pages: Math.ceil(totalImages / parseInt(limit)) - } - } - }); + const responseData = { + images: images.map(img => img.toPublicJSON()), + pagination: buildPaginationResponse(page, limit, totalImages) + }; + + sendSuccessResponse(res, responseData); } catch (error) { console.error('Get tree images error:', error); - res.status(500).json({ - success: false, - message: 'Failed to retrieve tree images', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Failed to retrieve tree images', 500, error.message); } }; @@ -207,24 +114,14 @@ export const getImageDetails = async (req, res) => { .populate('uploadedBy', 'firstName lastName email'); if (!image) { - return res.status(404).json({ - success: false, - message: 'Image not found' - }); + return sendNotFoundResponse(res, 'Image'); } - res.json({ - success: true, - data: image.toPublicJSON() - }); + sendSuccessResponse(res, image.toPublicJSON()); } catch (error) { console.error('Get image details error:', error); - res.status(500).json({ - success: false, - message: 'Failed to retrieve image details', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Failed to retrieve image details', 500, error.message); } }; @@ -236,18 +133,12 @@ export const updateImageMetadata = async (req, res) => { const image = await TreeImage.findById(imageId); if (!image) { - return res.status(404).json({ - success: false, - message: 'Image not found' - }); + return sendNotFoundResponse(res, 'Image'); } // Check if user owns the image or is admin - if (image.uploadedBy.toString() !== req.user._id.toString() && req.user.role !== 'admin') { - return res.status(403).json({ - success: false, - message: 'Not authorized to update this image' - }); + if (!validateImageOwnership(image, req.user)) { + return sendUnauthorizedResponse(res, 'Not authorized to update this image'); } // Update fields @@ -257,19 +148,11 @@ export const updateImageMetadata = async (req, res) => { await image.save(); - res.json({ - success: true, - message: 'Image metadata updated successfully', - data: image.toPublicJSON() - }); + sendSuccessResponse(res, image.toPublicJSON(), 'Image metadata updated successfully'); } catch (error) { console.error('Update image metadata error:', error); - res.status(500).json({ - success: false, - message: 'Failed to update image metadata', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Failed to update image metadata', 500, error.message); } }; @@ -280,36 +163,23 @@ export const deleteImage = async (req, res) => { const image = await TreeImage.findById(imageId); if (!image) { - return res.status(404).json({ - success: false, - message: 'Image not found' - }); + return sendNotFoundResponse(res, 'Image'); } // Check if user owns the image or is admin - if (image.uploadedBy.toString() !== req.user._id.toString() && req.user.role !== 'admin') { - return res.status(403).json({ - success: false, - message: 'Not authorized to delete this image' - }); + if (!validateImageOwnership(image, req.user)) { + return sendUnauthorizedResponse(res, 'Not authorized to delete this image'); } // Soft delete - mark as inactive image.isActive = false; await image.save(); - res.json({ - success: true, - message: 'Image deleted successfully' - }); + sendSuccessResponse(res, null, 'Image deleted successfully'); } catch (error) { console.error('Delete image error:', error); - res.status(500).json({ - success: false, - message: 'Failed to delete image', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Failed to delete image', 500, error.message); } }; @@ -319,28 +189,18 @@ export const getTreeImageStats = async (req, res) => { const { treeId } = req.params; // Validate tree exists - const tree = await Tree.findById(treeId); + const tree = await validateTreeExists(treeId); if (!tree) { - return res.status(404).json({ - success: false, - message: 'Tree not found' - }); + return sendNotFoundResponse(res, 'Tree'); } const stats = await TreeImage.getImageStats(treeId); - res.json({ - success: true, - data: stats - }); + sendSuccessResponse(res, stats); } catch (error) { console.error('Get tree image stats error:', error); - res.status(500).json({ - success: false, - message: 'Failed to retrieve image statistics', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Failed to retrieve image statistics', 500, error.message); } }; @@ -351,20 +211,15 @@ export const getRecentImages = async (req, res) => { const images = await TreeImage.findRecent(parseInt(limit)); - res.json({ - success: true, - data: { - images: images.map(img => img.toPublicJSON()), - count: images.length - } - }); + const responseData = { + images: images.map(img => img.toPublicJSON()), + count: images.length + }; + + sendSuccessResponse(res, responseData); } catch (error) { console.error('Get recent images error:', error); - res.status(500).json({ - success: false, - message: 'Failed to retrieve recent images', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Failed to retrieve recent images', 500, error.message); } }; \ No newline at end of file diff --git a/backend/controllers/userController.js b/backend/controllers/userController.js index 04764623b8..ec4e306f55 100644 --- a/backend/controllers/userController.js +++ b/backend/controllers/userController.js @@ -1,5 +1,7 @@ -import { validationResult } from 'express-validator'; -import { User, RefreshToken } from '../models/index.js'; +import { handleValidationErrors, validateSelfAction } from '../utils/validationHelpers.js'; +import { sendSuccessResponse, sendErrorResponse, sendNotFoundResponse, sendBadRequestResponse } from '../utils/responseHelpers.js'; +import { buildUserQueryConditions, calculatePagination, buildPaginationMetadata, buildSortParams } from '../utils/queryHelpers.js'; +import { fetchPaginatedUsers, fetchUserWithStatistics, createNewUser, updateUserFields, deleteUserAndTokens, revokeAllUserTokens, calculateUserStatistics } from '../utils/userHelpers.js'; // Get all users (admin only) export const getAllUsers = async (req, res) => { @@ -14,54 +16,17 @@ export const getAllUsers = async (req, res) => { sortOrder = 'desc' } = req.query; - // Build query conditions - const queryConditions = {}; + const queryConditions = buildUserQueryConditions({ search, role, isActive }); + const sortParams = buildSortParams(sortBy, sortOrder); + const { skip, limit: parsedLimit, page: parsedPage } = calculatePagination(page, limit); - if (search) { - queryConditions.$or = [ - { firstName: new RegExp(search, 'i') }, - { lastName: new RegExp(search, 'i') }, - { email: new RegExp(search, 'i') } - ]; - } - - if (role) queryConditions.role = role; - if (isActive !== undefined) queryConditions.isActive = isActive === 'true'; - - // Calculate pagination - const skip = (page - 1) * limit; - const sortDirection = sortOrder === 'desc' ? -1 : 1; - - // Execute query with pagination - const users = await User.find(queryConditions) - .select('-password') // Exclude password field - .sort({ [sortBy]: sortDirection }) - .skip(skip) - .limit(parseInt(limit)); + const { users, totalCount } = await fetchPaginatedUsers(queryConditions, sortParams, skip, parsedLimit); + const pagination = buildPaginationMetadata(parsedPage, parsedLimit, totalCount); - // Get total count for pagination - const totalCount = await User.countDocuments(queryConditions); - - res.json({ - success: true, - data: { - users, - pagination: { - currentPage: parseInt(page), - totalPages: Math.ceil(totalCount / limit), - totalCount, - hasNextPage: page * limit < totalCount, - hasPrevPage: page > 1 - } - } - }); + sendSuccessResponse(res, { users, pagination }); } catch (error) { console.error('Get all users error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Internal server error', 500, error.message); } }; @@ -70,151 +35,67 @@ export const getUserById = async (req, res) => { try { const { id } = req.params; - const user = await User.findById(id).select('-password'); - if (!user) { - return res.status(404).json({ - success: false, - message: 'User not found' - }); + const result = await fetchUserWithStatistics(id); + if (!result) { + return sendNotFoundResponse(res, 'User'); } - // Get additional user statistics - const refreshTokenCount = await RefreshToken.countDocuments({ - userId: id, - isActive: true - }); - - res.json({ - success: true, - data: { - user, - statistics: { - activeTokens: refreshTokenCount - } - } - }); + sendSuccessResponse(res, result); } catch (error) { console.error('Get user by ID error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Internal server error', 500, error.message); } }; // Create new user (admin only) export const createUser = async (req, res) => { try { - // Check for validation errors - const errors = validationResult(req); - if (!errors.isEmpty()) { - return res.status(400).json({ - success: false, - message: 'Validation failed', - errors: errors.array() - }); + if (!handleValidationErrors(req, res)) { + return; } const { email, password, firstName, lastName, role = 'user' } = req.body; + const result = await createNewUser({ email, password, firstName, lastName, role }); - // Check if user already exists - const existingUser = await User.findByEmail(email); - if (existingUser) { - return res.status(409).json({ - success: false, - message: 'User with this email already exists' - }); + if (!result.success) { + return sendErrorResponse(res, result.message, result.statusCode); } - // Create new user - const user = new User({ - email, - password, - firstName, - lastName, - role - }); - - await user.save(); - - res.status(201).json({ - success: true, - message: 'User created successfully', - data: { - user: user.toJSON() - } - }); + sendSuccessResponse(res, { user: result.user }, 'User created successfully', 201); } catch (error) { console.error('Create user error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Internal server error', 500, error.message); } }; // Update user (admin only) export const updateUser = async (req, res) => { try { - // Check for validation errors - const errors = validationResult(req); - if (!errors.isEmpty()) { - return res.status(400).json({ - success: false, - message: 'Validation failed', - errors: errors.array() - }); + if (!handleValidationErrors(req, res)) { + return; } const { id } = req.params; const { firstName, lastName, role, isActive } = req.body; // Prevent admin from deactivating themselves - if (req.user._id.toString() === id && isActive === false) { - return res.status(400).json({ - success: false, - message: 'You cannot deactivate your own account' - }); - } - - // Find and update user - const user = await User.findById(id); - if (!user) { - return res.status(404).json({ - success: false, - message: 'User not found' - }); + if (isActive === false) { + const selfActionError = validateSelfAction(req.user._id.toString(), id, 'deactivate'); + if (selfActionError) { + return sendBadRequestResponse(res, selfActionError.message); + } } - // Update allowed fields - if (firstName !== undefined) user.firstName = firstName; - if (lastName !== undefined) user.lastName = lastName; - if (role !== undefined) user.role = role; - if (isActive !== undefined) user.isActive = isActive; - - await user.save(); + const result = await updateUserFields(id, { firstName, lastName, role, isActive }); - // If user is being deactivated, revoke all their refresh tokens - if (isActive === false) { - await RefreshToken.revokeAllForUser(id); + if (!result.success) { + return sendErrorResponse(res, result.message, result.statusCode); } - res.json({ - success: true, - message: 'User updated successfully', - data: { - user: user.toJSON() - } - }); + sendSuccessResponse(res, { user: result.user }, 'User updated successfully'); } catch (error) { console.error('Update user error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Internal server error', 500, error.message); } }; @@ -224,38 +105,21 @@ export const deleteUser = async (req, res) => { const { id } = req.params; // Prevent admin from deleting themselves - if (req.user._id.toString() === id) { - return res.status(400).json({ - success: false, - message: 'You cannot delete your own account' - }); + const selfActionError = validateSelfAction(req.user._id.toString(), id, 'delete'); + if (selfActionError) { + return sendBadRequestResponse(res, selfActionError.message); } - const user = await User.findById(id); - if (!user) { - return res.status(404).json({ - success: false, - message: 'User not found' - }); - } - - // Revoke all refresh tokens for the user - await RefreshToken.revokeAllForUser(id); + const result = await deleteUserAndTokens(id); - // Delete the user - await User.findByIdAndDelete(id); + if (!result.success) { + return sendErrorResponse(res, result.message, result.statusCode); + } - res.json({ - success: true, - message: 'User deleted successfully' - }); + sendSuccessResponse(res, null, result.message); } catch (error) { console.error('Delete user error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Internal server error', 500, error.message); } }; @@ -264,69 +128,26 @@ export const revokeUserTokens = async (req, res) => { try { const { id } = req.params; - const user = await User.findById(id); - if (!user) { - return res.status(404).json({ - success: false, - message: 'User not found' - }); - } + const result = await revokeAllUserTokens(id); - const result = await RefreshToken.revokeAllForUser(id); + if (!result.success) { + return sendErrorResponse(res, result.message, result.statusCode); + } - res.json({ - success: true, - message: 'All refresh tokens revoked successfully', - data: { - revokedCount: result.modifiedCount - } - }); + sendSuccessResponse(res, { revokedCount: result.revokedCount }, 'All refresh tokens revoked successfully'); } catch (error) { console.error('Revoke user tokens error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Internal server error', 500, error.message); } }; // Get user statistics (admin only) export const getUserStatistics = async (req, res) => { try { - const totalUsers = await User.countDocuments(); - const activeUsers = await User.countDocuments({ isActive: true }); - const adminUsers = await User.countDocuments({ role: 'admin', isActive: true }); - const regularUsers = await User.countDocuments({ role: 'user', isActive: true }); - - // Users registered in the last 30 days - const thirtyDaysAgo = new Date(); - thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); - const recentUsers = await User.countDocuments({ - createdAt: { $gte: thirtyDaysAgo } - }); - - // Active refresh tokens - const activeTokens = await RefreshToken.countDocuments({ isActive: true }); - - res.json({ - success: true, - data: { - totalUsers, - activeUsers, - inactiveUsers: totalUsers - activeUsers, - adminUsers, - regularUsers, - recentUsers, - activeTokens - } - }); + const statistics = await calculateUserStatistics(); + sendSuccessResponse(res, statistics); } catch (error) { console.error('Get user statistics error:', error); - res.status(500).json({ - success: false, - message: 'Internal server error', - error: process.env.NODE_ENV === 'development' ? error.message : undefined - }); + sendErrorResponse(res, 'Internal server error', 500, error.message); } }; \ No newline at end of file diff --git a/backend/middleware/auditLog.js b/backend/middleware/auditLog.js index 18462beeca..e9223cccaf 100644 --- a/backend/middleware/auditLog.js +++ b/backend/middleware/auditLog.js @@ -1,4 +1,14 @@ import { AuditLog } from '../models/index.js'; +import { + getActionFromRequest, + getResourceId, + createBaseLogData, + addActionSpecificMetadata, + addUpdateChanges, + addRequestBody, + addErrorInfo, + shouldCreateAuditLog +} from '../utils/auditHelpers.js'; // Middleware to capture the original document before modification export const captureOriginalDoc = (model) => { @@ -66,48 +76,6 @@ export const auditLog = (options = {}) => { }; }; -// Function to determine action based on HTTP method and response -const getActionFromRequest = (method, statusCode, path) => { - switch (method) { - case 'POST': - if (path.includes('/login')) return 'LOGIN'; - if (path.includes('/register')) return 'REGISTER'; - if (path.includes('/logout')) return 'LOGOUT'; - if (path.includes('/export')) return 'EXPORT'; - return 'CREATE'; - case 'PUT': - case 'PATCH': - return 'UPDATE'; - case 'DELETE': - return 'DELETE'; - default: - return null; // Don't log GET requests by default - } -}; - -// Function to extract resource ID from request -const getResourceId = (req, responseData) => { - // Try to get ID from URL params - if (req.params.id) { - return req.params.id; - } - - // Try to get ID from response data - if (responseData?.data?.id) { - return responseData.data.id; - } - - if (responseData?.data?._id) { - return responseData.data._id; - } - - // For custom IDs like treeId - if (responseData?.data?.treeId) { - return responseData.data.treeId; - } - - return null; -}; // Main audit trail logging function const logAuditTrail = async ({ @@ -122,7 +90,7 @@ const logAuditTrail = async ({ const action = getActionFromRequest(req.method, statusCode, req.path); // Skip logging if no action determined or if it's a failed request - if (!action || statusCode >= 400) { + if (!shouldCreateAuditLog(action, statusCode)) { return; } @@ -130,63 +98,29 @@ const logAuditTrail = async ({ customExtractor(req, responseData) : getResourceId(req, responseData); - const logData = { + // Create base log data + let logData = createBaseLogData({ action, resource, resourceId, - userId: req.user._id, - userEmail: req.user.email, - userRole: req.user.role, - metadata: { - ipAddress: req.ip || req.connection.remoteAddress, - userAgent: req.headers['user-agent'], - endpoint: req.originalUrl, - method: req.method, - statusCode - } - }; + user: req.user, + req, + statusCode + }); + + // Add action-specific metadata + logData = addActionSpecificMetadata(logData, action, req, statusCode); // Capture changes for UPDATE actions - if (action === 'UPDATE' && req.originalDoc) { - logData.changes = { - before: req.originalDoc, - after: responseData?.data - }; + if (action === 'UPDATE') { + logData = addUpdateChanges(logData, req.originalDoc, responseData); } // Capture request body if specified - if (captureBody && req.body) { - logData.metadata.requestBody = req.body; - } - - // Handle specific actions - switch (action) { - case 'LOGIN': - logData.metadata.additionalInfo = { - loginMethod: 'password', - success: statusCode < 400 - }; - break; - - case 'REGISTER': - logData.metadata.additionalInfo = { - newUserEmail: req.body.email, - newUserRole: req.body.role || 'user' - }; - break; - - case 'EXPORT': - logData.metadata.additionalInfo = { - exportType: req.path.includes('csv') ? 'CSV' : 'XLSX', - filters: req.query - }; - break; - } + logData = addRequestBody(logData, req, captureBody); // Add error information for failed requests - if (statusCode >= 400) { - logData.metadata.errorMessage = responseData?.message || 'Unknown error'; - } + logData = addErrorInfo(logData, statusCode, responseData); await AuditLog.createLog(logData); }; @@ -198,27 +132,23 @@ export const auditAuth = async (req, res, next) => { res.json = function(data) { // Log authentication events if (req.user) { - const action = req.path.includes('/login') ? 'LOGIN' : - req.path.includes('/register') ? 'REGISTER' : - req.path.includes('/logout') ? 'LOGOUT' : null; + const action = getActionFromRequest(req.method, res.statusCode, req.path); - if (action) { - AuditLog.createLog({ + if (action && ['LOGIN', 'REGISTER', 'LOGOUT'].includes(action)) { + // Create base log data + let logData = createBaseLogData({ action, resource: 'User', resourceId: req.user._id, - userId: req.user._id, - userEmail: req.user.email, - userRole: req.user.role, - metadata: { - ipAddress: req.ip || req.connection.remoteAddress, - userAgent: req.headers['user-agent'], - endpoint: req.originalUrl, - method: req.method, - statusCode: res.statusCode, - additionalInfo: action === 'LOGIN' ? { loginMethod: 'password' } : {} - } - }).catch(err => console.error('Auth audit log error:', err)); + user: req.user, + req, + statusCode: res.statusCode + }); + + // Add action-specific metadata + logData = addActionSpecificMetadata(logData, action, req, res.statusCode); + + AuditLog.createLog(logData).catch(err => console.error('Auth audit log error:', err)); } } diff --git a/backend/middleware/realtimeEvents.js b/backend/middleware/realtimeEvents.js index 5a5ca46284..468b684b55 100644 --- a/backend/middleware/realtimeEvents.js +++ b/backend/middleware/realtimeEvents.js @@ -1,210 +1,26 @@ -// Middleware to emit real-time events after successful operations - -export const emitTreeUpdate = (req, res, next) => { - // Store original json method - const originalJson = res.json; - - // Override json method to emit event after response - res.json = function(data) { - // Call original json method - const result = originalJson.call(this, data); - - // Emit event if operation was successful - if (data && data.success && global.realtimeController) { - const { treeId } = req.params; - const method = req.method; - - if (treeId && method === 'PUT') { - // Tree updated - global.realtimeController.broadcastTreeUpdate( - treeId, - data.data, - 'tree:updated' - ); - } else if (method === 'POST' && data.data) { - // New tree created - const newTreeId = data.data._id || data.data.tree?._id; - if (newTreeId) { - global.realtimeController.broadcastTreeUpdate( - newTreeId, - data.data, - 'tree:created' - ); - } - } - } - - return result; - }; - - next(); -}; - -export const emitForestUpdate = (req, res, next) => { - const originalJson = res.json; - - res.json = function(data) { - const result = originalJson.call(this, data); - - if (data && data.success && global.realtimeController) { - const { forestId } = req.params; - const method = req.method; - - if (forestId && method === 'PUT') { - // Forest updated - global.realtimeController.broadcastForestUpdate( - forestId, - data.data, - 'forest:updated' - ); - } else if (method === 'POST' && data.data) { - // New forest created - const newForestId = data.data._id || data.data.forest?._id; - if (newForestId) { - global.realtimeController.broadcastForestUpdate( - newForestId, - data.data, - 'forest:created' - ); - } - } - } - - return result; - }; - - next(); -}; - -export const emitImageUpload = (req, res, next) => { - const originalJson = res.json; - - res.json = function(data) { - const result = originalJson.call(this, data); - - if (data && data.success && data.data && data.data.images && global.realtimeController) { - const { treeId } = req.params; - - // Emit image upload events - data.data.images.forEach(image => { - global.realtimeController.broadcastImageUpload(treeId, image); - }); - } - - return result; - }; - - next(); -}; - -export const emitSystemNotification = (type, message, audience = 'all') => { - if (global.realtimeController) { - global.realtimeController.broadcastSystemNotification({ - type, - message, - level: 'info' - }, audience); - } -}; - -export const emitUserActivity = (req, res, next) => { - const originalJson = res.json; - - res.json = function(data) { - const result = originalJson.call(this, data); - - // Log significant user activities - if (data && data.success && req.user && global.realtimeController) { - const { method, path } = req; - const action = getActionFromRequest(method, path); - - if (action) { - // Emit to admin users for monitoring - global.io?.to('admin').emit('user:activity', { - userId: req.user._id, - user: { - email: req.user.email, - firstName: req.user.firstName, - lastName: req.user.lastName - }, - action, - path, - method, - timestamp: new Date() - }); - } - } - - return result; - }; - - next(); -}; - -// Helper function to determine action type from request -function getActionFromRequest(method, path) { - const pathSegments = path.split('/'); - const resource = pathSegments[2]; // /api/[resource]/... - - switch (method) { - case 'POST': - if (path.includes('/login')) return 'user_login'; - if (path.includes('/register')) return 'user_register'; - if (path.includes('/upload')) return 'image_upload'; - return `${resource}_create`; - - case 'PUT': - case 'PATCH': - return `${resource}_update`; - - case 'DELETE': - return `${resource}_delete`; - - default: - return null; - } -} - -// Middleware for Server-Sent Events (SSE) endpoints -export const setupSSE = (req, res, next) => { - // Set headers for SSE - res.writeHead(200, { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - 'Connection': 'keep-alive', - 'Access-Control-Allow-Origin': process.env.FRONTEND_URL || 'http://localhost:3000', - 'Access-Control-Allow-Credentials': 'true' - }); - - // Send initial connection event - res.write('data: {"type":"connected","timestamp":"' + new Date().toISOString() + '"}\n\n'); - - // Store client connection - req.sseConnection = { - write: (data) => { - try { - res.write(`data: ${JSON.stringify(data)}\n\n`); - } catch (error) { - console.error('SSE write error:', error); - } - }, - end: () => { - try { - res.end(); - } catch (error) { - console.error('SSE end error:', error); - } - } - }; - - // Handle client disconnect - req.on('close', () => { - console.log('SSE client disconnected'); - }); - - req.on('error', (error) => { - console.error('SSE connection error:', error); - }); - - next(); -}; \ No newline at end of file +/** + * Real-time event middleware for emitting events after successful operations + * Refactored to use modular utilities for better maintainability + */ + +import { createRealtimeEventMiddleware } from '../utils/responseInterceptor.js'; +import { + emitTreeEvent, + emitForestEvent, + emitImageUploadEvent, + emitUserActivityEvent, + emitSystemNotification +} from '../utils/realtimeEventEmitters.js'; +import { setupSSE } from '../utils/sseHelpers.js'; + +// Middleware functions using the modular approach +export const emitTreeUpdate = createRealtimeEventMiddleware(emitTreeEvent); +export const emitForestUpdate = createRealtimeEventMiddleware(emitForestEvent); +export const emitImageUpload = createRealtimeEventMiddleware(emitImageUploadEvent); +export const emitUserActivity = createRealtimeEventMiddleware(emitUserActivityEvent); + +// Re-export system notification utility +export { emitSystemNotification }; + +// Re-export SSE setup middleware +export { setupSSE }; \ No newline at end of file diff --git a/backend/middleware/validation.js b/backend/middleware/validation.js index c2df490156..56c32a7ca2 100644 --- a/backend/middleware/validation.js +++ b/backend/middleware/validation.js @@ -1,186 +1,142 @@ import { body } from 'express-validator'; -// Validation rules for user registration -export const validateRegister = [ - body('email') +// Common validation patterns +const commonValidators = { + email: () => body('email') .isEmail() .normalizeEmail() .withMessage('Please provide a valid email address'), - - body('password') + + password: () => body('password') .isLength({ min: 6 }) .withMessage('Password must be at least 6 characters long') .matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/) .withMessage('Password must contain at least one lowercase letter, one uppercase letter, and one number'), - - body('firstName') - .trim() - .isLength({ min: 1, max: 50 }) - .withMessage('First name must be between 1 and 50 characters') - .matches(/^[a-zA-Z\s]+$/) - .withMessage('First name can only contain letters and spaces'), - - body('lastName') + + passwordLogin: () => body('password') + .notEmpty() + .withMessage('Password is required'), + + firstName: (required = true) => { + const validator = body('firstName') + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('First name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('First name can only contain letters and spaces'); + + return required ? validator : validator.optional(); + }, + + lastName: (required = true) => { + const validator = body('lastName') + .trim() + .isLength({ min: 1, max: 50 }) + .withMessage('Last name must be between 1 and 50 characters') + .matches(/^[a-zA-Z\s]+$/) + .withMessage('Last name can only contain letters and spaces'); + + return required ? validator : validator.optional(); + }, + + coordinates: () => [ + body('location.coordinates') + .isArray({ min: 2, max: 2 }) + .withMessage('Coordinates must be an array of [longitude, latitude]'), + body('location.coordinates.*') + .isFloat({ min: -180, max: 180 }) + .withMessage('Coordinates must be valid numbers') + ], + + mongoId: (field) => body(field) + .isMongoId() + .withMessage(`${field} must be a valid MongoDB ObjectId`), + + positiveFloat: (field, message) => body(field) + .isFloat({ min: 0 }) + .withMessage(message || `${field} must be a positive number`), + + optionalPositiveFloat: (field, message) => body(field) + .optional() + .isFloat({ min: 0 }) + .withMessage(message || `${field} must be a positive number`), + + isoDate: (field, message) => body(field) + .isISO8601() + .withMessage(message || `${field} must be a valid date`), + + trimmedString: (field, min, max, message) => body(field) .trim() - .isLength({ min: 1, max: 50 }) - .withMessage('Last name must be between 1 and 50 characters') - .matches(/^[a-zA-Z\s]+$/) - .withMessage('Last name can only contain letters and spaces') + .isLength({ min, max }) + .withMessage(message || `${field} must be between ${min} and ${max} characters`), + + optionalString: (field, max, message) => body(field) + .optional() + .isLength({ max }) + .withMessage(message || `${field} cannot exceed ${max} characters`) +}; + +// Validation rules for user registration +export const validateRegister = [ + commonValidators.email(), + commonValidators.password(), + commonValidators.firstName(), + commonValidators.lastName() ]; // Validation rules for user login export const validateLogin = [ - body('email') - .isEmail() - .normalizeEmail() - .withMessage('Please provide a valid email address'), - - body('password') - .notEmpty() - .withMessage('Password is required') + commonValidators.email(), + commonValidators.passwordLogin() ]; // Validation rules for profile update export const validateProfileUpdate = [ - body('firstName') - .optional() - .trim() - .isLength({ min: 1, max: 50 }) - .withMessage('First name must be between 1 and 50 characters') - .matches(/^[a-zA-Z\s]+$/) - .withMessage('First name can only contain letters and spaces'), - - body('lastName') - .optional() - .trim() - .isLength({ min: 1, max: 50 }) - .withMessage('Last name must be between 1 and 50 characters') - .matches(/^[a-zA-Z\s]+$/) - .withMessage('Last name can only contain letters and spaces') + commonValidators.firstName(false), + commonValidators.lastName(false) ]; // Validation rules for forest creation export const validateForestCreate = [ - body('name') - .trim() - .isLength({ min: 1, max: 100 }) - .withMessage('Forest name must be between 1 and 100 characters'), - - body('region') - .trim() - .isLength({ min: 1, max: 100 }) - .withMessage('Region must be between 1 and 100 characters'), - - body('location.coordinates') - .isArray({ min: 2, max: 2 }) - .withMessage('Coordinates must be an array of [longitude, latitude]'), - - body('location.coordinates.*') - .isFloat({ min: -180, max: 180 }) - .withMessage('Coordinates must be valid numbers'), - - body('area') - .isFloat({ min: 0 }) - .withMessage('Area must be a positive number'), - + commonValidators.trimmedString('name', 1, 100, 'Forest name must be between 1 and 100 characters'), + commonValidators.trimmedString('region', 1, 100, 'Region must be between 1 and 100 characters'), + ...commonValidators.coordinates(), + commonValidators.positiveFloat('area', 'Area must be a positive number'), body('areaUnit') .optional() .isIn(['hectares', 'acres', 'sq_km', 'sq_miles']) .withMessage('Area unit must be one of: hectares, acres, sq_km, sq_miles'), - - body('establishedDate') - .isISO8601() - .withMessage('Established date must be a valid date'), - - body('description') - .optional() - .isLength({ max: 500 }) - .withMessage('Description cannot exceed 500 characters') + commonValidators.isoDate('establishedDate', 'Established date must be a valid date'), + commonValidators.optionalString('description', 500, 'Description cannot exceed 500 characters') ]; // Validation rules for tree creation export const validateTreeCreate = [ - body('treeId') - .trim() - .isLength({ min: 1, max: 50 }) - .withMessage('Tree ID must be between 1 and 50 characters'), - - body('forestId') - .isMongoId() - .withMessage('Forest ID must be a valid MongoDB ObjectId'), - - body('species') - .trim() - .isLength({ min: 1, max: 100 }) - .withMessage('Species must be between 1 and 100 characters'), - - body('location.coordinates') - .isArray({ min: 2, max: 2 }) - .withMessage('Coordinates must be an array of [longitude, latitude]'), - - body('location.coordinates.*') - .isFloat({ min: -180, max: 180 }) - .withMessage('Coordinates must be valid numbers'), - - body('plantedDate') - .isISO8601() - .withMessage('Planted date must be a valid date') + commonValidators.trimmedString('treeId', 1, 50, 'Tree ID must be between 1 and 50 characters'), + commonValidators.mongoId('forestId'), + commonValidators.trimmedString('species', 1, 100, 'Species must be between 1 and 100 characters'), + ...commonValidators.coordinates(), + commonValidators.isoDate('plantedDate', 'Planted date must be a valid date') ]; // Validation rules for tree measurement export const validateMeasurement = [ - body('height') - .isFloat({ min: 0 }) - .withMessage('Height must be a positive number'), - - body('diameter') - .optional() - .isFloat({ min: 0 }) - .withMessage('Diameter must be a positive number'), - - body('co2Absorption') - .optional() - .isFloat({ min: 0 }) - .withMessage('CO₂ absorption must be a positive number'), - + commonValidators.positiveFloat('height', 'Height must be a positive number'), + commonValidators.optionalPositiveFloat('diameter', 'Diameter must be a positive number'), + commonValidators.optionalPositiveFloat('co2Absorption', 'CO₂ absorption must be a positive number'), body('healthStatus') .optional() .isIn(['excellent', 'good', 'fair', 'poor', 'critical']) .withMessage('Health status must be one of: excellent, good, fair, poor, critical'), - - body('notes') - .optional() - .isLength({ max: 500 }) - .withMessage('Notes cannot exceed 500 characters') + commonValidators.optionalString('notes', 500, 'Notes cannot exceed 500 characters') ]; // Validation rules for admin user creation export const validateUserCreate = [ - body('email') - .isEmail() - .normalizeEmail() - .withMessage('Please provide a valid email address'), - - body('password') - .isLength({ min: 6 }) - .withMessage('Password must be at least 6 characters long') - .matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/) - .withMessage('Password must contain at least one lowercase letter, one uppercase letter, and one number'), - - body('firstName') - .trim() - .isLength({ min: 1, max: 50 }) - .withMessage('First name must be between 1 and 50 characters') - .matches(/^[a-zA-Z\s]+$/) - .withMessage('First name can only contain letters and spaces'), - - body('lastName') - .trim() - .isLength({ min: 1, max: 50 }) - .withMessage('Last name must be between 1 and 50 characters') - .matches(/^[a-zA-Z\s]+$/) - .withMessage('Last name can only contain letters and spaces'), - + commonValidators.email(), + commonValidators.password(), + commonValidators.firstName(), + commonValidators.lastName(), body('role') .optional() .isIn(['user', 'admin']) @@ -189,27 +145,12 @@ export const validateUserCreate = [ // Validation rules for admin user update export const validateUserUpdate = [ - body('firstName') - .optional() - .trim() - .isLength({ min: 1, max: 50 }) - .withMessage('First name must be between 1 and 50 characters') - .matches(/^[a-zA-Z\s]+$/) - .withMessage('First name can only contain letters and spaces'), - - body('lastName') - .optional() - .trim() - .isLength({ min: 1, max: 50 }) - .withMessage('Last name must be between 1 and 50 characters') - .matches(/^[a-zA-Z\s]+$/) - .withMessage('Last name can only contain letters and spaces'), - + commonValidators.firstName(false), + commonValidators.lastName(false), body('role') .optional() .isIn(['user', 'admin']) .withMessage('Role must be either user or admin'), - body('isActive') .optional() .isBoolean() diff --git a/backend/utils/aggregationHelpers.js b/backend/utils/aggregationHelpers.js new file mode 100644 index 0000000000..bd7e94c6e5 --- /dev/null +++ b/backend/utils/aggregationHelpers.js @@ -0,0 +1,343 @@ +// MongoDB aggregation pipeline helpers for dashboard operations + +/** + * Get species distribution aggregation pipeline + * @param {Object} matchQuery - Base match query for filtering + * @param {number} limit - Number of top species to return (default: 10) + * @returns {Array} Aggregation pipeline + */ +export const getSpeciesDistributionPipeline = (matchQuery, limit = 10) => { + return [ + { $match: { ...matchQuery, isAlive: true } }, + { + $group: { + _id: '$species', + count: { $sum: 1 } + } + }, + { $sort: { count: -1 } }, + { $limit: limit } + ]; +}; + +/** + * Get height statistics aggregation pipeline + * @param {Object} matchQuery - Base match query for filtering + * @returns {Array} Aggregation pipeline + */ +export const getHeightStatsPipeline = (matchQuery) => { + return [ + { $match: { ...matchQuery, isAlive: true } }, + { $unwind: '$measurements' }, + { + $sort: { + 'treeId': 1, + 'measurements.measuredAt': -1 + } + }, + { + $group: { + _id: '$_id', + latestHeight: { $first: '$measurements.height' }, + latestMeasurement: { $first: '$measurements.measuredAt' } + } + }, + { + $group: { + _id: null, + avgHeight: { $avg: '$latestHeight' }, + minHeight: { $min: '$latestHeight' }, + maxHeight: { $max: '$latestHeight' }, + treesWithMeasurements: { $sum: 1 } + } + } + ]; +}; + +/** + * Get CO2 absorption statistics aggregation pipeline + * @param {Object} matchQuery - Base match query for filtering + * @returns {Array} Aggregation pipeline + */ +export const getCO2StatsPipeline = (matchQuery) => { + return [ + { $match: { ...matchQuery, isAlive: true } }, + { $unwind: '$measurements' }, + { + $group: { + _id: null, + totalCO2: { $sum: '$measurements.co2Absorption' }, + avgCO2PerTree: { $avg: '$measurements.co2Absorption' }, + measurementCount: { $sum: 1 } + } + } + ]; +}; + +/** + * Get health status distribution aggregation pipeline + * @param {Object} matchQuery - Base match query for filtering + * @returns {Array} Aggregation pipeline + */ +export const getHealthDistributionPipeline = (matchQuery) => { + return [ + { $match: { ...matchQuery, isAlive: true } }, + { $unwind: '$measurements' }, + { + $sort: { + 'treeId': 1, + 'measurements.measuredAt': -1 + } + }, + { + $group: { + _id: '$_id', + latestHealthStatus: { $first: '$measurements.healthStatus' } + } + }, + { + $group: { + _id: '$latestHealthStatus', + count: { $sum: 1 } + } + }, + { $sort: { count: -1 } } + ]; +}; + +/** + * Get forest statistics aggregation pipeline + * @param {Object} matchQuery - Base match query for filtering + * @returns {Array} Aggregation pipeline + */ +export const getForestStatsPipeline = (matchQuery) => { + return [ + { $match: matchQuery }, + { + $group: { + _id: null, + totalArea: { $sum: '$area' }, + avgArea: { $avg: '$area' }, + minArea: { $min: '$area' }, + maxArea: { $max: '$area' } + } + } + ]; +}; + +/** + * Get latest height statistics aggregation pipeline (simplified for quick stats) + * @param {Object} matchQuery - Base match query for filtering + * @returns {Array} Aggregation pipeline + */ +export const getLatestHeightPipeline = (matchQuery) => { + return [ + { $match: { ...matchQuery, isAlive: true } }, + { $unwind: '$measurements' }, + { $sort: { 'measurements.measuredAt': -1 } }, + { + $group: { + _id: '$_id', + latestHeight: { $first: '$measurements.height' } + } + }, + { + $group: { + _id: null, + avgHeight: { $avg: '$latestHeight' } + } + } + ]; +}; + +/** + * Get total CO2 absorption aggregation pipeline (simplified for quick stats) + * @param {Object} matchQuery - Base match query for filtering + * @returns {Array} Aggregation pipeline + */ +export const getTotalCO2Pipeline = (matchQuery) => { + return [ + { $match: { ...matchQuery, isAlive: true } }, + { $unwind: '$measurements' }, + { + $group: { + _id: null, + totalCO2: { $sum: '$measurements.co2Absorption' } + } + } + ]; +}; + +/** + * Get forest comparison aggregation pipeline + * @returns {Array} Aggregation pipeline + */ +export const getForestComparisonPipeline = () => { + return [ + { $match: { isActive: true } }, + { + $lookup: { + from: 'trees', + localField: '_id', + foreignField: 'forestId', + as: 'trees' + } + }, + { + $addFields: { + totalTrees: { $size: '$trees' }, + aliveTrees: { + $size: { + $filter: { + input: '$trees', + cond: { $eq: ['$$this.isAlive', true] } + } + } + } + } + }, + { + $addFields: { + survivalRate: { + $cond: { + if: { $gt: ['$totalTrees', 0] }, + then: { $multiply: [{ $divide: ['$aliveTrees', '$totalTrees'] }, 100] }, + else: 0 + } + }, + treeDensity: { + $cond: { + if: { $gt: ['$area', 0] }, + then: { $divide: ['$totalTrees', '$area'] }, + else: 0 + } + } + } + }, + { + $project: { + name: 1, + region: 1, + area: 1, + establishedDate: 1, + totalTrees: 1, + aliveTrees: 1, + survivalRate: { $round: ['$survivalRate', 2] }, + treeDensity: { $round: ['$treeDensity', 2] } + } + }, + { $sort: { totalTrees: -1 } } + ]; +}; + +/** + * Get forest analytics survival rate aggregation pipeline + * @param {Object} forestId - Forest ObjectId + * @returns {Array} Aggregation pipeline + */ +export const getForestSurvivalRatePipeline = (forestId) => { + return [ + { $match: { forestId } }, + { + $group: { + _id: { + year: { $year: '$plantedDate' }, + month: { $month: '$plantedDate' } + }, + totalPlanted: { $sum: 1 }, + surviving: { $sum: { $cond: ['$isAlive', 1, 0] } } + } + }, + { + $project: { + date: { + $dateFromParts: { + year: '$_id.year', + month: '$_id.month', + day: 1 + } + }, + totalPlanted: 1, + surviving: 1, + survivalRate: { + $multiply: [{ $divide: ['$surviving', '$totalPlanted'] }, 100] + } + } + }, + { $sort: { date: 1 } } + ]; +}; + +/** + * Get forest analytics height growth aggregation pipeline + * @param {Object} forestId - Forest ObjectId + * @param {Object} dateFilter - Date filter object for measurements + * @returns {Array} Aggregation pipeline + */ +export const getForestHeightGrowthPipeline = (forestId, dateFilter = {}) => { + const matchConditions = { forestId, isAlive: true, ...dateFilter }; + + return [ + { $match: matchConditions }, + { $unwind: '$measurements' }, + { + $group: { + _id: { + year: { $year: '$measurements.measuredAt' }, + month: { $month: '$measurements.measuredAt' } + }, + avgHeight: { $avg: '$measurements.height' } + } + }, + { + $project: { + date: { + $dateFromParts: { + year: '$_id.year', + month: '$_id.month', + day: 1 + } + }, + avgHeight: { $round: ['$avgHeight', 2] } + } + }, + { $sort: { date: 1 } } + ]; +}; + +/** + * Get forest analytics CO2 absorption aggregation pipeline + * @param {Object} forestId - Forest ObjectId + * @param {Object} dateFilter - Date filter object for measurements + * @returns {Array} Aggregation pipeline + */ +export const getForestCO2AbsorptionPipeline = (forestId, dateFilter = {}) => { + const matchConditions = { forestId, isAlive: true, ...dateFilter }; + + return [ + { $match: matchConditions }, + { $unwind: '$measurements' }, + { + $group: { + _id: { + year: { $year: '$measurements.measuredAt' }, + month: { $month: '$measurements.measuredAt' } + }, + totalCO2: { $sum: '$measurements.co2Absorption' } + } + }, + { + $project: { + date: { + $dateFromParts: { + year: '$_id.year', + month: '$_id.month', + day: 1 + } + }, + totalCO2: { $round: ['$totalCO2', 2] } + } + }, + { $sort: { date: 1 } } + ]; +}; \ No newline at end of file diff --git a/backend/utils/auditHelpers.js b/backend/utils/auditHelpers.js new file mode 100644 index 0000000000..96d6142226 --- /dev/null +++ b/backend/utils/auditHelpers.js @@ -0,0 +1,184 @@ +// Utility functions for audit logging functionality + +/** + * Determines the audit action based on HTTP method and request path + * @param {string} method - HTTP method (POST, PUT, PATCH, DELETE) + * @param {number} statusCode - HTTP response status code + * @param {string} path - Request path + * @returns {string|null} - Action type or null if no action should be logged + */ +export const getActionFromRequest = (method, statusCode, path) => { + switch (method) { + case 'POST': + if (path.includes('/login')) return 'LOGIN'; + if (path.includes('/register')) return 'REGISTER'; + if (path.includes('/logout')) return 'LOGOUT'; + if (path.includes('/export')) return 'EXPORT'; + return 'CREATE'; + case 'PUT': + case 'PATCH': + return 'UPDATE'; + case 'DELETE': + return 'DELETE'; + default: + return null; // Don't log GET requests by default + } +}; + +/** + * Extracts resource ID from request parameters or response data + * @param {Object} req - Express request object + * @param {Object} responseData - Response data object + * @returns {string|null} - Resource ID or null if not found + */ +export const getResourceId = (req, responseData) => { + // Try to get ID from URL params + if (req.params.id) { + return req.params.id; + } + + // Try to get ID from response data + if (responseData?.data?.id) { + return responseData.data.id; + } + + if (responseData?.data?._id) { + return responseData.data._id; + } + + // For custom IDs like treeId + if (responseData?.data?.treeId) { + return responseData.data.treeId; + } + + return null; +}; + +/** + * Creates base audit log data structure + * @param {Object} params - Parameters for creating log data + * @returns {Object} - Base audit log data + */ +export const createBaseLogData = ({ + action, + resource, + resourceId, + user, + req, + statusCode +}) => ({ + action, + resource, + resourceId, + userId: user._id, + userEmail: user.email, + userRole: user.role, + metadata: { + ipAddress: req.ip || req.connection.remoteAddress, + userAgent: req.headers['user-agent'], + endpoint: req.originalUrl, + method: req.method, + statusCode + } +}); + +/** + * Adds action-specific metadata to log data + * @param {Object} logData - Base log data object + * @param {string} action - Action type + * @param {Object} req - Express request object + * @param {number} statusCode - HTTP response status code + * @returns {Object} - Enhanced log data with action-specific metadata + */ +export const addActionSpecificMetadata = (logData, action, req, statusCode) => { + const enhancedLogData = { ...logData }; + + switch (action) { + case 'LOGIN': + enhancedLogData.metadata.additionalInfo = { + loginMethod: 'password', + success: statusCode < 400 + }; + break; + + case 'REGISTER': + enhancedLogData.metadata.additionalInfo = { + newUserEmail: req.body.email, + newUserRole: req.body.role || 'user' + }; + break; + + case 'EXPORT': + enhancedLogData.metadata.additionalInfo = { + exportType: req.path.includes('csv') ? 'CSV' : 'XLSX', + filters: req.query + }; + break; + } + + return enhancedLogData; +}; + +/** + * Adds update-specific changes to log data + * @param {Object} logData - Base log data object + * @param {Object} originalDoc - Original document before changes + * @param {Object} responseData - Response data with updated document + * @returns {Object} - Enhanced log data with change tracking + */ +export const addUpdateChanges = (logData, originalDoc, responseData) => { + const enhancedLogData = { ...logData }; + + if (originalDoc) { + enhancedLogData.changes = { + before: originalDoc, + after: responseData?.data + }; + } + + return enhancedLogData; +}; + +/** + * Adds request body to log data if capture is enabled + * @param {Object} logData - Base log data object + * @param {Object} req - Express request object + * @param {boolean} captureBody - Whether to capture request body + * @returns {Object} - Enhanced log data with request body if enabled + */ +export const addRequestBody = (logData, req, captureBody) => { + const enhancedLogData = { ...logData }; + + if (captureBody && req.body) { + enhancedLogData.metadata.requestBody = req.body; + } + + return enhancedLogData; +}; + +/** + * Adds error information to log data for failed requests + * @param {Object} logData - Base log data object + * @param {number} statusCode - HTTP response status code + * @param {Object} responseData - Response data object + * @returns {Object} - Enhanced log data with error information + */ +export const addErrorInfo = (logData, statusCode, responseData) => { + const enhancedLogData = { ...logData }; + + if (statusCode >= 400) { + enhancedLogData.metadata.errorMessage = responseData?.message || 'Unknown error'; + } + + return enhancedLogData; +}; + +/** + * Determines if an audit log should be created based on conditions + * @param {string|null} action - Action type + * @param {number} statusCode - HTTP response status code + * @returns {boolean} - Whether to create audit log + */ +export const shouldCreateAuditLog = (action, statusCode) => { + return action && statusCode < 400; +}; \ No newline at end of file diff --git a/backend/utils/broadcastUtils.js b/backend/utils/broadcastUtils.js new file mode 100644 index 0000000000..73114c6322 --- /dev/null +++ b/backend/utils/broadcastUtils.js @@ -0,0 +1,103 @@ +import { Tree } from '../models/index.js'; + +// Broadcasting utilities for real-time events +export class BroadcastUtils { + constructor(io) { + this.io = io; + } + + // Broadcast tree update to subscribed users + broadcastTreeUpdate(treeId, updateData, eventType = 'tree:updated') { + const treeRoom = `tree:${treeId}`; + + this.io.to(treeRoom).emit(eventType, { + treeId, + data: updateData, + timestamp: new Date() + }); + + console.log(`Broadcasted ${eventType} for tree ${treeId} to room ${treeRoom}`); + } + + // Broadcast forest update + broadcastForestUpdate(forestId, updateData, eventType = 'forest:updated') { + const forestRoom = `forest:${forestId}`; + + this.io.to(forestRoom).emit(eventType, { + forestId, + data: updateData, + timestamp: new Date() + }); + + console.log(`Broadcasted ${eventType} for forest ${forestId} to room ${forestRoom}`); + } + + // Broadcast new image upload + async broadcastImageUpload(treeId, imageData) { + const treeRoom = `tree:${treeId}`; + + this.io.to(treeRoom).emit('tree:image-uploaded', { + treeId, + image: imageData, + timestamp: new Date() + }); + + // Also broadcast to forest room if applicable + try { + const tree = await Tree.findById(treeId); + if (tree) { + const forestRoom = `forest:${tree.forestId}`; + this.io.to(forestRoom).emit('forest:image-uploaded', { + forestId: tree.forestId, + treeId, + image: imageData, + timestamp: new Date() + }); + } + } catch (error) { + console.error('Error broadcasting image upload to forest room:', error); + } + } + + // Broadcast system notification + broadcastSystemNotification(notification, targetAudience = 'all') { + const notificationData = { + id: Date.now().toString(), + ...notification, + timestamp: new Date() + }; + + switch (targetAudience) { + case 'admin': + this.io.to('admin').emit('notification:system', notificationData); + break; + case 'all': + default: + this.io.emit('notification:system', notificationData); + break; + } + } + + // Notify about user connection/disconnection + notifyUserConnection(user, isConnected) { + const eventData = { + userId: user._id, + email: user.email, + isConnected, + timestamp: new Date() + }; + + // Notify admin users + this.io.to('admin').emit('user:connection-status', eventData); + } + + // Broadcast message to room or admin users + broadcastMessage(messageData, targetRoom = null) { + if (targetRoom) { + this.io.to(targetRoom).emit('message:received', messageData); + } else { + // Broadcast to all admin users + this.io.to('admin').emit('message:received', messageData); + } + } +} \ No newline at end of file diff --git a/backend/utils/dashboardUtils.js b/backend/utils/dashboardUtils.js new file mode 100644 index 0000000000..78883c120a --- /dev/null +++ b/backend/utils/dashboardUtils.js @@ -0,0 +1,231 @@ +// Dashboard utility functions for query building, aggregation, and calculations + +/** + * Build query conditions for tree filtering + * @param {Object} filters - Filter parameters + * @param {string} filters.forestId - Forest ID filter + * @param {string} filters.species - Species filter (regex) + * @param {string} filters.isAlive - Alive status filter + * @param {string} filters.startDate - Start date filter + * @param {string} filters.endDate - End date filter + * @returns {Object} Query conditions for trees + */ +export const buildTreeQuery = (filters = {}) => { + const { forestId, species, isAlive, startDate, endDate } = filters; + const query = {}; + + if (forestId) { + query.forestId = forestId; + } + + if (species) { + query.species = new RegExp(species, 'i'); + } + + if (isAlive !== undefined) { + query.isAlive = isAlive === 'true'; + } + + if (startDate || endDate) { + query.plantedDate = {}; + if (startDate) query.plantedDate.$gte = new Date(startDate); + if (endDate) query.plantedDate.$lte = new Date(endDate); + } + + return query; +}; + +/** + * Build query conditions for forest filtering + * @param {Object} filters - Filter parameters + * @param {string} filters.forestId - Forest ID filter + * @param {string} filters.region - Region filter (regex) + * @param {string} filters.startDate - Start date filter for establishedDate + * @param {string} filters.endDate - End date filter for establishedDate + * @returns {Object} Query conditions for forests + */ +export const buildForestQuery = (filters = {}) => { + const { forestId, region, startDate, endDate } = filters; + const query = { isActive: true }; + + if (forestId) { + query._id = forestId; + } + + if (region) { + query.region = new RegExp(region, 'i'); + } + + if (startDate || endDate) { + query.establishedDate = {}; + if (startDate) query.establishedDate.$gte = new Date(startDate); + if (endDate) query.establishedDate.$lte = new Date(endDate); + } + + return query; +}; + +/** + * Build pagination options for database queries + * @param {Object} params - Pagination parameters + * @param {number} params.page - Page number (default: 1) + * @param {number} params.limit - Items per page (default: 10) + * @param {string} params.sortBy - Field to sort by (default: 'name') + * @param {string} params.sortOrder - Sort direction: 'asc' or 'desc' (default: 'asc') + * @returns {Object} Pagination options with skip, limit, and sort + */ +export const buildPaginationOptions = (params = {}) => { + const { + page = 1, + limit = 10, + sortBy = 'name', + sortOrder = 'asc' + } = params; + + const skip = (page - 1) * limit; + const sortDirection = sortOrder === 'desc' ? -1 : 1; + + return { + skip, + limit: parseInt(limit), + sort: { [sortBy]: sortDirection }, + pagination: { + currentPage: parseInt(page), + limit: parseInt(limit) + } + }; +}; + +/** + * Build pagination response metadata + * @param {number} totalCount - Total number of items + * @param {number} page - Current page number + * @param {number} limit - Items per page + * @returns {Object} Pagination metadata + */ +export const buildPaginationResponse = (totalCount, page, limit) => { + return { + currentPage: parseInt(page), + totalPages: Math.ceil(totalCount / limit), + totalCount, + hasNextPage: page * limit < totalCount, + hasPrevPage: page > 1 + }; +}; + +/** + * Round number to 2 decimal places + * @param {number} value - Number to round + * @returns {number} Rounded number + */ +export const roundToTwo = (value) => { + return Math.round(value * 100) / 100; +}; + +/** + * Calculate survival rate percentage + * @param {number} alive - Number of alive trees + * @param {number} total - Total number of trees + * @returns {number} Survival rate as percentage (0-100) + */ +export const calculateSurvivalRate = (alive, total) => { + return total > 0 ? (alive / total) * 100 : 0; +}; + +/** + * Calculate tree density (trees per hectare) + * @param {number} trees - Number of trees + * @param {number} area - Area in hectares + * @returns {number} Tree density + */ +export const calculateTreeDensity = (trees, area) => { + return area > 0 ? trees / area : 0; +}; + +/** + * Get date filter for recent activity (last N days) + * @param {number} days - Number of days back + * @returns {Date} Date object for filtering + */ +export const getRecentDateFilter = (days = 30) => { + const date = new Date(); + date.setDate(date.getDate() - days); + return date; +}; + +/** + * Standard error response for dashboard endpoints + * @param {Object} res - Express response object + * @param {Error} error - Error object + * @param {string} message - User-friendly error message + * @param {number} statusCode - HTTP status code (default: 500) + */ +export const handleDashboardError = (res, error, message, statusCode = 500) => { + console.error(`Dashboard error: ${message}`, error); + res.status(statusCode).json({ + success: false, + message, + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); +}; + +/** + * Standard error response for controller endpoints + * @param {Object} res - Express response object + * @param {Error} error - Error object + * @param {string} context - Context of the error (e.g., 'Get forests error') + * @param {number} statusCode - HTTP status code (default: 500) + */ +export const handleControllerError = (res, error, context, statusCode = 500) => { + console.error(`${context}:`, error); + res.status(statusCode).json({ + success: false, + message: 'Internal server error', + error: process.env.NODE_ENV === 'development' ? error.message : undefined + }); +}; + +/** + * Standard success response helper + * @param {Object} res - Express response object + * @param {Object|Array} data - Response data + * @param {string} message - Success message (optional) + * @param {number} statusCode - HTTP status code (default: 200) + */ +export const sendSuccessResponse = (res, data, message = null, statusCode = 200) => { + const response = { + success: true, + data + }; + + if (message) { + response.message = message; + } + + res.status(statusCode).json(response); +}; + +/** + * Standard not found response helper + * @param {Object} res - Express response object + * @param {string} resource - Name of the resource that wasn't found + */ +export const sendNotFoundResponse = (res, resource = 'Resource') => { + res.status(404).json({ + success: false, + message: `${resource} not found` + }); +}; + +/** + * Standard validation error response helper + * @param {Object} res - Express response object + * @param {Array} errors - Validation errors array + */ +export const sendValidationErrorResponse = (res, errors) => { + res.status(400).json({ + success: false, + message: 'Validation failed', + errors + }); +}; \ No newline at end of file diff --git a/backend/utils/dataFormatters.js b/backend/utils/dataFormatters.js new file mode 100644 index 0000000000..789ceb5904 --- /dev/null +++ b/backend/utils/dataFormatters.js @@ -0,0 +1,187 @@ +// Data formatting utilities for dashboard responses +import { roundToTwo, calculateSurvivalRate, calculateTreeDensity } from './dashboardUtils.js'; + +/** + * Format overview statistics data + * @param {Object} data - Raw overview data + * @param {number} data.totalTrees - Total number of trees + * @param {number} data.aliveTrees - Number of alive trees + * @param {number} data.totalForests - Total number of forests + * @param {number} data.totalUsers - Total number of users + * @param {number} data.recentActivity - Recent activity count + * @returns {Object} Formatted overview data + */ +export const formatOverviewData = (data) => { + const { totalTrees, aliveTrees, totalForests, totalUsers, recentActivity } = data; + const deadTrees = totalTrees - aliveTrees; + const survivalRate = calculateSurvivalRate(aliveTrees, totalTrees); + + return { + totalTrees, + aliveTrees, + deadTrees, + survivalRate: roundToTwo(survivalRate), + totalForests, + totalUsers, + recentActivity + }; +}; + +/** + * Format height statistics data + * @param {Array} heightStats - Raw height statistics from aggregation + * @returns {Object} Formatted height data + */ +export const formatHeightData = (heightStats) => { + if (!heightStats || heightStats.length === 0) { + return { + average: 0, + minimum: 0, + maximum: 0, + treesWithMeasurements: 0 + }; + } + + const stats = heightStats[0]; + return { + average: roundToTwo(stats.avgHeight || 0), + minimum: roundToTwo(stats.minHeight || 0), + maximum: roundToTwo(stats.maxHeight || 0), + treesWithMeasurements: stats.treesWithMeasurements || 0 + }; +}; + +/** + * Format CO2 absorption statistics data + * @param {Array} co2Stats - Raw CO2 statistics from aggregation + * @returns {Object} Formatted CO2 data + */ +export const formatCO2Data = (co2Stats) => { + if (!co2Stats || co2Stats.length === 0) { + return { + totalAbsorption: 0, + averagePerTree: 0, + totalMeasurements: 0 + }; + } + + const stats = co2Stats[0]; + return { + totalAbsorption: roundToTwo(stats.totalCO2 || 0), + averagePerTree: roundToTwo(stats.avgCO2PerTree || 0), + totalMeasurements: stats.measurementCount || 0 + }; +}; + +/** + * Format forest statistics data + * @param {Array} forestStats - Raw forest statistics from aggregation + * @param {number} totalTrees - Total number of trees for density calculation + * @returns {Object} Formatted forest data + */ +export const formatForestData = (forestStats, totalTrees) => { + if (!forestStats || forestStats.length === 0) { + return { + totalArea: 0, + averageArea: 0, + treeDensity: 0 + }; + } + + const stats = forestStats[0]; + const totalArea = stats.totalArea || 0; + const treeDensity = calculateTreeDensity(totalTrees, totalArea); + + return { + totalArea: roundToTwo(totalArea), + averageArea: roundToTwo(stats.avgArea || 0), + treeDensity: roundToTwo(treeDensity) + }; +}; + +/** + * Format complete dashboard response + * @param {Object} rawData - All raw data from database queries + * @param {Object} filters - Applied filters + * @returns {Object} Complete formatted dashboard response + */ +export const formatDashboardResponse = (rawData, filters) => { + const { + totalTrees, + aliveTrees, + totalForests, + totalUsers, + recentActivity, + speciesDistribution, + heightStats, + co2Stats, + healthDistribution, + forestStats + } = rawData; + + return { + success: true, + data: { + overview: formatOverviewData({ + totalTrees, + aliveTrees, + totalForests, + totalUsers, + recentActivity + }), + height: formatHeightData(heightStats), + co2: formatCO2Data(co2Stats), + forest: formatForestData(forestStats, totalTrees), + distributions: { + species: speciesDistribution, + health: healthDistribution + }, + filters, + lastUpdated: new Date().toISOString() + } + }; +}; + +/** + * Format quick stats response + * @param {Object} rawData - Raw quick stats data + * @returns {Object} Formatted quick stats response + */ +export const formatQuickStatsResponse = (rawData) => { + const { + totalTrees, + aliveTrees, + totalForests, + avgHeight, + totalCO2 + } = rawData; + + const survivalRate = calculateSurvivalRate(aliveTrees, totalTrees); + + return { + success: true, + data: { + totalTrees, + aliveTrees, + survivalRate: roundToTwo(survivalRate), + averageHeight: roundToTwo(avgHeight || 0), + totalCO2Absorption: roundToTwo(totalCO2 || 0), + totalForests + } + }; +}; + +/** + * Format forest comparison response + * @param {Array} forestStats - Raw forest comparison data + * @returns {Object} Formatted forest comparison response + */ +export const formatForestComparisonResponse = (forestStats) => { + return { + success: true, + data: { + forests: forestStats, + totalForests: forestStats.length + } + }; +}; \ No newline at end of file diff --git a/backend/utils/exportHelpers.js b/backend/utils/exportHelpers.js new file mode 100644 index 0000000000..9af6d8dcaa --- /dev/null +++ b/backend/utils/exportHelpers.js @@ -0,0 +1,226 @@ +// Export utility functions for data transformation and formatting +import { buildTreeQuery, roundToTwo } from './dashboardUtils.js'; + +/** + * Build query conditions for tree exports with additional export-specific filters + * @param {Object} queryParams - Query parameters from request + * @param {string} queryParams.forestId - Forest ID filter + * @param {string} queryParams.species - Species filter + * @param {string} queryParams.isAlive - Alive status filter + * @param {string} queryParams.startDate - Start date filter + * @param {string} queryParams.endDate - End date filter + * @returns {Object} Query conditions for tree export + */ +export const buildExportTreeQuery = (queryParams) => { + const { isAlive, ...baseFilters } = queryParams; + const query = buildTreeQuery(baseFilters); + + // Add export-specific isAlive filter + if (isAlive !== undefined) { + query.isAlive = isAlive === 'true'; + } + + return query; +}; + +/** + * Transform tree data into export row format + * @param {Object} tree - Tree document from database + * @param {Object} options - Export options + * @param {boolean} options.includeHealthStatus - Include health status data + * @returns {Object} Formatted tree row data + */ +export const transformTreeToExportRow = (tree, options = {}) => { + const { includeHealthStatus } = options; + + const baseRow = { + 'Tree ID': tree.treeId, + 'Forest Name': tree.forestId?.name || 'Unknown', + 'Region': tree.forestId?.region || 'Unknown', + 'Species': tree.species, + 'Planted Date': tree.plantedDate.toISOString().split('T')[0], + 'Is Alive': tree.isAlive ? 'Yes' : 'No', + 'Longitude': tree.location.coordinates[0], + 'Latitude': tree.location.coordinates[1], + 'Age (Days)': Math.floor((new Date() - tree.plantedDate) / (1000 * 60 * 60 * 24)) + }; + + // Add death information for dead trees + if (!tree.isAlive) { + baseRow['Death Date'] = tree.deathDate ? tree.deathDate.toISOString().split('T')[0] : ''; + baseRow['Death Cause'] = tree.deathCause || ''; + } + + // Add health status information if requested and available + if (includeHealthStatus === 'true' && tree.measurements.length > 0) { + const latestMeasurement = tree.measurements + .sort((a, b) => new Date(b.measuredAt) - new Date(a.measuredAt))[0]; + + baseRow['Current Height (m)'] = latestMeasurement.height || ''; + baseRow['Current Health Status'] = latestMeasurement.healthStatus || ''; + baseRow['Latest Measurement Date'] = latestMeasurement.measuredAt.toISOString().split('T')[0]; + } + + return baseRow; +}; + +/** + * Transform tree measurement data into export row format + * @param {Object} tree - Tree document from database + * @param {Object} measurement - Measurement data + * @param {number} measurementIndex - Index of measurement + * @returns {Object} Formatted measurement row data + */ +export const transformMeasurementToExportRow = (tree, measurement, measurementIndex) => { + return { + 'Tree ID': tree.treeId, + 'Forest Name': tree.forestId?.name || 'Unknown', + 'Species': tree.species, + 'Measurement #': measurementIndex + 1, + 'Height (m)': measurement.height, + 'Diameter (cm)': measurement.diameter || '', + 'CO2 Absorption (kg)': measurement.co2Absorption || '', + 'Health Status': measurement.healthStatus, + 'Measurement Date': measurement.measuredAt.toISOString().split('T')[0], + 'Notes': measurement.notes || '' + }; +}; + +/** + * Process trees data for CSV export with measurements + * @param {Array} trees - Array of tree documents + * @param {Object} options - Processing options + * @param {boolean} options.includeMeasurements - Include measurements data + * @param {boolean} options.includeHealthStatus - Include health status data + * @returns {Array} Array of formatted export rows + */ +export const processTreesForExport = (trees, options = {}) => { + const { includeMeasurements, includeHealthStatus } = options; + const exportData = []; + + trees.forEach(tree => { + const baseRow = transformTreeToExportRow(tree, { includeHealthStatus }); + + if (includeMeasurements === 'true') { + if (tree.measurements.length === 0) { + exportData.push(baseRow); + } else { + tree.measurements.forEach((measurement, index) => { + const measurementRow = transformMeasurementToExportRow(tree, measurement, index); + exportData.push({ ...baseRow, ...measurementRow }); + }); + } + } else { + exportData.push(baseRow); + } + }); + + return exportData; +}; + +/** + * Generate CSV content from data array + * @param {Array} data - Array of objects to convert to CSV + * @returns {string} CSV formatted string + */ +export const generateCSVContent = (data) => { + if (!data || data.length === 0) { + return ''; + } + + const headers = Object.keys(data[0]); + const rows = data.map(row => + headers.map(header => { + const value = row[header]; + // Escape values containing commas with quotes + return typeof value === 'string' && value.includes(',') ? `"${value}"` : value; + }).join(',') + ); + + return [headers.join(','), ...rows].join('\n'); +}; + +/** + * Generate export filename with timestamp + * @param {string} baseFilename - Base filename without extension + * @param {string} extension - File extension (e.g., 'csv', 'xlsx') + * @returns {string} Generated filename with timestamp + */ +export const generateExportFilename = (baseFilename, extension) => { + const timestamp = new Date().toISOString().split('T')[0]; + return `${baseFilename}_${timestamp}.${extension}`; +}; + +/** + * Set CSV response headers + * @param {Object} res - Express response object + * @param {string} filename - Filename for download + * @param {string} content - CSV content for content-length header + */ +export const setCSVResponseHeaders = (res, filename, content) => { + res.setHeader('Content-Type', 'text/csv'); + res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); + res.setHeader('Content-Length', Buffer.byteLength(content)); +}; + +/** + * Set XLSX response headers + * @param {Object} res - Express response object + * @param {string} filename - Filename for download + * @param {Buffer} buffer - XLSX buffer for content-length header + */ +export const setXLSXResponseHeaders = (res, filename, buffer) => { + res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + res.setHeader('Content-Disposition', `attachment; filename="${filename}"`); + res.setHeader('Content-Length', buffer.length); +}; + +/** + * Calculate forest analytics statistics + * @param {Object} forest - Forest document + * @param {number} totalTrees - Total trees in forest + * @param {number} aliveTrees - Alive trees in forest + * @param {number} avgHeight - Average height of trees + * @param {number} totalCO2 - Total CO2 absorption + * @returns {Object} Formatted forest analytics data + */ +export const calculateForestAnalytics = (forest, totalTrees, aliveTrees, avgHeight, totalCO2) => { + const deadTrees = totalTrees - aliveTrees; + const survivalRate = totalTrees > 0 ? (aliveTrees / totalTrees) * 100 : 0; + const treesPerHectare = totalTrees > 0 ? totalTrees / forest.area : 0; + + return { + 'Forest Name': forest.name, + 'Region': forest.region, + 'Area (hectares)': forest.area, + 'Established Date': forest.establishedDate.toISOString().split('T')[0], + 'Total Trees': totalTrees, + 'Alive Trees': aliveTrees, + 'Dead Trees': deadTrees, + 'Survival Rate (%)': roundToTwo(survivalRate), + 'Average Height (m)': roundToTwo(avgHeight), + 'Total CO2 Absorption (kg)': roundToTwo(totalCO2), + 'Trees per Hectare': roundToTwo(treesPerHectare) + }; +}; + +/** + * Generate export statistics for XLSX files + * @param {Array} trees - Array of tree data + * @returns {Object} Statistics object + */ +export const generateExportStatistics = (trees) => { + const aliveTrees = trees.filter(t => t.isAlive).length; + const deadTrees = trees.length - aliveTrees; + const survivalRate = trees.length > 0 ? (aliveTrees / trees.length) * 100 : 0; + + return { + 'Total Trees': trees.length, + 'Alive Trees': aliveTrees, + 'Dead Trees': deadTrees, + 'Survival Rate (%)': roundToTwo(survivalRate), + 'Export Date': new Date().toISOString().split('T')[0], + 'Unique Forests': [...new Set(trees.map(t => t.forestId?.name).filter(Boolean))].length, + 'Unique Species': [...new Set(trees.map(t => t.species))].length + }; +}; \ No newline at end of file diff --git a/backend/utils/queryHelpers.js b/backend/utils/queryHelpers.js new file mode 100644 index 0000000000..c0af2ab874 --- /dev/null +++ b/backend/utils/queryHelpers.js @@ -0,0 +1,69 @@ +/** + * Query building and pagination helper utilities + */ + +/** + * Builds query conditions for user search and filtering + * @param {Object} queryParams - Query parameters from request + * @returns {Object} - MongoDB query conditions + */ +export const buildUserQueryConditions = (queryParams) => { + const { search, role, isActive } = queryParams; + const queryConditions = {}; + + if (search) { + queryConditions.$or = [ + { firstName: new RegExp(search, 'i') }, + { lastName: new RegExp(search, 'i') }, + { email: new RegExp(search, 'i') } + ]; + } + + if (role) queryConditions.role = role; + if (isActive !== undefined) queryConditions.isActive = isActive === 'true'; + + return queryConditions; +}; + +/** + * Calculates pagination parameters + * @param {number} page - Current page number + * @param {number} limit - Items per page + * @returns {Object} - Pagination parameters + */ +export const calculatePagination = (page = 1, limit = 20) => { + const skip = (page - 1) * limit; + return { + skip, + limit: parseInt(limit), + page: parseInt(page) + }; +}; + +/** + * Builds pagination metadata + * @param {number} currentPage - Current page number + * @param {number} limit - Items per page + * @param {number} totalCount - Total number of items + * @returns {Object} - Pagination metadata + */ +export const buildPaginationMetadata = (currentPage, limit, totalCount) => { + return { + currentPage: parseInt(currentPage), + totalPages: Math.ceil(totalCount / limit), + totalCount, + hasNextPage: currentPage * limit < totalCount, + hasPrevPage: currentPage > 1 + }; +}; + +/** + * Builds sort parameters for MongoDB queries + * @param {string} sortBy - Field to sort by + * @param {string} sortOrder - Sort order (asc/desc) + * @returns {Object} - MongoDB sort object + */ +export const buildSortParams = (sortBy = 'createdAt', sortOrder = 'desc') => { + const sortDirection = sortOrder === 'desc' ? -1 : 1; + return { [sortBy]: sortDirection }; +}; \ No newline at end of file diff --git a/backend/utils/realtimeDataService.js b/backend/utils/realtimeDataService.js new file mode 100644 index 0000000000..ec322673ea --- /dev/null +++ b/backend/utils/realtimeDataService.js @@ -0,0 +1,157 @@ +import { Tree, Forest, TreeImage, AuditLog } from '../models/index.js'; + +/** + * Format audit log entry for real-time consumption + * @param {Object} log - Raw audit log entry + * @returns {Object} Formatted audit log entry + */ +export const formatAuditLogEntry = (log) => ({ + id: log._id, + action: log.action, + resource: log.resource, + userId: log.userId?._id, + user: log.userId ? { + email: log.userId.email, + firstName: log.userId.firstName, + lastName: log.userId.lastName + } : null, + timestamp: log.timestamp, + changes: log.changes +}); + +/** + * Get recent activity from audit logs + * @param {number} limit - Number of recent activities to fetch + * @returns {Array} Array of formatted audit log entries + */ +export const getRecentActivity = async (limit = 10) => { + try { + const recentLogs = await AuditLog.find() + .sort({ timestamp: -1 }) + .limit(limit) + .populate('userId', 'firstName lastName email'); + + return recentLogs.map(formatAuditLogEntry); + } catch (error) { + console.error('Error fetching recent activity:', error); + return []; + } +}; + +/** + * Get dashboard statistics and data for real-time updates + * @param {number} connectedUsersCount - Number of currently connected users + * @returns {Object|null} Dashboard data or null if error + */ +export const getDashboardData = async (connectedUsersCount) => { + try { + const [totalTrees, totalForests, recentImages] = await Promise.all([ + Tree.countDocuments(), + Forest.countDocuments({ isActive: true }), + TreeImage.find({ isActive: true }) + .sort({ createdAt: -1 }) + .limit(5) + .populate('treeId', 'species') + ]); + + return { + stats: { + totalTrees, + totalForests, + onlineUsers: connectedUsersCount + }, + recentImages: recentImages.map(img => img.toPublicJSON()), + timestamp: new Date() + }; + } catch (error) { + console.error('Error fetching dashboard data:', error); + return null; + } +}; + +/** + * Get comprehensive forest data for real-time updates + * @param {string} forestId - Forest ID to fetch data for + * @returns {Object|null} Forest data with tree count and recent trees, or null if error + */ +export const getForestData = async (forestId) => { + try { + const [forest, treeCount, recentTrees] = await Promise.all([ + Forest.findById(forestId), + Tree.countDocuments({ forestId }), + Tree.find({ forestId }) + .sort({ createdAt: -1 }) + .limit(10) + .select('species plantedDate isAlive measurements') + ]); + + return { + ...forest.toObject(), + treeCount, + recentTrees + }; + } catch (error) { + console.error('Error fetching forest data:', error); + return null; + } +}; + +/** + * Validate tree exists and return tree data + * @param {string} treeId - Tree ID to validate and fetch + * @returns {Object} Tree document + * @throws {Error} If tree not found + */ +export const validateAndGetTree = async (treeId) => { + try { + const tree = await Tree.findById(treeId); + if (!tree) { + throw new Error('Tree not found'); + } + return tree; + } catch (error) { + console.error('Error validating tree:', error); + throw error; + } +}; + +/** + * Validate forest exists and return forest data + * @param {string} forestId - Forest ID to validate and fetch + * @returns {Object} Forest document + * @throws {Error} If forest not found + */ +export const validateAndGetForest = async (forestId) => { + try { + const forest = await Forest.findById(forestId); + if (!forest) { + throw new Error('Forest not found'); + } + return forest; + } catch (error) { + console.error('Error validating forest:', error); + throw error; + } +}; + +/** + * Get user tree statistics for real-time updates + * @param {string|null} userId - User ID to filter by (null for all users) + * @returns {Object} User tree statistics + */ +export const getUserTreeStats = async (userId = null) => { + try { + const filter = userId ? { /* Add user-specific filtering logic if needed */ } : {}; + const userTreeCount = await Tree.countDocuments(filter); + + return { + treeCount: userTreeCount, + connectedAt: new Date() + }; + } catch (error) { + console.error('Error fetching user tree stats:', error); + return { treeCount: 0, connectedAt: new Date() }; + } +}; + +// TODO: Consider moving real-time state management to Zustand store for better state synchronization across components \ No newline at end of file diff --git a/backend/utils/realtimeEventEmitters.js b/backend/utils/realtimeEventEmitters.js new file mode 100644 index 0000000000..3ab3c2f66f --- /dev/null +++ b/backend/utils/realtimeEventEmitters.js @@ -0,0 +1,205 @@ +/** + * Event emitter functions for real-time events + * Used with response interceptor middleware + */ + +/** + * Extracts ID from request parameters or response data + * @param {Object} params - Request parameters + * @param {Object} data - Response data + * @param {string} idField - Field name for ID in params + * @param {string} dataField - Field name for nested data + * @returns {string|null} - Extracted ID or null + */ +const extractId = (params, data, idField, dataField = 'data') => { + const paramId = params[idField]; + if (paramId) return paramId; + + const responseData = data[dataField]; + return responseData?._id || responseData?.[dataField]?._id || null; +}; + +/** + * Generic event emitter for resource updates + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Object} data - Response data + * @param {string} resource - Resource type (tree, forest) + * @param {string} idField - ID field name for params + * @param {Function} broadcastFunction - Function to broadcast updates + */ +const emitResourceEvent = (req, res, data, resource, idField, broadcastFunction) => { + const resourceId = req.params[idField]; + const method = req.method; + + if (resourceId && method === 'PUT') { + // Resource updated + broadcastFunction( + resourceId, + data.data, + `${resource}:updated` + ); + } else if (method === 'POST' && data.data) { + // New resource created + const newResourceId = extractId(req.params, data, idField); + if (newResourceId) { + broadcastFunction( + newResourceId, + data.data, + `${resource}:created` + ); + } + } +}; + +/** + * Checks if realtime controller is available + * @returns {boolean} - True if controller is available + */ +const isRealtimeControllerAvailable = () => { + return global.realtimeController && typeof global.realtimeController === 'object'; +}; + +/** + * Determines action type based on HTTP method and path + * @param {string} method - HTTP method + * @param {string} path - Request path + * @returns {string|null} - Action type or null + */ +export const getActionFromRequest = (method, path) => { + const pathSegments = path.split('/'); + const resource = pathSegments[2]; // /api/[resource]/... + + switch (method) { + case 'POST': + if (path.includes('/login')) return 'user_login'; + if (path.includes('/register')) return 'user_register'; + if (path.includes('/upload')) return 'image_upload'; + return `${resource}_create`; + + case 'PUT': + case 'PATCH': + return `${resource}_update`; + + case 'DELETE': + return `${resource}_delete`; + + default: + return null; + } +}; + +/** + * Emits tree-related events + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Object} data - Response data + */ +export const emitTreeEvent = (req, res, data) => { + if (!isRealtimeControllerAvailable()) return; + + emitResourceEvent( + req, + res, + data, + 'tree', + 'treeId', + global.realtimeController.broadcastTreeUpdate.bind(global.realtimeController) + ); +}; + +/** + * Emits forest-related events + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Object} data - Response data + */ +export const emitForestEvent = (req, res, data) => { + if (!isRealtimeControllerAvailable()) return; + + emitResourceEvent( + req, + res, + data, + 'forest', + 'forestId', + global.realtimeController.broadcastForestUpdate.bind(global.realtimeController) + ); +}; + +/** + * Emits image upload events + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Object} data - Response data + */ +export const emitImageUploadEvent = (req, res, data) => { + if (!isRealtimeControllerAvailable()) return; + + if (data.data && data.data.images) { + const { treeId } = req.params; + + // Emit image upload events for each uploaded image + data.data.images.forEach(image => { + global.realtimeController.broadcastImageUpload(treeId, image); + }); + } +}; + +/** + * Creates user activity payload + * @param {Object} user - User object + * @param {string} action - Action type + * @param {string} path - Request path + * @param {string} method - HTTP method + * @returns {Object} - User activity payload + */ +const createUserActivityPayload = (user, action, path, method) => ({ + userId: user._id, + user: { + email: user.email, + firstName: user.firstName, + lastName: user.lastName + }, + action, + path, + method, + timestamp: new Date() +}); + +/** + * Emits user activity events + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Object} data - Response data + */ +export const emitUserActivityEvent = (req, res, data) => { + if (!req.user || !global.io) return; + + const { method, path } = req; + const action = getActionFromRequest(method, path); + + if (action) { + const payload = createUserActivityPayload(req.user, action, path, method); + // Emit to admin users for monitoring + global.io.to('admin').emit('user:activity', payload); + } +}; + +/** + * System notification emitter (not middleware-based) + * @param {string} type - Notification type + * @param {string} message - Notification message + * @param {string} audience - Target audience ('all' or 'admin') + */ +export const emitSystemNotification = (type, message, audience = 'all') => { + if (!isRealtimeControllerAvailable()) return; + + const notificationPayload = { + type, + message, + level: 'info' + }; + + global.realtimeController.broadcastSystemNotification(notificationPayload, audience); +}; \ No newline at end of file diff --git a/backend/utils/responseHelpers.js b/backend/utils/responseHelpers.js new file mode 100644 index 0000000000..d26ad6b35a --- /dev/null +++ b/backend/utils/responseHelpers.js @@ -0,0 +1,179 @@ +/** + * Response helper utilities for consistent API responses + */ + +/** + * Response format constants + */ +const RESPONSE_FORMATS = { + SUCCESS: 'success', + ERROR: 'error' +}; + +/** + * HTTP status codes constants + */ +const HTTP_STATUS = { + OK: 200, + CREATED: 201, + BAD_REQUEST: 400, + UNAUTHORIZED: 401, + FORBIDDEN: 403, + NOT_FOUND: 404, + CONFLICT: 409, + UNPROCESSABLE_ENTITY: 422, + INTERNAL_SERVER_ERROR: 500 +}; + +/** + * Base response structure builders + */ +const ResponseBuilder = { + /** + * Creates a success response object + * @param {*} data - Response data + * @param {string} message - Success message + * @param {number} statusCode - HTTP status code + * @returns {Object} - Formatted success response + */ + success: (data, message = 'Success', statusCode = HTTP_STATUS.OK) => ({ + success: true, + message, + data, + statusCode + }), + + /** + * Creates an error response object + * @param {string} message - Error message + * @param {number} statusCode - HTTP status code + * @param {*} error - Additional error details + * @returns {Object} - Formatted error response + */ + error: (message, statusCode = HTTP_STATUS.INTERNAL_SERVER_ERROR, error = null) => { + const response = { + success: false, + message, + statusCode + }; + + if (process.env.NODE_ENV === 'development' && error) { + response.error = error; + } + + return response; + } +}; + +/** + * Legacy exports for backward compatibility + */ +export const createSuccessResponse = ResponseBuilder.success; +export const createErrorResponse = ResponseBuilder.error; + +/** + * Response senders + */ +const ResponseSender = { + /** + * Sends a success response + * @param {Object} res - Express response object + * @param {*} data - Response data + * @param {string} message - Success message + * @param {number} statusCode - HTTP status code + */ + success: (res, data, message = 'Success', statusCode = HTTP_STATUS.OK) => { + const response = ResponseBuilder.success(data, message, statusCode); + res.status(statusCode).json(response); + }, + + /** + * Sends an error response + * @param {Object} res - Express response object + * @param {string} message - Error message + * @param {number} statusCode - HTTP status code + * @param {*} error - Additional error details + */ + error: (res, message, statusCode = HTTP_STATUS.INTERNAL_SERVER_ERROR, error = null) => { + const response = ResponseBuilder.error(message, statusCode, error); + res.status(statusCode).json(response); + } +}; + +/** + * Main response functions + */ +export const sendSuccessResponse = ResponseSender.success; +export const sendErrorResponse = ResponseSender.error; + +/** + * Specialized response functions + */ +export const sendNotFoundResponse = (res, resource = 'Resource') => { + ResponseSender.error(res, `${resource} not found`, HTTP_STATUS.NOT_FOUND); +}; + +export const sendUnauthorizedResponse = (res, message = 'Not authorized') => { + ResponseSender.error(res, message, HTTP_STATUS.UNAUTHORIZED); +}; + +export const sendForbiddenResponse = (res, message = 'Forbidden') => { + ResponseSender.error(res, message, HTTP_STATUS.FORBIDDEN); +}; + +export const sendBadRequestResponse = (res, message = 'Bad request') => { + ResponseSender.error(res, message, HTTP_STATUS.BAD_REQUEST); +}; + +export const sendConflictResponse = (res, message = 'Conflict') => { + ResponseSender.error(res, message, HTTP_STATUS.CONFLICT); +}; + +export const sendValidationErrorResponse = (res, errors, message = 'Validation failed') => { + const response = { + success: false, + message, + errors, + statusCode: HTTP_STATUS.UNPROCESSABLE_ENTITY + }; + res.status(HTTP_STATUS.UNPROCESSABLE_ENTITY).json(response); +}; + +/** + * Error handling utilities + */ +export const ErrorHandler = { + /** + * Handles async controller errors + * @param {Function} fn - Async controller function + * @returns {Function} - Wrapped controller function with error handling + */ + asyncHandler: (fn) => { + return (req, res, next) => { + Promise.resolve(fn(req, res, next)).catch(next); + }; + }, + + /** + * Handles controller errors with context logging + * @param {Object} res - Express response object + * @param {Error} error - Error object + * @param {string} context - Context of the error + * @param {number} statusCode - HTTP status code + */ + handleControllerError: (res, error, context, statusCode = HTTP_STATUS.INTERNAL_SERVER_ERROR) => { + console.error(`${context}:`, error); + ResponseSender.error(res, 'Internal server error', statusCode, error); + } +}; + +/** + * Legacy exports for backward compatibility + */ +export const asyncHandler = ErrorHandler.asyncHandler; +export const handleControllerError = ErrorHandler.handleControllerError; + +/** + * Export constants for use in other modules + */ +export { HTTP_STATUS, RESPONSE_FORMATS }; \ No newline at end of file diff --git a/backend/utils/responseInterceptor.js b/backend/utils/responseInterceptor.js new file mode 100644 index 0000000000..f1764b0961 --- /dev/null +++ b/backend/utils/responseInterceptor.js @@ -0,0 +1,99 @@ +/** + * Response interceptor utility for middleware that needs to emit events after successful responses + */ + +/** + * Configuration constants for response interceptor + */ +const INTERCEPTOR_CONFIG = { + SUCCESS_PROPERTY: 'success', + GLOBAL_CONTROLLER_KEY: 'realtimeController' +}; + +/** + * Validates that the callback is a function + * @param {*} callback - The callback to validate + * @throws {Error} - If callback is not a function + */ +const validateCallback = (callback) => { + if (typeof callback !== 'function') { + throw new Error('Callback must be a function'); + } +}; + +/** + * Checks if a response indicates success + * @param {*} data - Response data to check + * @returns {boolean} - Whether the response indicates success + */ +const isSuccessResponse = (data) => { + return data && data[INTERCEPTOR_CONFIG.SUCCESS_PROPERTY] === true; +}; + +/** + * Safely executes a callback function with error handling + * @param {Function} callback - The callback function to execute + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {*} data - Response data + */ +const safeCallbackExecution = (callback, req, res, data) => { + try { + callback(req, res, data); + } catch (error) { + console.error('Response interceptor callback error:', error); + // TODO: Consider using a proper logging service instead of console.error + } +}; + +/** + * Creates a response interceptor that calls a callback function after a successful response + * @param {Function} callback - Function to call with (req, res, data) after successful response + * @returns {Function} - Middleware function + */ +export const createResponseInterceptor = (callback) => { + validateCallback(callback); + + return (req, res, next) => { + // Store original json method + const originalJson = res.json; + + // Override json method to intercept response + res.json = function(data) { + // Call original json method first + const result = originalJson.call(this, data); + + // Call callback if operation was successful + if (isSuccessResponse(data)) { + safeCallbackExecution(callback, req, res, data); + } + + return result; + }; + + next(); + }; +}; + +/** + * Checks if the global realtime controller is available + * @returns {boolean} - Whether the realtime controller is available + */ +const isRealtimeControllerAvailable = () => { + return global[INTERCEPTOR_CONFIG.GLOBAL_CONTROLLER_KEY] !== undefined; +}; + +/** + * Generic response interceptor for real-time events + * @param {Function} eventEmitter - Function that emits the appropriate event + * @returns {Function} - Middleware function + */ +export const createRealtimeEventMiddleware = (eventEmitter) => { + validateCallback(eventEmitter); + + return createResponseInterceptor((req, res, data) => { + if (isRealtimeControllerAvailable()) { + eventEmitter(req, res, data); + } + }); +}; \ No newline at end of file diff --git a/backend/utils/roomManager.js b/backend/utils/roomManager.js new file mode 100644 index 0000000000..4fdd4e57bd --- /dev/null +++ b/backend/utils/roomManager.js @@ -0,0 +1,213 @@ +// Room name generation utilities +export class RoomNameGenerator { + static generateTreeRoom(treeId) { + return `tree:${treeId}`; + } + + static generateForestRoom(forestId) { + return `forest:${forestId}`; + } + + static generateUserRoom(userId) { + return `user:${userId}`; + } + + static generateAdminRoom() { + return 'admin'; + } + + static generateGlobalRoom() { + return 'global'; + } +} + +// User connection data formatting utilities +export class ConnectionDataFormatter { + static formatUserConnection(connection) { + return { + userId: connection.user._id, + email: connection.user.email, + role: connection.user.role, + connectedAt: connection.connectedAt + }; + } + + static formatConnectionStats(connection) { + return { + userId: connection.user._id, + email: connection.user.email, + connectedAt: connection.connectedAt, + rooms: connection.rooms.length + }; + } + + static createUserConnectionData(socket) { + return { + socketId: socket.id, + user: socket.user, + connectedAt: new Date(), + rooms: [] + }; + } +} + +// Core connection management functionality +export class ConnectionManager { + constructor() { + this.connectedUsers = new Map(); + } + + addUserConnection(socket) { + const connectionData = ConnectionDataFormatter.createUserConnectionData(socket); + this.connectedUsers.set(socket.userId, connectionData); + console.log(`User connection added: ${socket.user.email} (${socket.id})`); + } + + removeUserConnection(userId) { + const removed = this.connectedUsers.delete(userId); + if (removed) { + console.log(`User connection removed for userId: ${userId}`); + } + return removed; + } + + getUserConnection(userId) { + return this.connectedUsers.get(userId); + } + + getConnectedUsersCount() { + return this.connectedUsers.size; + } + + getAllConnections() { + return Array.from(this.connectedUsers.values()); + } + + clearAllConnections() { + this.connectedUsers.clear(); + console.log('All user connections cleared'); + } +} + +// Room membership management functionality +export class RoomMembershipManager { + constructor() { + this.activeRooms = new Set(); + } + + addUserToRoom(userConnection, roomName) { + if (userConnection && !userConnection.rooms.includes(roomName)) { + userConnection.rooms.push(roomName); + this.activeRooms.add(roomName); + } + } + + removeUserFromRoom(userConnection, roomName) { + if (userConnection) { + userConnection.rooms = userConnection.rooms.filter(room => room !== roomName); + } + } + + getActiveRoomsCount() { + return this.activeRooms.size; + } + + clearAllRooms() { + this.activeRooms.clear(); + } +} + +// Statistics and reporting functionality +export class ConnectionStatsManager { + static generateOnlineUsersData(connections, isAdmin = false) { + const onlineCount = connections.length; + const onlineUsers = connections.map(ConnectionDataFormatter.formatUserConnection); + + return { + count: onlineCount, + users: isAdmin ? onlineUsers : undefined + }; + } + + static generateConnectionStats(connections, activeRoomsCount) { + return { + connectedUsers: connections.length, + activeRooms: activeRoomsCount, + connections: connections.map(ConnectionDataFormatter.formatConnectionStats) + }; + } +} + +// Main RoomManager class that orchestrates all functionality +export class RoomManager { + constructor() { + this.connectionManager = new ConnectionManager(); + this.roomMembershipManager = new RoomMembershipManager(); + } + + // Connection management delegation + addUserConnection(socket) { + this.connectionManager.addUserConnection(socket); + } + + removeUserConnection(userId) { + return this.connectionManager.removeUserConnection(userId); + } + + getUserConnection(userId) { + return this.connectionManager.getUserConnection(userId); + } + + // Room management delegation + addUserToRoom(userId, roomName) { + const userConnection = this.connectionManager.getUserConnection(userId); + this.roomMembershipManager.addUserToRoom(userConnection, roomName); + } + + removeUserFromRoom(userId, roomName) { + const userConnection = this.connectionManager.getUserConnection(userId); + this.roomMembershipManager.removeUserFromRoom(userConnection, roomName); + } + + // Static room name generation methods (kept for backward compatibility) + static generateTreeRoom(treeId) { + return RoomNameGenerator.generateTreeRoom(treeId); + } + + static generateForestRoom(forestId) { + return RoomNameGenerator.generateForestRoom(forestId); + } + + static generateUserRoom(userId) { + return RoomNameGenerator.generateUserRoom(userId); + } + + // Statistics and data methods + getOnlineUsersData(isAdmin = false) { + const connections = this.connectionManager.getAllConnections(); + return ConnectionStatsManager.generateOnlineUsersData(connections, isAdmin); + } + + getConnectionStats() { + const connections = this.connectionManager.getAllConnections(); + const activeRoomsCount = this.roomMembershipManager.getActiveRoomsCount(); + return ConnectionStatsManager.generateConnectionStats(connections, activeRoomsCount); + } + + // Cleanup methods + clearAllConnections() { + this.connectionManager.clearAllConnections(); + this.roomMembershipManager.clearAllRooms(); + } + + // Convenience getter for connected users count (used by other parts of the system) + get connectedUsers() { + return { + size: this.connectionManager.getConnectedUsersCount() + }; + } +} + +// TODO: Consider moving real-time connection state to Zustand store for better state synchronization +// TODO: Add connection event emitters for better decoupling from socket.io implementation +// TODO: Consider implementing connection pooling for better performance at scale \ No newline at end of file diff --git a/backend/utils/socketEventHandlers.js b/backend/utils/socketEventHandlers.js new file mode 100644 index 0000000000..8bb6ac7508 --- /dev/null +++ b/backend/utils/socketEventHandlers.js @@ -0,0 +1,69 @@ +// Socket event handler utilities +export class SocketEventHandlers { + constructor(realtimeController) { + this.controller = realtimeController; + } + + // Set up all event listeners for a socket + setupEventListeners(socket) { + // Subscribe to specific tree updates + socket.on('subscribe:tree', (treeId) => { + this.handleSubscribeToTree(socket, treeId); + }); + + // Unsubscribe from tree updates + socket.on('unsubscribe:tree', (treeId) => { + this.handleUnsubscribeFromTree(socket, treeId); + }); + + // Subscribe to forest updates + socket.on('subscribe:forest', (forestId) => { + this.handleSubscribeToForest(socket, forestId); + }); + + // Request live dashboard data + socket.on('request:dashboard', () => { + this.handleDashboardRequest(socket); + }); + + // Request connected users count + socket.on('request:users-online', () => { + this.handleOnlineUsersRequest(socket); + }); + + // Handle real-time chat/messaging + socket.on('message:send', (data) => { + this.handleMessage(socket, data); + }); + } + + // Handle tree subscription + async handleSubscribeToTree(socket, treeId) { + await this.controller.subscribeToTree(socket, treeId); + } + + // Handle tree unsubscription + handleUnsubscribeFromTree(socket, treeId) { + this.controller.unsubscribeFromTree(socket, treeId); + } + + // Handle forest subscription + async handleSubscribeToForest(socket, forestId) { + await this.controller.subscribeToForest(socket, forestId); + } + + // Handle dashboard data request + async handleDashboardRequest(socket) { + await this.controller.sendDashboardData(socket); + } + + // Handle online users request + handleOnlineUsersRequest(socket) { + this.controller.sendOnlineUsersCount(socket); + } + + // Handle real-time messaging + handleMessage(socket, data) { + this.controller.handleMessage(socket, data); + } +} \ No newline at end of file diff --git a/backend/utils/sseHelpers.js b/backend/utils/sseHelpers.js new file mode 100644 index 0000000000..cf5879e2e7 --- /dev/null +++ b/backend/utils/sseHelpers.js @@ -0,0 +1,241 @@ +/** + * Server-Sent Events (SSE) helper utilities + * Provides SSE connection management, error handling, and configuration + */ + +/** + * SSE configuration constants + */ +const SSE_CONFIG = { + HEADERS: { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + 'Access-Control-Allow-Credentials': 'true' + }, + DEFAULT_ORIGIN: 'http://localhost:3000', + MESSAGE_TYPES: { + CONNECTED: 'connected', + ERROR: 'error', + DATA: 'data' + } +}; + +/** + * Error handling utilities for SSE operations + */ +export class SSEErrorHandler { + /** + * Handles SSE write errors + * @param {Error} error - The error that occurred + * @param {SSEConnection} connection - The SSE connection instance + */ + static handleWriteError(error, connection) { + console.error('SSE write error:', error); + connection.deactivate(); + } + + /** + * Handles SSE connection end errors + * @param {Error} error - The error that occurred + */ + static handleEndError(error) { + console.error('SSE end error:', error); + } + + /** + * Handles SSE connection errors + * @param {Error} error - The error that occurred + * @param {SSEConnection} connection - The SSE connection instance + */ + static handleConnectionError(error, connection) { + console.error('SSE connection error:', error); + connection.deactivate(); + } +} + +/** + * Message formatter for SSE data + */ +export class SSEMessageFormatter { + /** + * Formats data for SSE transmission + * @param {Object} data - Data to format + * @returns {string} - Formatted SSE message + */ + static formatMessage(data) { + return `data: ${JSON.stringify(data)}\n\n`; + } + + /** + * Creates initial connection message + * @returns {Object} - Initial connection message + */ + static createInitialMessage() { + return { + type: SSE_CONFIG.MESSAGE_TYPES.CONNECTED, + timestamp: new Date().toISOString() + }; + } +} + +/** + * SSE connection class for managing individual client connections + */ +export class SSEConnection { + constructor(res) { + this.res = res; + this.isActive = true; + } + + /** + * Writes data to the SSE connection + * @param {Object} data - Data to send to client + */ + write(data) { + if (!this.isActive) return; + + try { + const formattedMessage = SSEMessageFormatter.formatMessage(data); + this.res.write(formattedMessage); + } catch (error) { + SSEErrorHandler.handleWriteError(error, this); + } + } + + /** + * Ends the SSE connection + */ + end() { + if (!this.isActive) return; + + try { + this.res.end(); + this.deactivate(); + } catch (error) { + SSEErrorHandler.handleEndError(error); + } + } + + /** + * Deactivates the connection + */ + deactivate() { + this.isActive = false; + } + + /** + * Sends initial connection confirmation + */ + sendInitialMessage() { + const initialMessage = SSEMessageFormatter.createInitialMessage(); + this.write(initialMessage); + } + + /** + * Checks if connection is active + * @returns {boolean} - Connection status + */ + isConnectionActive() { + return this.isActive; + } +} + +/** + * SSE configuration manager + */ +export class SSEConfigManager { + /** + * Gets the origin URL for CORS + * @param {string} frontendUrl - Optional frontend URL override + * @returns {string} - Origin URL + */ + static getOrigin(frontendUrl = null) { + return frontendUrl || process.env.FRONTEND_URL || SSE_CONFIG.DEFAULT_ORIGIN; + } + + /** + * Creates SSE headers object + * @param {string} origin - Origin URL for CORS + * @returns {Object} - Headers object + */ + static createHeaders(origin) { + return { + ...SSE_CONFIG.HEADERS, + 'Access-Control-Allow-Origin': origin + }; + } +} + +/** + * Sets up SSE headers and connection + * @param {Object} res - Express response object + * @param {string} frontendUrl - Frontend URL for CORS + */ +export const setupSSEHeaders = (res, frontendUrl = null) => { + const origin = SSEConfigManager.getOrigin(frontendUrl); + const headers = SSEConfigManager.createHeaders(origin); + + res.writeHead(200, headers); +}; + +/** + * SSE connection lifecycle manager + */ +export class SSEConnectionManager { + /** + * Sets up connection event listeners + * @param {Object} req - Express request object + * @param {SSEConnection} connection - SSE connection instance + */ + static setupConnectionEvents(req, connection) { + // Handle client disconnect + req.on('close', () => { + console.log('SSE client disconnected'); + connection.deactivate(); + }); + + // Handle connection errors + req.on('error', (error) => { + SSEErrorHandler.handleConnectionError(error, connection); + }); + } + + /** + * Initializes SSE connection + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {SSEConnection} - Initialized SSE connection + */ + static initializeConnection(req, res) { + // Set headers for SSE + setupSSEHeaders(res); + + // Create SSE connection instance + const sseConnection = new SSEConnection(res); + + // Send initial connection event + sseConnection.sendInitialMessage(); + + // Store connection on request object + req.sseConnection = sseConnection; + + // Set up event listeners + this.setupConnectionEvents(req, sseConnection); + + return sseConnection; + } +} + +/** + * Middleware for setting up Server-Sent Events (SSE) endpoints + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {Function} next - Express next function + */ +export const setupSSE = (req, res, next) => { + // Initialize SSE connection with proper lifecycle management + SSEConnectionManager.initializeConnection(req, res); + + next(); +}; \ No newline at end of file diff --git a/backend/utils/treeHelpers.js b/backend/utils/treeHelpers.js new file mode 100644 index 0000000000..9664162944 --- /dev/null +++ b/backend/utils/treeHelpers.js @@ -0,0 +1,156 @@ +// Tree-specific utility functions for controllers and services + +import { validationResult } from 'express-validator'; +import { Forest } from '../models/index.js'; +import { + handleControllerError, + sendSuccessResponse, + sendNotFoundResponse, + sendValidationErrorResponse, + buildPaginationResponse +} from './dashboardUtils.js'; + +/** + * Handle validation errors for tree operations + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {boolean} True if validation failed, false if passed + */ +export const handleValidationErrors = (req, res) => { + const errors = validationResult(req); + if (!errors.isEmpty()) { + sendValidationErrorResponse(res, errors.array()); + return true; + } + return false; +}; + +/** + * Verify forest exists and is active + * @param {string} forestId - Forest ID to verify + * @returns {Promise} Forest object if exists and active, null otherwise + */ +export const verifyForestExists = async (forestId) => { + const forest = await Forest.findById(forestId); + return (forest && forest.isActive) ? forest : null; +}; + +/** + * Transform tree data for mapping display + * @param {Array} trees - Array of tree documents + * @returns {Array} Array of transformed tree markers + */ +export const transformTreesForMapping = (trees) => { + return trees.map(tree => ({ + id: tree._id, + treeId: tree.treeId, + coordinates: tree.location.coordinates, + species: tree.species, + currentHeight: tree.currentHeight, + currentHealthStatus: tree.currentHealthStatus, + measurementCount: tree.measurements.length + })); +}; + +/** + * Create measurement data object for tree + * @param {Object} measurementBody - Request body with measurement data + * @param {string} userId - ID of user taking measurement + * @returns {Object} Formatted measurement object + */ +export const createMeasurementData = (measurementBody, userId) => { + return { + ...measurementBody, + measuredBy: userId, + measuredAt: new Date() + }; +}; + +/** + * Handle tree operation errors consistently + * @param {Object} res - Express response object + * @param {Error} error - Error object + * @param {string} operation - Operation that failed (e.g., 'Get trees') + */ +export const handleTreeError = (res, error, operation) => { + handleControllerError(res, error, `${operation} error`); +}; + +/** + * Send tree response with pagination + * @param {Object} res - Express response object + * @param {Array} trees - Tree data + * @param {number} totalCount - Total count of trees + * @param {number} page - Current page + * @param {number} limit - Items per page + * @param {string} message - Optional success message + */ +export const sendTreeListResponse = (res, trees, totalCount, page, limit, message = null) => { + const data = { + trees, + pagination: buildPaginationResponse(totalCount, page, limit) + }; + + sendSuccessResponse(res, data, message); +}; + +/** + * Send single tree response + * @param {Object} res - Express response object + * @param {Object} tree - Tree data + * @param {string} message - Optional success message + * @param {number} statusCode - HTTP status code + */ +export const sendTreeResponse = (res, tree, message = null, statusCode = 200) => { + sendSuccessResponse(res, { tree }, message, statusCode); +}; + +/** + * Send tree mapping response + * @param {Object} res - Express response object + * @param {Object} forest - Forest data + * @param {Array} trees - Transformed tree markers + */ +export const sendTreeMappingResponse = (res, forest, trees) => { + const data = { + forest: { + id: forest._id, + name: forest.name, + region: forest.region + }, + trees, + totalCount: trees.length + }; + + sendSuccessResponse(res, data); +}; + +/** + * Send measurement response + * @param {Object} res - Express response object + * @param {Object} tree - Updated tree with measurements + * @param {string} message - Success message + */ +export const sendMeasurementResponse = (res, tree, message = 'Measurement added successfully') => { + const data = { + tree, + latestMeasurement: tree.measurements[tree.measurements.length - 1] + }; + + sendSuccessResponse(res, data, message, 201); +}; + +/** + * Send tree measurements history response + * @param {Object} res - Express response object + * @param {string} treeId - Tree ID + * @param {Array} measurements - Measurements array + */ +export const sendMeasurementsHistoryResponse = (res, treeId, measurements) => { + const data = { + treeId, + measurements + }; + + sendSuccessResponse(res, data); +}; \ No newline at end of file diff --git a/backend/utils/uploadHelpers.js b/backend/utils/uploadHelpers.js new file mode 100644 index 0000000000..a96612a131 --- /dev/null +++ b/backend/utils/uploadHelpers.js @@ -0,0 +1,175 @@ +import path from 'path'; +import fs from 'fs/promises'; +import { Tree } from '../models/index.js'; +import TreeImage from '../models/TreeImage.js'; +import { + processImage, + generateThumbnail, + cleanupTempFile, + validateImageFile +} from '../middleware/upload.js'; + +/** + * Validates if a tree exists by ID + * @param {string} treeId - The tree ID to validate + * @returns {Promise} - Tree object if found, null if not found + */ +export const validateTreeExists = async (treeId) => { + try { + const tree = await Tree.findById(treeId); + return tree; + } catch (error) { + return null; + } +}; + +/** + * Validates user authorization for image operations + * @param {Object} image - The image object + * @param {Object} user - The user object from request + * @returns {boolean} - True if user is authorized + */ +export const validateImageOwnership = (image, user) => { + return image.uploadedBy.toString() === user._id.toString() || user.role === 'admin'; +}; + +/** + * Cleans up uploaded files array + * @param {Array} files - Array of file objects + */ +export const cleanupUploadedFiles = async (files) => { + if (!files) return; + + for (const file of files) { + await cleanupTempFile(file.path); + } +}; + +/** + * Generates unique filename for tree image + * @param {string} treeId - The tree ID + * @param {string} originalName - Original filename + * @returns {Object} - Object with filename and thumbnailFilename + */ +export const generateImageFilenames = (treeId, originalName) => { + const timestamp = Date.now(); + const random = Math.round(Math.random() * 1E9); + const ext = path.extname(originalName).toLowerCase(); + const filename = `tree-${treeId}-${timestamp}-${random}${ext}`; + const thumbnailFilename = `thumb-${filename}`; + + return { filename, thumbnailFilename }; +}; + +/** + * Ensures upload directories exist + * @returns {Promise} - Object with upload and thumbnail directory paths + */ +export const ensureUploadDirectories = async () => { + const uploadDir = path.join(process.cwd(), 'uploads', 'trees'); + const thumbnailDir = path.join(process.cwd(), 'uploads', 'thumbnails'); + + await fs.mkdir(uploadDir, { recursive: true }); + await fs.mkdir(thumbnailDir, { recursive: true }); + + return { uploadDir, thumbnailDir }; +}; + +/** + * Processes a single image file upload + * @param {Object} file - File object from multer + * @param {string} treeId - Tree ID + * @param {Object} options - Upload options + * @returns {Promise} - Processed image data + */ +export const processSingleImageUpload = async (file, treeId, options = {}) => { + const { + description, + imageType = 'tree_photo', + tags, + uploadedBy + } = options; + + // Validate image + const imageMetadata = await validateImageFile(file.path); + + // Generate filenames + const { filename, thumbnailFilename } = generateImageFilenames(treeId, file.originalname); + + // Ensure directories exist + const { uploadDir, thumbnailDir } = await ensureUploadDirectories(); + + const finalPath = path.join(uploadDir, filename); + const thumbnailPath = path.join(thumbnailDir, thumbnailFilename); + + // Process and save main image + await processImage(file.path, finalPath, { + width: 1200, + height: 800, + quality: 85 + }); + + // Generate thumbnail + await generateThumbnail(file.path, thumbnailPath); + + // Create TreeImage document + const treeImage = new TreeImage({ + treeId, + filename, + originalName: file.originalname, + mimeType: file.mimetype, + size: file.size, + path: finalPath, + thumbnailPath, + metadata: imageMetadata, + imageType, + description, + tags: tags ? tags.split(',').map(tag => tag.trim()) : [], + uploadedBy, + capturedAt: new Date() + }); + + await treeImage.save(); + + // Clean up temp file + await cleanupTempFile(file.path); + + return treeImage.toPublicJSON(); +}; + +/** + * Builds pagination query options + * @param {Object} query - Request query parameters + * @returns {Object} - Formatted options for database query + */ +export const buildPaginationOptions = (query) => { + const { + imageType, + page = 1, + limit = 20, + sortBy = '-capturedAt' + } = query; + + return { + imageType, + limit: parseInt(limit), + skip: (parseInt(page) - 1) * parseInt(limit), + sortBy + }; +}; + +/** + * Builds pagination response data + * @param {number} page - Current page + * @param {number} limit - Items per page + * @param {number} total - Total items + * @returns {Object} - Pagination metadata + */ +export const buildPaginationResponse = (page, limit, total) => { + return { + page: parseInt(page), + limit: parseInt(limit), + total, + pages: Math.ceil(total / parseInt(limit)) + }; +}; \ No newline at end of file diff --git a/backend/utils/userHelpers.js b/backend/utils/userHelpers.js new file mode 100644 index 0000000000..0caf4ce735 --- /dev/null +++ b/backend/utils/userHelpers.js @@ -0,0 +1,200 @@ +/** + * User service helper functions for business logic separation + */ + +import { User, RefreshToken } from '../models/index.js'; + +/** + * Fetches paginated users with filtering and sorting + * @param {Object} queryConditions - MongoDB query conditions + * @param {Object} sortParams - MongoDB sort parameters + * @param {number} skip - Number of documents to skip + * @param {number} limit - Number of documents to return + * @returns {Promise} - Users and total count + */ +export const fetchPaginatedUsers = async (queryConditions, sortParams, skip, limit) => { + const [users, totalCount] = await Promise.all([ + User.find(queryConditions) + .select('-password') + .sort(sortParams) + .skip(skip) + .limit(limit), + User.countDocuments(queryConditions) + ]); + + return { users, totalCount }; +}; + +/** + * Fetches user by ID with additional statistics + * @param {string} userId - User ID + * @returns {Promise} - User with statistics or null + */ +export const fetchUserWithStatistics = async (userId) => { + const user = await User.findById(userId).select('-password'); + if (!user) { + return null; + } + + const refreshTokenCount = await RefreshToken.countDocuments({ + userId, + isActive: true + }); + + return { + user, + statistics: { + activeTokens: refreshTokenCount + } + }; +}; + +/** + * Creates a new user after checking for existing email + * @param {Object} userData - User data object + * @returns {Promise} - Result object with user or error + */ +export const createNewUser = async (userData) => { + const { email, password, firstName, lastName, role = 'user' } = userData; + + const existingUser = await User.findByEmail(email); + if (existingUser) { + return { + success: false, + message: 'User with this email already exists', + statusCode: 409 + }; + } + + const user = new User({ + email, + password, + firstName, + lastName, + role + }); + + await user.save(); + + return { + success: true, + user: user.toJSON() + }; +}; + +/** + * Updates user fields and handles deactivation logic + * @param {string} userId - User ID to update + * @param {Object} updateData - Fields to update + * @returns {Promise} - Result object with user or error + */ +export const updateUserFields = async (userId, updateData) => { + const { firstName, lastName, role, isActive } = updateData; + + const user = await User.findById(userId); + if (!user) { + return { + success: false, + message: 'User not found', + statusCode: 404 + }; + } + + if (firstName !== undefined) user.firstName = firstName; + if (lastName !== undefined) user.lastName = lastName; + if (role !== undefined) user.role = role; + if (isActive !== undefined) user.isActive = isActive; + + await user.save(); + + if (isActive === false) { + await RefreshToken.revokeAllForUser(userId); + } + + return { + success: true, + user: user.toJSON() + }; +}; + +/** + * Deletes user and revokes all their tokens + * @param {string} userId - User ID to delete + * @returns {Promise} - Result object + */ +export const deleteUserAndTokens = async (userId) => { + const user = await User.findById(userId); + if (!user) { + return { + success: false, + message: 'User not found', + statusCode: 404 + }; + } + + await RefreshToken.revokeAllForUser(userId); + await User.findByIdAndDelete(userId); + + return { + success: true, + message: 'User deleted successfully' + }; +}; + +/** + * Revokes all refresh tokens for a user + * @param {string} userId - User ID + * @returns {Promise} - Result object with revoked count + */ +export const revokeAllUserTokens = async (userId) => { + const user = await User.findById(userId); + if (!user) { + return { + success: false, + message: 'User not found', + statusCode: 404 + }; + } + + const result = await RefreshToken.revokeAllForUser(userId); + + return { + success: true, + revokedCount: result.modifiedCount + }; +}; + +/** + * Calculates user statistics for admin dashboard + * @returns {Promise} - User statistics object + */ +export const calculateUserStatistics = async () => { + const thirtyDaysAgo = new Date(); + thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); + + const [ + totalUsers, + activeUsers, + adminUsers, + regularUsers, + recentUsers, + activeTokens + ] = await Promise.all([ + User.countDocuments(), + User.countDocuments({ isActive: true }), + User.countDocuments({ role: 'admin', isActive: true }), + User.countDocuments({ role: 'user', isActive: true }), + User.countDocuments({ createdAt: { $gte: thirtyDaysAgo } }), + RefreshToken.countDocuments({ isActive: true }) + ]); + + return { + totalUsers, + activeUsers, + inactiveUsers: totalUsers - activeUsers, + adminUsers, + regularUsers, + recentUsers, + activeTokens + }; +}; \ No newline at end of file diff --git a/backend/utils/validationHelpers.js b/backend/utils/validationHelpers.js new file mode 100644 index 0000000000..d7c78af516 --- /dev/null +++ b/backend/utils/validationHelpers.js @@ -0,0 +1,42 @@ +/** + * Validation helper utilities for user operations + */ + +import { validationResult } from 'express-validator'; +import { sendBadRequestResponse } from './responseHelpers.js'; + +/** + * Checks validation results and sends error response if validation fails + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {boolean} - Returns true if validation passed, false if failed + */ +export const handleValidationErrors = (req, res) => { + const errors = validationResult(req); + if (!errors.isEmpty()) { + res.status(400).json({ + success: false, + message: 'Validation failed', + errors: errors.array() + }); + return false; + } + return true; +}; + +/** + * Validates if user can perform action on themselves + * @param {string} currentUserId - ID of the current user + * @param {string} targetUserId - ID of the target user + * @param {string} action - Action being performed + * @returns {Object|null} - Returns error object if validation fails, null if passes + */ +export const validateSelfAction = (currentUserId, targetUserId, action) => { + if (currentUserId === targetUserId) { + return { + success: false, + message: `You cannot ${action} your own account` + }; + } + return null; +}; \ No newline at end of file From fbfc92fe0b9eefd58b6e922ec4797575b88afb1f Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 01:13:07 +0300 Subject: [PATCH 038/111] temporarily removed rate limits to test --- backend/routes/auth.js | 8 ++++---- backend/server.js | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/backend/routes/auth.js b/backend/routes/auth.js index 57b5841cf0..14537c5505 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -14,7 +14,7 @@ import { validateProfileUpdate } from '../middleware/validation.js'; import { authenticateToken } from '../middleware/auth.js'; -import { authLimiter } from '../middleware/rateLimiter.js'; +// import { authLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT const router = express.Router(); @@ -86,7 +86,7 @@ const router = express.Router(); * 429: * description: Too many requests */ -router.post('/register', authLimiter, validateRegister, register); +router.post('/register', /* authLimiter, */ validateRegister, register); // Rate limiting temporarily disabled /** * @swagger @@ -135,7 +135,7 @@ router.post('/register', authLimiter, validateRegister, register); * 429: * description: Too many requests */ -router.post('/login', authLimiter, validateLogin, login); +router.post('/login', /* authLimiter, */ validateLogin, login); // Rate limiting temporarily disabled /** @@ -203,7 +203,7 @@ router.post('/logout', logout); * 401: * description: Invalid refresh token */ -router.post('/refresh', authLimiter, refreshToken); +router.post('/refresh', /* authLimiter, */ refreshToken); // Rate limiting temporarily disabled /** * @swagger diff --git a/backend/server.js b/backend/server.js index 0b1b8c0f06..0ef85afb89 100644 --- a/backend/server.js +++ b/backend/server.js @@ -20,7 +20,7 @@ import realtimeRoutes from "./routes/realtime.js"; import bulkRoutes from "./routes/bulk.js"; // Import middleware -import { generalLimiter } from "./middleware/rateLimiter.js"; +// import { generalLimiter } from "./middleware/rateLimiter.js"; // TEMPORARILY DISABLED FOR DEVELOPMENT // Import real-time components import { RealtimeController } from "./controllers/realtimeController.js"; @@ -128,8 +128,8 @@ app.use(cors({ app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); -// Rate limiting middleware -app.use('/api/', generalLimiter); +// Rate limiting middleware - TEMPORARILY DISABLED FOR DEVELOPMENT +// app.use('/api/', generalLimiter); // TODO: RE-ENABLE IN PRODUCTION FOR SECURITY // Request logging middleware app.use((req, res, next) => { From 48dfb4d05994dfcf1f6cf86c3ac560d639ec613b Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 01:27:53 +0300 Subject: [PATCH 039/111] Add debugging to dashboard controller to diagnose database connection issue --- backend/controllers/dashboardController.js | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/backend/controllers/dashboardController.js b/backend/controllers/dashboardController.js index d71f540724..b26f94a668 100644 --- a/backend/controllers/dashboardController.js +++ b/backend/controllers/dashboardController.js @@ -1,3 +1,4 @@ +import mongoose from 'mongoose'; import { Forest, Tree, User } from '../models/index.js'; // TODO: Consider caching frequently accessed dashboard data to reduce database queries import { @@ -32,9 +33,25 @@ export const getDashboardStats = async (req, res) => { species: req.query.species }; + console.log('🔍 Dashboard stats request with filters:', filters); + // Build query conditions using utility functions const treeQuery = buildTreeQuery(filters); const forestQuery = buildForestQuery(filters); + + console.log('🔍 Built tree query:', treeQuery); + console.log('🔍 Built forest query:', forestQuery); + + // Check total documents in collection (for debugging) + const totalTreesInDB = await Tree.countDocuments({}); + const totalForestsInDB = await Forest.countDocuments({}); + console.log('🔍 Total documents in DB - Trees:', totalTreesInDB, 'Forests:', totalForestsInDB); + console.log('🔍 Database connection info:', { + readyState: mongoose.connection.readyState, + name: mongoose.connection.name, + host: mongoose.connection.host, + collection: Tree.collection.collectionName + }); // Get basic counts const [ @@ -49,6 +66,13 @@ export const getDashboardStats = async (req, res) => { User.countDocuments({ isActive: true }) ]); + console.log('📊 Basic counts:', { + totalTrees, + aliveTrees, + totalForests, + totalUsers + }); + // Get recent activity (trees planted in last 30 days) const thirtyDaysAgo = getRecentDateFilter(30); const recentActivity = await Tree.countDocuments({ From c82fe74e25bef76b88b2c9f1270dc6da804ad6df Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 01:41:34 +0300 Subject: [PATCH 040/111] Remove ALL remaining rate limiters from backend routes - dashboard, charts, uploads, bulk, realtime, users This resolves the 429 rate limiting errors causing dashboard loading failures. --- backend/routes/bulk.js | 6 +++--- backend/routes/charts.js | 6 +++--- backend/routes/dashboard.js | 6 +++--- backend/routes/realtime.js | 8 ++++---- backend/routes/uploads.js | 4 ++-- backend/routes/users.js | 10 +++++----- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/backend/routes/bulk.js b/backend/routes/bulk.js index 594425dc97..e96f136ccc 100644 --- a/backend/routes/bulk.js +++ b/backend/routes/bulk.js @@ -7,7 +7,7 @@ import { getBulkOperationStatus } from '../controllers/bulkController.js'; import { authenticateToken, requireAdmin } from '../middleware/auth.js'; -import { dataLimiter } from '../middleware/rateLimiter.js'; +// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT import { emitUserActivity } from '../middleware/realtimeEvents.js'; const router = express.Router(); @@ -15,8 +15,8 @@ const router = express.Router(); // All bulk routes require authentication router.use(authenticateToken); -// Apply rate limiting -router.use(dataLimiter); +// Apply rate limiting - TEMPORARILY DISABLED FOR DEVELOPMENT +// router.use(dataLimiter); // Apply user activity tracking router.use(emitUserActivity); diff --git a/backend/routes/charts.js b/backend/routes/charts.js index 704a7e7594..5ad6ac1c57 100644 --- a/backend/routes/charts.js +++ b/backend/routes/charts.js @@ -7,15 +7,15 @@ import { getCombinedChartData } from '../controllers/chartController.js'; import { authenticateToken } from '../middleware/auth.js'; -import { dataLimiter } from '../middleware/rateLimiter.js'; +// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT const router = express.Router(); // All chart routes require authentication router.use(authenticateToken); -// Apply data rate limiting -router.use(dataLimiter); +// Apply data rate limiting - TEMPORARILY DISABLED FOR DEVELOPMENT +// router.use(dataLimiter); /** * @swagger diff --git a/backend/routes/dashboard.js b/backend/routes/dashboard.js index f74cc5b681..21cd5aaf7e 100644 --- a/backend/routes/dashboard.js +++ b/backend/routes/dashboard.js @@ -5,15 +5,15 @@ import { getForestComparison } from '../controllers/dashboardController.js'; import { authenticateToken } from '../middleware/auth.js'; -import { dataLimiter } from '../middleware/rateLimiter.js'; +// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT const router = express.Router(); // All dashboard routes require authentication router.use(authenticateToken); -// Apply data rate limiting to prevent abuse -router.use(dataLimiter); +// Apply data rate limiting to prevent abuse - TEMPORARILY DISABLED FOR DEVELOPMENT +// router.use(dataLimiter); /** * @swagger diff --git a/backend/routes/realtime.js b/backend/routes/realtime.js index 9416fdf457..6de44f3301 100644 --- a/backend/routes/realtime.js +++ b/backend/routes/realtime.js @@ -1,7 +1,7 @@ import express from 'express'; import { authenticateToken } from '../middleware/auth.js'; import { setupSSE } from '../middleware/realtimeEvents.js'; -import { dataLimiter } from '../middleware/rateLimiter.js'; +// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT const router = express.Router(); @@ -49,7 +49,7 @@ router.use(authenticateToken); * rooms: * type: integer */ -router.get('/connection-stats', dataLimiter, (req, res) => { +router.get('/connection-stats', /* dataLimiter, */ (req, res) => { try { if (!global.realtimeController) { return res.status(503).json({ @@ -118,7 +118,7 @@ router.get('/connection-stats', dataLimiter, (req, res) => { * 403: * description: Admin privileges required */ -router.post('/broadcast', dataLimiter, (req, res) => { +router.post('/broadcast', /* dataLimiter, */ (req, res) => { try { // Only admin users can broadcast system notifications if (req.user.role !== 'admin') { @@ -306,7 +306,7 @@ router.get('/events', setupSSE, (req, res) => { * 200: * description: Test event sent successfully */ -router.post('/test-event', dataLimiter, (req, res) => { +router.post('/test-event', /* dataLimiter, */ (req, res) => { try { if (req.user.role !== 'admin') { return res.status(403).json({ diff --git a/backend/routes/uploads.js b/backend/routes/uploads.js index bcbd55e2f5..30a205d6fc 100644 --- a/backend/routes/uploads.js +++ b/backend/routes/uploads.js @@ -10,7 +10,7 @@ import { } from '../controllers/uploadController.js'; import { authenticateToken } from '../middleware/auth.js'; import { upload, handleUploadError } from '../middleware/upload.js'; -import { dataLimiter } from '../middleware/rateLimiter.js'; +// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT import { emitImageUpload, emitUserActivity } from '../middleware/realtimeEvents.js'; const router = express.Router(); @@ -19,7 +19,7 @@ const router = express.Router(); router.use(authenticateToken); // Apply rate limiting -router.use(dataLimiter); +// router.use(dataLimiter); // TEMPORARILY DISABLED FOR DEVELOPMENT /** * @swagger diff --git a/backend/routes/users.js b/backend/routes/users.js index 224ee563ea..24cff38d33 100644 --- a/backend/routes/users.js +++ b/backend/routes/users.js @@ -13,7 +13,7 @@ import { validateUserUpdate } from '../middleware/validation.js'; import { authenticateToken, requireAdmin } from '../middleware/auth.js'; -import { adminLimiter } from '../middleware/rateLimiter.js'; +// import { adminLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT const router = express.Router(); @@ -26,11 +26,11 @@ router.get('/statistics', getUserStatistics); // User CRUD operations router.get('/', getAllUsers); router.get('/:id', getUserById); -router.post('/', adminLimiter, validateUserCreate, createUser); -router.put('/:id', adminLimiter, validateUserUpdate, updateUser); -router.delete('/:id', adminLimiter, deleteUser); +router.post('/', /* adminLimiter, */ validateUserCreate, createUser); +router.put('/:id', /* adminLimiter, */ validateUserUpdate, updateUser); +router.delete('/:id', /* adminLimiter, */ deleteUser); // User token management -router.post('/:id/revoke-tokens', adminLimiter, revokeUserTokens); +router.post('/:id/revoke-tokens', /* adminLimiter, */ revokeUserTokens); export default router; \ No newline at end of file From 82c913fc8cea8233c863f8af5e3d4cb8346f88ca Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 01:42:59 +0300 Subject: [PATCH 041/111] Fix infinite request loop in dashboard hooks and remove debug logging - Add proper memoization to prevent infinite re-renders - Use useMemo for filters to avoid unnecessary effect triggers - Remove excessive console logging for performance --- frontend/src/hooks/useChartData.js | 60 +++++++++++++++++++++++++ frontend/src/hooks/useDashboardStats.js | 47 +++++++++++++++++++ frontend/src/hooks/useTreeData.js | 48 ++++++++++++++++++++ 3 files changed, 155 insertions(+) create mode 100644 frontend/src/hooks/useChartData.js create mode 100644 frontend/src/hooks/useDashboardStats.js create mode 100644 frontend/src/hooks/useTreeData.js diff --git a/frontend/src/hooks/useChartData.js b/frontend/src/hooks/useChartData.js new file mode 100644 index 0000000000..5043f9b179 --- /dev/null +++ b/frontend/src/hooks/useChartData.js @@ -0,0 +1,60 @@ +import { useState, useEffect, useCallback, useMemo } from 'react'; +import { chartAPI } from '../lib/api'; + +// Generic hook for chart data fetching +const useChartData = (apiMethod, filters = {}) => { + const [data, setData] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Memoize filters to prevent infinite re-renders + const memoizedFilters = useMemo(() => filters, [ + filters?.forestId, + filters?.startDate, + filters?.endDate, + filters?.species + ]); + + const fetchData = useCallback(async () => { + try { + setLoading(true); + setError(null); + + const response = await apiMethod(memoizedFilters); + setData(response.data); + } catch (err) { + console.error('Error fetching chart data:', err); + setError(err.message || 'Failed to fetch chart data'); + } finally { + setLoading(false); + } + }, [apiMethod, memoizedFilters]); + + useEffect(() => { + fetchData(); + }, [fetchData]); + + const refresh = useCallback(() => { + fetchData(); + }, [fetchData]); + + return { + data, + loading, + error, + refresh + }; +}; + +// Specific hooks for each chart type +export const useSurvivalRateData = (filters = {}) => { + return useChartData(chartAPI.getSurvivalRate, filters); +}; + +export const useHeightGrowthData = (filters = {}) => { + return useChartData(chartAPI.getHeightGrowth, filters); +}; + +export const useCO2AbsorptionData = (filters = {}) => { + return useChartData(chartAPI.getCO2Absorption, filters); +}; \ No newline at end of file diff --git a/frontend/src/hooks/useDashboardStats.js b/frontend/src/hooks/useDashboardStats.js new file mode 100644 index 0000000000..88e4e4aba4 --- /dev/null +++ b/frontend/src/hooks/useDashboardStats.js @@ -0,0 +1,47 @@ +import { useState, useEffect, useCallback, useMemo } from 'react'; +import { dashboardAPI } from '../lib/api'; + +export const useDashboardStats = (filters = {}) => { + const [stats, setStats] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Memoize filters to prevent infinite re-renders + const memoizedFilters = useMemo(() => filters, [ + filters?.forestId, + filters?.startDate, + filters?.endDate, + filters?.species + ]); + + const fetchStats = useCallback(async () => { + try { + setLoading(true); + setError(null); + + const response = await dashboardAPI.getStats(memoizedFilters); + setStats(response.data); + } catch (err) { + console.error('Error fetching dashboard stats:', err); + setError(err.message || 'Failed to fetch dashboard statistics'); + } finally { + setLoading(false); + } + }, [memoizedFilters]); + + // Fetch data when filters change + useEffect(() => { + fetchStats(); + }, [fetchStats]); + + const refresh = useCallback(() => { + fetchStats(); + }, [fetchStats]); + + return { + stats, + loading, + error, + refresh + }; +}; \ No newline at end of file diff --git a/frontend/src/hooks/useTreeData.js b/frontend/src/hooks/useTreeData.js new file mode 100644 index 0000000000..50ea8485ed --- /dev/null +++ b/frontend/src/hooks/useTreeData.js @@ -0,0 +1,48 @@ +import { useState, useEffect, useCallback, useMemo } from 'react'; +import { treeAPI } from '../lib/api'; + +export const useTreeData = (filters = {}) => { + const [trees, setTrees] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Memoize filters to prevent infinite re-renders + const memoizedFilters = useMemo(() => filters, [ + filters?.forestId, + filters?.startDate, + filters?.endDate, + filters?.species, + filters?.page, + filters?.limit + ]); + + const fetchTrees = useCallback(async () => { + try { + setLoading(true); + setError(null); + + const response = await treeAPI.getAll(memoizedFilters); + setTrees(response.data || []); + } catch (err) { + console.error('Error fetching tree data:', err); + setError(err.message || 'Failed to fetch tree data'); + } finally { + setLoading(false); + } + }, [memoizedFilters]); + + useEffect(() => { + fetchTrees(); + }, [fetchTrees]); + + const refresh = useCallback(() => { + fetchTrees(); + }, [fetchTrees]); + + return { + trees, + loading, + error, + refresh + }; +}; \ No newline at end of file From 3e1b55e1b5d931026cb80c304170310d44f35afc Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 20:49:14 +0200 Subject: [PATCH 042/111] Trying to fix login auth --- ...Page-Bc5ol_Rn.js => AdminPage-DQw11YmQ.js} | 2 +- ...rntlwBm.js => ChartComponents-CUdy75Zt.js} | 2 +- ...sLchHfDj.js => DarkModeToggle-DNnaM-T2.js} | 2 +- .../dist/assets/DashboardPage-BXlBG99y.js | 69 ++++++++ .../dist/assets/DashboardPage-BnZglKQh.js | 69 -------- ...ges-D4z_BlyV.js => ErrorPages-pitdcj5q.js} | 2 +- ...n-Y3IlBTFt.js => ExportButton-BvRt6B34.js} | 2 +- ...r-DzCm_NrU.js => FilterHeader-CBw4AnG_.js} | 2 +- ...s-5NQybTAT.js => FormElements-RQ7qOmSO.js} | 2 +- ...ton-DIc-CK1Q.js => IconButton-CsSKj4cW.js} | 2 +- ...ge-QWDx4awI.js => LandingPage-Dc2ID8Hk.js} | 2 +- ...Page-Ckb0MyS_.js => LoginPage-LyjmzT4O.js} | 2 +- ...apPage-CWavP_xM.js => MapPage-BV2c4X5p.js} | 2 +- ...bar-yNxbJbqT.js => MapSidebar-DZT3HTLm.js} | 2 +- ...{Navbar-DOE0P8dm.js => Navbar-BJVIhaUA.js} | 2 +- ...-dcNbels6.js => PasswordInput-BcWvIN9N.js} | 2 +- ...e-C1DYj1NC.js => RegisterPage-D_5fYFtm.js} | 2 +- .../{Table-BCdM5JW5.js => Table-CZfmBv9T.js} | 2 +- ...xWzGm5.js => TreeDetailLayout-Cc_P7nbu.js} | 2 +- ...D6Enxj1V.js => TreeDetailPage-De7lDWqg.js} | 2 +- frontend/dist/assets/index-BDpfdlnl.css | 1 - frontend/dist/assets/index-CnE9ecPt.css | 1 + .../{index-DJ39NcK9.js => index-Dzr7PBfw.js} | 4 +- ...3.js => useKeyboardNavigation-BRnXQ3uS.js} | 2 +- frontend/dist/index.html | 4 +- .../components/charts/AverageHeightChart.jsx | 59 +++++-- .../components/charts/CO2AbsorptionChart.jsx | 59 +++++-- .../components/charts/SurvivalRateChart.jsx | 46 +++++- frontend/src/components/ui/ExportButton.jsx | 6 +- frontend/src/lib/services/dashboardService.js | 8 +- frontend/src/pages/DashboardPage.jsx | 155 +++++++++++------- 31 files changed, 320 insertions(+), 199 deletions(-) rename frontend/dist/assets/{AdminPage-Bc5ol_Rn.js => AdminPage-DQw11YmQ.js} (97%) rename frontend/dist/assets/{ChartComponents-BrntlwBm.js => ChartComponents-CUdy75Zt.js} (96%) rename frontend/dist/assets/{DarkModeToggle-sLchHfDj.js => DarkModeToggle-DNnaM-T2.js} (91%) create mode 100644 frontend/dist/assets/DashboardPage-BXlBG99y.js delete mode 100644 frontend/dist/assets/DashboardPage-BnZglKQh.js rename frontend/dist/assets/{ErrorPages-D4z_BlyV.js => ErrorPages-pitdcj5q.js} (91%) rename frontend/dist/assets/{ExportButton-Y3IlBTFt.js => ExportButton-BvRt6B34.js} (99%) rename frontend/dist/assets/{FilterHeader-DzCm_NrU.js => FilterHeader-CBw4AnG_.js} (99%) rename frontend/dist/assets/{FormElements-5NQybTAT.js => FormElements-RQ7qOmSO.js} (98%) rename frontend/dist/assets/{IconButton-DIc-CK1Q.js => IconButton-CsSKj4cW.js} (82%) rename frontend/dist/assets/{LandingPage-QWDx4awI.js => LandingPage-Dc2ID8Hk.js} (94%) rename frontend/dist/assets/{LoginPage-Ckb0MyS_.js => LoginPage-LyjmzT4O.js} (96%) rename frontend/dist/assets/{MapPage-CWavP_xM.js => MapPage-BV2c4X5p.js} (99%) rename frontend/dist/assets/{MapSidebar-yNxbJbqT.js => MapSidebar-DZT3HTLm.js} (98%) rename frontend/dist/assets/{Navbar-DOE0P8dm.js => Navbar-BJVIhaUA.js} (90%) rename frontend/dist/assets/{PasswordInput-dcNbels6.js => PasswordInput-BcWvIN9N.js} (97%) rename frontend/dist/assets/{RegisterPage-C1DYj1NC.js => RegisterPage-D_5fYFtm.js} (97%) rename frontend/dist/assets/{Table-BCdM5JW5.js => Table-CZfmBv9T.js} (97%) rename frontend/dist/assets/{TreeDetailLayout-CKxWzGm5.js => TreeDetailLayout-Cc_P7nbu.js} (98%) rename frontend/dist/assets/{TreeDetailPage-D6Enxj1V.js => TreeDetailPage-De7lDWqg.js} (87%) delete mode 100644 frontend/dist/assets/index-BDpfdlnl.css create mode 100644 frontend/dist/assets/index-CnE9ecPt.css rename frontend/dist/assets/{index-DJ39NcK9.js => index-Dzr7PBfw.js} (97%) rename frontend/dist/assets/{useKeyboardNavigation-C5b08Ak3.js => useKeyboardNavigation-BRnXQ3uS.js} (97%) diff --git a/frontend/dist/assets/AdminPage-Bc5ol_Rn.js b/frontend/dist/assets/AdminPage-DQw11YmQ.js similarity index 97% rename from frontend/dist/assets/AdminPage-Bc5ol_Rn.js rename to frontend/dist/assets/AdminPage-DQw11YmQ.js index 3bedd7649f..8bd37be2b9 100644 --- a/frontend/dist/assets/AdminPage-Bc5ol_Rn.js +++ b/frontend/dist/assets/AdminPage-DQw11YmQ.js @@ -1,4 +1,4 @@ -import{j as e,n as k,r as d,g as I,u as v,d as a,N as E}from"./index-DJ39NcK9.js";import{E as y,T as M,a as N,b as S,c as T,d as m,S as O,e as P,f as D,g as U}from"./Table-BCdM5JW5.js";import{F as _,S as W,a as z,A as H,P as B}from"./FormElements-5NQybTAT.js";import"./vendor-BtP0CW_r.js";const p={CREATE:"CREATE",UPDATE:"UPDATE",DELETE:"DELETE",LOGIN:"LOGIN",LOGOUT:"LOGOUT"},F=[{value:"",label:"All Actions"},{value:p.CREATE,label:"Create"},{value:p.UPDATE,label:"Update"},{value:p.DELETE,label:"Delete"},{value:p.LOGIN,label:"Login"},{value:p.LOGOUT,label:"Logout"}],w=10,R=({searchTerm:t,setSearchTerm:s,actionFilter:r,setActionFilter:o})=>e.jsxs(_,{children:[e.jsx(W,{type:"text",placeholder:"Search by user, action, or details...",value:t,onChange:n=>s(n.target.value)}),e.jsx(z,{value:r,onChange:n=>o(n.target.value),children:F.map(n=>e.jsx("option",{value:n.value,children:n.label},n.value))})]}),G={ASC:"asc"},f={NONE:"⇅",ASC:"↑",DESC:"↓"},Z=(t,s,r)=>s!==t?f.NONE:r===G.ASC?f.ASC:f.DESC,A=({field:t,sortField:s,sortDirection:r,onSort:o,children:n})=>e.jsxs(T,{onClick:()=>o(t),children:[n," ",e.jsx(O,{children:Z(t,s,r)})]}),K=({sortField:t,sortDirection:s,onSort:r})=>e.jsx(N,{children:e.jsxs(S,{children:[e.jsx(A,{field:"timestamp",sortField:t,sortDirection:s,onSort:r,children:"Timestamp"}),e.jsx(A,{field:"user",sortField:t,sortDirection:s,onSort:r,children:"User"}),e.jsx(A,{field:"action",sortField:t,sortDirection:s,onSort:r,children:"Action"}),e.jsx(A,{field:"resource",sortField:t,sortDirection:s,onSort:r,children:"Resource"}),e.jsx(T,{children:"Details"}),e.jsx(T,{children:"IP Address"})]})}),V=({log:t})=>e.jsxs(S,{children:[e.jsx(m,{children:k(t.timestamp)}),e.jsx(m,{children:t.user}),e.jsx(m,{children:e.jsx(H,{action:t.action,children:t.action})}),e.jsx(m,{children:t.resource}),e.jsx(m,{children:t.details}),e.jsx(m,{children:t.ipAddress})]},t.id),X=({logs:t,sortField:s,sortDirection:r,onSort:o})=>t.length===0?e.jsx(y,{children:e.jsx("p",{children:"No audit logs found matching your criteria."})}):e.jsxs(M,{children:[e.jsx(K,{sortField:s,sortDirection:r,onSort:o}),e.jsx("tbody",{children:t.map(n=>e.jsx(V,{log:n},n.id))})]}),$=[{id:1,timestamp:"2024-01-15T10:30:00Z",user:"admin@nanwa.com",action:"CREATE",resource:"Tree",resourceId:"tree_001",details:"Created new tree record for Forest A",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:2,timestamp:"2024-01-15T10:25:00Z",user:"user@nanwa.com",action:"UPDATE",resource:"Tree",resourceId:"tree_002",details:"Updated height measurement from 2.3m to 2.4m",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:3,timestamp:"2024-01-15T10:20:00Z",user:"admin@nanwa.com",action:"DELETE",resource:"Forest",resourceId:"forest_003",details:"Deleted forest record due to data cleanup",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:4,timestamp:"2024-01-15T10:15:00Z",user:"user@nanwa.com",action:"LOGIN",resource:"Authentication",resourceId:"auth_session_001",details:"User logged in successfully",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:5,timestamp:"2024-01-15T10:10:00Z",user:"admin@nanwa.com",action:"UPDATE",resource:"User",resourceId:"user_001",details:"Updated user permissions to admin level",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:6,timestamp:"2024-01-15T10:05:00Z",user:"system",action:"CREATE",resource:"Measurement",resourceId:"measurement_001",details:"Automated measurement recorded for tree batch",ipAddress:"127.0.0.1",userAgent:"System/1.0"},{id:7,timestamp:"2024-01-15T10:00:00Z",user:"user@nanwa.com",action:"LOGOUT",resource:"Authentication",resourceId:"auth_session_002",details:"User logged out",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}],q=()=>{const[t,s]=d.useState([]),[r,o]=d.useState(!1),n=async()=>{o(!0);try{await new Promise(i=>setTimeout(i,500)),s($)}catch(i){console.error("Failed to fetch audit logs:",i)}finally{o(!1)}};return d.useEffect(()=>{n()},[]),{auditLogs:t,loading:r,refetchAuditLogs:n}},J=t=>{const[s,r]=d.useState(""),[o,n]=d.useState(""),[i,h]=d.useState("timestamp"),[l,g]=d.useState("desc"),b=d.useMemo(()=>t.filter(c=>{const x=s===""||c.user.toLowerCase().includes(s.toLowerCase())||c.details.toLowerCase().includes(s.toLowerCase())||c.resource.toLowerCase().includes(s.toLowerCase()),u=o===""||c.action===o;return x&&u}).sort((c,x)=>{const u=c[i],j=x[i];return l==="asc"?u>j?1:-1:u{i===c?g(l==="asc"?"desc":"asc"):(h(c),g("desc"))}}},Q=(t,s=w)=>{const[r,o]=d.useState(1),n=Math.ceil(t.length/s),i=(r-1)*s,h=t.slice(i,i+s);return d.useEffect(()=>{o(1)},[t.length]),{currentPage:r,setCurrentPage:o,totalPages:n,startIndex:i,paginatedData:h,pageSize:s}},Y=()=>{const{auditLogs:t,loading:s}=q(),{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i,sortField:h,sortDirection:l,filteredAndSortedLogs:g,handleSort:b}=J(t),{currentPage:L,setCurrentPage:c,totalPages:x,startIndex:u,paginatedData:j,pageSize:C}=Q(g,w);return e.jsxs(P,{children:[e.jsxs(D,{children:[e.jsx(U,{children:"Audit Log"}),e.jsx(R,{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i})]}),s?e.jsx(I,{text:"Loading audit logs..."}):e.jsx(X,{logs:j,sortField:h,sortDirection:l,onSort:b}),e.jsx(B,{currentPage:L,totalPages:x,startIndex:u,pageSize:C,totalItems:g.length,onPageChange:c})]})},ee=a.header` +import{j as e,n as k,r as d,e as I,u as v,d as a,N as E}from"./index-Dzr7PBfw.js";import{E as y,T as M,a as N,b as S,c as T,d as m,S as O,e as P,f as D,g as U}from"./Table-CZfmBv9T.js";import{F as _,S as W,a as z,A as H,P as B}from"./FormElements-RQ7qOmSO.js";import"./vendor-BtP0CW_r.js";const p={CREATE:"CREATE",UPDATE:"UPDATE",DELETE:"DELETE",LOGIN:"LOGIN",LOGOUT:"LOGOUT"},F=[{value:"",label:"All Actions"},{value:p.CREATE,label:"Create"},{value:p.UPDATE,label:"Update"},{value:p.DELETE,label:"Delete"},{value:p.LOGIN,label:"Login"},{value:p.LOGOUT,label:"Logout"}],w=10,R=({searchTerm:t,setSearchTerm:s,actionFilter:r,setActionFilter:o})=>e.jsxs(_,{children:[e.jsx(W,{type:"text",placeholder:"Search by user, action, or details...",value:t,onChange:n=>s(n.target.value)}),e.jsx(z,{value:r,onChange:n=>o(n.target.value),children:F.map(n=>e.jsx("option",{value:n.value,children:n.label},n.value))})]}),G={ASC:"asc"},f={NONE:"⇅",ASC:"↑",DESC:"↓"},Z=(t,s,r)=>s!==t?f.NONE:r===G.ASC?f.ASC:f.DESC,A=({field:t,sortField:s,sortDirection:r,onSort:o,children:n})=>e.jsxs(T,{onClick:()=>o(t),children:[n," ",e.jsx(O,{children:Z(t,s,r)})]}),K=({sortField:t,sortDirection:s,onSort:r})=>e.jsx(N,{children:e.jsxs(S,{children:[e.jsx(A,{field:"timestamp",sortField:t,sortDirection:s,onSort:r,children:"Timestamp"}),e.jsx(A,{field:"user",sortField:t,sortDirection:s,onSort:r,children:"User"}),e.jsx(A,{field:"action",sortField:t,sortDirection:s,onSort:r,children:"Action"}),e.jsx(A,{field:"resource",sortField:t,sortDirection:s,onSort:r,children:"Resource"}),e.jsx(T,{children:"Details"}),e.jsx(T,{children:"IP Address"})]})}),V=({log:t})=>e.jsxs(S,{children:[e.jsx(m,{children:k(t.timestamp)}),e.jsx(m,{children:t.user}),e.jsx(m,{children:e.jsx(H,{action:t.action,children:t.action})}),e.jsx(m,{children:t.resource}),e.jsx(m,{children:t.details}),e.jsx(m,{children:t.ipAddress})]},t.id),X=({logs:t,sortField:s,sortDirection:r,onSort:o})=>t.length===0?e.jsx(y,{children:e.jsx("p",{children:"No audit logs found matching your criteria."})}):e.jsxs(M,{children:[e.jsx(K,{sortField:s,sortDirection:r,onSort:o}),e.jsx("tbody",{children:t.map(n=>e.jsx(V,{log:n},n.id))})]}),$=[{id:1,timestamp:"2024-01-15T10:30:00Z",user:"admin@nanwa.com",action:"CREATE",resource:"Tree",resourceId:"tree_001",details:"Created new tree record for Forest A",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:2,timestamp:"2024-01-15T10:25:00Z",user:"user@nanwa.com",action:"UPDATE",resource:"Tree",resourceId:"tree_002",details:"Updated height measurement from 2.3m to 2.4m",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:3,timestamp:"2024-01-15T10:20:00Z",user:"admin@nanwa.com",action:"DELETE",resource:"Forest",resourceId:"forest_003",details:"Deleted forest record due to data cleanup",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:4,timestamp:"2024-01-15T10:15:00Z",user:"user@nanwa.com",action:"LOGIN",resource:"Authentication",resourceId:"auth_session_001",details:"User logged in successfully",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:5,timestamp:"2024-01-15T10:10:00Z",user:"admin@nanwa.com",action:"UPDATE",resource:"User",resourceId:"user_001",details:"Updated user permissions to admin level",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:6,timestamp:"2024-01-15T10:05:00Z",user:"system",action:"CREATE",resource:"Measurement",resourceId:"measurement_001",details:"Automated measurement recorded for tree batch",ipAddress:"127.0.0.1",userAgent:"System/1.0"},{id:7,timestamp:"2024-01-15T10:00:00Z",user:"user@nanwa.com",action:"LOGOUT",resource:"Authentication",resourceId:"auth_session_002",details:"User logged out",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}],q=()=>{const[t,s]=d.useState([]),[r,o]=d.useState(!1),n=async()=>{o(!0);try{await new Promise(i=>setTimeout(i,500)),s($)}catch(i){console.error("Failed to fetch audit logs:",i)}finally{o(!1)}};return d.useEffect(()=>{n()},[]),{auditLogs:t,loading:r,refetchAuditLogs:n}},J=t=>{const[s,r]=d.useState(""),[o,n]=d.useState(""),[i,h]=d.useState("timestamp"),[l,g]=d.useState("desc"),b=d.useMemo(()=>t.filter(c=>{const x=s===""||c.user.toLowerCase().includes(s.toLowerCase())||c.details.toLowerCase().includes(s.toLowerCase())||c.resource.toLowerCase().includes(s.toLowerCase()),u=o===""||c.action===o;return x&&u}).sort((c,x)=>{const u=c[i],j=x[i];return l==="asc"?u>j?1:-1:u{i===c?g(l==="asc"?"desc":"asc"):(h(c),g("desc"))}}},Q=(t,s=w)=>{const[r,o]=d.useState(1),n=Math.ceil(t.length/s),i=(r-1)*s,h=t.slice(i,i+s);return d.useEffect(()=>{o(1)},[t.length]),{currentPage:r,setCurrentPage:o,totalPages:n,startIndex:i,paginatedData:h,pageSize:s}},Y=()=>{const{auditLogs:t,loading:s}=q(),{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i,sortField:h,sortDirection:l,filteredAndSortedLogs:g,handleSort:b}=J(t),{currentPage:L,setCurrentPage:c,totalPages:x,startIndex:u,paginatedData:j,pageSize:C}=Q(g,w);return e.jsxs(P,{children:[e.jsxs(D,{children:[e.jsx(U,{children:"Audit Log"}),e.jsx(R,{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i})]}),s?e.jsx(I,{text:"Loading audit logs..."}):e.jsx(X,{logs:j,sortField:h,sortDirection:l,onSort:b}),e.jsx(B,{currentPage:L,totalPages:x,startIndex:u,pageSize:C,totalItems:g.length,onPageChange:c})]})},ee=a.header` background: white; border-bottom: 1px solid #e5e7eb; padding: 1rem 0; diff --git a/frontend/dist/assets/ChartComponents-BrntlwBm.js b/frontend/dist/assets/ChartComponents-CUdy75Zt.js similarity index 96% rename from frontend/dist/assets/ChartComponents-BrntlwBm.js rename to frontend/dist/assets/ChartComponents-CUdy75Zt.js index f3e89acaa7..0543f7dcdd 100644 --- a/frontend/dist/assets/ChartComponents-BrntlwBm.js +++ b/frontend/dist/assets/ChartComponents-CUdy75Zt.js @@ -1,4 +1,4 @@ -import{j as n,d as r}from"./index-DJ39NcK9.js";const j=r.div` +import{j as n,d as r}from"./index-Dzr7PBfw.js";const j=r.div` background: white; border-radius: 0.75rem; padding: 1.5rem; diff --git a/frontend/dist/assets/DarkModeToggle-sLchHfDj.js b/frontend/dist/assets/DarkModeToggle-DNnaM-T2.js similarity index 91% rename from frontend/dist/assets/DarkModeToggle-sLchHfDj.js rename to frontend/dist/assets/DarkModeToggle-DNnaM-T2.js index ab50e9e02f..92fef8eb9f 100644 --- a/frontend/dist/assets/DarkModeToggle-sLchHfDj.js +++ b/frontend/dist/assets/DarkModeToggle-DNnaM-T2.js @@ -1 +1 @@ -import{j as r,e as i,f as a}from"./index-DJ39NcK9.js";import{I as l}from"./IconButton-DIc-CK1Q.js";const d=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),c=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})}),m=({className:t="",size:o="md"})=>{const{isDarkMode:e,toggleDarkMode:s}=i(),n={sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6"};return r.jsxs(l,{onClick:s,className:a("relative bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300",t),size:o,"aria-label":e?"Switch to light mode":"Switch to dark mode",title:e?"Switch to light mode":"Switch to dark mode",children:[r.jsx(d,{className:a(n[o],"transition-all duration-200",e?"rotate-90 scale-0":"rotate-0 scale-100")}),r.jsx(c,{className:a(n[o],"absolute transition-all duration-200",e?"rotate-0 scale-100":"-rotate-90 scale-0")})]})};export{m as D}; +import{j as r,f as i,g as a}from"./index-Dzr7PBfw.js";import{I as l}from"./IconButton-CsSKj4cW.js";const d=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),c=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})}),m=({className:t="",size:o="md"})=>{const{isDarkMode:e,toggleDarkMode:s}=i(),n={sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6"};return r.jsxs(l,{onClick:s,className:a("relative bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300",t),size:o,"aria-label":e?"Switch to light mode":"Switch to dark mode",title:e?"Switch to light mode":"Switch to dark mode",children:[r.jsx(d,{className:a(n[o],"transition-all duration-200",e?"rotate-90 scale-0":"rotate-0 scale-100")}),r.jsx(c,{className:a(n[o],"absolute transition-all duration-200",e?"rotate-0 scale-100":"-rotate-90 scale-0")})]})};export{m as D}; diff --git a/frontend/dist/assets/DashboardPage-BXlBG99y.js b/frontend/dist/assets/DashboardPage-BXlBG99y.js new file mode 100644 index 0000000000..c8b140b9d0 --- /dev/null +++ b/frontend/dist/assets/DashboardPage-BXlBG99y.js @@ -0,0 +1,69 @@ +var _y=Object.defineProperty;var My=(e,t,r)=>t in e?_y(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ca=(e,t,r)=>My(e,typeof t!="symbol"?t+"":t,r);import{A as Hh,u as Yh,j as S,r as m,c as H,b as Dy,e as Ei}from"./index-Dzr7PBfw.js";import{C as xt,a as wt,b as Pt,c as Iy,d as qu,e as Ny}from"./ChartComponents-CUdy75Zt.js";import{g as kt,r as zu}from"./vendor-BtP0CW_r.js";import{G as $y}from"./FilterHeader-CBw4AnG_.js";import{E as Ry}from"./ExportButton-BvRt6B34.js";import{D as Ly}from"./DarkModeToggle-DNnaM-T2.js";import"./IconButton-CsSKj4cW.js";const pt=new Hh,By={getAll:(e={})=>pt.get("/trees",e),getById:e=>pt.get(`/trees/${e}`),getMeasurements:e=>pt.get(`/trees/${e}/measurements`),getByForest:e=>pt.get(`/trees/forest/${e}`),create:e=>pt.post("/trees",e),update:(e,t)=>pt.put(`/trees/${e}`,t),delete:e=>pt.delete(`/trees/${e}`),addMeasurement:(e,t)=>pt.post(`/trees/${e}/measurements`,t),markDead:e=>pt.patch(`/trees/${e}/mark-dead`)},Wn=new Hh,Ky={getStats:(e={})=>Wn.get("/dashboard/stats",e)},Fu={getSurvivalRate:(e={})=>Wn.get("/charts/survival-rate",e),getHeightGrowth:(e={})=>Wn.get("/charts/height-growth",e),getCO2Absorption:(e={})=>Wn.get("/charts/co2-absorption",e)},qy=({onToggleSidebar:e})=>{const{user:t,logout:r,isAdmin:n}=Yh(),i=async()=>{await r()};return S.jsx("header",{className:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4 sticky top-0 z-50",children:S.jsxs("div",{className:"flex items-center justify-between",children:[S.jsxs("div",{className:"flex items-center gap-4",children:[S.jsx("button",{onClick:e,"aria-label":"Toggle menu",className:"lg:hidden flex items-center justify-center w-10 h-10 bg-none border-none cursor-pointer rounded-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-500 focus:outline-offset-2",children:S.jsx("svg",{className:"w-6 h-6 text-gray-700 dark:text-gray-300",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})}),S.jsx("h1",{className:"text-2xl font-bold text-green-600 dark:text-green-400 m-0",children:"Nanwa Dashboard"})]}),S.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[S.jsxs("span",{className:"text-gray-700 dark:text-gray-300",children:["Welcome, ",S.jsx("strong",{children:(t==null?void 0:t.firstName)||(t==null?void 0:t.name)}),n()&&S.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 text-xs rounded-full font-bold",children:"Admin"})]}),S.jsx(Ly,{size:"sm"}),S.jsxs("button",{onClick:i,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-red-600 dark:hover:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/30 rounded-lg transition-colors",title:"Logout",children:[S.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),"Logout"]})]})]})})},zy=({isOpen:e,onClose:t})=>{const{isAdmin:r}=Yh();return S.jsxs(S.Fragment,{children:[S.jsx("div",{className:`lg:hidden fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${e?"opacity-100 visible":"opacity-0 invisible"}`,onClick:t}),S.jsx("aside",{className:` + bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 w-full lg:w-64 fixed lg:sticky top-0 h-screen overflow-y-auto z-50 lg:z-10 transform transition-transform duration-300 ease-in-out + ${e?"translate-x-0":"-translate-x-full lg:translate-x-0"} + `,children:S.jsx("div",{className:"p-6",children:S.jsxs("nav",{className:"space-y-2",children:[S.jsxs("a",{href:"#dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30 rounded-lg",children:[S.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),S.jsxs("a",{href:"/map",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[S.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),S.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[S.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),r()&&S.jsxs("a",{href:"/admin",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[S.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})})]})},kn=({icon:e,title:t,value:r,color:n="green"})=>{const i={green:"bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400",blue:"bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400",yellow:"bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400",purple:"bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400"};return S.jsx("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:S.jsxs("div",{className:"flex items-center",children:[S.jsx("div",{className:`p-2 rounded-lg ${i[n]}`,children:e}),S.jsxs("div",{className:"ml-4",children:[S.jsx("p",{className:"text-sm font-medium text-gray-600 dark:text-gray-300",children:t}),S.jsx("p",{className:"text-2xl font-bold text-gray-900 dark:text-white",children:r})]})]})})},Fy=()=>S.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:[S.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:"Forest Overview"}),S.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-4",children:"Your forests are performing excellently with strong growth indicators and high survival rates."}),S.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[S.jsxs("div",{children:[S.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Recent Activity"}),S.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full mr-3"}),"New measurements recorded for Forest A"]}),S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-blue-500 rounded-full mr-3"}),"Survival rate improved by 2.3%"]}),S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-purple-500 rounded-full mr-3"}),"CO₂ absorption increased by 15%"]})]})]}),S.jsxs("div",{children:[S.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Next Actions"}),S.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-yellow-500 rounded-full mr-3"}),"Schedule maintenance for Forest B"]}),S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-orange-500 rounded-full mr-3"}),"Review growth data for Q4 report"]}),S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-red-500 rounded-full mr-3"}),"Address low-performing areas in Forest C"]})]})]})]})]});var fa={},da={},Yl;function Wy(){return Yl||(Yl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==="__proto__"}e.isUnsafeProperty=t}(da)),da}var ha={},Gl;function Gh(){return Gl||(Gl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){switch(typeof r){case"number":case"symbol":return!1;case"string":return r.includes(".")||r.includes("[")||r.includes("]")}}e.isDeepKey=t}(ha)),ha}var va={},Vl;function Vh(){return Vl||(Vl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var n;return typeof r=="string"||typeof r=="symbol"?r:Object.is((n=r==null?void 0:r.valueOf)==null?void 0:n.call(r),-0)?"-0":String(r)}e.toKey=t}(va)),va}var pa={},Xl;function Wu(){return Xl||(Xl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){const n=[],i=r.length;if(i===0)return n;let a=0,o="",u="",l=!1;for(r.charCodeAt(0)===46&&(n.push(""),a++);ae===0?0:e>0?1:-1,We=e=>typeof e=="number"&&e!=+e,tr=e=>typeof e=="string"&&e.indexOf("%")===e.length-1,D=e=>(typeof e=="number"||e instanceof Number)&&!We(e),dt=e=>D(e)||typeof e=="string",Xy=0,cr=e=>{var t=++Xy;return"".concat(e||"").concat(t)},ke=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!D(t)&&typeof t!="string")return n;var a;if(tr(t)){if(r==null)return n;var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return We(a)&&(a=n),i&&r!=null&&a>r&&(a=r),a},Xh=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nD(e)&&D(t)?r=>e+r*(t-e):()=>t;function Zh(e,t,r){if(!(!e||!e.length))return e.find(n=>n&&(typeof t=="function"?t(n):qt(n,t))===r)}var J=e=>e===null||typeof e>"u",pn=e=>J(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1)),Zy=["viewBox","children"],Jy=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],tc=["points","pathLength"],ya={svg:Zy,polygon:tc,polyline:tc},Hu=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],Yu=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(m.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{Hu.includes(i)&&(n[i]=a=>r[i](r,a))}),n},Qy=(e,t,r)=>n=>(e(t,r,n),null),ji=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var a=e[i];Hu.includes(i)&&typeof a=="function"&&(n||(n={}),n[i]=Qy(a,t,r))}),n},rc=e=>typeof e=="string"?e:e?e.displayName||e.name||"Component":"",nc=null,ba=null,Jh=e=>{if(e===nc&&Array.isArray(ba))return ba;var t=[];return m.Children.forEach(e,r=>{J(r)||(Vy.isFragment(r)?t=t.concat(Jh(r.props.children)):t.push(r))}),ba=t,nc=e,t};function mn(e,t){var r=[],n=[];return Array.isArray(t)?n=t.map(i=>rc(i)):n=[rc(t)],Jh(e).forEach(i=>{var a=qt(i,"type.displayName")||qt(i,"type.name");n.indexOf(a)!==-1&&r.push(i)}),r}var Qh=e=>e&&typeof e=="object"&&"clipDot"in e?!!e.clipDot:!0,e0=(e,t,r,n)=>{var i,a=(i=n&&(ya==null?void 0:ya[n]))!==null&&i!==void 0?i:[];return t.startsWith("data-")||typeof e!="function"&&(n&&a.includes(t)||Jy.includes(t))||r&&Hu.includes(t)},z=(e,t,r)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var n=e;if(m.isValidElement(e)&&(n=e.props),typeof n!="object"&&typeof n!="function")return null;var i={};return Object.keys(n).forEach(a=>{var o;e0((o=n)===null||o===void 0?void 0:o[a],a,t,r)&&(i[a]=n[a])}),i},t0=["children","width","height","viewBox","className","style","title","desc"];function Yo(){return Yo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,width:n,height:i,viewBox:a,className:o,style:u,title:l,desc:c}=e,s=r0(e,t0),f=a||{width:n,height:i,x:0,y:0},d=H("recharts-surface",o);return m.createElement("svg",Yo({},z(s,!0,"svg"),{className:d,width:n,height:i,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height),ref:t}),m.createElement("title",null,l),m.createElement("desc",null,c),r)}),i0=["children","className"];function Go(){return Go=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,className:n}=e,i=a0(e,i0),a=H("recharts-layer",n);return m.createElement("g",Go({className:a},z(i,!0),{ref:t}),r)}),u0=m.createContext(null);function ee(e){return function(){return e}}const tv=Math.cos,Hn=Math.sin,lt=Math.sqrt,Yn=Math.PI,Ti=2*Yn,Vo=Math.PI,Xo=2*Vo,Jt=1e-6,s0=Xo-Jt;function rv(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return rv;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;iJt)if(!(Math.abs(f*l-c*s)>Jt)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let h=n-o,v=i-u,p=l*l+c*c,g=h*h+v*v,y=Math.sqrt(p),b=Math.sqrt(d),x=a*Math.tan((Vo-Math.acos((p+d-g)/(2*y*b)))/2),P=x/b,w=x/y;Math.abs(P-1)>Jt&&this._append`L${t+P*s},${r+P*f}`,this._append`A${a},${a},0,0,${+(f*h>s*v)},${this._x1=t+w*l},${this._y1=r+w*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),l=n*Math.sin(i),c=t+u,s=r+l,f=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${c},${s}`:(Math.abs(this._x1-c)>Jt||Math.abs(this._y1-s)>Jt)&&this._append`L${c},${s}`,n&&(d<0&&(d=d%Xo+Xo),d>s0?this._append`A${n},${n},0,1,${f},${t-u},${r-l}A${n},${n},0,1,${f},${this._x1=c},${this._y1=s}`:d>Jt&&this._append`A${n},${n},0,${+(d>=Vo)},${f},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Gu(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new c0(t)}function Vu(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function nv(e){this._context=e}nv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function ki(e){return new nv(e)}function iv(e){return e[0]}function av(e){return e[1]}function ov(e,t){var r=ee(!0),n=null,i=ki,a=null,o=Gu(u);e=typeof e=="function"?e:e===void 0?iv:ee(e),t=typeof t=="function"?t:t===void 0?av:ee(t);function u(l){var c,s=(l=Vu(l)).length,f,d=!1,h;for(n==null&&(a=i(h=o())),c=0;c<=s;++c)!(c=h;--v)u.point(x[v],P[v]);u.lineEnd(),u.areaEnd()}y&&(x[d]=+e(g,d,f),P[d]=+t(g,d,f),u.point(n?+n(g,d,f):x[d],r?+r(g,d,f):P[d]))}if(b)return u=null,b+""||null}function s(){return ov().defined(i).curve(o).context(a)}return c.x=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),n=null,c):e},c.x0=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),c):e},c.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:ee(+f),c):n},c.y=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),r=null,c):t},c.y0=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),c):t},c.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:ee(+f),c):r},c.lineX0=c.lineY0=function(){return s().x(e).y(t)},c.lineY1=function(){return s().x(e).y(r)},c.lineX1=function(){return s().x(n).y(t)},c.defined=function(f){return arguments.length?(i=typeof f=="function"?f:ee(!!f),c):i},c.curve=function(f){return arguments.length?(o=f,a!=null&&(u=o(a)),c):o},c.context=function(f){return arguments.length?(f==null?a=u=null:u=o(a=f),c):a},c}class uv{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function f0(e){return new uv(e,!0)}function d0(e){return new uv(e,!1)}const Xu={draw(e,t){const r=lt(t/Yn);e.moveTo(r,0),e.arc(0,0,r,0,Ti)}},h0={draw(e,t){const r=lt(t/5)/2;e.moveTo(-3*r,-r),e.lineTo(-r,-r),e.lineTo(-r,-3*r),e.lineTo(r,-3*r),e.lineTo(r,-r),e.lineTo(3*r,-r),e.lineTo(3*r,r),e.lineTo(r,r),e.lineTo(r,3*r),e.lineTo(-r,3*r),e.lineTo(-r,r),e.lineTo(-3*r,r),e.closePath()}},sv=lt(1/3),v0=sv*2,p0={draw(e,t){const r=lt(t/v0),n=r*sv;e.moveTo(0,-r),e.lineTo(n,0),e.lineTo(0,r),e.lineTo(-n,0),e.closePath()}},m0={draw(e,t){const r=lt(t),n=-r/2;e.rect(n,n,r,r)}},g0=.8908130915292852,lv=Hn(Yn/10)/Hn(7*Yn/10),y0=Hn(Ti/10)*lv,b0=-tv(Ti/10)*lv,x0={draw(e,t){const r=lt(t*g0),n=y0*r,i=b0*r;e.moveTo(0,-r),e.lineTo(n,i);for(let a=1;a<5;++a){const o=Ti*a/5,u=tv(o),l=Hn(o);e.lineTo(l*r,-u*r),e.lineTo(u*n-l*i,l*n+u*i)}e.closePath()}},xa=lt(3),w0={draw(e,t){const r=-lt(t/(xa*3));e.moveTo(0,r*2),e.lineTo(-xa*r,-r),e.lineTo(xa*r,-r),e.closePath()}},Xe=-.5,Ze=lt(3)/2,Zo=1/lt(12),P0=(Zo/2+1)*3,O0={draw(e,t){const r=lt(t/P0),n=r/2,i=r*Zo,a=n,o=r*Zo+r,u=-a,l=o;e.moveTo(n,i),e.lineTo(a,o),e.lineTo(u,l),e.lineTo(Xe*n-Ze*i,Ze*n+Xe*i),e.lineTo(Xe*a-Ze*o,Ze*a+Xe*o),e.lineTo(Xe*u-Ze*l,Ze*u+Xe*l),e.lineTo(Xe*n+Ze*i,Xe*i-Ze*n),e.lineTo(Xe*a+Ze*o,Xe*o-Ze*a),e.lineTo(Xe*u+Ze*l,Xe*l-Ze*u),e.closePath()}};function A0(e,t){let r=null,n=Gu(i);e=typeof e=="function"?e:ee(e||Xu),t=typeof t=="function"?t:ee(t===void 0?64:+t);function i(){let a;if(r||(r=a=n()),e.apply(this,arguments).draw(r,+t.apply(this,arguments)),a)return r=null,a+""||null}return i.type=function(a){return arguments.length?(e=typeof a=="function"?a:ee(a),i):e},i.size=function(a){return arguments.length?(t=typeof a=="function"?a:ee(+a),i):t},i.context=function(a){return arguments.length?(r=a??null,i):r},i}function Gn(){}function Vn(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function cv(e){this._context=e}cv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Vn(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Vn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function S0(e){return new cv(e)}function fv(e){this._context=e}fv.prototype={areaStart:Gn,areaEnd:Gn,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Vn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function E0(e){return new fv(e)}function dv(e){this._context=e}dv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Vn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function j0(e){return new dv(e)}function hv(e){this._context=e}hv.prototype={areaStart:Gn,areaEnd:Gn,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function T0(e){return new hv(e)}function ic(e){return e<0?-1:1}function ac(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(ic(a)+ic(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function oc(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function wa(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function Xn(e){this._context=e}Xn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:wa(this,this._t0,oc(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,wa(this,oc(this,r=ac(this,e,t)),r);break;default:wa(this,this._t0,r=ac(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function vv(e){this._context=new pv(e)}(vv.prototype=Object.create(Xn.prototype)).point=function(e,t){Xn.prototype.point.call(this,t,e)};function pv(e){this._context=e}pv.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function k0(e){return new Xn(e)}function C0(e){return new vv(e)}function mv(e){this._context=e}mv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=uc(e),i=uc(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function M0(e){return new Ci(e,.5)}function D0(e){return new Ci(e,0)}function I0(e){return new Ci(e,1)}function jr(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function N0(e,t){return e[t]}function $0(e){const t=[];return t.key=e,t}function R0(){var e=ee([]),t=Jo,r=jr,n=N0;function i(a){var o=Array.from(e.apply(this,arguments),$0),u,l=o.length,c=-1,s;for(const f of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n{var t="symbol".concat(pn(e));return gv[t]||Xu},V0=(e,t,r)=>{if(t==="area")return e;switch(r){case"cross":return 5*e*e/9;case"diamond":return .5*e*e/Math.sqrt(3);case"square":return e*e;case"star":{var n=18*Y0;return 1.25*e*e*(Math.tan(n)-Math.tan(n*2)*Math.tan(n)**2)}case"triangle":return Math.sqrt(3)*e*e/4;case"wye":return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}},X0=(e,t)=>{gv["symbol".concat(pn(e))]=t},yv=e=>{var{type:t="circle",size:r=64,sizeType:n="area"}=e,i=U0(e,q0),a=lc(lc({},i),{},{type:t,size:r,sizeType:n}),o=()=>{var f=G0(t),d=A0().type(f).size(V0(r,n,t));return d()},{className:u,cx:l,cy:c}=a,s=z(a,!0);return l===+l&&c===+c&&r===+r?m.createElement("path",Qo({},s,{className:H("recharts-symbols",u),transform:"translate(".concat(l,", ").concat(c,")"),d:o()})):null};yv.registerSymbol=X0;var Pa={},Oa={},cc;function Z0(){return cc||(cc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){const i=new Map;for(let a=0;a=0}e.isLength=t}(ja)),ja}var hc;function Zu(){return hc||(hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=J0();function r(n){return n!=null&&typeof n!="function"&&t.isLength(n.length)}e.isArrayLike=r}(Ea)),Ea}var Ta={},vc;function Q0(){return vc||(vc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="object"&&r!==null}e.isObjectLike=t}(Ta)),Ta}var pc;function eb(){return pc||(pc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Zu(),r=Q0();function n(i){return r.isObjectLike(i)&&t.isArrayLike(i)}e.isArrayLikeObject=n}(Sa)),Sa}var ka={},Ca={},mc;function tb(){return mc||(mc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Uu();function r(n){return function(i){return t.get(i,n)}}e.property=r}(Ca)),Ca}var _a={},Ma={},Da={},Ia={},gc;function xv(){return gc||(gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r!==null&&(typeof r=="object"||typeof r=="function")}e.isObject=t}(Ia)),Ia}var Na={},yc;function wv(){return yc||(yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null||typeof r!="object"&&typeof r!="function"}e.isPrimitive=t}(Na)),Na}var $a={},bc;function Ju(){return bc||(bc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){return r===n||Number.isNaN(r)&&Number.isNaN(n)}e.eq=t}($a)),$a}var xc;function rb(){return xc||(xc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Qu(),r=xv(),n=wv(),i=Ju();function a(f,d,h){return typeof h!="function"?t.isMatch(f,d):o(f,d,function v(p,g,y,b,x,P){const w=h(p,g,y,b,x,P);return w!==void 0?!!w:o(p,g,v,P)},new Map)}function o(f,d,h,v){if(d===f)return!0;switch(typeof d){case"object":return u(f,d,h,v);case"function":return Object.keys(d).length>0?o(f,{...d},h,v):i.eq(f,d);default:return r.isObject(f)?typeof d=="string"?d==="":!0:i.eq(f,d)}}function u(f,d,h,v){if(d==null)return!0;if(Array.isArray(d))return c(f,d,h,v);if(d instanceof Map)return l(f,d,h,v);if(d instanceof Set)return s(f,d,h,v);const p=Object.keys(d);if(f==null)return p.length===0;if(p.length===0)return!0;if(v&&v.has(d))return v.get(d)===f;v&&v.set(d,f);try{for(let g=0;g{})}e.isMatch=r}(Ma)),Ma}var Ra={},La={},Ba={},Pc;function Pv(){return Pc||(Pc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Object.getOwnPropertySymbols(r).filter(n=>Object.prototype.propertyIsEnumerable.call(r,n))}e.getSymbols=t}(Ba)),Ba}var Ka={},Oc;function es(){return Oc||(Oc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null?r===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(r)}e.getTag=t}(Ka)),Ka}var qa={},Ac;function ts(){return Ac||(Ac=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t="[object RegExp]",r="[object String]",n="[object Number]",i="[object Boolean]",a="[object Arguments]",o="[object Symbol]",u="[object Date]",l="[object Map]",c="[object Set]",s="[object Array]",f="[object Function]",d="[object ArrayBuffer]",h="[object Object]",v="[object Error]",p="[object DataView]",g="[object Uint8Array]",y="[object Uint8ClampedArray]",b="[object Uint16Array]",x="[object Uint32Array]",P="[object BigUint64Array]",w="[object Int8Array]",O="[object Int16Array]",A="[object Int32Array]",j="[object BigInt64Array]",T="[object Float32Array]",I="[object Float64Array]";e.argumentsTag=a,e.arrayBufferTag=d,e.arrayTag=s,e.bigInt64ArrayTag=j,e.bigUint64ArrayTag=P,e.booleanTag=i,e.dataViewTag=p,e.dateTag=u,e.errorTag=v,e.float32ArrayTag=T,e.float64ArrayTag=I,e.functionTag=f,e.int16ArrayTag=O,e.int32ArrayTag=A,e.int8ArrayTag=w,e.mapTag=l,e.numberTag=n,e.objectTag=h,e.regexpTag=t,e.setTag=c,e.stringTag=r,e.symbolTag=o,e.uint16ArrayTag=b,e.uint32ArrayTag=x,e.uint8ArrayTag=g,e.uint8ClampedArrayTag=y}(qa)),qa}var za={},Sc;function nb(){return Sc||(Sc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return ArrayBuffer.isView(r)&&!(r instanceof DataView)}e.isTypedArray=t}(za)),za}var Ec;function Ov(){return Ec||(Ec=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Pv(),r=es(),n=ts(),i=wv(),a=nb();function o(s,f){return u(s,void 0,s,new Map,f)}function u(s,f,d,h=new Map,v=void 0){const p=v==null?void 0:v(s,f,d,h);if(p!=null)return p;if(i.isPrimitive(s))return s;if(h.has(s))return h.get(s);if(Array.isArray(s)){const g=new Array(s.length);h.set(s,g);for(let y=0;yt.isMatch(a,i)}e.matches=n}(_a)),_a}var Fa={},Wa={},Ua={},kc;function ob(){return kc||(kc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ov(),r=ts();function n(i,a){return t.cloneDeepWith(i,(o,u,l,c)=>{const s=a==null?void 0:a(o,u,l,c);if(s!=null)return s;if(typeof i=="object")switch(Object.prototype.toString.call(i)){case r.numberTag:case r.stringTag:case r.booleanTag:{const f=new i.constructor(i==null?void 0:i.valueOf());return t.copyProperties(f,i),f}case r.argumentsTag:{const f={};return t.copyProperties(f,i),f.length=i.length,f[Symbol.iterator]=i[Symbol.iterator],f}default:return}})}e.cloneDeepWith=n}(Ua)),Ua}var Cc;function ub(){return Cc||(Cc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=ob();function r(n){return t.cloneDeepWith(n)}e.cloneDeep=r}(Wa)),Wa}var Ha={},Ya={},_c;function Av(){return _c||(_c=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=/^(?:0|[1-9]\d*)$/;function r(n,i=Number.MAX_SAFE_INTEGER){switch(typeof n){case"number":return Number.isInteger(n)&&n>=0&&n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?c:u;return Qa.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:s,Qa}var Kc;function gb(){return Kc||(Kc=1,Ja.exports=mb()),Ja.exports}/** + * @license React + * use-sync-external-store-shim/with-selector.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var qc;function yb(){if(qc)return Za;qc=1;var e=zu(),t=gb();function r(c,s){return c===s&&(c!==0||1/c===1/s)||c!==c&&s!==s}var n=typeof Object.is=="function"?Object.is:r,i=t.useSyncExternalStore,a=e.useRef,o=e.useEffect,u=e.useMemo,l=e.useDebugValue;return Za.useSyncExternalStoreWithSelector=function(c,s,f,d,h){var v=a(null);if(v.current===null){var p={hasValue:!1,value:null};v.current=p}else p=v.current;v=u(function(){function y(O){if(!b){if(b=!0,x=O,O=d(O),h!==void 0&&p.hasValue){var A=p.value;if(h(A,O))return P=A}return P=O}if(A=P,n(x,O))return A;var j=d(O);return h!==void 0&&h(A,j)?(x=O,A):(x=O,P=j)}var b=!1,x,P,w=f===void 0?null:f;return[function(){return y(s())},w===null?void 0:function(){return y(w())}]},[s,f,d,h]);var g=i(c,v[0],v[1]);return o(function(){p.hasValue=!0,p.value=g},[g]),l(g),g},Za}var zc;function bb(){return zc||(zc=1,Xa.exports=yb()),Xa.exports}var xb=bb(),rs=m.createContext(null),wb=e=>e,ae=()=>{var e=m.useContext(rs);return e?e.store.dispatch:wb},Un=()=>{},Pb=()=>Un,Ob=(e,t)=>e===t;function $(e){var t=m.useContext(rs);return xb.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:Pb,t?t.store.getState:Un,t?t.store.getState:Un,t?e:Un,Ob)}function Ab(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function Sb(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!="object")throw new TypeError(t)}function Eb(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var Fc=e=>Array.isArray(e)?e:[e];function jb(e){const t=Array.isArray(e[0])?e[0]:e;return Eb(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function Tb(e,t){const r=[],{length:n}=e;for(let i=0;i{r=_n(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function Mb(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let a=0,o=0,u,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),Ab(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const s={...r,...l},{memoize:f,memoizeOptions:d=[],argsMemoize:h=Sv,argsMemoizeOptions:v=[]}=s,p=Fc(d),g=Fc(v),y=jb(i),b=f(function(){return a++,c.apply(null,arguments)},...p),x=h(function(){o++;const w=Tb(y,arguments);return u=b.apply(null,w),u},...g);return Object.assign(x,{resultFunc:c,memoizedResultFunc:b,dependencies:y,dependencyRecomputations:()=>o,resetDependencyRecomputations:()=>{o=0},lastResult:()=>u,recomputations:()=>a,resetRecomputations:()=>{a=0},memoize:f,argsMemoize:h})};return Object.assign(n,{withTypes:()=>n}),n}var E=Mb(Sv),Db=Object.assign((e,t=E)=>{Sb(e,`createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof e}`);const r=Object.keys(e),n=r.map(a=>e[a]);return t(n,(...a)=>a.reduce((o,u,l)=>(o[r[l]]=u,o),{}))},{withTypes:()=>Db}),eo={},to={},ro={},Uc;function Ib(){return Uc||(Uc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(n){return typeof n=="symbol"?1:n===null?2:n===void 0?3:n!==n?4:0}const r=(n,i,a)=>{if(n!==i){const o=t(n),u=t(i);if(o===u&&o===0){if(ni)return a==="desc"?-1:1}return a==="desc"?u-o:o-u}return 0};e.compareValues=r}(ro)),ro}var no={},io={},Hc;function Ev(){return Hc||(Hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="symbol"||r instanceof Symbol}e.isSymbol=t}(io)),io}var Yc;function Nb(){return Yc||(Yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ev(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function i(a,o){return Array.isArray(a)?!1:typeof a=="number"||typeof a=="boolean"||a==null||t.isSymbol(a)?!0:typeof a=="string"&&(n.test(a)||!r.test(a))||o!=null&&Object.hasOwn(o,a)}e.isKey=i}(no)),no}var Gc;function $b(){return Gc||(Gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ib(),r=Nb(),n=Wu();function i(a,o,u,l){if(a==null)return[];u=l?void 0:u,Array.isArray(a)||(a=Object.values(a)),Array.isArray(o)||(o=o==null?[null]:[o]),o.length===0&&(o=[null]),Array.isArray(u)||(u=u==null?[]:[u]),u=u.map(h=>String(h));const c=(h,v)=>{let p=h;for(let g=0;gv==null||h==null?v:typeof h=="object"&&"key"in h?Object.hasOwn(v,h.key)?v[h.key]:c(v,h.path):typeof h=="function"?h(v):Array.isArray(h)?c(v,h):typeof v=="object"?v[h]:v,f=o.map(h=>(Array.isArray(h)&&h.length===1&&(h=h[0]),h==null||typeof h=="function"||Array.isArray(h)||r.isKey(h)?h:{key:h,path:n.toPath(h)}));return a.map(h=>({original:h,criteria:f.map(v=>s(v,h))})).slice().sort((h,v)=>{for(let p=0;ph.original)}e.orderBy=i}(to)),to}var ao={},Vc;function Rb(){return Vc||(Vc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=1){const i=[],a=Math.floor(n),o=(u,l)=>{for(let c=0;c1&&n.isIterateeCall(a,o[0],o[1])?o=[]:u>2&&n.isIterateeCall(o[0],o[1],o[2])&&(o=[o[0]]),t.orderBy(a,r.flatten(o),["asc"])}e.sortBy=i}(eo)),eo}var uo,Jc;function Bb(){return Jc||(Jc=1,uo=Lb().sortBy),uo}var Kb=Bb();const _i=kt(Kb);var Tv=e=>e.legend.settings,qb=e=>e.legend.size,zb=e=>e.legend.payload;E([zb,Tv],(e,t)=>{var{itemSorter:r}=t,n=e.flat(1);return r?_i(n,r):n});var Mn=1;function Fb(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],[t,r]=m.useState({height:0,left:0,top:0,width:0}),n=m.useCallback(i=>{if(i!=null){var a=i.getBoundingClientRect(),o={height:a.height,left:a.left,top:a.top,width:a.width};(Math.abs(o.height-t.height)>Mn||Math.abs(o.left-t.left)>Mn||Math.abs(o.top-t.top)>Mn||Math.abs(o.width-t.width)>Mn)&&r({height:o.height,left:o.left,top:o.top,width:o.width})}},[t.width,t.height,t.top,t.left,...e]);return[t,n]}function Pe(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Wb=typeof Symbol=="function"&&Symbol.observable||"@@observable",Qc=Wb,so=()=>Math.random().toString(36).substring(7).split("").join("."),Ub={INIT:`@@redux/INIT${so()}`,REPLACE:`@@redux/REPLACE${so()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${so()}`},Zn=Ub;function ns(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function kv(e,t,r){if(typeof e!="function")throw new Error(Pe(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(Pe(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Pe(1));return r(kv)(e,t)}let n=e,i=t,a=new Map,o=a,u=0,l=!1;function c(){o===a&&(o=new Map,a.forEach((g,y)=>{o.set(y,g)}))}function s(){if(l)throw new Error(Pe(3));return i}function f(g){if(typeof g!="function")throw new Error(Pe(4));if(l)throw new Error(Pe(5));let y=!0;c();const b=u++;return o.set(b,g),function(){if(y){if(l)throw new Error(Pe(6));y=!1,c(),o.delete(b),a=null}}}function d(g){if(!ns(g))throw new Error(Pe(7));if(typeof g.type>"u")throw new Error(Pe(8));if(typeof g.type!="string")throw new Error(Pe(17));if(l)throw new Error(Pe(9));try{l=!0,i=n(i,g)}finally{l=!1}return(a=o).forEach(b=>{b()}),g}function h(g){if(typeof g!="function")throw new Error(Pe(10));n=g,d({type:Zn.REPLACE})}function v(){const g=f;return{subscribe(y){if(typeof y!="object"||y===null)throw new Error(Pe(11));function b(){const P=y;P.next&&P.next(s())}return b(),{unsubscribe:g(b)}},[Qc](){return this}}}return d({type:Zn.INIT}),{dispatch:d,subscribe:f,getState:s,replaceReducer:h,[Qc]:v}}function Hb(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:Zn.INIT})>"u")throw new Error(Pe(12));if(typeof r(void 0,{type:Zn.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Pe(13))})}function Cv(e){const t=Object.keys(e),r={};for(let a=0;a"u")throw u&&u.type,new Error(Pe(14));c[f]=v,l=l||v!==h}return l=l||n.length!==Object.keys(o).length,l?c:o}}function Jn(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function Yb(...e){return t=>(r,n)=>{const i=t(r,n);let a=()=>{throw new Error(Pe(15))};const o={getState:i.getState,dispatch:(l,...c)=>a(l,...c)},u=e.map(l=>l(o));return a=Jn(...u)(i.dispatch),{...i,dispatch:a}}}function _v(e){return ns(e)&&"type"in e&&typeof e.type=="string"}var Mv=Symbol.for("immer-nothing"),ef=Symbol.for("immer-draftable"),Ue=Symbol.for("immer-state");function ut(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Tr=Object.getPrototypeOf;function fr(e){return!!e&&!!e[Ue]}function St(e){var t;return e?Dv(e)||Array.isArray(e)||!!e[ef]||!!((t=e.constructor)!=null&&t[ef])||Di(e)||Ii(e):!1}var Gb=Object.prototype.constructor.toString();function Dv(e){if(!e||typeof e!="object")return!1;const t=Tr(e);if(t===null)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object?!0:typeof r=="function"&&Function.toString.call(r)===Gb}function Qn(e,t){Mi(e)===0?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function Mi(e){const t=e[Ue];return t?t.type_:Array.isArray(e)?1:Di(e)?2:Ii(e)?3:0}function eu(e,t){return Mi(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Iv(e,t,r){const n=Mi(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function Vb(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function Di(e){return e instanceof Map}function Ii(e){return e instanceof Set}function Qt(e){return e.copy_||e.base_}function tu(e,t){if(Di(e))return new Map(e);if(Ii(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=Dv(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[Ue];let i=Reflect.ownKeys(n);for(let a=0;a1&&(e.set=e.add=e.clear=e.delete=Xb),Object.freeze(e),t&&Object.entries(e).forEach(([r,n])=>is(n,!0))),e}function Xb(){ut(2)}function Ni(e){return Object.isFrozen(e)}var Zb={};function dr(e){const t=Zb[e];return t||ut(0,e),t}var rn;function Nv(){return rn}function Jb(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function tf(e,t){t&&(dr("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function ru(e){nu(e),e.drafts_.forEach(Qb),e.drafts_=null}function nu(e){e===rn&&(rn=e.parent_)}function rf(e){return rn=Jb(rn,e)}function Qb(e){const t=e[Ue];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function nf(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[Ue].modified_&&(ru(t),ut(4)),St(e)&&(e=ei(t,e),t.parent_||ti(t,e)),t.patches_&&dr("Patches").generateReplacementPatches_(r[Ue].base_,e,t.patches_,t.inversePatches_)):e=ei(t,r,[]),ru(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==Mv?e:void 0}function ei(e,t,r){if(Ni(t))return t;const n=t[Ue];if(!n)return Qn(t,(i,a)=>af(e,n,t,i,a,r)),t;if(n.scope_!==e)return t;if(!n.modified_)return ti(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const i=n.copy_;let a=i,o=!1;n.type_===3&&(a=new Set(i),i.clear(),o=!0),Qn(a,(u,l)=>af(e,n,i,u,l,r,o)),ti(e,i,!1),r&&e.patches_&&dr("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function af(e,t,r,n,i,a,o){if(fr(i)){const u=a&&t&&t.type_!==3&&!eu(t.assigned_,n)?a.concat(n):void 0,l=ei(e,i,u);if(Iv(r,n,l),fr(l))e.canAutoFreeze_=!1;else return}else o&&r.add(i);if(St(i)&&!Ni(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;ei(e,i),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&Object.prototype.propertyIsEnumerable.call(r,n)&&ti(e,i)}}function ti(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&is(t,r)}function ex(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:Nv(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,a=as;r&&(i=[n],a=nn);const{revoke:o,proxy:u}=Proxy.revocable(i,a);return n.draft_=u,n.revoke_=o,u}var as={get(e,t){if(t===Ue)return e;const r=Qt(e);if(!eu(r,t))return tx(e,r,t);const n=r[t];return e.finalized_||!St(n)?n:n===lo(e.base_,t)?(co(e),e.copy_[t]=au(n,e)):n},has(e,t){return t in Qt(e)},ownKeys(e){return Reflect.ownKeys(Qt(e))},set(e,t,r){const n=$v(Qt(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=lo(Qt(e),t),a=i==null?void 0:i[Ue];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(Vb(r,i)&&(r!==void 0||eu(e.base_,t)))return!0;co(e),iu(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return lo(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,co(e),iu(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Qt(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){ut(11)},getPrototypeOf(e){return Tr(e.base_)},setPrototypeOf(){ut(12)}},nn={};Qn(as,(e,t)=>{nn[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});nn.deleteProperty=function(e,t){return nn.set.call(this,e,t,void 0)};nn.set=function(e,t,r){return as.set.call(this,e[0],t,r,e[0])};function lo(e,t){const r=e[Ue];return(r?Qt(r):e)[t]}function tx(e,t,r){var i;const n=$v(t,r);return n?"value"in n?n.value:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function $v(e,t){if(!(t in e))return;let r=Tr(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Tr(r)}}function iu(e){e.modified_||(e.modified_=!0,e.parent_&&iu(e.parent_))}function co(e){e.copy_||(e.copy_=tu(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var rx=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const a=r;r=t;const o=this;return function(l=a,...c){return o.produce(l,s=>r.call(this,s,...c))}}typeof r!="function"&&ut(6),n!==void 0&&typeof n!="function"&&ut(7);let i;if(St(t)){const a=rf(this),o=au(t,void 0);let u=!0;try{i=r(o),u=!1}finally{u?ru(a):nu(a)}return tf(a,n),nf(i,a)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===Mv&&(i=void 0),this.autoFreeze_&&is(i,!0),n){const a=[],o=[];dr("Patches").generateReplacementPatches_(t,i,a,o),n(a,o)}return i}else ut(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(o,...u)=>this.produceWithPatches(o,l=>t(l,...u));let n,i;return[this.produce(t,r,(o,u)=>{n=o,i=u}),n,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){St(e)||ut(8),fr(e)&&(e=Ot(e));const t=rf(this),r=au(e,void 0);return r[Ue].isManual_=!0,nu(t),r}finishDraft(e,t){const r=e&&e[Ue];(!r||!r.isManual_)&&ut(9);const{scope_:n}=r;return tf(n,t),nf(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const i=t[r];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}r>-1&&(t=t.slice(r+1));const n=dr("Patches").applyPatches_;return fr(e)?n(e,t):this.produce(e,i=>n(i,t))}};function au(e,t){const r=Di(e)?dr("MapSet").proxyMap_(e,t):Ii(e)?dr("MapSet").proxySet_(e,t):ex(e,t);return(t?t.scope_:Nv()).drafts_.push(r),r}function Ot(e){return fr(e)||ut(10,e),Rv(e)}function Rv(e){if(!St(e)||Ni(e))return e;const t=e[Ue];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=tu(e,t.scope_.immer_.useStrictShallowCopy_)}else r=tu(e,!0);return Qn(r,(n,i)=>{Iv(r,n,Rv(i))}),t&&(t.finalized_=!1),r}var He=new rx,Lv=He.produce;He.produceWithPatches.bind(He);He.setAutoFreeze.bind(He);He.setUseStrictShallowCopy.bind(He);He.applyPatches.bind(He);He.createDraft.bind(He);He.finishDraft.bind(He);function Bv(e){return({dispatch:r,getState:n})=>i=>a=>typeof a=="function"?a(r,n,e):i(a)}var nx=Bv(),ix=Bv,ax=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Jn:Jn.apply(null,arguments)};function tt(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(Fe(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>_v(n)&&n.type===e,r}var Kv=class Jr extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,Jr.prototype)}static get[Symbol.species](){return Jr}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new Jr(...t[0].concat(this)):new Jr(...t.concat(this))}};function of(e){return St(e)?Lv(e,()=>{}):e}function Dn(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function ox(e){return typeof e=="boolean"}var ux=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:a=!0}=t??{};let o=new Kv;return r&&(ox(r)?o.push(nx):o.push(ix(r.extraArgument))),o},sx="RTK_autoBatch",uf=e=>t=>{setTimeout(t,e)},lx=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,a=!1,o=!1;const u=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:uf(10):e.type==="callback"?e.queueNotification:uf(e.timeout),c=()=>{o=!1,a&&(a=!1,u.forEach(s=>s()))};return Object.assign({},n,{subscribe(s){const f=()=>i&&s(),d=n.subscribe(f);return u.add(s),()=>{d(),u.delete(s)}},dispatch(s){var f;try{return i=!((f=s==null?void 0:s.meta)!=null&&f[sx]),a=!i,a&&(o||(o=!0,l(c))),n.dispatch(s)}finally{i=!0}}})},cx=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new Kv(e);return n&&i.push(lx(typeof n=="object"?n:void 0)),i};function fx(e){const t=ux(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:a=void 0,enhancers:o=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(ns(r))u=Cv(r);else throw new Error(Fe(1));let l;typeof n=="function"?l=n(t):l=t();let c=Jn;i&&(c=ax({trace:!1,...typeof i=="object"&&i}));const s=Yb(...l),f=cx(s);let d=typeof o=="function"?o(f):f();const h=c(...d);return kv(u,a,h)}function qv(e){const t={},r=[];let n;const i={addCase(a,o){const u=typeof a=="string"?a:a.type;if(!u)throw new Error(Fe(28));if(u in t)throw new Error(Fe(29));return t[u]=o,i},addMatcher(a,o){return r.push({matcher:a,reducer:o}),i},addDefaultCase(a){return n=a,i}};return e(i),[t,r,n]}function dx(e){return typeof e=="function"}function hx(e,t){let[r,n,i]=qv(t),a;if(dx(e))a=()=>of(e());else{const u=of(e);a=()=>u}function o(u=a(),l){let c=[r[l.type],...n.filter(({matcher:s})=>s(l)).map(({reducer:s})=>s)];return c.filter(s=>!!s).length===0&&(c=[i]),c.reduce((s,f)=>{if(f)if(fr(s)){const h=f(s,l);return h===void 0?s:h}else{if(St(s))return Lv(s,d=>f(d,l));{const d=f(s,l);if(d===void 0){if(s===null)return s;throw Error("A case reducer on a non-draftable value must not return undefined")}return d}}return s},u)}return o.getInitialState=a,o}var vx="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",px=(e=21)=>{let t="",r=e;for(;r--;)t+=vx[Math.random()*64|0];return t},mx=Symbol.for("rtk-slice-createasyncthunk");function gx(e,t){return`${e}/${t}`}function yx({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[mx];return function(i){const{name:a,reducerPath:o=a}=i;if(!a)throw new Error(Fe(11));const u=(typeof i.reducers=="function"?i.reducers(xx()):i.reducers)||{},l=Object.keys(u),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(P,w){const O=typeof P=="string"?P:P.type;if(!O)throw new Error(Fe(12));if(O in c.sliceCaseReducersByType)throw new Error(Fe(13));return c.sliceCaseReducersByType[O]=w,s},addMatcher(P,w){return c.sliceMatchers.push({matcher:P,reducer:w}),s},exposeAction(P,w){return c.actionCreators[P]=w,s},exposeCaseReducer(P,w){return c.sliceCaseReducersByName[P]=w,s}};l.forEach(P=>{const w=u[P],O={reducerName:P,type:gx(a,P),createNotation:typeof i.reducers=="function"};Px(w)?Ax(O,w,s,t):wx(O,w,s)});function f(){const[P={},w=[],O=void 0]=typeof i.extraReducers=="function"?qv(i.extraReducers):[i.extraReducers],A={...P,...c.sliceCaseReducersByType};return hx(i.initialState,j=>{for(let T in A)j.addCase(T,A[T]);for(let T of c.sliceMatchers)j.addMatcher(T.matcher,T.reducer);for(let T of w)j.addMatcher(T.matcher,T.reducer);O&&j.addDefaultCase(O)})}const d=P=>P,h=new Map,v=new WeakMap;let p;function g(P,w){return p||(p=f()),p(P,w)}function y(){return p||(p=f()),p.getInitialState()}function b(P,w=!1){function O(j){let T=j[P];return typeof T>"u"&&w&&(T=Dn(v,O,y)),T}function A(j=d){const T=Dn(h,w,()=>new WeakMap);return Dn(T,j,()=>{const I={};for(const[C,_]of Object.entries(i.selectors??{}))I[C]=bx(_,j,()=>Dn(v,j,y),w);return I})}return{reducerPath:P,getSelectors:A,get selectors(){return A(O)},selectSlice:O}}const x={name:a,reducer:g,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:y,...b(o),injectInto(P,{reducerPath:w,...O}={}){const A=w??o;return P.inject({reducerPath:A,reducer:g},O),{...x,...b(A,!0)}}};return x}}function bx(e,t,r,n){function i(a,...o){let u=t(a);return typeof u>"u"&&n&&(u=r()),e(u,...o)}return i.unwrapped=e,i}var nt=yx();function xx(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function wx({type:e,reducerName:t,createNotation:r},n,i){let a,o;if("reducer"in n){if(r&&!Ox(n))throw new Error(Fe(17));a=n.reducer,o=n.prepare}else a=n;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?tt(e,o):tt(e))}function Px(e){return e._reducerDefinitionType==="asyncThunk"}function Ox(e){return e._reducerDefinitionType==="reducerWithPrepare"}function Ax({type:e,reducerName:t},r,n,i){if(!i)throw new Error(Fe(18));const{payloadCreator:a,fulfilled:o,pending:u,rejected:l,settled:c,options:s}=r,f=i(e,a,s);n.exposeAction(t,f),o&&n.addCase(f.fulfilled,o),u&&n.addCase(f.pending,u),l&&n.addCase(f.rejected,l),c&&n.addMatcher(f.settled,c),n.exposeCaseReducer(t,{fulfilled:o||In,pending:u||In,rejected:l||In,settled:c||In})}function In(){}var Sx="task",zv="listener",Fv="completed",os="cancelled",Ex=`task-${os}`,jx=`task-${Fv}`,ou=`${zv}-${os}`,Tx=`${zv}-${Fv}`,$i=class{constructor(e){ca(this,"name","TaskAbortError");ca(this,"message");this.code=e,this.message=`${Sx} ${os} (reason: ${e})`}},us=(e,t)=>{if(typeof e!="function")throw new TypeError(Fe(32))},ri=()=>{},Wv=(e,t=ri)=>(e.catch(t),e),Uv=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),or=(e,t)=>{const r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},ur=e=>{if(e.aborted){const{reason:t}=e;throw new $i(t)}};function Hv(e,t){let r=ri;return new Promise((n,i)=>{const a=()=>i(new $i(e.reason));if(e.aborted){a();return}r=Uv(e,a),t.finally(()=>r()).then(n,i)}).finally(()=>{r=ri})}var kx=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof $i?"cancelled":"rejected",error:r}}finally{t==null||t()}},ni=e=>t=>Wv(Hv(e,t).then(r=>(ur(e),r))),Yv=e=>{const t=ni(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:Sr}=Object,sf={},Ri="listenerMiddleware",Cx=(e,t)=>{const r=n=>Uv(e,()=>or(n,e.reason));return(n,i)=>{us(n);const a=new AbortController;r(a);const o=kx(async()=>{ur(e),ur(a.signal);const u=await n({pause:ni(a.signal),delay:Yv(a.signal),signal:a.signal});return ur(a.signal),u},()=>or(a,jx));return i!=null&&i.autoJoin&&t.push(o.catch(ri)),{result:ni(e)(o),cancel(){or(a,Ex)}}}},_x=(e,t)=>{const r=async(n,i)=>{ur(t);let a=()=>{};const u=[new Promise((l,c)=>{let s=e({predicate:n,effect:(f,d)=>{d.unsubscribe(),l([f,d.getState(),d.getOriginalState()])}});a=()=>{s(),c()}})];i!=null&&u.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await Hv(t,Promise.race(u));return ur(t),l}finally{a()}};return(n,i)=>Wv(r(n,i))},Gv=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:a}=e;if(t)i=tt(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(Fe(21));return us(a),{predicate:i,type:t,effect:a}},Vv=Sr(e=>{const{type:t,predicate:r,effect:n}=Gv(e);return{id:px(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(Fe(22))}}},{withTypes:()=>Vv}),lf=(e,t)=>{const{type:r,effect:n,predicate:i}=Gv(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===i)&&a.effect===n)},uu=e=>{e.pending.forEach(t=>{or(t,ou)})},Mx=e=>()=>{e.forEach(uu),e.clear()},cf=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Xv=Sr(tt(`${Ri}/add`),{withTypes:()=>Xv}),Dx=tt(`${Ri}/removeAll`),Zv=Sr(tt(`${Ri}/remove`),{withTypes:()=>Zv}),Ix=(...e)=>{console.error(`${Ri}/error`,...e)},gn=(e={})=>{const t=new Map,{extra:r,onError:n=Ix}=e;us(n);const i=s=>(s.unsubscribe=()=>t.delete(s.id),t.set(s.id,s),f=>{s.unsubscribe(),f!=null&&f.cancelActive&&uu(s)}),a=s=>{const f=lf(t,s)??Vv(s);return i(f)};Sr(a,{withTypes:()=>a});const o=s=>{const f=lf(t,s);return f&&(f.unsubscribe(),s.cancelActive&&uu(f)),!!f};Sr(o,{withTypes:()=>o});const u=async(s,f,d,h)=>{const v=new AbortController,p=_x(a,v.signal),g=[];try{s.pending.add(v),await Promise.resolve(s.effect(f,Sr({},d,{getOriginalState:h,condition:(y,b)=>p(y,b).then(Boolean),take:p,delay:Yv(v.signal),pause:ni(v.signal),extra:r,signal:v.signal,fork:Cx(v.signal,g),unsubscribe:s.unsubscribe,subscribe:()=>{t.set(s.id,s)},cancelActiveListeners:()=>{s.pending.forEach((y,b,x)=>{y!==v&&(or(y,ou),x.delete(y))})},cancel:()=>{or(v,ou),s.pending.delete(v)},throwIfCancelled:()=>{ur(v.signal)}})))}catch(y){y instanceof $i||cf(n,y,{raisedBy:"effect"})}finally{await Promise.all(g),or(v,Tx),s.pending.delete(v)}},l=Mx(t);return{middleware:s=>f=>d=>{if(!_v(d))return f(d);if(Xv.match(d))return a(d.payload);if(Dx.match(d)){l();return}if(Zv.match(d))return o(d.payload);let h=s.getState();const v=()=>{if(h===sf)throw new Error(Fe(23));return h};let p;try{if(p=f(d),t.size>0){const g=s.getState(),y=Array.from(t.values());for(const b of y){let x=!1;try{x=b.predicate(d,g,h)}catch(P){x=!1,cf(n,P,{raisedBy:"predicate"})}x&&u(b,d,s,v)}}}finally{h=sf}return p},startListening:a,stopListening:o,clearListeners:l}};function Fe(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Nx={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},Jv=nt({name:"chartLayout",initialState:Nx,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top,e.margin.right=t.payload.right,e.margin.bottom=t.payload.bottom,e.margin.left=t.payload.left},setScale(e,t){e.scale=t.payload}}}),{setMargin:$x,setLayout:Rx,setChartSize:Lx,setScale:Bx}=Jv.actions,Kx=Jv.reducer;function ff(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function df(e){for(var t=1;te*180/Math.PI,ce=(e,t,r,n)=>({x:e+Math.cos(-ii*n)*r,y:t+Math.sin(-ii*n)*r}),Qv=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},Ux=(e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return Math.sqrt((r-i)**2+(n-a)**2)},Hx=(e,t)=>{var{x:r,y:n}=e,{cx:i,cy:a}=t,o=Ux({x:r,y:n},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var u=(r-i)/o,l=Math.acos(u);return n>a&&(l=2*Math.PI-l),{radius:o,angle:Wx(l),angleInRadian:l}},Yx=e=>{var{startAngle:t,endAngle:r}=e,n=Math.floor(t/360),i=Math.floor(r/360),a=Math.min(n,i);return{startAngle:t-a*360,endAngle:r-a*360}},Gx=(e,t)=>{var{startAngle:r,endAngle:n}=t,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return e+o*360},Vx=(e,t)=>{var{x:r,y:n}=e,{radius:i,angle:a}=Hx({x:r,y:n},t),{innerRadius:o,outerRadius:u}=t;if(iu||i===0)return null;var{startAngle:l,endAngle:c}=Yx(t),s=a,f;if(l<=c){for(;s>c;)s-=360;for(;s=l&&s<=c}else{for(;s>l;)s-=360;for(;s=c&&s<=l}return f?df(df({},t),{},{radius:i,angle:Gx(s,t)}):null};function hf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Qe(e){for(var t=1;t{var a,o=-1,u=(a=t==null?void 0:t.length)!==null&&a!==void 0?a:0;if(u<=1||e==null)return 0;if(n==="angleAxis"&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var l=0;l0?r[l-1].coordinate:r[u-1].coordinate,s=r[l].coordinate,f=l>=u-1?r[0].coordinate:r[l+1].coordinate,d=void 0;if(ge(s-c)!==ge(f-s)){var h=[];if(ge(f-s)===ge(i[1]-i[0])){d=f;var v=s+i[1]-i[0];h[0]=Math.min(v,(v+c)/2),h[1]=Math.max(v,(v+c)/2)}else{d=c;var p=f+i[1]-i[0];h[0]=Math.min(s,(p+s)/2),h[1]=Math.max(s,(p+s)/2)}var g=[Math.min(s,(d+s)/2),Math.max(s,(d+s)/2)];if(e>g[0]&&e<=g[1]||e>=h[0]&&e<=h[1]){({index:o}=r[l]);break}}else{var y=Math.min(c,f),b=Math.max(c,f);if(e>(y+s)/2&&e<=(b+s)/2){({index:o}=r[l]);break}}}else if(t){for(var x=0;x0&&x(t[x].coordinate+t[x-1].coordinate)/2&&e<=(t[x].coordinate+t[x+1].coordinate)/2||x===u-1&&e>(t[x].coordinate+t[x-1].coordinate)/2){({index:o}=t[x]);break}}return o},ew=(e,t,r)=>{if(t&&r){var{width:n,height:i}=r,{align:a,verticalAlign:o,layout:u}=t;if((u==="vertical"||u==="horizontal"&&o==="middle")&&a!=="center"&&D(e[a]))return Qe(Qe({},e),{},{[a]:e[a]+(n||0)});if((u==="horizontal"||u==="vertical"&&a==="center")&&o!=="middle"&&D(e[o]))return Qe(Qe({},e),{},{[o]:e[o]+(i||0)})}return e},Ut=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",ep=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,a,o=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(a=!0),u.coordinate));return i||o.push(t),a||o.push(r),o},tp=(e,t,r)=>{if(!e)return null;var{duplicateDomain:n,type:i,range:a,scale:o,realScaleType:u,isCategorical:l,categoricalDomain:c,tickCount:s,ticks:f,niceTicks:d,axisType:h}=e;if(!o)return null;var v=u==="scaleBand"&&o.bandwidth?o.bandwidth()/2:2,p=i==="category"&&o.bandwidth?o.bandwidth()/v:0;if(p=h==="angleAxis"&&a&&a.length>=2?ge(a[0]-a[1])*2*p:p,f||d){var g=(f||d||[]).map((y,b)=>{var x=n?n.indexOf(y):y;return{coordinate:o(x)+p,value:y,offset:p,index:b}});return g.filter(y=>!We(y.coordinate))}return l&&c?c.map((y,b)=>({coordinate:o(y)+p,value:y,index:b,offset:p})):o.ticks&&s!=null?o.ticks(s).map((y,b)=>({coordinate:o(y)+p,value:y,offset:p,index:b})):o.domain().map((y,b)=>({coordinate:o(y)+p,value:n?n[y]:y,index:b,offset:p}))},vf=1e-4,tw=e=>{var t=e.domain();if(!(!t||t.length<=2)){var r=t.length,n=e.range(),i=Math.min(n[0],n[1])-vf,a=Math.max(n[0],n[1])+vf,o=e(t[0]),u=e(t[r-1]);(oa||ua)&&e.domain([t[0],t[r-1]])}},rw=(e,t)=>{if(!t||t.length!==2||!D(t[0])||!D(t[1]))return e;var r=Math.min(t[0],t[1]),n=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!D(e[0])||e[0]n)&&(i[1]=n),i[0]>n&&(i[0]=n),i[1]{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[o][r][0]=i,e[o][r][1]=i+u,i=e[o][r][1]):(e[o][r][0]=a,e[o][r][1]=a+u,a=e[o][r][1])}},iw=e=>{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[a][r][0]=i,e[a][r][1]=i+o,i=e[a][r][1]):(e[a][r][0]=0,e[a][r][1]=0)}},aw={sign:nw,expand:L0,none:jr,silhouette:B0,wiggle:K0,positive:iw},ow=(e,t,r)=>{var n=aw[r],i=R0().keys(t).value((a,o)=>+re(a,o,0)).order(Jo).offset(n);return i(e)};function rp(e){return e==null?void 0:String(e)}function pf(e){var{axis:t,ticks:r,bandSize:n,entry:i,index:a,dataKey:o}=e;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!J(i[t.dataKey])){var u=Zh(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r[a]?r[a].coordinate+n/2:null}var l=re(i,J(o)?t.dataKey:o);return J(l)?null:t.scale(l)}var mf=e=>{var{axis:t,ticks:r,offset:n,bandSize:i,entry:a,index:o}=e;if(t.type==="category")return r[o]?r[o].coordinate+n:null;var u=re(a,t.dataKey,t.scale.domain()[o]);return J(u)?null:t.scale(u)-i/2+n},uw=e=>{var{numericAxis:t}=e,r=t.scale.domain();if(t.type==="number"){var n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return n<=0&&i>=0?0:i<0?i:n}return r[0]},sw=e=>{var t=e.flat(2).filter(D);return[Math.min(...t),Math.max(...t)]},lw=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],cw=(e,t,r)=>{if(e!=null)return lw(Object.keys(e).reduce((n,i)=>{var a=e[i],{stackedData:o}=a,u=o.reduce((l,c)=>{var s=sw(c.slice(t,r+1));return[Math.min(l[0],s[0]),Math.max(l[1],s[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},gf=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,yf=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,an=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=_i(t,s=>s.coordinate),a=1/0,o=1,u=i.length;o=i.left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height;return a?{x:e,y:t}:null}return n?Vx({x:e,y:t},n):null}var dw=(e,t,r,n)=>{var i=t.find(c=>c&&c.index===r);if(i){if(e==="horizontal")return{x:i.coordinate,y:n.y};if(e==="vertical")return{x:n.x,y:i.coordinate};if(e==="centric"){var a=i.coordinate,{radius:o}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,o,a)),{},{angle:a,radius:o})}var u=i.coordinate,{angle:l}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,u,l)),{},{angle:l,radius:u})}return{x:0,y:0}},hw=(e,t)=>t==="horizontal"?e.x:t==="vertical"?e.y:t==="centric"?e.angle:e.radius,Ct=e=>e.layout.width,_t=e=>e.layout.height,vw=e=>e.layout.scale,np=e=>e.layout.margin,ss=E(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),ls=E(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),ip="data-recharts-item-index",ap="data-recharts-item-data-key",Li=60;function xf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Nt(e){for(var t=1;te.brush.height,ve=E([Ct,_t,np,yw,ss,ls,Tv,qb],(e,t,r,n,i,a,o,u)=>{var l=a.reduce((v,p)=>{var{orientation:g}=p;if(!p.mirror&&!p.hide){var y=typeof p.width=="number"?p.width:Li;return Nt(Nt({},v),{},{[g]:v[g]+y})}return v},{left:r.left||0,right:r.right||0}),c=i.reduce((v,p)=>{var{orientation:g}=p;return!p.mirror&&!p.hide?Nt(Nt({},v),{},{[g]:qt(v,"".concat(g))+p.height}):v},{top:r.top||0,bottom:r.bottom||0}),s=Nt(Nt({},c),l),f=s.bottom;s.bottom+=n,s=ew(s,o,u);var d=e-s.left-s.right,h=t-s.top-s.bottom;return Nt(Nt({brushBottom:f},s),{},{width:Math.max(d,0),height:Math.max(h,0)})}),bw=E(ve,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),op=E(Ct,_t,(e,t)=>({x:0,y:0,width:e,height:t})),xw=m.createContext(null),Ce=()=>m.useContext(xw)!=null,Bi=e=>e.brush,Ki=E([Bi,ve,np],(e,t,r)=>({height:e.height,x:D(e.x)?e.x:t.left,y:D(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:D(e.width)?e.width:t.width})),cs=()=>{var e,t=Ce(),r=$(bw),n=$(Ki),i=(e=$(Bi))===null||e===void 0?void 0:e.padding;return!t||!n||!i?r:{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}},ww={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},up=()=>{var e;return(e=$(ve))!==null&&e!==void 0?e:ww},sp=()=>$(Ct),lp=()=>$(_t),Y=e=>e.layout.layoutType,qi=()=>$(Y),Pw={settings:{layout:"horizontal",align:"center",verticalAlign:"middle",itemSorter:"value"},size:{width:0,height:0},payload:[]},cp=nt({name:"legend",initialState:Pw,reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload(e,t){e.payload.push(t.payload)},removeLegendPayload(e,t){var r=Ot(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)}}}),{setLegendSize:W2,setLegendSettings:U2,addLegendPayload:fp,removeLegendPayload:dp}=cp.actions,Ow=cp.reducer;function su(){return su=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{separator:t=" : ",contentStyle:r={},itemStyle:n={},labelStyle:i={},payload:a,formatter:o,itemSorter:u,wrapperClassName:l,labelClassName:c,label:s,labelFormatter:f,accessibilityLayer:d=!1}=e,h=()=>{if(a&&a.length){var w={padding:0,margin:0},O=(u?_i(a,u):a).map((A,j)=>{if(A.type==="none")return null;var T=A.formatter||o||jw,{value:I,name:C}=A,_=I,R=C;if(T){var B=T(I,C,A,j,a);if(Array.isArray(B))[_,R]=B;else if(B!=null)_=B;else return null}var F=fo({display:"block",paddingTop:4,paddingBottom:4,color:A.color||"#000"},n);return m.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(j),style:F},dt(R)?m.createElement("span",{className:"recharts-tooltip-item-name"},R):null,dt(R)?m.createElement("span",{className:"recharts-tooltip-item-separator"},t):null,m.createElement("span",{className:"recharts-tooltip-item-value"},_),m.createElement("span",{className:"recharts-tooltip-item-unit"},A.unit||""))});return m.createElement("ul",{className:"recharts-tooltip-item-list",style:w},O)}return null},v=fo({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},r),p=fo({margin:0},i),g=!J(s),y=g?s:"",b=H("recharts-default-tooltip",l),x=H("recharts-tooltip-label",c);g&&f&&a!==void 0&&a!==null&&(y=f(s,a));var P=d?{role:"status","aria-live":"assertive"}:{};return m.createElement("div",su({className:b,style:v},P),m.createElement("p",{className:x,style:p},m.isValidElement(y)?y:"".concat(y)),h())},Wr="recharts-tooltip-wrapper",kw={visibility:"hidden"};function Cw(e){var{coordinate:t,translateX:r,translateY:n}=e;return H(Wr,{["".concat(Wr,"-right")]:D(r)&&t&&D(t.x)&&r>=t.x,["".concat(Wr,"-left")]:D(r)&&t&&D(t.x)&&r=t.y,["".concat(Wr,"-top")]:D(n)&&t&&D(t.y)&&n0?i:0),f=r[n]+i;if(t[n])return o[n]?s:f;var d=l[n];if(d==null)return 0;if(o[n]){var h=s,v=d;return hg?Math.max(s,d):Math.max(f,d)}function _w(e){var{translateX:t,translateY:r,useTranslate3d:n}=e;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function Mw(e){var{allowEscapeViewBox:t,coordinate:r,offsetTopLeft:n,position:i,reverseDirection:a,tooltipBox:o,useTranslate3d:u,viewBox:l}=e,c,s,f;return o.height>0&&o.width>0&&r?(s=Pf({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:l,viewBoxDimension:l.width}),f=Pf({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:l,viewBoxDimension:l.height}),c=_w({translateX:s,translateY:f,useTranslate3d:u})):c=kw,{cssProperties:c,cssClasses:Cw({translateX:s,translateY:f,coordinate:r})}}function Of(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Nn(e){for(var t=1;t{if(t.key==="Escape"){var r,n,i,a;this.setState({dismissed:!0,dismissedAtCoordinate:{x:(r=(n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==null&&r!==void 0?r:0,y:(i=(a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==null&&i!==void 0?i:0}})}})}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown)}componentDidUpdate(){var t,r;this.state.dismissed&&(((t=this.props.coordinate)===null||t===void 0?void 0:t.x)!==this.state.dismissedAtCoordinate.x||((r=this.props.coordinate)===null||r===void 0?void 0:r.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}render(){var{active:t,allowEscapeViewBox:r,animationDuration:n,animationEasing:i,children:a,coordinate:o,hasPayload:u,isAnimationActive:l,offset:c,position:s,reverseDirection:f,useTranslate3d:d,viewBox:h,wrapperStyle:v,lastBoundingBox:p,innerRef:g,hasPortalFromProps:y}=this.props,{cssClasses:b,cssProperties:x}=Mw({allowEscapeViewBox:r,coordinate:o,offsetTopLeft:c,position:s,reverseDirection:f,tooltipBox:{height:p.height,width:p.width},useTranslate3d:d,viewBox:h}),P=y?{}:Nn(Nn({transition:l&&t?"transform ".concat(n,"ms ").concat(i):void 0},x),{},{pointerEvents:"none",visibility:!this.state.dismissed&&t&&u?"visible":"hidden",position:"absolute",top:0,left:0}),w=Nn(Nn({},P),{},{visibility:!this.state.dismissed&&t&&u?"visible":"hidden"},v);return m.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:b,style:w,ref:g},a)}}var $w=()=>!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout),pr={isSsr:$w()},hp=()=>$(e=>e.rootProps.accessibilityLayer);function Ye(e){return Number.isFinite(e)}function kr(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function cu(){return cu=Object.assign?Object.assign.bind():function(e){for(var t=1;tYe(e.x)&&Ye(e.y),Ur=e=>e.x,Hr=e=>e.y,Kw=(e,t)=>{if(typeof e=="function")return e;var r="curve".concat(pn(e));return(r==="curveMonotone"||r==="curveBump")&&t?Ef["".concat(r).concat(t==="vertical"?"Y":"X")]:Ef[r]||ki},qw=e=>{var{type:t="linear",points:r=[],baseLine:n,layout:i,connectNulls:a=!1}=e,o=Kw(t,i),u=a?r.filter($n):r,l;if(Array.isArray(n)){var c=a?n.filter(f=>$n(f)):n,s=u.map((f,d)=>Sf(Sf({},f),{},{base:c[d]}));return i==="vertical"?l=Cn().y(Hr).x1(Ur).x0(f=>f.base.x):l=Cn().x(Ur).y1(Hr).y0(f=>f.base.y),l.defined($n).curve(o),l(s)}return i==="vertical"&&D(n)?l=Cn().y(Hr).x1(Ur).x0(n):D(n)?l=Cn().x(Ur).y1(Hr).y0(n):l=ov().x(Ur).y(Hr),l.defined($n).curve(o),l(u)},fs=e=>{var{className:t,points:r,path:n,pathRef:i}=e;if((!r||!r.length)&&!n)return null;var a=r&&r.length?qw(e):n;return m.createElement("path",cu({},z(e,!1),Yu(e),{className:H("recharts-curve",t),d:a===null?void 0:a,ref:i}))},zw=["x","y","top","left","width","height","className"];function fu(){return fu=Object.assign?Object.assign.bind():function(e){for(var t=1;t"M".concat(e,",").concat(i,"v").concat(n,"M").concat(a,",").concat(t,"h").concat(r),Xw=e=>{var{x:t=0,y:r=0,top:n=0,left:i=0,width:a=0,height:o=0,className:u}=e,l=Yw(e,zw),c=Fw({x:t,y:r,top:n,left:i,width:a,height:o},l);return!D(t)||!D(r)||!D(a)||!D(o)||!D(n)||!D(i)?null:m.createElement("path",fu({},z(c,!0),{className:H("recharts-cross",u),d:Vw(t,r,a,o,n,i)}))};function Zw(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-i:r.left+.5,y:e==="horizontal"?r.top+.5:t.y-i,width:e==="horizontal"?n:r.width-1,height:e==="horizontal"?r.height-1:n}}function Tf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Jw(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}var ho={},vo={},po={},kf;function r1(){return kf||(kf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){if(!r||typeof r!="object")return!1;const n=Object.getPrototypeOf(r);return n===null||n===Object.prototype||Object.getPrototypeOf(n)===null?Object.prototype.toString.call(r)==="[object Object]":!1}e.isPlainObject=t}(po)),po}var Cf;function n1(){return Cf||(Cf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=r1(),r=Pv(),n=es(),i=ts(),a=Ju();function o(c,s,f){return u(c,s,void 0,void 0,void 0,void 0,f)}function u(c,s,f,d,h,v,p){const g=p(c,s,f,d,h,v);if(g!==void 0)return g;if(typeof c==typeof s)switch(typeof c){case"bigint":case"string":case"boolean":case"symbol":case"undefined":return c===s;case"number":return c===s||Object.is(c,s);case"function":return c===s;case"object":return l(c,s,v,p)}return l(c,s,v,p)}function l(c,s,f,d){if(Object.is(c,s))return!0;let h=n.getTag(c),v=n.getTag(s);if(h===i.argumentsTag&&(h=i.objectTag),v===i.argumentsTag&&(v=i.objectTag),h!==v)return!1;switch(h){case i.stringTag:return c.toString()===s.toString();case i.numberTag:{const y=c.valueOf(),b=s.valueOf();return a.eq(y,b)}case i.booleanTag:case i.dateTag:case i.symbolTag:return Object.is(c.valueOf(),s.valueOf());case i.regexpTag:return c.source===s.source&&c.flags===s.flags;case i.functionTag:return c===s}f=f??new Map;const p=f.get(c),g=f.get(s);if(p!=null&&g!=null)return p===s;f.set(c,s),f.set(s,c);try{switch(h){case i.mapTag:{if(c.size!==s.size)return!1;for(const[y,b]of c.entries())if(!s.has(y)||!u(b,s.get(y),y,c,s,f,d))return!1;return!0}case i.setTag:{if(c.size!==s.size)return!1;const y=Array.from(c.values()),b=Array.from(s.values());for(let x=0;xu(P,O,void 0,c,s,f,d));if(w===-1)return!1;b.splice(w,1)}return!0}case i.arrayTag:case i.uint8ArrayTag:case i.uint8ClampedArrayTag:case i.uint16ArrayTag:case i.uint32ArrayTag:case i.bigUint64ArrayTag:case i.int8ArrayTag:case i.int16ArrayTag:case i.int32ArrayTag:case i.bigInt64ArrayTag:case i.float32ArrayTag:case i.float64ArrayTag:{if(typeof Buffer<"u"&&Buffer.isBuffer(c)!==Buffer.isBuffer(s)||c.length!==s.length)return!1;for(let y=0;ynull,n=!1,i=null,a=o=>{if(!n){if(Array.isArray(o)){if(!o.length)return;var u=o,[l,...c]=u;if(typeof l=="number"){i=e.setTimeout(a.bind(null,c),l);return}a(l),i=e.setTimeout(a.bind(null,c));return}typeof o=="object"&&(t=o,r(t)),typeof o=="function"&&o()}};return{stop:()=>{n=!0},start:o=>{n=!1,i&&(i(),i=null),a(o)},subscribe:o=>(r=o,()=>{r=()=>null}),getTimeoutController:()=>e}}var ai=1e-4,vp=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],pp=(e,t)=>e.map((r,n)=>r*t**n).reduce((r,n)=>r+n),If=(e,t)=>r=>{var n=vp(e,t);return pp(n,r)},c1=(e,t)=>r=>{var n=vp(e,t),i=[...n.map((a,o)=>a*o).slice(1),0];return pp(i,r)},Nf=function(){for(var t,r,n,i,a=arguments.length,o=new Array(a),u=0;uparseFloat(v)))}}else o.length===4&&([t,n,r,i]=o);var c=If(t,r),s=If(n,i),f=c1(t,r),d=v=>v>1?1:v<0?0:v,h=v=>{for(var p=v>1?1:v,g=p,y=0;y<8;++y){var b=c(g)-p,x=f(g);if(Math.abs(b-p)0&&arguments[0]!==void 0?arguments[0]:{},{stiff:r=100,damping:n=8,dt:i=17}=t,a=(o,u,l)=>{var c=-(o-u)*r,s=l*n,f=l+(c-s)*i/1e3,d=l*i/1e3+o;return Math.abs(d-u){if(typeof e=="string")switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return Nf(e);case"spring":return f1();default:if(e.split("(")[0]==="cubic-bezier")return Nf(e)}return typeof e=="function"?e:null};function $f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Rf(e){for(var t=1;te.replace(/([A-Z])/g,t=>"-".concat(t.toLowerCase())),g1=(e,t,r)=>e.map(n=>"".concat(m1(n)," ").concat(t,"ms ").concat(r)).join(","),y1=(e,t)=>[Object.keys(e),Object.keys(t)].reduce((r,n)=>r.filter(i=>n.includes(i))),on=(e,t)=>Object.keys(t).reduce((r,n)=>Rf(Rf({},r),{},{[n]:e(n,t[n])}),{});function Lf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Oe(e){for(var t=1;te+(t-e)*r,du=e=>{var{from:t,to:r}=e;return t!==r},mp=(e,t,r)=>{var n=on((i,a)=>{if(du(a)){var[o,u]=e(a.from,a.to,a.velocity);return Oe(Oe({},a),{},{from:o,velocity:u})}return a},t);return r<1?on((i,a)=>du(a)?Oe(Oe({},a),{},{velocity:oi(a.velocity,n[i].velocity,r),from:oi(a.from,n[i].from,r)}):a,t):mp(e,n,r-1)};function P1(e,t,r,n,i,a){var o,u=n.reduce((d,h)=>Oe(Oe({},d),{},{[h]:{from:e[h],velocity:0,to:t[h]}}),{}),l=()=>on((d,h)=>h.from,u),c=()=>!Object.values(u).filter(du).length,s=null,f=d=>{o||(o=d);var h=d-o,v=h/r.dt;u=mp(r,u,v),i(Oe(Oe(Oe({},e),t),l())),o=d,c()||(s=a.setTimeout(f))};return()=>(s=a.setTimeout(f),()=>{s()})}function O1(e,t,r,n,i,a,o){var u=null,l=i.reduce((f,d)=>Oe(Oe({},f),{},{[d]:[e[d],t[d]]}),{}),c,s=f=>{c||(c=f);var d=(f-c)/n,h=on((p,g)=>oi(...g,r(d)),l);if(a(Oe(Oe(Oe({},e),t),h)),d<1)u=o.setTimeout(s);else{var v=on((p,g)=>oi(...g,r(1)),l);a(Oe(Oe(Oe({},e),t),v))}};return()=>(u=o.setTimeout(s),()=>{u()})}const A1=(e,t,r,n,i,a)=>{var o=y1(e,t);return r.isStepper===!0?P1(e,t,r,o,i,a):O1(e,t,r,n,o,i,a)};class S1{setTimeout(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),i=null,a=o=>{o-n>=r?t(o):typeof requestAnimationFrame=="function"&&(i=requestAnimationFrame(a))};return i=requestAnimationFrame(a),()=>{cancelAnimationFrame(i)}}}var E1=["children","begin","duration","attributeName","easing","isActive","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart","animationManager"];function hu(){return hu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{this.stopJSAnimation=c()};this.manager.start([l,o,s,i,u])}runAnimation(t){var{begin:r,duration:n,attributeName:i,to:a,easing:o,onAnimationStart:u,onAnimationEnd:l,children:c}=t;if(this.unSubscribe=this.manager.subscribe(this.handleStyleChange),typeof o=="function"||typeof c=="function"||o==="spring"){this.runJSAnimation(t);return}var s=i?{[i]:a}:a,f=g1(Object.keys(s),n,o);this.manager.start([u,r,$t($t({},s),{},{transition:f}),n,l])}render(){var t=this.props,{children:r,begin:n,duration:i,attributeName:a,easing:o,isActive:u,from:l,to:c,canBegin:s,onAnimationEnd:f,shouldReAnimate:d,onAnimationReStart:h,animationManager:v}=t,p=j1(t,E1),g=m.Children.count(r),y=this.state.style;if(typeof r=="function")return r(y);if(!u||g===0||i<=0)return r;var b=x=>{var{style:P={},className:w}=x.props,O=m.cloneElement(x,$t($t({},p),{},{style:$t($t({},P),y),className:w}));return O};return g===1?b(m.Children.only(r)):m.createElement("div",null,m.Children.map(r,x=>b(x)))}}rr(ds,"displayName","Animate");rr(ds,"defaultProps",{begin:0,duration:1e3,attributeName:"",easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}});var M1=m.createContext(null);function zt(e){var t,r,n=m.useContext(M1);return m.createElement(ds,hu({},e,{animationManager:(t=(r=e.animationManager)!==null&&r!==void 0?r:n)!==null&&t!==void 0?t:_1()}))}function ui(){return ui=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=Math.min(Math.abs(r)/2,Math.abs(n)/2),o=n>=0?1:-1,u=r>=0?1:-1,l=n>=0&&r>=0||n<0&&r<0?1:0,c;if(a>0&&i instanceof Array){for(var s=[0,0,0,0],f=0,d=4;fa?a:i[f];c="M".concat(e,",").concat(t+o*s[0]),s[0]>0&&(c+="A ".concat(s[0],",").concat(s[0],",0,0,").concat(l,",").concat(e+u*s[0],",").concat(t)),c+="L ".concat(e+r-u*s[1],",").concat(t),s[1]>0&&(c+="A ".concat(s[1],",").concat(s[1],",0,0,").concat(l,`, + `).concat(e+r,",").concat(t+o*s[1])),c+="L ".concat(e+r,",").concat(t+n-o*s[2]),s[2]>0&&(c+="A ".concat(s[2],",").concat(s[2],",0,0,").concat(l,`, + `).concat(e+r-u*s[2],",").concat(t+n)),c+="L ".concat(e+u*s[3],",").concat(t+n),s[3]>0&&(c+="A ".concat(s[3],",").concat(s[3],",0,0,").concat(l,`, + `).concat(e,",").concat(t+n-o*s[3])),c+="Z"}else if(a>0&&i===+i&&i>0){var h=Math.min(a,i);c="M ".concat(e,",").concat(t+o*h,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+u*h,",").concat(t,` + L `).concat(e+r-u*h,",").concat(t,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r,",").concat(t+o*h,` + L `).concat(e+r,",").concat(t+n-o*h,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r-u*h,",").concat(t+n,` + L `).concat(e+u*h,",").concat(t+n,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e,",").concat(t+n-o*h," Z")}else c="M ".concat(e,",").concat(t," h ").concat(r," v ").concat(n," h ").concat(-r," Z");return c},D1={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},gp=e=>{var t=it(e,D1),r=m.useRef(null),[n,i]=m.useState(-1);m.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var y=r.current.getTotalLength();y&&i(y)}catch{}},[]);var{x:a,y:o,width:u,height:l,radius:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isAnimationActive:v,isUpdateAnimationActive:p}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||u===0||l===0)return null;var g=H("recharts-rectangle",s);return p?m.createElement(zt,{canBegin:n>0,from:{width:u,height:l,x:a,y:o},to:{width:u,height:l,x:a,y:o},duration:d,animationEasing:f,isActive:p},y=>{var{width:b,height:x,x:P,y:w}=y;return m.createElement(zt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,isActive:v,easing:f},m.createElement("path",ui({},z(t,!0),{className:g,d:Kf(P,w,b,x,c),ref:r})))}):m.createElement("path",ui({},z(t,!0),{className:g,d:Kf(a,o,u,l,c)}))};function yp(e){var{cx:t,cy:r,radius:n,startAngle:i,endAngle:a}=e,o=ce(t,r,n,i),u=ce(t,r,n,a);return{points:[o,u],cx:t,cy:r,radius:n,startAngle:i,endAngle:a}}function vu(){return vu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=ge(t-e),n=Math.min(Math.abs(t-e),359.999);return r*n},Rn=e=>{var{cx:t,cy:r,radius:n,angle:i,sign:a,isExternal:o,cornerRadius:u,cornerIsExternal:l}=e,c=u*(o?1:-1)+n,s=Math.asin(u/c)/ii,f=l?i:i+a*s,d=ce(t,r,c,f),h=ce(t,r,n,f),v=l?i-a*s:i,p=ce(t,r,c*Math.cos(s*ii),v);return{center:d,circleTangency:h,lineTangency:p,theta:s}},bp=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:a,endAngle:o}=e,u=I1(a,o),l=a+u,c=ce(t,r,i,a),s=ce(t,r,i,l),f="M ".concat(c.x,",").concat(c.y,` + A `).concat(i,",").concat(i,`,0, + `).concat(+(Math.abs(u)>180),",").concat(+(a>l),`, + `).concat(s.x,",").concat(s.y,` + `);if(n>0){var d=ce(t,r,n,a),h=ce(t,r,n,l);f+="L ".concat(h.x,",").concat(h.y,` + A `).concat(n,",").concat(n,`,0, + `).concat(+(Math.abs(u)>180),",").concat(+(a<=l),`, + `).concat(d.x,",").concat(d.y," Z")}else f+="L ".concat(t,",").concat(r," Z");return f},N1=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,cornerRadius:a,forceCornerRadius:o,cornerIsExternal:u,startAngle:l,endAngle:c}=e,s=ge(c-l),{circleTangency:f,lineTangency:d,theta:h}=Rn({cx:t,cy:r,radius:i,angle:l,sign:s,cornerRadius:a,cornerIsExternal:u}),{circleTangency:v,lineTangency:p,theta:g}=Rn({cx:t,cy:r,radius:i,angle:c,sign:-s,cornerRadius:a,cornerIsExternal:u}),y=u?Math.abs(l-c):Math.abs(l-c)-h-g;if(y<0)return o?"M ".concat(d.x,",").concat(d.y,` + a`).concat(a,",").concat(a,",0,0,1,").concat(a*2,`,0 + a`).concat(a,",").concat(a,",0,0,1,").concat(-a*2,`,0 + `):bp({cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:l,endAngle:c});var b="M ".concat(d.x,",").concat(d.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(f.x,",").concat(f.y,` + A`).concat(i,",").concat(i,",0,").concat(+(y>180),",").concat(+(s<0),",").concat(v.x,",").concat(v.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(p.x,",").concat(p.y,` + `);if(n>0){var{circleTangency:x,lineTangency:P,theta:w}=Rn({cx:t,cy:r,radius:n,angle:l,sign:s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),{circleTangency:O,lineTangency:A,theta:j}=Rn({cx:t,cy:r,radius:n,angle:c,sign:-s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),T=u?Math.abs(l-c):Math.abs(l-c)-w-j;if(T<0&&a===0)return"".concat(b,"L").concat(t,",").concat(r,"Z");b+="L".concat(A.x,",").concat(A.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(O.x,",").concat(O.y,` + A`).concat(n,",").concat(n,",0,").concat(+(T>180),",").concat(+(s>0),",").concat(x.x,",").concat(x.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(P.x,",").concat(P.y,"Z")}else b+="L".concat(t,",").concat(r,"Z");return b},$1={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},xp=e=>{var t=it(e,$1),{cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:o,forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s,className:f}=t;if(a0&&Math.abs(c-s)<360?p=N1({cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:Math.min(v,h/2),forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s}):p=bp({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:c,endAngle:s}),m.createElement("path",vu({},z(t,!0),{className:d,d:p}))};function R1(e,t,r){var n,i,a,o;if(e==="horizontal")n=t.x,a=n,i=r.top,o=r.top+r.height;else if(e==="vertical")i=t.y,o=i,n=r.left,a=r.left+r.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var{cx:u,cy:l,innerRadius:c,outerRadius:s,angle:f}=t,d=ce(u,l,c,f),h=ce(u,l,s,f);n=d.x,i=d.y,a=h.x,o=h.y}else return yp(t);return[{x:n,y:i},{x:a,y:o}]}var yo={},bo={},xo={},qf;function L1(){return qf||(qf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ev();function r(n){return t.isSymbol(n)?NaN:Number(n)}e.toNumber=r}(xo)),xo}var zf;function B1(){return zf||(zf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=L1();function r(n){return n?(n=t.toNumber(n),n===1/0||n===-1/0?(n<0?-1:1)*Number.MAX_VALUE:n===n?n:0):n===0?n:0}e.toFinite=r}(bo)),bo}var Ff;function K1(){return Ff||(Ff=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=jv(),r=B1();function n(i,a,o){o&&typeof o!="number"&&t.isIterateeCall(i,a,o)&&(a=o=void 0),i=r.toFinite(i),a===void 0?(a=i,i=0):a=r.toFinite(a),o=o===void 0?it?1:e>=t?0:NaN}function F1(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function hs(e){let t,r,n;e.length!==2?(t=Bt,r=(u,l)=>Bt(e(u),l),n=(u,l)=>e(u)-l):(t=e===Bt||e===F1?e:W1,r=e,n=e);function i(u,l,c=0,s=u.length){if(c>>1;r(u[f],l)<0?c=f+1:s=f}while(c>>1;r(u[f],l)<=0?c=f+1:s=f}while(cc&&n(u[f-1],l)>-n(u[f],l)?f-1:f}return{left:i,center:o,right:a}}function W1(){return 0}function Pp(e){return e===null?NaN:+e}function*U1(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const H1=hs(Bt),yn=H1.right;hs(Pp).center;class Uf extends Map{constructor(t,r=V1){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(Hf(this,t))}has(t){return super.has(Hf(this,t))}set(t,r){return super.set(Y1(this,t),r)}delete(t){return super.delete(G1(this,t))}}function Hf({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function Y1({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function G1({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function V1(e){return e!==null&&typeof e=="object"?e.valueOf():e}function X1(e=Bt){if(e===Bt)return Op;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function Op(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const Z1=Math.sqrt(50),J1=Math.sqrt(10),Q1=Math.sqrt(2);function si(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=Z1?10:a>=J1?5:a>=Q1?2:1;let u,l,c;return i<0?(c=Math.pow(10,-i)/o,u=Math.round(e*c),l=Math.round(t*c),u/ct&&--l,c=-c):(c=Math.pow(10,i)*o,u=Math.round(e/c),l=Math.round(t/c),u*ct&&--l),l0))return[];if(e===t)return[e];const n=t=i))return[];const u=a-i+1,l=new Array(u);if(n)if(o<0)for(let c=0;c=n)&&(r=n);return r}function Gf(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function Ap(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?Op:X1(i);n>r;){if(n-r>600){const l=n-r+1,c=t-r+1,s=Math.log(l),f=.5*Math.exp(2*s/3),d=.5*Math.sqrt(s*f*(l-f)/l)*(c-l/2<0?-1:1),h=Math.max(r,Math.floor(t-c*f/l+d)),v=Math.min(n,Math.floor(t+(l-c)*f/l+d));Ap(e,t,h,v,i)}const a=e[t];let o=r,u=n;for(Yr(e,r,t),i(e[n],a)>0&&Yr(e,r,n);o0;)--u}i(e[r],a)===0?Yr(e,r,u):(++u,Yr(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function Yr(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function eP(e,t,r){if(e=Float64Array.from(U1(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Gf(e);if(t>=1)return Yf(e);var n,i=(n-1)*t,a=Math.floor(i),o=Yf(Ap(e,a).subarray(0,a+1)),u=Gf(e.subarray(a+1));return o+(u-o)*(i-a)}}function tP(e,t,r=Pp){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return o+(u-o)*(i-a)}}function rP(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Ln(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Ln(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=aP.exec(e))?new De(t[1],t[2],t[3],1):(t=oP.exec(e))?new De(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=uP.exec(e))?Ln(t[1],t[2],t[3],t[4]):(t=sP.exec(e))?Ln(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=lP.exec(e))?td(t[1],t[2]/100,t[3]/100,1):(t=cP.exec(e))?td(t[1],t[2]/100,t[3]/100,t[4]):Vf.hasOwnProperty(e)?Jf(Vf[e]):e==="transparent"?new De(NaN,NaN,NaN,0):null}function Jf(e){return new De(e>>16&255,e>>8&255,e&255,1)}function Ln(e,t,r,n){return n<=0&&(e=t=r=NaN),new De(e,t,r,n)}function hP(e){return e instanceof bn||(e=ln(e)),e?(e=e.rgb(),new De(e.r,e.g,e.b,e.opacity)):new De}function bu(e,t,r,n){return arguments.length===1?hP(e):new De(e,t,r,n??1)}function De(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}ms(De,bu,Ep(bn,{brighter(e){return e=e==null?li:Math.pow(li,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?un:Math.pow(un,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new De(sr(this.r),sr(this.g),sr(this.b),ci(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Qf,formatHex:Qf,formatHex8:vP,formatRgb:ed,toString:ed}));function Qf(){return`#${nr(this.r)}${nr(this.g)}${nr(this.b)}`}function vP(){return`#${nr(this.r)}${nr(this.g)}${nr(this.b)}${nr((isNaN(this.opacity)?1:this.opacity)*255)}`}function ed(){const e=ci(this.opacity);return`${e===1?"rgb(":"rgba("}${sr(this.r)}, ${sr(this.g)}, ${sr(this.b)}${e===1?")":`, ${e})`}`}function ci(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function sr(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function nr(e){return e=sr(e),(e<16?"0":"")+e.toString(16)}function td(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new st(e,t,r,n)}function jp(e){if(e instanceof st)return new st(e.h,e.s,e.l,e.opacity);if(e instanceof bn||(e=ln(e)),!e)return new st;if(e instanceof st)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,u=a-i,l=(a+i)/2;return u?(t===a?o=(r-n)/u+(r0&&l<1?0:o,new st(o,u,l,e.opacity)}function pP(e,t,r,n){return arguments.length===1?jp(e):new st(e,t,r,n??1)}function st(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}ms(st,pP,Ep(bn,{brighter(e){return e=e==null?li:Math.pow(li,e),new st(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?un:Math.pow(un,e),new st(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new De(Po(e>=240?e-240:e+120,i,n),Po(e,i,n),Po(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new st(rd(this.h),Bn(this.s),Bn(this.l),ci(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=ci(this.opacity);return`${e===1?"hsl(":"hsla("}${rd(this.h)}, ${Bn(this.s)*100}%, ${Bn(this.l)*100}%${e===1?")":`, ${e})`}`}}));function rd(e){return e=(e||0)%360,e<0?e+360:e}function Bn(e){return Math.max(0,Math.min(1,e||0))}function Po(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const gs=e=>()=>e;function mP(e,t){return function(r){return e+r*t}}function gP(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function yP(e){return(e=+e)==1?Tp:function(t,r){return r-t?gP(t,r,e):gs(isNaN(t)?r:t)}}function Tp(e,t){var r=t-e;return r?mP(e,r):gs(isNaN(e)?t:e)}const nd=function e(t){var r=yP(t);function n(i,a){var o=r((i=bu(i)).r,(a=bu(a)).r),u=r(i.g,a.g),l=r(i.b,a.b),c=Tp(i.opacity,a.opacity);return function(s){return i.r=o(s),i.g=u(s),i.b=l(s),i.opacity=c(s),i+""}}return n.gamma=e,n}(1);function bP(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),u[o]?u[o]+=a:u[++o]=a),(n=n[0])===(i=i[0])?u[o]?u[o]+=i:u[++o]=i:(u[++o]=null,l.push({i:o,x:fi(n,i)})),r=Oo.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function CP(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?_P:CP,l=c=null,f}function f(d){return d==null||isNaN(d=+d)?a:(l||(l=u(e.map(n),t,r)))(n(o(d)))}return f.invert=function(d){return o(i((c||(c=u(t,e.map(n),fi)))(d)))},f.domain=function(d){return arguments.length?(e=Array.from(d,di),s()):e.slice()},f.range=function(d){return arguments.length?(t=Array.from(d),s()):t.slice()},f.rangeRound=function(d){return t=Array.from(d),r=ys,s()},f.clamp=function(d){return arguments.length?(o=d?!0:Te,s()):o!==Te},f.interpolate=function(d){return arguments.length?(r=d,s()):r},f.unknown=function(d){return arguments.length?(a=d,f):a},function(d,h){return n=d,i=h,s()}}function bs(){return zi()(Te,Te)}function MP(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function hi(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Cr(e){return e=hi(Math.abs(e)),e?e[1]:NaN}function DP(e,t){return function(r,n){for(var i=r.length,a=[],o=0,u=e[0],l=0;i>0&&u>0&&(l+u+1>n&&(u=Math.max(1,n-l)),a.push(r.substring(i-=u,i+u)),!((l+=u+1)>n));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}function IP(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var NP=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function cn(e){if(!(t=NP.exec(e)))throw new Error("invalid format: "+e);var t;return new xs({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}cn.prototype=xs.prototype;function xs(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}xs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function $P(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var kp;function RP(e,t){var r=hi(e,t);if(!r)return e+"";var n=r[0],i=r[1],a=i-(kp=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+hi(e,Math.max(0,t+a-1))[0]}function ad(e,t){var r=hi(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const od={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:MP,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>ad(e*100,t),r:ad,s:RP,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function ud(e){return e}var sd=Array.prototype.map,ld=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function LP(e){var t=e.grouping===void 0||e.thousands===void 0?ud:DP(sd.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?ud:IP(sd.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function c(f){f=cn(f);var d=f.fill,h=f.align,v=f.sign,p=f.symbol,g=f.zero,y=f.width,b=f.comma,x=f.precision,P=f.trim,w=f.type;w==="n"?(b=!0,w="g"):od[w]||(x===void 0&&(x=12),P=!0,w="g"),(g||d==="0"&&h==="=")&&(g=!0,d="0",h="=");var O=p==="$"?r:p==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",A=p==="$"?n:/[%p]/.test(w)?o:"",j=od[w],T=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function I(C){var _=O,R=A,B,F,V;if(w==="c")R=j(C)+R,C="";else{C=+C;var K=C<0||1/C<0;if(C=isNaN(C)?l:j(Math.abs(C),x),P&&(C=$P(C)),K&&+C==0&&v!=="+"&&(K=!1),_=(K?v==="("?v:u:v==="-"||v==="("?"":v)+_,R=(w==="s"?ld[8+kp/3]:"")+R+(K&&v==="("?")":""),T){for(B=-1,F=C.length;++BV||V>57){R=(V===46?i+C.slice(B+1):C.slice(B))+R,C=C.slice(0,B);break}}}b&&!g&&(C=t(C,1/0));var de=_.length+C.length+R.length,oe=de>1)+_+C+R+oe.slice(de);break;default:C=oe+_+C+R;break}return a(C)}return I.toString=function(){return f+""},I}function s(f,d){var h=c((f=cn(f),f.type="f",f)),v=Math.max(-8,Math.min(8,Math.floor(Cr(d)/3)))*3,p=Math.pow(10,-v),g=ld[8+v/3];return function(y){return h(p*y)+g}}return{format:c,formatPrefix:s}}var Kn,ws,Cp;BP({thousands:",",grouping:[3],currency:["$",""]});function BP(e){return Kn=LP(e),ws=Kn.format,Cp=Kn.formatPrefix,Kn}function KP(e){return Math.max(0,-Cr(Math.abs(e)))}function qP(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Cr(t)/3)))*3-Cr(Math.abs(e)))}function zP(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Cr(t)-Cr(e))+1}function _p(e,t,r,n){var i=gu(e,t,r),a;switch(n=cn(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=qP(i,o))&&(n.precision=a),Cp(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=zP(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=KP(i))&&(n.precision=a-(n.type==="%")*2);break}}return ws(n)}function Ht(e){var t=e.domain;return e.ticks=function(r){var n=t();return pu(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return _p(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],u=n[a],l,c,s=10;for(u0;){if(c=mu(o,u,r),c===l)return n[i]=o,n[a]=u,t(n);if(c>0)o=Math.floor(o/c)*c,u=Math.ceil(u/c)*c;else if(c<0)o=Math.ceil(o*c)/c,u=Math.floor(u*c)/c;else break;l=c}return e},e}function Mp(){var e=bs();return e.copy=function(){return xn(e,Mp())},at.apply(e,arguments),Ht(e)}function Dp(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,di),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return Dp(e).unknown(t)},e=arguments.length?Array.from(e,di):[0,1],Ht(r)}function Ip(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function YP(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function dd(e){return(t,r)=>-e(-t,r)}function Ps(e){const t=e(cd,fd),r=t.domain;let n=10,i,a;function o(){return i=YP(n),a=HP(n),r()[0]<0?(i=dd(i),a=dd(a),e(FP,WP)):e(cd,fd),t}return t.base=function(u){return arguments.length?(n=+u,o()):n},t.domain=function(u){return arguments.length?(r(u),o()):r()},t.ticks=u=>{const l=r();let c=l[0],s=l[l.length-1];const f=s0){for(;d<=h;++d)for(v=1;vs)break;y.push(p)}}else for(;d<=h;++d)for(v=n-1;v>=1;--v)if(p=d>0?v/a(-d):v*a(d),!(ps)break;y.push(p)}y.length*2{if(u==null&&(u=10),l==null&&(l=n===10?"s":","),typeof l!="function"&&(!(n%1)&&(l=cn(l)).precision==null&&(l.trim=!0),l=ws(l)),u===1/0)return l;const c=Math.max(1,n*u/t.ticks().length);return s=>{let f=s/a(Math.round(i(s)));return f*nr(Ip(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function Np(){const e=Ps(zi()).domain([1,10]);return e.copy=()=>xn(e,Np()).base(e.base()),at.apply(e,arguments),e}function hd(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function vd(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Os(e){var t=1,r=e(hd(t),vd(t));return r.constant=function(n){return arguments.length?e(hd(t=+n),vd(t)):t},Ht(r)}function $p(){var e=Os(zi());return e.copy=function(){return xn(e,$p()).constant(e.constant())},at.apply(e,arguments)}function pd(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function GP(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function VP(e){return e<0?-e*e:e*e}function As(e){var t=e(Te,Te),r=1;function n(){return r===1?e(Te,Te):r===.5?e(GP,VP):e(pd(r),pd(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},Ht(t)}function Ss(){var e=As(zi());return e.copy=function(){return xn(e,Ss()).exponent(e.exponent())},at.apply(e,arguments),e}function XP(){return Ss.apply(null,arguments).exponent(.5)}function md(e){return Math.sign(e)*e*e}function ZP(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function Rp(){var e=bs(),t=[0,1],r=!1,n;function i(a){var o=ZP(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(md(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,di)).map(md)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return Rp(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},at.apply(i,arguments),Ht(i)}function Lp(){var e=[],t=[],r=[],n;function i(){var o=0,u=Math.max(1,t.length);for(r=new Array(u-1);++o0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[c-1],n[c]]},o.unknown=function(l){return arguments.length&&(a=l),o},o.thresholds=function(){return n.slice()},o.copy=function(){return Bp().domain([e,t]).range(i).unknown(a)},at.apply(Ht(o),arguments)}function Kp(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[yn(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return Kp().domain(e).range(t).unknown(r)},at.apply(i,arguments)}const Ao=new Date,So=new Date;function pe(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),u=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,u)=>{const l=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a0))return l;let c;do l.push(c=new Date(+a)),t(a,u),e(a);while(cpe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,u)=>{if(o>=o)if(u<0)for(;++u<=0;)for(;t(o,-1),!a(o););else for(;--u>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(Ao.setTime(+a),So.setTime(+o),e(Ao),e(So),Math.floor(r(Ao,So))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const vi=pe(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);vi.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?pe(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):vi);vi.range;const yt=1e3,et=yt*60,bt=et*60,Et=bt*24,Es=Et*7,gd=Et*30,Eo=Et*365,ir=pe(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getUTCSeconds());ir.range;const js=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*yt)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getMinutes());js.range;const Ts=pe(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getUTCMinutes());Ts.range;const ks=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*yt-e.getMinutes()*et)},(e,t)=>{e.setTime(+e+t*bt)},(e,t)=>(t-e)/bt,e=>e.getHours());ks.range;const Cs=pe(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*bt)},(e,t)=>(t-e)/bt,e=>e.getUTCHours());Cs.range;const wn=pe(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*et)/Et,e=>e.getDate()-1);wn.range;const Fi=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Et,e=>e.getUTCDate()-1);Fi.range;const qp=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Et,e=>Math.floor(e/Et));qp.range;function mr(e){return pe(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*et)/Es)}const Wi=mr(0),pi=mr(1),JP=mr(2),QP=mr(3),_r=mr(4),eO=mr(5),tO=mr(6);Wi.range;pi.range;JP.range;QP.range;_r.range;eO.range;tO.range;function gr(e){return pe(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Es)}const Ui=gr(0),mi=gr(1),rO=gr(2),nO=gr(3),Mr=gr(4),iO=gr(5),aO=gr(6);Ui.range;mi.range;rO.range;nO.range;Mr.range;iO.range;aO.range;const _s=pe(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());_s.range;const Ms=pe(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Ms.range;const jt=pe(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());jt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});jt.range;const Tt=pe(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Tt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});Tt.range;function zp(e,t,r,n,i,a){const o=[[ir,1,yt],[ir,5,5*yt],[ir,15,15*yt],[ir,30,30*yt],[a,1,et],[a,5,5*et],[a,15,15*et],[a,30,30*et],[i,1,bt],[i,3,3*bt],[i,6,6*bt],[i,12,12*bt],[n,1,Et],[n,2,2*Et],[r,1,Es],[t,1,gd],[t,3,3*gd],[e,1,Eo]];function u(c,s,f){const d=sg).right(o,d);if(h===o.length)return e.every(gu(c/Eo,s/Eo,f));if(h===0)return vi.every(Math.max(gu(c,s,f),1));const[v,p]=o[d/o[h-1][2]53)return null;"w"in k||(k.w=1),"Z"in k?(Q=To(Gr(k.y,0,1)),Ne=Q.getUTCDay(),Q=Ne>4||Ne===0?mi.ceil(Q):mi(Q),Q=Fi.offset(Q,(k.V-1)*7),k.y=Q.getUTCFullYear(),k.m=Q.getUTCMonth(),k.d=Q.getUTCDate()+(k.w+6)%7):(Q=jo(Gr(k.y,0,1)),Ne=Q.getDay(),Q=Ne>4||Ne===0?pi.ceil(Q):pi(Q),Q=wn.offset(Q,(k.V-1)*7),k.y=Q.getFullYear(),k.m=Q.getMonth(),k.d=Q.getDate()+(k.w+6)%7)}else("W"in k||"U"in k)&&("w"in k||(k.w="u"in k?k.u%7:"W"in k?1:0),Ne="Z"in k?To(Gr(k.y,0,1)).getUTCDay():jo(Gr(k.y,0,1)).getDay(),k.m=0,k.d="W"in k?(k.w+6)%7+k.W*7-(Ne+5)%7:k.w+k.U*7-(Ne+6)%7);return"Z"in k?(k.H+=k.Z/100|0,k.M+=k.Z%100,To(k)):jo(k)}}function j(N,q,W,k){for(var _e=0,Q=q.length,Ne=W.length,$e,Zt;_e=Ne)return-1;if($e=q.charCodeAt(_e++),$e===37){if($e=q.charAt(_e++),Zt=w[$e in yd?q.charAt(_e++):$e],!Zt||(k=Zt(N,W,k))<0)return-1}else if($e!=W.charCodeAt(k++))return-1}return k}function T(N,q,W){var k=c.exec(q.slice(W));return k?(N.p=s.get(k[0].toLowerCase()),W+k[0].length):-1}function I(N,q,W){var k=h.exec(q.slice(W));return k?(N.w=v.get(k[0].toLowerCase()),W+k[0].length):-1}function C(N,q,W){var k=f.exec(q.slice(W));return k?(N.w=d.get(k[0].toLowerCase()),W+k[0].length):-1}function _(N,q,W){var k=y.exec(q.slice(W));return k?(N.m=b.get(k[0].toLowerCase()),W+k[0].length):-1}function R(N,q,W){var k=p.exec(q.slice(W));return k?(N.m=g.get(k[0].toLowerCase()),W+k[0].length):-1}function B(N,q,W){return j(N,t,q,W)}function F(N,q,W){return j(N,r,q,W)}function V(N,q,W){return j(N,n,q,W)}function K(N){return o[N.getDay()]}function de(N){return a[N.getDay()]}function oe(N){return l[N.getMonth()]}function Ie(N){return u[N.getMonth()]}function Ge(N){return i[+(N.getHours()>=12)]}function L(N){return 1+~~(N.getMonth()/3)}function we(N){return o[N.getUTCDay()]}function Xt(N){return a[N.getUTCDay()]}function Ve(N){return l[N.getUTCMonth()]}function Ty(N){return u[N.getUTCMonth()]}function ky(N){return i[+(N.getUTCHours()>=12)]}function Cy(N){return 1+~~(N.getUTCMonth()/3)}return{format:function(N){var q=O(N+="",x);return q.toString=function(){return N},q},parse:function(N){var q=A(N+="",!1);return q.toString=function(){return N},q},utcFormat:function(N){var q=O(N+="",P);return q.toString=function(){return N},q},utcParse:function(N){var q=A(N+="",!0);return q.toString=function(){return N},q}}}var yd={"-":"",_:" ",0:"0"},be=/^\s*\d+/,fO=/^%/,dO=/[\\^$*+?|[\]().{}]/g;function U(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function vO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function pO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function mO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function gO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function yO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function bd(e,t,r){var n=be.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function xd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function bO(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function xO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function wO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function wd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function PO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function Pd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function OO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function AO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function SO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function EO(e,t,r){var n=be.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function jO(e,t,r){var n=fO.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function TO(e,t,r){var n=be.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function kO(e,t,r){var n=be.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function Od(e,t){return U(e.getDate(),t,2)}function CO(e,t){return U(e.getHours(),t,2)}function _O(e,t){return U(e.getHours()%12||12,t,2)}function MO(e,t){return U(1+wn.count(jt(e),e),t,3)}function Fp(e,t){return U(e.getMilliseconds(),t,3)}function DO(e,t){return Fp(e,t)+"000"}function IO(e,t){return U(e.getMonth()+1,t,2)}function NO(e,t){return U(e.getMinutes(),t,2)}function $O(e,t){return U(e.getSeconds(),t,2)}function RO(e){var t=e.getDay();return t===0?7:t}function LO(e,t){return U(Wi.count(jt(e)-1,e),t,2)}function Wp(e){var t=e.getDay();return t>=4||t===0?_r(e):_r.ceil(e)}function BO(e,t){return e=Wp(e),U(_r.count(jt(e),e)+(jt(e).getDay()===4),t,2)}function KO(e){return e.getDay()}function qO(e,t){return U(pi.count(jt(e)-1,e),t,2)}function zO(e,t){return U(e.getFullYear()%100,t,2)}function FO(e,t){return e=Wp(e),U(e.getFullYear()%100,t,2)}function WO(e,t){return U(e.getFullYear()%1e4,t,4)}function UO(e,t){var r=e.getDay();return e=r>=4||r===0?_r(e):_r.ceil(e),U(e.getFullYear()%1e4,t,4)}function HO(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+U(t/60|0,"0",2)+U(t%60,"0",2)}function Ad(e,t){return U(e.getUTCDate(),t,2)}function YO(e,t){return U(e.getUTCHours(),t,2)}function GO(e,t){return U(e.getUTCHours()%12||12,t,2)}function VO(e,t){return U(1+Fi.count(Tt(e),e),t,3)}function Up(e,t){return U(e.getUTCMilliseconds(),t,3)}function XO(e,t){return Up(e,t)+"000"}function ZO(e,t){return U(e.getUTCMonth()+1,t,2)}function JO(e,t){return U(e.getUTCMinutes(),t,2)}function QO(e,t){return U(e.getUTCSeconds(),t,2)}function eA(e){var t=e.getUTCDay();return t===0?7:t}function tA(e,t){return U(Ui.count(Tt(e)-1,e),t,2)}function Hp(e){var t=e.getUTCDay();return t>=4||t===0?Mr(e):Mr.ceil(e)}function rA(e,t){return e=Hp(e),U(Mr.count(Tt(e),e)+(Tt(e).getUTCDay()===4),t,2)}function nA(e){return e.getUTCDay()}function iA(e,t){return U(mi.count(Tt(e)-1,e),t,2)}function aA(e,t){return U(e.getUTCFullYear()%100,t,2)}function oA(e,t){return e=Hp(e),U(e.getUTCFullYear()%100,t,2)}function uA(e,t){return U(e.getUTCFullYear()%1e4,t,4)}function sA(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Mr(e):Mr.ceil(e),U(e.getUTCFullYear()%1e4,t,4)}function lA(){return"+0000"}function Sd(){return"%"}function Ed(e){return+e}function jd(e){return Math.floor(+e/1e3)}var wr,Yp,Gp;cA({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function cA(e){return wr=cO(e),Yp=wr.format,wr.parse,Gp=wr.utcFormat,wr.utcParse,wr}function fA(e){return new Date(e)}function dA(e){return e instanceof Date?+e:+new Date(+e)}function Ds(e,t,r,n,i,a,o,u,l,c){var s=bs(),f=s.invert,d=s.domain,h=c(".%L"),v=c(":%S"),p=c("%I:%M"),g=c("%I %p"),y=c("%a %d"),b=c("%b %d"),x=c("%B"),P=c("%Y");function w(O){return(l(O)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>eP(e,a/n))},r.copy=function(){return Jp(t).domain(e)},Mt.apply(r,arguments)}function Yi(){var e=0,t=.5,r=1,n=1,i,a,o,u,l,c=Te,s,f=!1,d;function h(p){return isNaN(p=+p)?d:(p=.5+((p=+s(p))-a)*(n*pe.chartData,$s=E([yr],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),Rs=(e,t,r,n)=>n?$s(e):yr(e);function Dr(e){if(Array.isArray(e)&&e.length===2){var[t,r]=e;if(Ye(t)&&Ye(r))return!0}return!1}function Td(e,t,r){return r?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function gA(e,t){if(t&&typeof e!="function"&&Array.isArray(e)&&e.length===2){var[r,n]=e,i,a;if(Ye(r))i=r;else if(typeof r=="function")return;if(Ye(n))a=n;else if(typeof n=="function")return;var o=[i,a];if(Dr(o))return o}}function yA(e,t,r){if(!(!r&&t==null)){if(typeof e=="function"&&t!=null)try{var n=e(t,r);if(Dr(n))return Td(n,t,r)}catch{}if(Array.isArray(e)&&e.length===2){var[i,a]=e,o,u;if(i==="auto")t!=null&&(o=Math.min(...t));else if(D(i))o=i;else if(typeof i=="function")try{t!=null&&(o=i(t==null?void 0:t[0]))}catch{}else if(typeof i=="string"&&gf.test(i)){var l=gf.exec(i);if(l==null||t==null)o=void 0;else{var c=+l[1];o=t[0]-c}}else o=t==null?void 0:t[0];if(a==="auto")t!=null&&(u=Math.max(...t));else if(D(a))u=a;else if(typeof a=="function")try{t!=null&&(u=a(t==null?void 0:t[1]))}catch{}else if(typeof a=="string"&&yf.test(a)){var s=yf.exec(a);if(s==null||t==null)u=void 0;else{var f=+s[1];u=t[1]+f}}else u=t==null?void 0:t[1];var d=[o,u];if(Dr(d))return t==null?d:Td(d,t,r)}}}var Rr=1e9,bA={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Bs,ne=!0,rt="[DecimalError] ",lr=rt+"Invalid argument: ",Ls=rt+"Exponent out of range: ",Lr=Math.floor,er=Math.pow,xA=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,ze,me=1e7,te=7,rm=9007199254740991,gi=Lr(rm/te),M={};M.absoluteValue=M.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};M.comparedTo=M.cmp=function(e){var t,r,n,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};M.decimalPlaces=M.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*te;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};M.dividedBy=M.div=function(e){return At(this,new this.constructor(e))};M.dividedToIntegerBy=M.idiv=function(e){var t=this,r=t.constructor;return Z(At(t,new r(e),0,1),r.precision)};M.equals=M.eq=function(e){return!this.cmp(e)};M.exponent=function(){return fe(this)};M.greaterThan=M.gt=function(e){return this.cmp(e)>0};M.greaterThanOrEqualTo=M.gte=function(e){return this.cmp(e)>=0};M.isInteger=M.isint=function(){return this.e>this.d.length-2};M.isNegative=M.isneg=function(){return this.s<0};M.isPositive=M.ispos=function(){return this.s>0};M.isZero=function(){return this.s===0};M.lessThan=M.lt=function(e){return this.cmp(e)<0};M.lessThanOrEqualTo=M.lte=function(e){return this.cmp(e)<1};M.logarithm=M.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(ze))throw Error(rt+"NaN");if(r.s<1)throw Error(rt+(r.s?"NaN":"-Infinity"));return r.eq(ze)?new n(0):(ne=!1,t=At(fn(r,a),fn(e,a),a),ne=!0,Z(t,i))};M.minus=M.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?am(t,e):nm(t,(e.s=-e.s,e))};M.modulo=M.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(rt+"NaN");return r.s?(ne=!1,t=At(r,e,0,1).times(e),ne=!0,r.minus(t)):Z(new n(r),i)};M.naturalExponential=M.exp=function(){return im(this)};M.naturalLogarithm=M.ln=function(){return fn(this)};M.negated=M.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};M.plus=M.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?nm(t,e):am(t,(e.s=-e.s,e))};M.precision=M.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(lr+e);if(t=fe(i)+1,n=i.d.length-1,r=n*te+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};M.squareRoot=M.sqrt=function(){var e,t,r,n,i,a,o,u=this,l=u.constructor;if(u.s<1){if(!u.s)return new l(0);throw Error(rt+"NaN")}for(e=fe(u),ne=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=ct(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Lr((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new l(t)):n=new l(i.toString()),r=l.precision,i=o=r+3;;)if(a=n,n=a.plus(At(u,a,o+2)).times(.5),ct(a.d).slice(0,o)===(t=ct(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(Z(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;o+=4}return ne=!0,Z(n,r)};M.times=M.mul=function(e){var t,r,n,i,a,o,u,l,c,s=this,f=s.constructor,d=s.d,h=(e=new f(e)).d;if(!s.s||!e.s)return new f(0);for(e.s*=s.s,r=s.e+e.e,l=d.length,c=h.length,l=0;){for(t=0,i=l+n;i>n;)u=a[i]+h[n]*d[i-n-1]+t,a[i--]=u%me|0,t=u/me|0;a[i]=(a[i]+t)%me|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,ne?Z(e,f.precision):e};M.toDecimalPlaces=M.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(ht(e,0,Rr),t===void 0?t=n.rounding:ht(t,0,8),Z(r,e+fe(r)+1,t))};M.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=hr(n,!0):(ht(e,0,Rr),t===void 0?t=i.rounding:ht(t,0,8),n=Z(new i(n),e+1,t),r=hr(n,!0,e+1)),r};M.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?hr(i):(ht(e,0,Rr),t===void 0?t=a.rounding:ht(t,0,8),n=Z(new a(i),e+fe(i)+1,t),r=hr(n.abs(),!1,e+fe(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};M.toInteger=M.toint=function(){var e=this,t=e.constructor;return Z(new t(e),fe(e)+1,t.rounding)};M.toNumber=function(){return+this};M.toPower=M.pow=function(e){var t,r,n,i,a,o,u=this,l=u.constructor,c=12,s=+(e=new l(e));if(!e.s)return new l(ze);if(u=new l(u),!u.s){if(e.s<1)throw Error(rt+"Infinity");return u}if(u.eq(ze))return u;if(n=l.precision,e.eq(ze))return Z(u,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=u.s,o){if((r=s<0?-s:s)<=rm){for(i=new l(ze),t=Math.ceil(n/te+4),ne=!1;r%2&&(i=i.times(u),Cd(i.d,t)),r=Lr(r/2),r!==0;)u=u.times(u),Cd(u.d,t);return ne=!0,e.s<0?new l(ze).div(i):Z(i,n)}}else if(a<0)throw Error(rt+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,ne=!1,i=e.times(fn(u,n+c)),ne=!0,i=im(i),i.s=a,i};M.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=fe(i),n=hr(i,r<=a.toExpNeg||r>=a.toExpPos)):(ht(e,1,Rr),t===void 0?t=a.rounding:ht(t,0,8),i=Z(new a(i),e,t),r=fe(i),n=hr(i,e<=r||r<=a.toExpNeg,e)),n};M.toSignificantDigits=M.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(ht(e,1,Rr),t===void 0?t=n.rounding:ht(t,0,8)),Z(new n(r),e,t)};M.toString=M.valueOf=M.val=M.toJSON=M[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=fe(e),r=e.constructor;return hr(e,t<=r.toExpNeg||t>=r.toExpPos)};function nm(e,t){var r,n,i,a,o,u,l,c,s=e.constructor,f=s.precision;if(!e.s||!t.s)return t.s||(t=new s(e)),ne?Z(t,f):t;if(l=e.d,c=t.d,o=e.e,i=t.e,l=l.slice(),a=o-i,a){for(a<0?(n=l,a=-a,u=c.length):(n=c,i=o,u=l.length),o=Math.ceil(f/te),u=o>u?o+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=l.length,a=c.length,u-a<0&&(a=u,n=c,c=l,l=n),r=0;a;)r=(l[--a]=l[a]+c[a]+r)/me|0,l[a]%=me;for(r&&(l.unshift(r),++i),u=l.length;l[--u]==0;)l.pop();return t.d=l,t.e=i,ne?Z(t,f):t}function ht(e,t,r){if(e!==~~e||er)throw Error(lr+e)}function ct(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(u=l=0;ui[u]?1:-1;break}return l}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var u,l,c,s,f,d,h,v,p,g,y,b,x,P,w,O,A,j,T=n.constructor,I=n.s==i.s?1:-1,C=n.d,_=i.d;if(!n.s)return new T(n);if(!i.s)throw Error(rt+"Division by zero");for(l=n.e-i.e,A=_.length,w=C.length,h=new T(I),v=h.d=[],c=0;_[c]==(C[c]||0);)++c;if(_[c]>(C[c]||0)&&--l,a==null?b=a=T.precision:o?b=a+(fe(n)-fe(i))+1:b=a,b<0)return new T(0);if(b=b/te+2|0,c=0,A==1)for(s=0,_=_[0],b++;(c1&&(_=e(_,s),C=e(C,s),A=_.length,w=C.length),P=A,p=C.slice(0,A),g=p.length;g=me/2&&++O;do s=0,u=t(_,p,A,g),u<0?(y=p[0],A!=g&&(y=y*me+(p[1]||0)),s=y/O|0,s>1?(s>=me&&(s=me-1),f=e(_,s),d=f.length,g=p.length,u=t(f,p,d,g),u==1&&(s--,r(f,A16)throw Error(Ls+fe(e));if(!e.s)return new s(ze);for(ne=!1,u=f,o=new s(.03125);e.abs().gte(.1);)e=e.times(o),c+=5;for(n=Math.log(er(2,c))/Math.LN10*2+5|0,u+=n,r=i=a=new s(ze),s.precision=u;;){if(i=Z(i.times(e),u),r=r.times(++l),o=a.plus(At(i,r,u)),ct(o.d).slice(0,u)===ct(a.d).slice(0,u)){for(;c--;)a=Z(a.times(a),u);return s.precision=f,t==null?(ne=!0,Z(a,f)):a}a=o}}function fe(e){for(var t=e.e*te,r=e.d[0];r>=10;r/=10)t++;return t}function ko(e,t,r){if(t>e.LN10.sd())throw ne=!0,r&&(e.precision=r),Error(rt+"LN10 precision limit exceeded");return Z(new e(e.LN10),t)}function Rt(e){for(var t="";e--;)t+="0";return t}function fn(e,t){var r,n,i,a,o,u,l,c,s,f=1,d=10,h=e,v=h.d,p=h.constructor,g=p.precision;if(h.s<1)throw Error(rt+(h.s?"NaN":"-Infinity"));if(h.eq(ze))return new p(0);if(t==null?(ne=!1,c=g):c=t,h.eq(10))return t==null&&(ne=!0),ko(p,c);if(c+=d,p.precision=c,r=ct(v),n=r.charAt(0),a=fe(h),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)h=h.times(e),r=ct(h.d),n=r.charAt(0),f++;a=fe(h),n>1?(h=new p("0."+r),a++):h=new p(n+"."+r.slice(1))}else return l=ko(p,c+2,g).times(a+""),h=fn(new p(n+"."+r.slice(1)),c-d).plus(l),p.precision=g,t==null?(ne=!0,Z(h,g)):h;for(u=o=h=At(h.minus(ze),h.plus(ze),c),s=Z(h.times(h),c),i=3;;){if(o=Z(o.times(s),c),l=u.plus(At(o,new p(i),c)),ct(l.d).slice(0,c)===ct(u.d).slice(0,c))return u=u.times(2),a!==0&&(u=u.plus(ko(p,c+2,g).times(a+""))),u=At(u,new p(f),c),p.precision=g,t==null?(ne=!0,Z(u,g)):u;u=l,i+=2}}function kd(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Lr(r/te),e.d=[],n=(r+1)%te,r<0&&(n+=te),ngi||e.e<-gi))throw Error(Ls+r)}else e.s=0,e.e=0,e.d=[0];return e}function Z(e,t,r){var n,i,a,o,u,l,c,s,f=e.d;for(o=1,a=f[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=te,i=t,c=f[s=0];else{if(s=Math.ceil((n+1)/te),a=f.length,s>=a)return e;for(c=a=f[s],o=1;a>=10;a/=10)o++;n%=te,i=n-te+o}if(r!==void 0&&(a=er(10,o-i-1),u=c/a%10|0,l=t<0||f[s+1]!==void 0||c%a,l=r<4?(u||l)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||l||r==6&&(n>0?i>0?c/er(10,o-i):0:f[s-1])%10&1||r==(e.s<0?8:7))),t<1||!f[0])return l?(a=fe(e),f.length=1,t=t-a-1,f[0]=er(10,(te-t%te)%te),e.e=Lr(-t/te)||0):(f.length=1,f[0]=e.e=e.s=0),e;if(n==0?(f.length=s,a=1,s--):(f.length=s+1,a=er(10,te-n),f[s]=i>0?(c/er(10,o-i)%er(10,i)|0)*a:0),l)for(;;)if(s==0){(f[0]+=a)==me&&(f[0]=1,++e.e);break}else{if(f[s]+=a,f[s]!=me)break;f[s--]=0,a=1}for(n=f.length;f[--n]===0;)f.pop();if(ne&&(e.e>gi||e.e<-gi))throw Error(Ls+fe(e));return e}function am(e,t){var r,n,i,a,o,u,l,c,s,f,d=e.constructor,h=d.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new d(e),ne?Z(t,h):t;if(l=e.d,f=t.d,n=t.e,c=e.e,l=l.slice(),o=c-n,o){for(s=o<0,s?(r=l,o=-o,u=f.length):(r=f,n=c,u=l.length),i=Math.max(Math.ceil(h/te),u)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=l.length,u=f.length,s=i0;--i)l[u++]=0;for(i=f.length;i>o;){if(l[--i]0?a=a.charAt(0)+"."+a.slice(1)+Rt(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+Rt(-i-1)+a,r&&(n=r-o)>0&&(a+=Rt(n))):i>=o?(a+=Rt(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+Rt(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=Rt(n))),e.s<0?"-"+a:a}function Cd(e,t){if(e.length>t)return e.length=t,!0}function om(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(lr+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return kd(o,a.toString())}else if(typeof a!="string")throw Error(lr+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,xA.test(a))kd(o,a);else throw Error(lr+a)}if(i.prototype=M,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=om,i.config=i.set=wA,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(lr+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(lr+r+": "+n);return this}var Bs=om(bA);ze=new Bs(1);const G=Bs;var PA=e=>e,um={},sm=e=>e===um,_d=e=>function t(){return arguments.length===0||arguments.length===1&&sm(arguments.length<=0?void 0:arguments[0])?t:e(...arguments)},lm=(e,t)=>e===1?t:_d(function(){for(var r=arguments.length,n=new Array(r),i=0;io!==um).length;return a>=e?t(...n):lm(e-a,_d(function(){for(var o=arguments.length,u=new Array(o),l=0;lsm(s)?u.shift():s);return t(...c,...u)}))}),Gi=e=>lm(e.length,e),Pu=(e,t)=>{for(var r=[],n=e;nArray.isArray(t)?t.map(e):Object.keys(t).map(r=>t[r]).map(e)),AA=function(){for(var t=arguments.length,r=new Array(t),n=0;nl(u),a(...arguments))}},Ou=e=>Array.isArray(e)?e.reverse():e.split("").reverse().join(""),cm=e=>{var t=null,r=null;return function(){for(var n=arguments.length,i=new Array(n),a=0;a{var l;return o===((l=t)===null||l===void 0?void 0:l[u])})||(t=i,r=e(...i)),r}};function fm(e){var t;return e===0?t=1:t=Math.floor(new G(e).abs().log(10).toNumber())+1,t}function dm(e,t,r){for(var n=new G(e),i=0,a=[];n.lt(t)&&i<1e5;)a.push(n.toNumber()),n=n.add(r),i++;return a}Gi((e,t,r)=>{var n=+e,i=+t;return n+r*(i-n)});Gi((e,t,r)=>{var n=t-+e;return n=n||1/0,(r-e)/n});Gi((e,t,r)=>{var n=t-+e;return n=n||1/0,Math.max(0,Math.min(1,(r-e)/n))});var hm=e=>{var[t,r]=e,[n,i]=[t,r];return t>r&&([n,i]=[r,t]),[n,i]},vm=(e,t,r)=>{if(e.lte(0))return new G(0);var n=fm(e.toNumber()),i=new G(10).pow(n),a=e.div(i),o=n!==1?.05:.1,u=new G(Math.ceil(a.div(o).toNumber())).add(r).mul(o),l=u.mul(i);return t?new G(l.toNumber()):new G(Math.ceil(l.toNumber()))},SA=(e,t,r)=>{var n=new G(1),i=new G(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new G(10).pow(fm(e)-1),i=new G(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new G(Math.floor(e)))}else e===0?i=new G(Math.floor((t-1)/2)):r||(i=new G(Math.floor(e)));var o=Math.floor((t-1)/2),u=AA(OA(l=>i.add(new G(l-o).mul(n)).toNumber()),Pu);return u(0,t)},pm=function(t,r,n,i){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((r-t)/(n-1)))return{step:new G(0),tickMin:new G(0),tickMax:new G(0)};var o=vm(new G(r).sub(t).div(n-1),i,a),u;t<=0&&r>=0?u=new G(0):(u=new G(t).add(r).div(2),u=u.sub(new G(u).mod(o)));var l=Math.ceil(u.sub(t).div(o).toNumber()),c=Math.ceil(new G(r).sub(u).div(o).toNumber()),s=l+c+1;return s>n?pm(t,r,n,i,a+1):(s0?c+(n-s):c,l=r>0?l:l+(n-s)),{step:o,tickMin:u.sub(new G(l).mul(o)),tickMax:u.add(new G(c).mul(o))})};function EA(e){var[t,r]=e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Math.max(n,2),[o,u]=hm([t,r]);if(o===-1/0||u===1/0){var l=u===1/0?[o,...Pu(0,n-1).map(()=>1/0)]:[...Pu(0,n-1).map(()=>-1/0),u];return t>r?Ou(l):l}if(o===u)return SA(o,n,i);var{step:c,tickMin:s,tickMax:f}=pm(o,u,a,i,0),d=dm(s,f.add(new G(.1).mul(c)),c);return t>r?Ou(d):d}function jA(e,t){var[r,n]=e,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,[a,o]=hm([r,n]);if(a===-1/0||o===1/0)return[r,n];if(a===o)return[a];var u=Math.max(t,2),l=vm(new G(o).sub(a).div(u-1),i,0),c=[...dm(new G(a),new G(o),l),o];return i===!1&&(c=c.map(s=>Math.round(s))),r>n?Ou(c):c}var TA=cm(EA),kA=cm(jA),mm=e=>e.rootProps.maxBarSize,CA=e=>e.rootProps.barGap,gm=e=>e.rootProps.barCategoryGap,_A=e=>e.rootProps.barSize,Pn=e=>e.rootProps.stackOffset,Ks=e=>e.options.chartName,qs=e=>e.rootProps.syncId,ym=e=>e.rootProps.syncMethod,zs=e=>e.options.eventEmitter,mt={allowDuplicatedCategory:!0,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"category"},Be={allowDataOverflow:!1,allowDuplicatedCategory:!0,radiusAxisId:0,scale:"auto",tick:!0,tickCount:5,type:"number"},Vi=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t},MA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!1,dataKey:void 0,domain:void 0,id:mt.angleAxisId,includeHidden:!1,name:void 0,reversed:mt.reversed,scale:mt.scale,tick:mt.tick,tickCount:void 0,ticks:void 0,type:mt.type,unit:void 0},DA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:Be.type,unit:void 0},IA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:mt.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:mt.angleAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:mt.scale,tick:mt.tick,tickCount:void 0,ticks:void 0,type:"number",unit:void 0},NA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:"category",unit:void 0},Fs=(e,t)=>e.polarAxis.angleAxis[t]!=null?e.polarAxis.angleAxis[t]:e.layout.layoutType==="radial"?IA:MA,Ws=(e,t)=>e.polarAxis.radiusAxis[t]!=null?e.polarAxis.radiusAxis[t]:e.layout.layoutType==="radial"?NA:DA,Xi=e=>e.polarOptions,Us=E([Ct,_t,ve],Qv),bm=E([Xi,Us],(e,t)=>{if(e!=null)return ke(e.innerRadius,t,0)}),xm=E([Xi,Us],(e,t)=>{if(e!=null)return ke(e.outerRadius,t,t*.8)}),$A=e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:r}=e;return[t,r]},wm=E([Xi],$A);E([Fs,wm],Vi);var Pm=E([Us,bm,xm],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});E([Ws,Pm],Vi);var RA=E([Y,Xi,bm,xm,Ct,_t],(e,t,r,n,i,a)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var{cx:o,cy:u,startAngle:l,endAngle:c}=t;return{cx:ke(o,i,i/2),cy:ke(u,a,a/2),innerRadius:r,outerRadius:n,startAngle:l,endAngle:c,clockWise:!1}}}),ue=(e,t)=>t,On=(e,t,r)=>r;function Md(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function yi(e){for(var t=1;t{var r=e.cartesianAxis.xAxis[t];return r??Re},Le={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:Au,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,width:Li},Gt=(e,t)=>{var r=e.cartesianAxis.yAxis[t];return r??Le},qA={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},Hs=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??qA},se=(e,t,r)=>{switch(t){case"xAxis":return Dt(e,r);case"yAxis":return Gt(e,r);case"zAxis":return Hs(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return Ws(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},zA=(e,t,r)=>{switch(t){case"xAxis":return Dt(e,r);case"yAxis":return Gt(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},An=(e,t,r)=>{switch(t){case"xAxis":return Dt(e,r);case"yAxis":return Gt(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return Ws(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},Om=e=>e.graphicalItems.countOfBars>0;function Ys(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var Zi=e=>e.graphicalItems.cartesianItems,FA=E([ue,On],Ys),Gs=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),Sn=E([Zi,se,FA],Gs),Am=e=>e.filter(t=>t.stackId===void 0),WA=E([Sn],Am),Vs=e=>e.map(t=>t.data).filter(Boolean).flat(1),UA=E([Sn],Vs),Xs=(e,t)=>{var{chartData:r=[],dataStartIndex:n,dataEndIndex:i}=t;return e.length>0?e:r.slice(n,i+1)},Ji=E([UA,Rs],Xs),Zs=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:re(i,n)}))):e.map(n=>({value:n})),Qi=E([Ji,se,Sn],Zs);function Sm(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function br(e){return e.filter(t=>dt(t)||t instanceof Date).map(Number).filter(t=>We(t)===!1)}function HA(e,t,r){return!r||typeof t!="number"||We(t)?[]:r.length?br(r.flatMap(n=>{var i=re(e,n.dataKey),a,o;if(Array.isArray(i)?[a,o]=i:a=o=i,!(!Ye(a)||!Ye(o)))return[t-a,t+o]})):[]}var Em=(e,t,r)=>{var n={},i=t.reduce((a,o)=>(o.stackId==null||(a[o.stackId]==null&&(a[o.stackId]=[]),a[o.stackId].push(o)),a),n);return Object.fromEntries(Object.entries(i).map(a=>{var[o,u]=a,l=u.map(c=>c.dataKey);return[o,{stackedData:ow(e,l,r),graphicalItems:u}]}))},Su=E([Ji,Sn,Pn],Em),jm=(e,t,r)=>{var{dataStartIndex:n,dataEndIndex:i}=t;if(r!=="zAxis"){var a=cw(e,n,i);if(!(a!=null&&a[0]===0&&a[1]===0))return a}},YA=E([Su,yr,ue],jm),Tm=(e,t,r,n)=>r.length>0?e.flatMap(i=>r.flatMap(a=>{var o,u,l=(o=a.errorBars)===null||o===void 0?void 0:o.filter(s=>Sm(n,s)),c=re(i,(u=t.dataKey)!==null&&u!==void 0?u:a.dataKey);return{value:c,errorDomain:HA(i,c,l)}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(i=>({value:re(i,t.dataKey),errorDomain:[]})):e.map(i=>({value:i,errorDomain:[]})),GA=E(Ji,se,WA,ue,Tm);function VA(e){var{value:t}=e;if(dt(t)||t instanceof Date)return t}var XA=e=>{var t=e.flatMap(n=>[n.value,n.errorDomain]).flat(1),r=br(t);if(r.length!==0)return[Math.min(...r),Math.max(...r)]},ZA=(e,t,r)=>{var n=e.map(VA).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&Xh(n))?wp(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},Js=e=>{var t;if(e==null||!("domain"in e))return Au;if(e.domain!=null)return e.domain;if(e.ticks!=null){if(e.type==="number"){var r=br(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:Au},Qs=function(){for(var t=arguments.length,r=new Array(t),n=0;ne.referenceElements.dots,Br=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),JA=E([km,ue,On],Br),Cm=e=>e.referenceElements.areas,QA=E([Cm,ue,On],Br),_m=e=>e.referenceElements.lines,eS=E([_m,ue,On],Br),Mm=(e,t)=>{var r=br(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},tS=E(JA,ue,Mm),Dm=(e,t)=>{var r=br(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},rS=E([QA,ue],Dm),Im=(e,t)=>{var r=br(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},nS=E(eS,ue,Im),iS=E(tS,nS,rS,(e,t,r)=>Qs(e,r,t)),Nm=E([se],Js),el=(e,t,r,n,i)=>{var a=gA(t,e.allowDataOverflow);return a??yA(t,Qs(r,i,XA(n)),e.allowDataOverflow)},aS=E([se,Nm,YA,GA,iS],el),oS=[0,1],tl=(e,t,r,n,i,a,o)=>{if(!(e==null||r==null||r.length===0)){var{dataKey:u,type:l}=e,c=Ut(t,a);return c&&u==null?wp(0,r.length):l==="category"?ZA(n,e,c):i==="expand"?oS:o}},rl=E([se,Y,Ji,Qi,Pn,ue,aS],tl),$m=(e,t,r,n,i)=>{if(e!=null){var{scale:a,type:o}=e;if(a==="auto")return t==="radial"&&i==="radiusAxis"?"band":t==="radial"&&i==="angleAxis"?"linear":o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?"point":o==="category"?"band":"linear";if(typeof a=="string"){var u="scale".concat(pn(a));return u in Qr?u:"point"}}},Kr=E([se,Y,Om,Ks,ue],$m);function uS(e){if(e!=null){if(e in Qr)return Qr[e]();var t="scale".concat(pn(e));if(t in Qr)return Qr[t]()}}function nl(e,t,r,n){if(!(r==null||n==null)){if(typeof e.scale=="function")return e.scale.copy().domain(r).range(n);var i=uS(t);if(i!=null){var a=i.domain(r).range(n);return tw(a),a}}}var il=(e,t,r)=>{var n=Js(t);if(!(r!=="auto"&&r!=="linear")){if(t!=null&&t.tickCount&&Array.isArray(n)&&(n[0]==="auto"||n[1]==="auto")&&Dr(e))return TA(e,t.tickCount,t.allowDecimals);if(t!=null&&t.tickCount&&t.type==="number"&&Dr(e))return kA(e,t.tickCount,t.allowDecimals)}},al=E([rl,An,Kr],il),ol=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&Dr(t)&&Array.isArray(r)&&r.length>0){var i=t[0],a=r[0],o=t[1],u=r[r.length-1];return[Math.min(i,a),Math.max(o,u)]}return t},sS=E([se,rl,al,ue],ol),lS=E(Qi,se,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(br(e.map(u=>u.value))).sort((u,l)=>u-l);if(n.length<2)return 1/0;var i=n[n.length-1]-n[0];if(i===0)return 1/0;for(var a=0;an,(e,t,r,n,i)=>{if(!Ye(e))return 0;var a=t==="vertical"?n.height:n.width;if(i==="gap")return e*a/2;if(i==="no-gap"){var o=ke(r,e*a),u=e*a/2;return u-o-(u-o)/a*o}return 0}),cS=(e,t)=>{var r=Dt(e,t);return r==null||typeof r.padding!="string"?0:Rm(e,"xAxis",t,r.padding)},fS=(e,t)=>{var r=Gt(e,t);return r==null||typeof r.padding!="string"?0:Rm(e,"yAxis",t,r.padding)},dS=E(Dt,cS,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var{padding:i}=e;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),hS=E(Gt,fS,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var{padding:i}=e;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),vS=E([ve,dS,Ki,Bi,(e,t,r)=>r],(e,t,r,n,i)=>{var{padding:a}=n;return i?[a.left,r.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),pS=E([ve,Y,hS,Ki,Bi,(e,t,r)=>r],(e,t,r,n,i,a)=>{var{padding:o}=i;return a?[n.height-o.bottom,o.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),En=(e,t,r,n)=>{var i;switch(t){case"xAxis":return vS(e,r,n);case"yAxis":return pS(e,r,n);case"zAxis":return(i=Hs(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return wm(e);case"radiusAxis":return Pm(e,r);default:return}},Lm=E([se,En],Vi),qr=E([se,Kr,sS,Lm],nl);E(Sn,ue,(e,t)=>e.flatMap(r=>{var n;return(n=r.errorBars)!==null&&n!==void 0?n:[]}).filter(r=>Sm(t,r)));function Bm(e,t){return e.idt.id?1:0}var ea=(e,t)=>t,ta=(e,t,r)=>r,mS=E(ss,ea,ta,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(Bm)),gS=E(ls,ea,ta,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(Bm)),Km=(e,t)=>({width:e.width,height:t.height}),yS=(e,t)=>{var r=typeof t.width=="number"?t.width:Li;return{width:r,height:e.height}},qm=E(ve,Dt,Km),bS=(e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}},xS=(e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}},wS=E(_t,ve,mS,ea,ta,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=Km(t,u);o==null&&(o=bS(t,n,e));var c=n==="top"&&!i||n==="bottom"&&i;a[u.id]=o-Number(c)*l.height,o+=(c?-1:1)*l.height}),a}),PS=E(Ct,ve,gS,ea,ta,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=yS(t,u);o==null&&(o=xS(t,n,e));var c=n==="left"&&!i||n==="right"&&i;a[u.id]=o-Number(c)*l.width,o+=(c?-1:1)*l.width}),a}),OS=(e,t)=>{var r=ve(e),n=Dt(e,t);if(n!=null){var i=wS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:r.left,y:0}:{x:r.left,y:a}}},AS=(e,t)=>{var r=ve(e),n=Gt(e,t);if(n!=null){var i=PS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:0,y:r.top}:{x:a,y:r.top}}},zm=E(ve,Gt,(e,t)=>{var r=typeof t.width=="number"?t.width:Li;return{width:r,height:e.height}}),Dd=(e,t,r)=>{switch(t){case"xAxis":return qm(e,r).width;case"yAxis":return zm(e,r).height;default:return}},Fm=(e,t,r,n)=>{if(r!=null){var{allowDuplicatedCategory:i,type:a,dataKey:o}=r,u=Ut(e,n),l=t.map(c=>c.value);if(o&&u&&a==="category"&&i&&Xh(l))return l}},ul=E([Y,Qi,se,ue],Fm),Wm=(e,t,r,n)=>{if(!(r==null||r.dataKey==null)){var{type:i,scale:a}=r,o=Ut(e,n);if(o&&(i==="number"||a!=="auto"))return t.map(u=>u.value)}},sl=E([Y,Qi,An,ue],Wm),Id=E([Y,zA,Kr,qr,ul,sl,En,al,ue],(e,t,r,n,i,a,o,u,l)=>{if(t==null)return null;var c=Ut(e,l);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:l,categoricalDomain:a,duplicateDomain:i,isCategorical:c,niceTicks:u,range:o,realScaleType:r,scale:n}}),SS=(e,t,r,n,i,a,o,u,l)=>{if(!(t==null||n==null)){var c=Ut(e,l),{type:s,ticks:f,tickCount:d}=t,h=r==="scaleBand"&&typeof n.bandwidth=="function"?n.bandwidth()/2:2,v=s==="category"&&n.bandwidth?n.bandwidth()/h:0;v=l==="angleAxis"&&a!=null&&a.length>=2?ge(a[0]-a[1])*2*v:v;var p=f||i;if(p){var g=p.map((y,b)=>{var x=o?o.indexOf(y):y;return{index:b,coordinate:n(x)+v,value:y,offset:v}});return g.filter(y=>!We(y.coordinate))}return c&&u?u.map((y,b)=>({coordinate:n(y)+v,value:y,index:b,offset:v})):n.ticks?n.ticks(d).map(y=>({coordinate:n(y)+v,value:y,offset:v})):n.domain().map((y,b)=>({coordinate:n(y)+v,value:o?o[y]:y,index:b,offset:v}))}},Um=E([Y,An,Kr,qr,al,En,ul,sl,ue],SS),ES=(e,t,r,n,i,a,o)=>{if(!(t==null||r==null||n==null||n[0]===n[1])){var u=Ut(e,o),{tickCount:l}=t,c=0;return c=o==="angleAxis"&&(n==null?void 0:n.length)>=2?ge(n[0]-n[1])*2*c:c,u&&a?a.map((s,f)=>({coordinate:r(s)+c,value:s,index:f,offset:c})):r.ticks?r.ticks(l).map(s=>({coordinate:r(s)+c,value:s,offset:c})):r.domain().map((s,f)=>({coordinate:r(s)+c,value:i?i[s]:s,index:f,offset:c}))}},Ft=E([Y,An,qr,En,ul,sl,ue],ES),vt=E(se,qr,(e,t)=>{if(!(e==null||t==null))return yi(yi({},e),{},{scale:t})}),jS=E([se,Kr,rl,Lm],nl);E((e,t,r)=>Hs(e,r),jS,(e,t)=>{if(!(e==null||t==null))return yi(yi({},e),{},{scale:t})});var TS=E([Y,ss,ls],(e,t,r)=>{switch(e){case"horizontal":return t.some(n=>n.reversed)?"right-to-left":"left-to-right";case"vertical":return r.some(n=>n.reversed)?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}}),Hm=e=>e.options.defaultTooltipEventType,Ym=e=>e.options.validateTooltipEventTypes;function Gm(e,t,r){if(e==null)return t;var n=e?"axis":"item";return r==null?t:r.includes(n)?n:t}function ll(e,t){var r=Hm(e),n=Ym(e);return Gm(t,r,n)}function kS(e){return $(t=>ll(t,e))}var Vm=(e,t)=>{var r,n=Number(t);if(!(We(n)||t==null))return n>=0?e==null||(r=e[n])===null||r===void 0?void 0:r.value:void 0},CS=e=>e.tooltip.settings,Lt={active:!1,index:null,dataKey:void 0,coordinate:void 0},_S={itemInteraction:{click:Lt,hover:Lt},axisInteraction:{click:Lt,hover:Lt},keyboardInteraction:Lt,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},Xm=nt({name:"tooltip",initialState:_S,reducers:{addTooltipEntrySettings(e,t){e.tooltipItemPayloads.push(t.payload)},removeTooltipEntrySettings(e,t){var r=Ot(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate,e.keyboardInteraction.dataKey=t.payload.activeDataKey}}}),{addTooltipEntrySettings:MS,removeTooltipEntrySettings:DS,setTooltipSettingsState:IS,setActiveMouseOverItemIndex:Zm,mouseLeaveItem:NS,mouseLeaveChart:Jm,setActiveClickItemIndex:$S,setMouseOverAxisIndex:Qm,setMouseClickAxisIndex:RS,setSyncInteraction:Eu,setKeyboardInteraction:ju}=Xm.actions,LS=Xm.reducer;function Nd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function qn(e){for(var t=1;t{if(t==null)return Lt;var i=zS(e,t,r);if(i==null)return Lt;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var a=e.settings.active===!0;if(FS(i)){if(a)return qn(qn({},i),{},{active:!0})}else if(n!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:n};return qn(qn({},Lt),{},{coordinate:i.coordinate})},cl=(e,t)=>{var r=e==null?void 0:e.index;if(r==null)return null;var n=Number(r);if(!Ye(n))return r;var i=0,a=1/0;return t.length>0&&(a=t.length-1),String(Math.max(i,Math.min(n,a)))},tg=(e,t,r,n,i,a,o,u)=>{if(!(a==null||u==null)){var l=o[0],c=l==null?void 0:u(l.positions,a);if(c!=null)return c;var s=i==null?void 0:i[Number(a)];if(s)switch(r){case"horizontal":return{x:s.coordinate,y:(n.top+t)/2};default:return{x:(n.left+e)/2,y:s.coordinate}}}},rg=(e,t,r,n)=>{if(t==="axis")return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i;return r==="hover"?i=e.itemInteraction.hover.dataKey:i=e.itemInteraction.click.dataKey,i==null&&n!=null?[e.tooltipItemPayloads[0]]:e.tooltipItemPayloads.filter(a=>{var o;return((o=a.settings)===null||o===void 0?void 0:o.dataKey)===i})},jn=e=>e.options.tooltipPayloadSearcher,zr=e=>e.tooltip;function $d(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Rd(e){for(var t=1;t{if(!(t==null||a==null)){var{chartData:u,computedData:l,dataStartIndex:c,dataEndIndex:s}=r,f=[];return e.reduce((d,h)=>{var v,{dataDefinedOnItem:p,settings:g}=h,y=GS(p,u),b=YS(y,c,s),x=(v=g==null?void 0:g.dataKey)!==null&&v!==void 0?v:n==null?void 0:n.dataKey,P=g==null?void 0:g.nameKey,w;if(n!=null&&n.dataKey&&Array.isArray(b)&&!Array.isArray(b[0])&&o==="axis"?w=Zh(b,n.dataKey,i):w=a(b,t,l,P),Array.isArray(w))w.forEach(A=>{var j=Rd(Rd({},g),{},{name:A.name,unit:A.unit,color:void 0,fill:void 0});d.push(bf({tooltipEntrySettings:j,dataKey:A.dataKey,payload:A.payload,value:re(A.payload,A.dataKey),name:A.name}))});else{var O;d.push(bf({tooltipEntrySettings:g,dataKey:x,payload:w,value:re(w,x),name:(O=re(w,P))!==null&&O!==void 0?O:g==null?void 0:g.name}))}return d},f)}},xe=e=>{var t=Y(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},Fr=e=>e.tooltip.settings.axisId,Ae=e=>{var t=xe(e),r=Fr(e);return An(e,t,r)},fl=E([Ae,Y,Om,Ks,xe],$m),VS=E([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),XS=E([xe,Fr],Ys),ra=E([VS,Ae,XS],Gs),ZS=E([ra],Vs),xr=E([ZS,yr],Xs),dl=E([xr,Ae,ra],Zs),JS=E([Ae],Js),QS=E([xr,ra,Pn],Em),eE=E([QS,yr,xe],jm),tE=E([ra],Am),rE=E([xr,Ae,tE,xe],Tm),nE=E([km,xe,Fr],Br),iE=E([nE,xe],Mm),aE=E([Cm,xe,Fr],Br),oE=E([aE,xe],Dm),uE=E([_m,xe,Fr],Br),sE=E([uE,xe],Im),lE=E([iE,sE,oE],Qs),cE=E([Ae,JS,eE,rE,lE],el),ig=E([Ae,Y,xr,dl,Pn,xe,cE],tl),fE=E([ig,Ae,fl],il),dE=E([Ae,ig,fE,xe],ol),ag=e=>{var t=xe(e),r=Fr(e),n=!1;return En(e,t,r,n)},og=E([Ae,ag],Vi),ug=E([Ae,fl,dE,og],nl),hE=E([Y,dl,Ae,xe],Fm),vE=E([Y,dl,Ae,xe],Wm),pE=(e,t,r,n,i,a,o,u)=>{if(t){var{type:l}=t,c=Ut(e,u);if(n){var s=r==="scaleBand"&&n.bandwidth?n.bandwidth()/2:2,f=l==="category"&&n.bandwidth?n.bandwidth()/s:0;return f=u==="angleAxis"&&i!=null&&(i==null?void 0:i.length)>=2?ge(i[0]-i[1])*2*f:f,c&&o?o.map((d,h)=>({coordinate:n(d)+f,value:d,index:h,offset:f})):n.domain().map((d,h)=>({coordinate:n(d)+f,value:a?a[d]:d,index:h,offset:f}))}}},It=E([Y,Ae,fl,ug,ag,hE,vE,xe],pE),hl=E([Hm,Ym,CS],(e,t,r)=>Gm(r.shared,e,t)),sg=e=>e.tooltip.settings.trigger,vl=e=>e.tooltip.settings.defaultIndex,na=E([zr,hl,sg,vl],eg),Wt=E([na,xr],cl),lg=E([It,Wt],Vm),cg=E([na],e=>{if(e)return e.dataKey}),fg=E([zr,hl,sg,vl],rg),mE=E([Ct,_t,Y,ve,It,vl,fg,jn],tg),gE=E([na,mE],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),yE=E([na],e=>e.active),bE=E([fg,Wt,yr,Ae,lg,jn,hl],ng),xE=E([bE],e=>{if(e!=null){var t=e.map(r=>r.payload).filter(r=>r!=null);return Array.from(new Set(t))}});function Ld(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Bd(e){for(var t=1;t$(Ae),SE=()=>{var e=AE(),t=$(It),r=$(ug);return an(Bd(Bd({},e),{},{scale:r}),t)},EE=()=>$(Ks),pl=(e,t)=>t,dg=(e,t,r)=>r,ml=(e,t,r,n)=>n,jE=E(It,e=>_i(e,t=>t.coordinate)),gl=E([zr,pl,dg,ml],eg),hg=E([gl,xr],cl),TE=(e,t,r)=>{if(t!=null){var n=zr(e);return t==="axis"?r==="hover"?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:r==="hover"?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},vg=E([zr,pl,dg,ml],rg),bi=E([Ct,_t,Y,ve,It,ml,vg,jn],tg),kE=E([gl,bi],(e,t)=>{var r;return(r=e.coordinate)!==null&&r!==void 0?r:t}),pg=E(It,hg,Vm),CE=E([vg,hg,yr,Ae,pg,jn,pl],ng),_E=E([gl],e=>({isActive:e.active,activeIndex:e.index})),ME=(e,t,r,n,i,a,o,u)=>{if(!(!e||!t||!n||!i||!a)){var l=fw(e.chartX,e.chartY,t,r,u);if(l){var c=hw(l,t),s=Qx(c,o,a,n,i),f=dw(t,a,s,l);return{activeIndex:String(s),activeCoordinate:f}}}};function Tu(){return Tu=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.useContext(mg),Co={exports:{}},qd;function BE(){return qd||(qd=1,function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(r=!1));function i(l,c,s){this.fn=l,this.context=c,this.once=s||!1}function a(l,c,s,f,d){if(typeof s!="function")throw new TypeError("The listener must be a function");var h=new i(s,f||l,d),v=r?r+c:c;return l._events[v]?l._events[v].fn?l._events[v]=[l._events[v],h]:l._events[v].push(h):(l._events[v]=h,l._eventsCount++),l}function o(l,c){--l._eventsCount===0?l._events=new n:delete l._events[c]}function u(){this._events=new n,this._eventsCount=0}u.prototype.eventNames=function(){var c=[],s,f;if(this._eventsCount===0)return c;for(f in s=this._events)t.call(s,f)&&c.push(r?f.slice(1):f);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(s)):c},u.prototype.listeners=function(c){var s=r?r+c:c,f=this._events[s];if(!f)return[];if(f.fn)return[f.fn];for(var d=0,h=f.length,v=new Array(h);d{e.eventEmitter==null&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),FE=gg.reducer,{createEventEmitter:WE}=gg.actions;function UE(e){return e.tooltip.syncInteraction}var HE={chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},yg=nt({name:"chartData",initialState:HE,reducers:{setChartData(e,t){if(e.chartData=t.payload,t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var{startIndex:r,endIndex:n}=t.payload;r!=null&&(e.dataStartIndex=r),n!=null&&(e.dataEndIndex=n)}}}),{setChartData:Fd,setDataStartEndIndexes:YE,setComputedData:H2}=yg.actions,GE=yg.reducer,bg=()=>{};function VE(){var e=$(qs),t=$(zs),r=ae(),n=$(ym),i=$(It),a=qi(),o=cs(),u=$(l=>l.rootProps.className);m.useEffect(()=>{if(e==null)return bg;var l=(c,s,f)=>{if(t!==f&&e===c){if(n==="index"){r(s);return}if(i!=null){var d;if(typeof n=="function"){var h={activeTooltipIndex:s.payload.index==null?void 0:Number(s.payload.index),isTooltipActive:s.payload.active,activeIndex:s.payload.index==null?void 0:Number(s.payload.index),activeLabel:s.payload.label,activeDataKey:s.payload.dataKey,activeCoordinate:s.payload.coordinate},v=n(i,h);d=i[v]}else n==="value"&&(d=i.find(O=>String(O.value)===s.payload.label));var{coordinate:p}=s.payload;if(d==null||s.payload.active===!1||p==null||o==null){r(Eu({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0}));return}var{x:g,y}=p,b=Math.min(g,o.x+o.width),x=Math.min(y,o.y+o.height),P={x:a==="horizontal"?d.coordinate:b,y:a==="horizontal"?x:d.coordinate},w=Eu({active:s.payload.active,coordinate:P,dataKey:s.payload.dataKey,index:String(d.index),label:s.payload.label});r(w)}}};return dn.on(ku,l),()=>{dn.off(ku,l)}},[u,r,t,e,n,i,a,o])}function XE(){var e=$(qs),t=$(zs),r=ae();m.useEffect(()=>{if(e==null)return bg;var n=(i,a,o)=>{t!==o&&e===i&&r(YE(a))};return dn.on(zd,n),()=>{dn.off(zd,n)}},[r,t,e])}function ZE(){var e=ae();m.useEffect(()=>{e(WE())},[e]),VE(),XE()}function JE(e,t,r,n,i,a){var o=$(d=>TE(d,e,t)),u=$(zs),l=$(qs),c=$(ym),s=$(UE),f=s==null?void 0:s.active;m.useEffect(()=>{if(!f&&l!=null&&u!=null){var d=Eu({active:a,coordinate:r,dataKey:o,index:i,label:typeof n=="number"?String(n):n});dn.emit(ku,l,d,u)}},[f,r,o,i,n,u,l,c,a])}function Wd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ud(e){for(var t=1;t{w(IS({shared:g,trigger:y,axisId:P,active:r,defaultIndex:O}))},[w,g,y,P,r,O]);var A=cs(),j=hp(),T=kS(g),{activeIndex:I,isActive:C}=$(Ve=>_E(Ve,T,y,O)),_=$(Ve=>CE(Ve,T,y,O)),R=$(Ve=>pg(Ve,T,y,O)),B=$(Ve=>kE(Ve,T,y,O)),F=_,V=LE(),K=r??C,[de,oe]=Fb([F,K]),Ie=T==="axis"?R:void 0;JE(T,y,B,Ie,I,K);var Ge=x??V;if(Ge==null)return null;var L=F??Hd;K||(L=Hd),u&&L.length&&(L=pb(F.filter(Ve=>Ve.value!=null&&(Ve.hide!==!0||t.includeHidden)),s,rj));var we=L.length>0,Xt=m.createElement(Nw,{allowEscapeViewBox:n,animationDuration:i,animationEasing:a,isAnimationActive:l,active:K,coordinate:B,hasPayload:we,offset:c,position:f,reverseDirection:d,useTranslate3d:h,viewBox:A,wrapperStyle:v,lastBoundingBox:de,innerRef:oe,hasPortalFromProps:!!x},nj(o,Ud(Ud({},t),{},{payload:L,label:Ie,active:K,coordinate:B,accessibilityLayer:j})));return m.createElement(m.Fragment,null,Dy.createPortal(Xt,Ge),K&&m.createElement(RE,{cursor:p,tooltipEventType:T,coordinate:B,payload:F,index:I}))}var _o={},Mo={},Yd;function aj(){return Yd||(Yd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=0,i={}){typeof i!="object"&&(i={});let a=null,o=null,u=null,l=0,c=null,s;const{leading:f=!1,trailing:d=!0,maxWait:h}=i,v="maxWait"in i,p=v?Math.max(Number(h)||0,n):0,g=A=>(a!==null&&(s=r.apply(o,a)),a=o=null,l=A,s),y=A=>(l=A,c=setTimeout(w,n),f&&a!==null?g(A):s),b=A=>(c=null,d&&a!==null?g(A):s),x=A=>{if(u===null)return!0;const j=A-u,T=j>=n||j<0,I=v&&A-l>=p;return T||I},P=A=>{const j=u===null?0:A-u,T=n-j,I=p-(A-l);return v?Math.min(T,I):T},w=()=>{const A=Date.now();if(x(A))return b(A);c=setTimeout(w,P(A))},O=function(...A){const j=Date.now(),T=x(j);if(a=A,o=this,u=j,T){if(c===null)return y(j);if(v)return clearTimeout(c),c=setTimeout(w,n),g(j)}return c===null&&(c=setTimeout(w,n)),s};return O.cancel=()=>{c!==null&&clearTimeout(c),l=0,u=a=o=c=null},O.flush=()=>c===null?s:b(Date.now()),O}e.debounce=t}(Mo)),Mo}var Gd;function oj(){return Gd||(Gd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=aj();function r(n,i=0,a={}){const{leading:o=!0,trailing:u=!0}=a;return t.debounce(n,i,{leading:o,maxWait:i,trailing:u})}e.throttle=r}(_o)),_o}var Do,Vd;function uj(){return Vd||(Vd=1,Do=oj().throttle),Do}var sj=uj();const lj=kt(sj);var en=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;a{var{aspect:r,initialDimension:n={width:-1,height:-1},width:i="100%",height:a="100%",minWidth:o=0,minHeight:u,maxHeight:l,children:c,debounce:s=0,id:f,className:d,onResize:h,style:v={}}=e,p=m.useRef(null),g=m.useRef();g.current=h,m.useImperativeHandle(t,()=>p.current);var[y,b]=m.useState({containerWidth:n.width,containerHeight:n.height}),x=m.useCallback((w,O)=>{b(A=>{var j=Math.round(w),T=Math.round(O);return A.containerWidth===j&&A.containerHeight===T?A:{containerWidth:j,containerHeight:T}})},[]);m.useEffect(()=>{var w=T=>{var I,{width:C,height:_}=T[0].contentRect;x(C,_),(I=g.current)===null||I===void 0||I.call(g,C,_)};s>0&&(w=lj(w,s,{trailing:!0,leading:!1}));var O=new ResizeObserver(w),{width:A,height:j}=p.current.getBoundingClientRect();return x(A,j),O.observe(p.current),()=>{O.disconnect()}},[x,s]);var P=m.useMemo(()=>{var{containerWidth:w,containerHeight:O}=y;if(w<0||O<0)return null;en(tr(i)||tr(a),`The width(%s) and height(%s) are both fixed numbers, + maybe you don't need to use a ResponsiveContainer.`,i,a),en(!r||r>0,"The aspect(%s) must be greater than zero.",r);var A=tr(i)?w:i,j=tr(a)?O:a;return r&&r>0&&(A?j=A/r:j&&(A=j*r),l&&j>l&&(j=l)),en(A>0||j>0,`The width(%s) and height(%s) of chart should be greater than 0, + please check the style of container, or the props width(%s) and height(%s), + or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the + height and width.`,A,j,i,a,o,u,r),m.Children.map(c,T=>m.cloneElement(T,{width:A,height:j,style:Io({width:A,height:j},T.props.style)}))},[r,c,a,l,u,o,y,i]);return m.createElement("div",{id:f?"".concat(f):void 0,className:H("recharts-responsive-container",d),style:Io(Io({},v),{},{width:i,height:a,minWidth:o,minHeight:u,maxHeight:l}),ref:p},m.createElement("div",{style:{width:0,height:0,overflow:"visible"}},P))}),Tn=e=>null;Tn.displayName="Cell";function Zd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Cu(e){for(var t=1;t{t[r]||delete t[r]}),t}var tn=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||pr.isSsr)return{width:0,height:0};var n=yj(r),i=JSON.stringify({text:t,copyStyle:n});if(Pr.widthCache[i])return Pr.widthCache[i];try{var a=document.getElementById(Jd);a||(a=document.createElement("span"),a.setAttribute("id",Jd),a.setAttribute("aria-hidden","true"),document.body.appendChild(a));var o=Cu(Cu({},gj),n);Object.assign(a.style,o),a.textContent="".concat(t);var u=a.getBoundingClientRect(),l={width:u.width,height:u.height};return Pr.widthCache[i]=l,++Pr.cacheCount>mj&&(Pr.cacheCount=0,Pr.widthCache={}),l}catch{return{width:0,height:0}}},Qd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,eh=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,bj=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,xj=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,xg={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},wj=Object.keys(xg),Or="NaN";function Pj(e,t){return e*xg[t]}class Me{static parse(t){var r,[,n,i]=(r=xj.exec(t))!==null&&r!==void 0?r:[];return new Me(parseFloat(n),i??"")}constructor(t,r){this.num=t,this.unit=r,this.num=t,this.unit=r,We(t)&&(this.unit=""),r!==""&&!bj.test(r)&&(this.num=NaN,this.unit=""),wj.includes(r)&&(this.num=Pj(t,r),this.unit="px")}add(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num+t.num,this.unit)}subtract(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num-t.num,this.unit)}multiply(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num*t.num,this.unit||t.unit)}divide(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num/t.num,this.unit||t.unit)}toString(){return"".concat(this.num).concat(this.unit)}isNaN(){return We(this.num)}}function wg(e){if(e.includes(Or))return Or;for(var t=e;t.includes("*")||t.includes("/");){var r,[,n,i,a]=(r=Qd.exec(t))!==null&&r!==void 0?r:[],o=Me.parse(n??""),u=Me.parse(a??""),l=i==="*"?o.multiply(u):o.divide(u);if(l.isNaN())return Or;t=t.replace(Qd,l.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,[,s,f,d]=(c=eh.exec(t))!==null&&c!==void 0?c:[],h=Me.parse(s??""),v=Me.parse(d??""),p=f==="+"?h.add(v):h.subtract(v);if(p.isNaN())return Or;t=t.replace(eh,p.toString())}return t}var th=/\(([^()]*)\)/;function Oj(e){for(var t=e,r;(r=th.exec(t))!=null;){var[,n]=r;t=t.replace(th,wg(n))}return t}function Aj(e){var t=e.replace(/\s+/g,"");return t=Oj(t),t=wg(t),t}function Sj(e){try{return Aj(e)}catch{return Or}}function No(e){var t=Sj(e.slice(5,-1));return t===Or?"":t}var Ej=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],jj=["dx","dy","angle","className","breakAll"];function _u(){return _u=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:t,breakAll:r,style:n}=e;try{var i=[];J(t)||(r?i=t.toString().split(""):i=t.toString().split(Pg));var a=i.map(u=>({word:u,width:tn(u,n).width})),o=r?0:tn(" ",n).width;return{wordsWithComputedWidth:a,spaceWidth:o}}catch{return null}},kj=(e,t,r,n,i)=>{var{maxLines:a,children:o,style:u,breakAll:l}=e,c=D(a),s=o,f=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return C.reduce((_,R)=>{var{word:B,width:F}=R,V=_[_.length-1];if(V&&(n==null||i||V.width+F+rI.reduce((C,_)=>C.width>_.width?C:_);if(!c||i)return d;var v=d.length>a||h(d).width>Number(n);if(!v)return d;for(var p="…",g=I=>{var C=s.slice(0,I),_=Og({breakAll:l,style:u,children:C+p}).wordsWithComputedWidth,R=f(_),B=R.length>a||h(R).width>Number(n);return[B,R]},y=0,b=s.length-1,x=0,P;y<=b&&x<=s.length-1;){var w=Math.floor((y+b)/2),O=w-1,[A,j]=g(O),[T]=g(w);if(!A&&!T&&(y=w+1),A&&T&&(b=w-1),!A&&T){P=j;break}x++}return P||d},nh=e=>{var t=J(e)?[]:e.toString().split(Pg);return[{words:t}]},Cj=e=>{var{width:t,scaleToFit:r,children:n,style:i,breakAll:a,maxLines:o}=e;if((t||r)&&!pr.isSsr){var u,l,c=Og({breakAll:a,children:n,style:i});if(c){var{wordsWithComputedWidth:s,spaceWidth:f}=c;u=s,l=f}else return nh(n);return kj({breakAll:a,children:n,maxLines:o,style:i},u,l,t,r)}return nh(n)},ih="#808080",ia=m.forwardRef((e,t)=>{var{x:r=0,y:n=0,lineHeight:i="1em",capHeight:a="0.71em",scaleToFit:o=!1,textAnchor:u="start",verticalAnchor:l="end",fill:c=ih}=e,s=rh(e,Ej),f=m.useMemo(()=>Cj({breakAll:s.breakAll,children:s.children,maxLines:s.maxLines,scaleToFit:o,style:s.style,width:s.width}),[s.breakAll,s.children,s.maxLines,o,s.style,s.width]),{dx:d,dy:h,angle:v,className:p,breakAll:g}=s,y=rh(s,jj);if(!dt(r)||!dt(n))return null;var b=r+(D(d)?d:0),x=n+(D(h)?h:0),P;switch(l){case"start":P=No("calc(".concat(a,")"));break;case"middle":P=No("calc(".concat((f.length-1)/2," * -").concat(i," + (").concat(a," / 2))"));break;default:P=No("calc(".concat(f.length-1," * -").concat(i,")"));break}var w=[];if(o){var O=f[0].width,{width:A}=s;w.push("scale(".concat(D(A)?A/O:1,")"))}return v&&w.push("rotate(".concat(v,", ").concat(b,", ").concat(x,")")),w.length&&(y.transform=w.join(" ")),m.createElement("text",_u({},z(y,!0),{ref:t,x:b,y:x,className:H("recharts-text",p),textAnchor:u,fill:c.includes("url")?ih:c}),f.map((j,T)=>{var I=j.words.join(g?"":" ");return m.createElement("tspan",{x:b,dy:T===0?P:i,key:"".concat(I,"-").concat(T)},I)}))});ia.displayName="Text";var _j=["offset"],Mj=["labelRef"];function ah(e,t){if(e==null)return{};var r,n,i=Dj(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{value:t,formatter:r}=e,n=J(e.children)?t:e.children;return typeof r=="function"?r(n):n},wl=e=>e!=null&&typeof e=="function",Lj=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},Bj=(e,t,r)=>{var{position:n,viewBox:i,offset:a,className:o}=e,{cx:u,cy:l,innerRadius:c,outerRadius:s,startAngle:f,endAngle:d,clockWise:h}=i,v=(c+s)/2,p=Lj(f,d),g=p>=0?1:-1,y,b;n==="insideStart"?(y=f+g*a,b=h):n==="insideEnd"?(y=d-g*a,b=!h):n==="end"&&(y=d+g*a,b=h),b=p<=0?b:!b;var x=ce(u,l,v,y),P=ce(u,l,v,y+(b?1:-1)*359),w="M".concat(x.x,",").concat(x.y,` + A`).concat(v,",").concat(v,",0,1,").concat(b?0:1,`, + `).concat(P.x,",").concat(P.y),O=J(e.id)?cr("recharts-radial-line-"):e.id;return m.createElement("text",gt({},r,{dominantBaseline:"central",className:H("recharts-radial-bar-label",o)}),m.createElement("defs",null,m.createElement("path",{id:O,d:w})),m.createElement("textPath",{xlinkHref:"#".concat(O)},t))},Kj=e=>{var{viewBox:t,offset:r,position:n}=e,{cx:i,cy:a,innerRadius:o,outerRadius:u,startAngle:l,endAngle:c}=t,s=(l+c)/2;if(n==="outside"){var{x:f,y:d}=ce(i,a,u+r,s);return{x:f,y:d,textAnchor:f>=i?"start":"end",verticalAnchor:"middle"}}if(n==="center")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"middle"};if(n==="centerTop")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"start"};if(n==="centerBottom")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"end"};var h=(o+u)/2,{x:v,y:p}=ce(i,a,h,s);return{x:v,y:p,textAnchor:"middle",verticalAnchor:"middle"}},qj=(e,t)=>{var{parentViewBox:r,offset:n,position:i}=e,{x:a,y:o,width:u,height:l}=t,c=l>=0?1:-1,s=c*n,f=c>0?"end":"start",d=c>0?"start":"end",h=u>=0?1:-1,v=h*n,p=h>0?"end":"start",g=h>0?"start":"end";if(i==="top"){var y={x:a+u/2,y:o-c*n,textAnchor:"middle",verticalAnchor:f};return le(le({},y),r?{height:Math.max(o-r.y,0),width:u}:{})}if(i==="bottom"){var b={x:a+u/2,y:o+l+s,textAnchor:"middle",verticalAnchor:d};return le(le({},b),r?{height:Math.max(r.y+r.height-(o+l),0),width:u}:{})}if(i==="left"){var x={x:a-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"};return le(le({},x),r?{width:Math.max(x.x-r.x,0),height:l}:{})}if(i==="right"){var P={x:a+u+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"};return le(le({},P),r?{width:Math.max(r.x+r.width-P.x,0),height:l}:{})}var w=r?{width:u,height:l}:{};return i==="insideLeft"?le({x:a+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"},w):i==="insideRight"?le({x:a+u-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"},w):i==="insideTop"?le({x:a+u/2,y:o+s,textAnchor:"middle",verticalAnchor:d},w):i==="insideBottom"?le({x:a+u/2,y:o+l-s,textAnchor:"middle",verticalAnchor:f},w):i==="insideTopLeft"?le({x:a+v,y:o+s,textAnchor:g,verticalAnchor:d},w):i==="insideTopRight"?le({x:a+u-v,y:o+s,textAnchor:p,verticalAnchor:d},w):i==="insideBottomLeft"?le({x:a+v,y:o+l-s,textAnchor:g,verticalAnchor:f},w):i==="insideBottomRight"?le({x:a+u-v,y:o+l-s,textAnchor:p,verticalAnchor:f},w):i&&typeof i=="object"&&(D(i.x)||tr(i.x))&&(D(i.y)||tr(i.y))?le({x:a+ke(i.x,u),y:o+ke(i.y,l),textAnchor:"end",verticalAnchor:"end"},w):le({x:a+u/2,y:o+l/2,textAnchor:"middle",verticalAnchor:"middle"},w)},zj=e=>"cx"in e&&D(e.cx);function qe(e){var{offset:t=5}=e,r=ah(e,_j),n=le({offset:t},r),{viewBox:i,position:a,value:o,children:u,content:l,className:c="",textBreakAll:s,labelRef:f}=n,d=cs(),h=i||d;if(!h||J(o)&&J(u)&&!m.isValidElement(l)&&typeof l!="function")return null;if(m.isValidElement(l)){var{labelRef:v}=n,p=ah(n,Mj);return m.cloneElement(l,p)}var g;if(typeof l=="function"){if(g=m.createElement(l,n),m.isValidElement(g))return g}else g=Rj(n);var y=zj(h),b=z(n,!0);if(y&&(a==="insideStart"||a==="insideEnd"||a==="end"))return Bj(n,g,b);var x=y?Kj(n):qj(n,h);return m.createElement(ia,gt({ref:f,className:H("recharts-label",c)},b,x,{breakAll:s}),g)}qe.displayName="Label";var Ag=e=>{var{cx:t,cy:r,angle:n,startAngle:i,endAngle:a,r:o,radius:u,innerRadius:l,outerRadius:c,x:s,y:f,top:d,left:h,width:v,height:p,clockWise:g,labelViewBox:y}=e;if(y)return y;if(D(v)&&D(p)){if(D(s)&&D(f))return{x:s,y:f,width:v,height:p};if(D(d)&&D(h))return{x:d,y:h,width:v,height:p}}if(D(s)&&D(f))return{x:s,y:f,width:0,height:0};if(D(t)&&D(r))return{cx:t,cy:r,startAngle:i||n||0,endAngle:a||n||0,innerRadius:l||0,outerRadius:c||u||o||0,clockWise:g};if(e.viewBox)return e.viewBox},Fj=(e,t,r)=>{if(!e)return null;var n={viewBox:t,labelRef:r};return e===!0?m.createElement(qe,gt({key:"label-implicit"},n)):dt(e)?m.createElement(qe,gt({key:"label-implicit",value:e},n)):m.isValidElement(e)?e.type===qe?m.cloneElement(e,le({key:"label-implicit"},n)):m.createElement(qe,gt({key:"label-implicit",content:e},n)):wl(e)?m.createElement(qe,gt({key:"label-implicit",content:e},n)):e&&typeof e=="object"?m.createElement(qe,gt({},e,{key:"label-implicit"},n)):null},Wj=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var{children:i,labelRef:a}=t,o=Ag(t),u=mn(i,qe).map((c,s)=>m.cloneElement(c,{viewBox:r||o,key:"label-".concat(s)}));if(!n)return u;var l=Fj(t.label,r||o,a);return[l,...u]};qe.parseViewBox=Ag;qe.renderCallByParent=Wj;var $o={},Ro={},uh;function Uj(){return uh||(uh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r[r.length-1]}e.last=t}(Ro)),Ro}var Lo={},sh;function Hj(){return sh||(sh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Array.isArray(r)?r:Array.from(r)}e.toArray=t}(Lo)),Lo}var lh;function Yj(){return lh||(lh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Uj(),r=Hj(),n=Zu();function i(a){if(n.isArrayLike(a))return t.last(r.toArray(a))}e.last=i}($o)),$o}var Bo,ch;function Gj(){return ch||(ch=1,Bo=Yj().last),Bo}var Vj=Gj();const Xj=kt(Vj);var Zj=["valueAccessor"],Jj=["data","dataKey","clockWise","id","textBreakAll"];function xi(){return xi=Object.assign?Object.assign.bind():function(e){for(var t=1;tArray.isArray(e.value)?Xj(e.value):e.value;function Kt(e){var{valueAccessor:t=nT}=e,r=hh(e,Zj),{data:n,dataKey:i,clockWise:a,id:o,textBreakAll:u}=r,l=hh(r,Jj);return!n||!n.length?null:m.createElement(ye,{className:"recharts-label-list"},n.map((c,s)=>{var f=J(i)?t(c,s):re(c&&c.payload,i),d=J(o)?{}:{id:"".concat(o,"-").concat(s)};return m.createElement(qe,xi({},z(c,!0),l,d,{parentViewBox:c.parentViewBox,value:f,textBreakAll:u,viewBox:qe.parseViewBox(J(a)?c:dh(dh({},c),{},{clockWise:a})),key:"label-".concat(s),index:s}))}))}Kt.displayName="LabelList";function iT(e,t){return e?e===!0?m.createElement(Kt,{key:"labelList-implicit",data:t}):m.isValidElement(e)||wl(e)?m.createElement(Kt,{key:"labelList-implicit",data:t,content:e}):typeof e=="object"?m.createElement(Kt,xi({data:t},e,{key:"labelList-implicit"})):null:null}function aT(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var{children:n}=e,i=mn(n,Kt).map((o,u)=>m.cloneElement(o,{data:t,key:"labelList-".concat(u)}));if(!r)return i;var a=iT(e.label,t);return[a,...i]}Kt.renderCallByParent=aT;function Mu(){return Mu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{cx:t,cy:r,r:n,className:i}=e,a=H("recharts-dot",i);return t===+t&&r===+r&&n===+n?m.createElement("circle",Mu({},z(e,!1),Yu(e),{className:a,cx:t,cy:r,r:n})):null},Eg=e=>e.graphicalItems.polarItems,oT=E([ue,On],Ys),Pl=E([Eg,se,oT],Gs),uT=E([Pl],Vs),Ol=E([uT,$s],Xs),sT=E([Ol,se,Pl],Zs),lT=E([Ol,se,Pl],(e,t,r)=>r.length>0?e.flatMap(n=>r.flatMap(i=>{var a,o=re(n,(a=t.dataKey)!==null&&a!==void 0?a:i.dataKey);return{value:o,errorDomain:[]}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey),errorDomain:[]})):e.map(n=>({value:n,errorDomain:[]}))),vh=()=>{},cT=E([se,Nm,vh,lT,vh],el),jg=E([se,Y,Ol,sT,Pn,ue,cT],tl),fT=E([jg,se,Kr],il);E([se,jg,fT,ue],ol);var dT={radiusAxis:{},angleAxis:{}},Tg=nt({name:"polarAxis",initialState:dT,reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),{addRadiusAxis:Y2,removeRadiusAxis:G2,addAngleAxis:V2,removeAngleAxis:X2}=Tg.actions,hT=Tg.reducer;function ph(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function mh(e){for(var t=1;tt,gT=[],Sl=(e,t,r)=>(r==null?void 0:r.length)===0?gT:r,kg=E([$s,Al,Sl],(e,t,r)=>{var{chartData:n}=e,i;if((t==null?void 0:t.data)!=null&&t.data.length>0?i=t.data:i=n,(!i||!i.length)&&r!=null&&(i=r.map(a=>mh(mh({},t.presentationProps),a.props))),i!=null)return i}),yT=E([kg,Al,Sl],(e,t,r)=>{if(e!=null)return e.map((n,i)=>{var a,o=re(n,t.nameKey,t.name),u;return r!=null&&(a=r[i])!==null&&a!==void 0&&(a=a.props)!==null&&a!==void 0&&a.fill?u=r[i].props.fill:typeof n=="object"&&n!=null&&"fill"in n?u=n.fill:u=t.fill,{value:Nr(o,t.dataKey),color:u,payload:n,type:t.legendType}})}),bT=E([Eg,Al],(e,t)=>{if(e.some(r=>r.type==="pie"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),xT=E([kg,bT,Sl,ve],(e,t,r,n)=>{if(!(t==null||e==null))return fk({offset:n,pieSettings:t,displayedData:e,cells:r})}),wT={countOfBars:0,cartesianItems:[],polarItems:[]},Cg=nt({name:"graphicalItems",initialState:wT,reducers:{addBar(e){e.countOfBars+=1},removeBar(e){e.countOfBars-=1},addCartesianGraphicalItem(e,t){e.cartesianItems.push(t.payload)},replaceCartesianGraphicalItem(e,t){var{prev:r,next:n}=t.payload,i=Ot(e).cartesianItems.indexOf(r);i>-1&&(e.cartesianItems[i]=n)},removeCartesianGraphicalItem(e,t){var r=Ot(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},addPolarGraphicalItem(e,t){e.polarItems.push(t.payload)},removePolarGraphicalItem(e,t){var r=Ot(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)}}}),{addBar:PT,removeBar:OT,addCartesianGraphicalItem:AT,replaceCartesianGraphicalItem:ST,removeCartesianGraphicalItem:ET,addPolarGraphicalItem:jT,removePolarGraphicalItem:TT}=Cg.actions,kT=Cg.reducer;function gh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function yh(e){for(var t=1;t{var n=yh(yh({},e),{},{stackId:rp(e.stackId)});r.current===null?t(AT(n)):r.current!==n&&t(ST({prev:r.current,next:n})),r.current=n},[t,e]),m.useEffect(()=>()=>{r.current&&(t(ET(r.current)),r.current=null)},[t]),null}function IT(e){var t=ae();return m.useEffect(()=>(t(jT(e)),()=>{t(TT(e))}),[t,e]),null}var Ko={},bh;function NT(){return bh||(bh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var i;if(typeof r!="object"||r==null)return!1;if(Object.getPrototypeOf(r)===null)return!0;if(Object.prototype.toString.call(r)!=="[object Object]"){const a=r[Symbol.toStringTag];return a==null||!((i=Object.getOwnPropertyDescriptor(r,Symbol.toStringTag))!=null&&i.writable)?!1:r.toString()===`[object ${a}]`}let n=r;for(;Object.getPrototypeOf(n)!==null;)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(r)===n}e.isPlainObject=t}(Ko)),Ko}var qo,xh;function $T(){return xh||(xh=1,qo=NT().isPlainObject),qo}var RT=$T();const LT=kt(RT);function wi(){return wi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=r-n,o;return o="M ".concat(e,",").concat(t),o+="L ".concat(e+r,",").concat(t),o+="L ".concat(e+r-a/2,",").concat(t+i),o+="L ".concat(e+r-a/2-n,",").concat(t+i),o+="L ".concat(e,",").concat(t," Z"),o},BT={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},KT=e=>{var t=it(e,BT),r=m.useRef(),[n,i]=m.useState(-1);m.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var g=r.current.getTotalLength();g&&i(g)}catch{}},[]);var{x:a,y:o,upperWidth:u,lowerWidth:l,height:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isUpdateAnimationActive:v}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||c!==+c||u===0&&l===0||c===0)return null;var p=H("recharts-trapezoid",s);return v?m.createElement(zt,{canBegin:n>0,from:{upperWidth:0,lowerWidth:0,height:c,x:a,y:o},to:{upperWidth:u,lowerWidth:l,height:c,x:a,y:o},duration:d,animationEasing:f,isActive:v},g=>{var{upperWidth:y,lowerWidth:b,height:x,x:P,y:w}=g;return m.createElement(zt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,easing:f},m.createElement("path",wi({},z(t,!0),{className:p,d:wh(P,w,y,b,x),ref:r})))}):m.createElement("g",null,m.createElement("path",wi({},z(t,!0),{className:p,d:wh(a,o,u,l,c)})))},qT=["option","shapeType","propTransformer","activeClassName","isActive"];function zT(e,t){if(e==null)return{};var r,n,i=FT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(Zm({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}},jl=e=>{var t=ae();return(r,n)=>i=>{e==null||e(r,n,i),t(NS())}},Tl=(e,t)=>{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r($S({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}};function kl(e){var{fn:t,args:r}=e,n=ae(),i=Ce();return m.useEffect(()=>{if(!i){var a=t(r);return n(MS(a)),()=>{n(DS(a))}}},[t,r,n,i]),null}var Mg=()=>{};function Dg(e){var{legendPayload:t}=e,r=ae(),n=Ce();return m.useEffect(()=>n?Mg:(r(fp(t)),()=>{r(dp(t))}),[r,n,t]),null}function XT(e){var{legendPayload:t}=e,r=ae(),n=$(Y);return m.useEffect(()=>n!=="centric"&&n!=="radial"?Mg:(r(fp(t)),()=>{r(dp(t))}),[r,n,t]),null}function Cl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"animation-",r=m.useRef(cr(t)),n=m.useRef(e);return n.current!==e&&(r.current=cr(t),n.current=e),r.current}var ZT=["onMouseEnter","onClick","onMouseLeave"];function JT(e,t){if(e==null)return{};var r,n,i=QT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;nz(e,!1),[e]),r=m.useMemo(()=>mn(e.children,Tn),[e.children]),n=m.useMemo(()=>({name:e.name,nameKey:e.nameKey,tooltipType:e.tooltipType,data:e.data,dataKey:e.dataKey,cx:e.cx,cy:e.cy,startAngle:e.startAngle,endAngle:e.endAngle,minAngle:e.minAngle,paddingAngle:e.paddingAngle,innerRadius:e.innerRadius,outerRadius:e.outerRadius,cornerRadius:e.cornerRadius,legendType:e.legendType,fill:e.fill,presentationProps:t}),[e.cornerRadius,e.cx,e.cy,e.data,e.dataKey,e.endAngle,e.innerRadius,e.minAngle,e.name,e.nameKey,e.outerRadius,e.paddingAngle,e.startAngle,e.tooltipType,e.legendType,e.fill,t]),i=$(a=>yT(a,n,r));return m.createElement(XT,{legendPayload:i})}function nk(e){var{dataKey:t,nameKey:r,sectors:n,stroke:i,strokeWidth:a,fill:o,name:u,hide:l,tooltipType:c}=e;return{dataDefinedOnItem:n==null?void 0:n.map(s=>s.tooltipPayload),positions:n==null?void 0:n.map(s=>s.tooltipPosition),settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:r,name:Nr(u,t),hide:l,type:c,color:o,unit:""}}}var ik=(e,t)=>e>t?"start":etypeof t=="function"?t(e):ke(t,r,r*.8),ok=(e,t,r)=>{var{top:n,left:i,width:a,height:o}=t,u=Qv(a,o),l=i+ke(e.cx,a,a/2),c=n+ke(e.cy,o,o/2),s=ke(e.innerRadius,u,0),f=ak(r,e.outerRadius,u),d=e.maxRadius||Math.sqrt(a*a+o*o)/2;return{cx:l,cy:c,innerRadius:s,outerRadius:f,maxRadius:d}},uk=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},sk=(e,t)=>{if(m.isValidElement(e))return m.cloneElement(e,t);if(typeof e=="function")return e(t);var r=H("recharts-pie-label-line",typeof e!="boolean"?e.className:"");return m.createElement(fs,vr({},t,{type:"linear",className:r}))},lk=(e,t,r)=>{if(m.isValidElement(e))return m.cloneElement(e,t);var n=r;if(typeof e=="function"&&(n=e(t),m.isValidElement(n)))return n;var i=H("recharts-pie-label-text",typeof e!="boolean"&&typeof e!="function"?e.className:"");return m.createElement(ia,vr({},t,{alignmentBaseline:"middle",className:i}),n)};function ck(e){var{sectors:t,props:r,showLabels:n}=e,{label:i,labelLine:a,dataKey:o}=r;if(!n||!i||!t)return null;var u=z(r,!1),l=z(i,!1),c=z(a,!1),s=typeof i=="object"&&"offsetRadius"in i&&i.offsetRadius||20,f=t.map((d,h)=>{var v=(d.startAngle+d.endAngle)/2,p=ce(d.cx,d.cy,d.outerRadius+s,v),g=ie(ie(ie(ie({},u),d),{},{stroke:"none"},l),{},{index:h,textAnchor:ik(p.x,d.cx)},p),y=ie(ie(ie(ie({},u),d),{},{fill:"none",stroke:d.fill},c),{},{index:h,points:[ce(d.cx,d.cy,d.outerRadius,v),p],key:"line"});return m.createElement(ye,{key:"label-".concat(d.startAngle,"-").concat(d.endAngle,"-").concat(d.midAngle,"-").concat(h)},a&&sk(a,y),lk(i,g,re(d,o)))});return m.createElement(ye,{className:"recharts-pie-labels"},f)}function Ig(e){var{sectors:t,activeShape:r,inactiveShape:n,allOtherPieProps:i,showLabels:a}=e,o=$(Wt),{onMouseEnter:u,onClick:l,onMouseLeave:c}=i,s=JT(i,ZT),f=El(u,i.dataKey),d=jl(c),h=Tl(l,i.dataKey);return t==null?null:m.createElement(m.Fragment,null,t.map((v,p)=>{if((v==null?void 0:v.startAngle)===0&&(v==null?void 0:v.endAngle)===0&&t.length!==1)return null;var g=r&&String(p)===o,y=o?n:null,b=g?r:y,x=ie(ie({},v),{},{stroke:v.stroke,tabIndex:-1,[ip]:p,[ap]:i.dataKey});return m.createElement(ye,vr({tabIndex:-1,className:"recharts-pie-sector"},ji(s,v,p),{onMouseEnter:f(v,p),onMouseLeave:d(v,p),onClick:h(v,p),key:"sector-".concat(v==null?void 0:v.startAngle,"-").concat(v==null?void 0:v.endAngle,"-").concat(v.midAngle,"-").concat(p)}),m.createElement(_g,vr({option:b,isActive:g,shapeType:"sector"},x)))}),m.createElement(ck,{sectors:t,props:i,showLabels:a}))}function fk(e){var t,{pieSettings:r,displayedData:n,cells:i,offset:a}=e,{cornerRadius:o,startAngle:u,endAngle:l,dataKey:c,nameKey:s,tooltipType:f}=r,d=Math.abs(r.minAngle),h=uk(u,l),v=Math.abs(h),p=n.length<=1?0:(t=r.paddingAngle)!==null&&t!==void 0?t:0,g=n.filter(O=>re(O,c,0)!==0).length,y=(v>=360?g:g-1)*p,b=v-g*d-y,x=n.reduce((O,A)=>{var j=re(A,c,0);return O+(D(j)?j:0)},0),P;if(x>0){var w;P=n.map((O,A)=>{var j=re(O,c,0),T=re(O,s,A),I=ok(r,a,O),C=(D(j)?j:0)/x,_,R=ie(ie({},O),i&&i[A]&&i[A].props);A?_=w.endAngle+ge(h)*p*(j!==0?1:0):_=u;var B=_+ge(h)*((j!==0?d:0)+C*b),F=(_+B)/2,V=(I.innerRadius+I.outerRadius)/2,K=[{name:T,value:j,payload:R,dataKey:c,type:f}],de=ce(I.cx,I.cy,V,F);return w=ie(ie(ie(ie({},r.presentationProps),{},{percent:C,cornerRadius:o,name:T,tooltipPayload:K,midAngle:F,middleRadius:V,tooltipPosition:de},R),I),{},{value:re(O,c),startAngle:_,endAngle:B,payload:R,paddingAngle:ge(h)*p}),w})}return P}function dk(e){var{props:t,previousSectorsRef:r}=e,{sectors:n,isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:u,activeShape:l,inactiveShape:c,onAnimationStart:s,onAnimationEnd:f}=t,d=Cl(t,"recharts-pie-"),h=r.current,[v,p]=m.useState(!0),g=m.useCallback(()=>{typeof f=="function"&&f(),p(!1)},[f]),y=m.useCallback(()=>{typeof s=="function"&&s(),p(!0)},[s]);return m.createElement(zt,{begin:a,duration:o,isActive:i,easing:u,from:{t:0},to:{t:1},onAnimationStart:y,onAnimationEnd:g,key:d},b=>{var{t:x}=b,P=[],w=n&&n[0],O=w.startAngle;return n.forEach((A,j)=>{var T=h&&h[j],I=j>0?qt(A,"paddingAngle",0):0;if(T){var C=Ke(T.endAngle-T.startAngle,A.endAngle-A.startAngle),_=ie(ie({},A),{},{startAngle:O+I,endAngle:O+C(x)+I});P.push(_),O=_.endAngle}else{var{endAngle:R,startAngle:B}=A,F=Ke(0,R-B),V=F(x),K=ie(ie({},A),{},{startAngle:O+I,endAngle:O+V+I});P.push(K),O=K.endAngle}}),r.current=P,m.createElement(ye,null,m.createElement(Ig,{sectors:P,activeShape:l,inactiveShape:c,allOtherPieProps:t,showLabels:!v}))})}function hk(e){var{sectors:t,isAnimationActive:r,activeShape:n,inactiveShape:i}=e,a=m.useRef(null),o=a.current;return r&&t&&t.length&&(!o||o!==t)?m.createElement(dk,{props:e,previousSectorsRef:a}):m.createElement(Ig,{sectors:t,activeShape:n,inactiveShape:i,allOtherPieProps:e,showLabels:!0})}function vk(e){var{hide:t,className:r,rootTabIndex:n}=e,i=H("recharts-pie",r);return t?null:m.createElement(ye,{tabIndex:n,className:i},m.createElement(hk,e))}var Ng={animationBegin:400,animationDuration:1500,animationEasing:"ease",cx:"50%",cy:"50%",dataKey:"value",endAngle:360,fill:"#808080",hide:!1,innerRadius:0,isAnimationActive:!pr.isSsr,labelLine:!0,legendType:"rect",minAngle:0,nameKey:"name",outerRadius:"80%",paddingAngle:0,rootTabIndex:0,startAngle:0,stroke:"#fff"};function pk(e){var t=it(e,Ng),r=m.useMemo(()=>mn(e.children,Tn),[e.children]),n=z(t,!1),i=m.useMemo(()=>({name:t.name,nameKey:t.nameKey,tooltipType:t.tooltipType,data:t.data,dataKey:t.dataKey,cx:t.cx,cy:t.cy,startAngle:t.startAngle,endAngle:t.endAngle,minAngle:t.minAngle,paddingAngle:t.paddingAngle,innerRadius:t.innerRadius,outerRadius:t.outerRadius,cornerRadius:t.cornerRadius,legendType:t.legendType,fill:t.fill,presentationProps:n}),[t.cornerRadius,t.cx,t.cy,t.data,t.dataKey,t.endAngle,t.innerRadius,t.minAngle,t.name,t.nameKey,t.outerRadius,t.paddingAngle,t.startAngle,t.tooltipType,t.legendType,t.fill,n]),a=$(o=>xT(o,i,r));return m.createElement(m.Fragment,null,m.createElement(kl,{fn:nk,args:ie(ie({},t),{},{sectors:a})}),m.createElement(vk,vr({},t,{sectors:a})))}class _l extends m.PureComponent{constructor(){super(...arguments),aa(this,"id",cr("recharts-pie-"))}render(){return m.createElement(m.Fragment,null,m.createElement(IT,{data:this.props.data,dataKey:this.props.dataKey,hide:this.props.hide,angleAxisId:0,radiusAxisId:0,stackId:void 0,barSize:void 0,type:"pie"}),m.createElement(rk,this.props),m.createElement(pk,this.props),this.props.children)}}aa(_l,"displayName","Pie");aa(_l,"defaultProps",Ng);var mk=E([ve],e=>{if(e)return{top:e.top,bottom:e.bottom,left:e.left,right:e.right}}),gk=E([mk,Ct,_t],(e,t,r)=>{if(!(!e||t==null||r==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}}),yk=e=>{var t=Ce();return $(r=>vt(r,"xAxis",e,t))},bk=e=>{var t=Ce();return $(r=>vt(r,"yAxis",e,t))},Ml=()=>$(gk),xk=()=>$(xE);function Sh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Eh(e){for(var t=1;t{var{point:t,childIndex:r,mainColor:n,activeDot:i,dataKey:a}=e;if(i===!1||t.x==null||t.y==null)return null;var o=Eh(Eh({index:r,dataKey:a,cx:t.x,cy:t.y,r:4,fill:n??"none",strokeWidth:2,stroke:"#fff",payload:t.payload,value:t.value},z(i,!1)),Yu(i)),u;return m.isValidElement(i)?u=m.cloneElement(i,o):typeof i=="function"?u=i(o):u=m.createElement(Sg,o),m.createElement(ye,{className:"recharts-active-dot"},u)};function Sk(e){var{points:t,mainColor:r,activeDot:n,itemDataKey:i}=e,a=$(Wt),o=xk();if(t==null||o==null)return null;var u=t.find(l=>o.includes(l.payload));return J(u)?null:Ak({point:u,childIndex:Number(a),mainColor:r,dataKey:i,activeDot:n})}var Ek=()=>{var e=ae();return m.useEffect(()=>(e(PT()),()=>{e(OT())})),null},jk=["children"];function Tk(e,t){if(e==null)return{};var r,n,i=kk(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{},$g=m.createContext({addErrorBar:jh,removeErrorBar:jh}),Ck={data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0},Rg=m.createContext(Ck);function Lg(e){var{children:t}=e,r=Tk(e,jk);return m.createElement(Rg.Provider,{value:r},t)}var _k=()=>m.useContext(Rg),Bg=e=>{var{children:t,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,data:o,stackId:u,hide:l,type:c,barSize:s}=e,[f,d]=m.useState([]),h=m.useCallback(g=>{d(y=>[...y,g])},[d]),v=m.useCallback(g=>{d(y=>y.filter(b=>b!==g))},[d]),p=Ce();return m.createElement($g.Provider,{value:{addErrorBar:h,removeErrorBar:v}},m.createElement(DT,{type:c,data:o,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,errorBars:f,stackId:u,hide:l,barSize:s,isPanorama:p}),t)};function Mk(e){var{addErrorBar:t,removeErrorBar:r}=m.useContext($g);return m.useEffect(()=>(t(e),()=>{r(e)}),[t,r,e]),null}var Dk=["direction","width","dataKey","isAnimationActive","animationBegin","animationDuration","animationEasing"];function Kg(e,t,r){return(t=Ik(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ik(e){var t=Nk(e,"string");return typeof t=="symbol"?t:t+""}function Nk(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function hn(){return hn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{x,y:P,value:w,errorVal:O}=f(b,n,t);if(!O)return null;var A=[],j,T;if(Array.isArray(O)?[j,T]=O:j=T=O,t==="x"){var{scale:I}=p,C=P+v,_=C+r,R=C-r,B=I(w-j),F=I(w+T);A.push({x1:F,y1:_,x2:F,y2:R}),A.push({x1:B,y1:C,x2:F,y2:C}),A.push({x1:B,y1:_,x2:B,y2:R})}else if(t==="y"){var{scale:V}=g,K=x+v,de=K-r,oe=K+r,Ie=V(w-j),Ge=V(w+T);A.push({x1:de,y1:Ge,x2:oe,y2:Ge}),A.push({x1:K,y1:Ie,x2:K,y2:Ge}),A.push({x1:de,y1:Ie,x2:oe,y2:Ie})}var L="".concat(x+v,"px ").concat(P+v,"px");return m.createElement(ye,hn({className:"recharts-errorBar",key:"bar-".concat(A.map(we=>"".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2)))},c),A.map(we=>{var Xt=i?{transformOrigin:"".concat(we.x1-5,"px")}:void 0;return m.createElement(zt,{from:{transform:"scaleY(0)",transformOrigin:L},to:{transform:"scaleY(1)",transformOrigin:L},begin:a,easing:u,isActive:i,duration:o,key:"line-".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2),style:{transformOrigin:L}},m.createElement("line",hn({},we,{style:Xt})))}))});return m.createElement(ye,{className:"recharts-errorBars"},y)}var qg=m.createContext(void 0);function Bk(e){var t=m.useContext(qg);return e??t??"x"}function zg(e){var{direction:t,children:r}=e;return m.createElement(qg.Provider,{value:t},r)}var Fg={stroke:"black",strokeWidth:1.5,width:5,offset:0,isAnimationActive:!0,animationBegin:0,animationDuration:400,animationEasing:"ease-in-out"};function Kk(e){var t=Bk(e.direction),{width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o}=it(e,Fg);return m.createElement(m.Fragment,null,m.createElement(Mk,{dataKey:e.dataKey,direction:t}),m.createElement(Lk,hn({},e,{direction:t,width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o})))}class Wg extends m.Component{render(){return m.createElement(Kk,this.props)}}Kg(Wg,"defaultProps",Fg);Kg(Wg,"displayName","ErrorBar");var qk="Invariant failed";function zk(e,t){throw new Error(qk)}var Fk=["x","y"];function Du(){return Du=Object.assign?Object.assign.bind():function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:0;return(n,i)=>{if(D(t))return t;var a=D(n)||J(n);return a?t(n,i):(a||zk(),r)}};function Dl(e,t){var r,n,i=$(c=>Dt(c,e)),a=$(c=>Gt(c,t)),o=(r=i==null?void 0:i.allowDataOverflow)!==null&&r!==void 0?r:Re.allowDataOverflow,u=(n=a==null?void 0:a.allowDataOverflow)!==null&&n!==void 0?n:Le.allowDataOverflow,l=o||u;return{needClip:l,needClipX:o,needClipY:u}}function Hg(e){var{xAxisId:t,yAxisId:r,clipPathId:n}=e,i=Ml(),{needClipX:a,needClipY:o,needClip:u}=Dl(t,r);if(!u)return null;var{x:l,y:c,width:s,height:f}=i;return m.createElement("clipPath",{id:"clipPath-".concat(n)},m.createElement("rect",{x:a?l:l-s/2,y:o?c:c-f/2,width:a?s:s*2,height:o?f:f*2}))}var Zk=["onMouseEnter","onMouseLeave","onClick"],Jk=["value","background","tooltipPosition"],Qk=["onMouseEnter","onClick","onMouseLeave"];function vn(){return vn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:r,fill:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Nr(r,t),payload:e}]};function iC(e){var{dataKey:t,stroke:r,strokeWidth:n,fill:i,name:a,hide:o,unit:u}=e;return{dataDefinedOnItem:void 0,positions:void 0,settings:{stroke:r,strokeWidth:n,fill:i,dataKey:t,nameKey:void 0,name:Nr(a,t),hide:o,type:e.tooltipType,color:e.fill,unit:u}}}function aC(e){var t=$(Wt),{data:r,dataKey:n,background:i,allOtherBarProps:a}=e,{onMouseEnter:o,onMouseLeave:u,onClick:l}=a,c=Iu(a,Zk),s=El(o,n),f=jl(u),d=Tl(l,n);if(!i||r==null)return null;var h=z(i,!1);return m.createElement(m.Fragment,null,r.map((v,p)=>{var{value:g,background:y,tooltipPosition:b}=v,x=Iu(v,Jk);if(!y)return null;var P=s(v,p),w=f(v,p),O=d(v,p),A=Ee(Ee(Ee(Ee(Ee({option:i,isActive:String(p)===t},x),{},{fill:"#eee"},y),h),ji(c,v,p)),{},{onMouseEnter:P,onMouseLeave:w,onClick:O,dataKey:n,index:p,className:"recharts-bar-background-rectangle"});return m.createElement(Ug,vn({key:"background-bar-".concat(p)},A))}))}function Yg(e){var{data:t,props:r,showLabels:n}=e,i=z(r,!1),{shape:a,dataKey:o,activeBar:u}=r,l=$(Wt),c=$(cg),{onMouseEnter:s,onClick:f,onMouseLeave:d}=r,h=Iu(r,Qk),v=El(s,o),p=jl(d),g=Tl(f,o);return t?m.createElement(m.Fragment,null,t.map((y,b)=>{var x=u&&String(b)===l&&(c==null||o===c),P=x?u:a,w=Ee(Ee(Ee({},i),y),{},{isActive:x,option:P,index:b,dataKey:o});return m.createElement(ye,vn({className:"recharts-bar-rectangle"},ji(h,y,b),{onMouseEnter:v(y,b),onMouseLeave:p(y,b),onClick:g(y,b),key:"rectangle-".concat(y==null?void 0:y.x,"-").concat(y==null?void 0:y.y,"-").concat(y==null?void 0:y.value,"-").concat(b)}),m.createElement(Ug,w))}),n&&Kt.renderCallByParent(r,t)):null}function oC(e){var{props:t,previousRectanglesRef:r}=e,{data:n,layout:i,isAnimationActive:a,animationBegin:o,animationDuration:u,animationEasing:l,onAnimationEnd:c,onAnimationStart:s}=t,f=r.current,d=Cl(t,"recharts-bar-"),[h,v]=m.useState(!1),p=m.useCallback(()=>{typeof c=="function"&&c(),v(!1)},[c]),g=m.useCallback(()=>{typeof s=="function"&&s(),v(!0)},[s]);return m.createElement(zt,{begin:o,duration:u,isActive:a,easing:l,from:{t:0},to:{t:1},onAnimationEnd:p,onAnimationStart:g,key:d},y=>{var{t:b}=y,x=b===1?n:n.map((P,w)=>{var O=f&&f[w];if(O){var A=Ke(O.x,P.x),j=Ke(O.y,P.y),T=Ke(O.width,P.width),I=Ke(O.height,P.height);return Ee(Ee({},P),{},{x:A(b),y:j(b),width:T(b),height:I(b)})}if(i==="horizontal"){var C=Ke(0,P.height),_=C(b);return Ee(Ee({},P),{},{y:P.y+P.height-_,height:_})}var R=Ke(0,P.width),B=R(b);return Ee(Ee({},P),{},{width:B})});return b>0&&(r.current=x),m.createElement(ye,null,m.createElement(Yg,{props:t,data:x,showLabels:!h}))})}function uC(e){var{data:t,isAnimationActive:r}=e,n=m.useRef(null);return r&&t&&t.length&&(n.current==null||n.current!==t)?m.createElement(oC,{previousRectanglesRef:n,props:e}):m.createElement(Yg,{props:e,data:t,showLabels:!0})}var Gg=0,sC=(e,t)=>{var r=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:r,errorVal:re(e,t)}};class lC extends m.PureComponent{constructor(){super(...arguments),oa(this,"id",cr("recharts-bar-"))}render(){var{hide:t,data:r,dataKey:n,className:i,xAxisId:a,yAxisId:o,needClip:u,background:l,id:c,layout:s}=this.props;if(t)return null;var f=H("recharts-bar",i),d=J(c)?this.id:c;return m.createElement(ye,{className:f},u&&m.createElement("defs",null,m.createElement(Hg,{clipPathId:d,xAxisId:a,yAxisId:o})),m.createElement(ye,{className:"recharts-bar-rectangles",clipPath:u?"url(#clipPath-".concat(d,")"):null},m.createElement(aC,{data:r,dataKey:n,background:l,allOtherBarProps:this.props}),m.createElement(uC,this.props)),m.createElement(zg,{direction:s==="horizontal"?"y":"x"},this.props.children))}}var Vg={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",hide:!1,isAnimationActive:!pr.isSsr,legendType:"rect",minPointSize:Gg,xAxisId:0,yAxisId:0};function cC(e){var{xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s}=it(e,Vg),{needClip:f}=Dl(t,r),d=qi(),h=Ce(),v=m.useMemo(()=>({barSize:e.barSize,data:void 0,dataKey:e.dataKey,maxBarSize:e.maxBarSize,minPointSize:a,stackId:rp(e.stackId)}),[e.barSize,e.dataKey,e.maxBarSize,a,e.stackId]),p=mn(e.children,Tn),g=$(x=>LC(x,t,r,h,v,p));if(d!=="vertical"&&d!=="horizontal")return null;var y,b=g==null?void 0:g[0];return b==null||b.height==null||b.width==null?y=0:y=d==="vertical"?b.height/2:b.width/2,m.createElement(Lg,{xAxisId:t,yAxisId:r,data:g,dataPointFormatter:sC,errorBarOffset:y},m.createElement(lC,vn({},e,{layout:d,needClip:f,data:g,xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s})))}function fC(e){var{layout:t,barSettings:{dataKey:r,minPointSize:n},pos:i,bandSize:a,xAxis:o,yAxis:u,xAxisTicks:l,yAxisTicks:c,stackedData:s,displayedData:f,offset:d,cells:h}=e,v=t==="horizontal"?u:o,p=s?v.scale.domain():null,g=uw({numericAxis:v});return f.map((y,b)=>{var x,P,w,O,A,j;s?x=rw(s[b],p):(x=re(y,r),Array.isArray(x)||(x=[g,x]));var T=Xk(n,Gg)(x[1],b);if(t==="horizontal"){var I,[C,_]=[u.scale(x[0]),u.scale(x[1])];P=mf({axis:o,ticks:l,bandSize:a,offset:i.offset,entry:y,index:b}),w=(I=_??C)!==null&&I!==void 0?I:void 0,O=i.size;var R=C-_;if(A=We(R)?0:R,j={x:P,y:d.top,width:O,height:d.height},Math.abs(T)>0&&Math.abs(A)0&&Math.abs(O)t,mC=(e,t,r)=>r,gC=(e,t,r,n)=>n,Nl=(e,t,r,n,i)=>i,yC=(e,t,r,n,i)=>i.maxBarSize,bC=(e,t,r,n,i,a)=>a,_h=(e,t,r)=>{var n=r??e;if(!J(n))return ke(n,t,0)},xC=E([Y,Zi,pC,mC,gC],(e,t,r,n,i)=>t.filter(a=>e==="horizontal"?a.xAxisId===r:a.yAxisId===n).filter(a=>a.isPanorama===i).filter(a=>a.hide===!1).filter(a=>a.type==="bar")),wC=(e,t,r,n)=>{var i=Y(e);return i==="horizontal"?Su(e,"yAxis",r,n):Su(e,"xAxis",t,n)},PC=(e,t,r)=>{var n=Y(e);return n==="horizontal"?Dd(e,"xAxis",t):Dd(e,"yAxis",r)};function OC(e){return e.stackId!=null&&e.dataKey!=null}var AC=(e,t,r)=>{var n={},i=e.filter(OC),a=e.filter(c=>c.stackId==null),o=i.reduce((c,s)=>(c[s.stackId]||(c[s.stackId]=[]),c[s.stackId].push(s),c),n),u=Object.entries(o).map(c=>{var[s,f]=c,d=f.map(v=>v.dataKey),h=_h(t,r,f[0].barSize);return{stackId:s,dataKeys:d,barSize:h}}),l=a.map(c=>{var s=[c.dataKey].filter(d=>d!=null),f=_h(t,r,c.barSize);return{stackId:void 0,dataKeys:s,barSize:f}});return[...u,...l]},SC=E([xC,_A,PC],AC),EC=(e,t,r,n,i)=>{var a,o,u=Y(e),l=mm(e),{maxBarSize:c}=i,s=J(c)?l:c,f,d;return u==="horizontal"?(f=vt(e,"xAxis",t,n),d=Ft(e,"xAxis",t,n)):(f=vt(e,"yAxis",r,n),d=Ft(e,"yAxis",r,n)),(a=(o=an(f,d,!0))!==null&&o!==void 0?o:s)!==null&&a!==void 0?a:0},Xg=(e,t,r,n)=>{var i=Y(e),a,o;return i==="horizontal"?(a=vt(e,"xAxis",t,n),o=Ft(e,"xAxis",t,n)):(a=vt(e,"yAxis",r,n),o=Ft(e,"yAxis",r,n)),an(a,o)};function jC(e,t,r,n,i){var a=n.length;if(!(a<1)){var o=ke(e,r,0,!0),u,l=[];if(Ye(n[0].barSize)){var c=!1,s=r/a,f=n.reduce((y,b)=>y+(b.barSize||0),0);f+=(a-1)*o,f>=r&&(f-=(a-1)*o,o=0),f>=r&&s>0&&(c=!0,s*=.9,f=a*s);var d=(r-f)/2>>0,h={offset:d-o,size:0};u=n.reduce((y,b)=>{var x,P={stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:h.offset+h.size+o,size:c?s:(x=b.barSize)!==null&&x!==void 0?x:0}},w=[...y,P];return h=w[w.length-1].position,w},l)}else{var v=ke(t,r,0,!0);r-2*v-(a-1)*o<=0&&(o=0);var p=(r-2*v-(a-1)*o)/a;p>1&&(p>>=0);var g=Ye(i)?Math.min(p,i):p;u=n.reduce((y,b,x)=>[...y,{stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:v+(p+o)*x+(p-g)/2,size:g}}],l)}return u}}var TC=(e,t,r,n,i,a,o)=>{var u=J(o)?t:o,l=jC(r,n,i!==a?i:a,e,u);return i!==a&&l!=null&&(l=l.map(c=>Fn(Fn({},c),{},{position:Fn(Fn({},c.position),{},{offset:c.position.offset-i/2})}))),l},kC=E([SC,mm,CA,gm,EC,Xg,yC],TC),CC=(e,t,r,n)=>vt(e,"xAxis",t,n),_C=(e,t,r,n)=>vt(e,"yAxis",r,n),MC=(e,t,r,n)=>Ft(e,"xAxis",t,n),DC=(e,t,r,n)=>Ft(e,"yAxis",r,n),IC=E([kC,Nl],(e,t)=>{if(e!=null){var r=e.find(n=>n.stackId===t.stackId&&n.dataKeys.includes(t.dataKey));if(r!=null)return r.position}}),NC=(e,t)=>{if(!(!e||(t==null?void 0:t.dataKey)==null)){var{stackId:r}=t;if(r!=null){var n=e[r];if(n){var{stackedData:i}=n;if(i){var a=i.find(o=>o.key===t.dataKey);return a}}}}},$C=E([Zi,Nl],(e,t)=>{if(e.some(r=>r.type==="bar"&&t.dataKey===r.dataKey&&t.stackId===r.stackId&&t.stackId===r.stackId))return t}),RC=E([wC,Nl],NC),LC=E([ve,CC,_C,MC,DC,IC,Y,Rs,Xg,RC,$C,bC],(e,t,r,n,i,a,o,u,l,c,s,f)=>{var{chartData:d,dataStartIndex:h,dataEndIndex:v}=u;if(!(s==null||a==null||o!=="horizontal"&&o!=="vertical"||t==null||r==null||n==null||i==null||l==null)){var{data:p}=s,g;if(p!=null&&p.length>0?g=p:g=d==null?void 0:d.slice(h,v+1),g!=null)return fC({layout:o,barSettings:s,pos:a,bandSize:l,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,stackedData:c,displayedData:g,offset:e,cells:f})}}),Zg=e=>{var{chartData:t}=e,r=ae(),n=Ce();return m.useEffect(()=>n?()=>{}:(r(Fd(t)),()=>{r(Fd(void 0))}),[t,r,n]),null},Mh={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},Jg=nt({name:"brush",initialState:Mh,reducers:{setBrushSettings(e,t){return t.payload==null?Mh:t.payload}}}),{setBrushSettings:Z2}=Jg.actions,BC=Jg.reducer;function KC(e,t,r){return(t=qC(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function qC(e){var t=zC(e,"string");return typeof t=="symbol"?t:t+""}function zC(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}class $l{static create(t){return new $l(t)}constructor(t){this.scale=t}get domain(){return this.scale.domain}get range(){return this.scale.range}get rangeMin(){return this.range()[0]}get rangeMax(){return this.range()[1]}get bandwidth(){return this.scale.bandwidth}apply(t){var{bandAware:r,position:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t!==void 0){if(n)switch(n){case"start":return this.scale(t);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+i}case"end":{var a=this.bandwidth?this.bandwidth():0;return this.scale(t)+a}default:return this.scale(t)}if(r){var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+o}return this.scale(t)}}isInRange(t){var r=this.range(),n=r[0],i=r[r.length-1];return n<=i?t>=n&&t<=i:t>=i&&t<=n}}KC($l,"EPS",1e-4);function FC(e){return(e%180+180)%180}var WC=function(t){var{width:r,height:n}=t,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=FC(i),o=a*Math.PI/180,u=Math.atan(n/r),l=o>u&&o{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=Ot(e).dots.findIndex(n=>n===t.payload);r!==-1&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=Ot(e).areas.findIndex(n=>n===t.payload);r!==-1&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=Ot(e).lines.findIndex(n=>n===t.payload);r!==-1&&e.lines.splice(r,1)}}}),{addDot:J2,removeDot:Q2,addArea:eD,removeArea:tD,addLine:rD,removeLine:nD}=Qg.actions,HC=Qg.reducer,YC=m.createContext(void 0),GC=e=>{var{children:t}=e,[r]=m.useState("".concat(cr("recharts"),"-clip")),n=Ml();if(n==null)return null;var{x:i,y:a,width:o,height:u}=n;return m.createElement(YC.Provider,{value:r},m.createElement("defs",null,m.createElement("clipPath",{id:r},m.createElement("rect",{x:i,y:a,height:u,width:o}))),t)};function zo(e,t){for(var r in e)if({}.hasOwnProperty.call(e,r)&&(!{}.hasOwnProperty.call(t,r)||e[r]!==t[r]))return!1;for(var n in t)if({}.hasOwnProperty.call(t,n)&&!{}.hasOwnProperty.call(e,n))return!1;return!0}function ey(e,t,r){if(t<1)return[];if(t===1&&r===void 0)return e;for(var n=[],i=0;ie*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function ZC(e,t){return ey(e,t+1)}function JC(e,t,r,n,i){for(var a=(n||[]).slice(),{start:o,end:u}=t,l=0,c=1,s=o,f=function(){var v=n==null?void 0:n[l];if(v===void 0)return{v:ey(n,c)};var p=l,g,y=()=>(g===void 0&&(g=r(v,p)),g),b=v.coordinate,x=l===0||Oi(e,b,y,s,u);x||(l=0,s=o,c+=1),x&&(s=b+e*(y()/2+i),l+=c)},d;c<=a.length;)if(d=f(),d)return d.v;return[]}function Dh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t(v===void 0&&(v=r(h,d)),v);if(d===o-1){var g=e*(h.coordinate+e*p()/2-l);a[d]=h=Se(Se({},h),{},{tickCoord:g>0?h.coordinate-g*e:h.coordinate})}else a[d]=h=Se(Se({},h),{},{tickCoord:h.coordinate});var y=Oi(e,h.tickCoord,p,u,l);y&&(l=h.tickCoord-e*(p()/2+i),a[d]=Se(Se({},h),{},{isShow:!0}))},s=o-1;s>=0;s--)c(s);return a}function n_(e,t,r,n,i,a){var o=(n||[]).slice(),u=o.length,{start:l,end:c}=t;if(a){var s=n[u-1],f=r(s,u-1),d=e*(s.coordinate+e*f/2-c);o[u-1]=s=Se(Se({},s),{},{tickCoord:d>0?s.coordinate-d*e:s.coordinate});var h=Oi(e,s.tickCoord,()=>f,l,c);h&&(c=s.tickCoord-e*(f/2+i),o[u-1]=Se(Se({},s),{},{isShow:!0}))}for(var v=a?u-1:u,p=function(b){var x=o[b],P,w=()=>(P===void 0&&(P=r(x,b)),P);if(b===0){var O=e*(x.coordinate-e*w()/2-l);o[b]=x=Se(Se({},x),{},{tickCoord:O<0?x.coordinate-O*e:x.coordinate})}else o[b]=x=Se(Se({},x),{},{tickCoord:x.coordinate});var A=Oi(e,x.tickCoord,w,l,c);A&&(l=x.tickCoord+e*(w()/2+i),o[b]=Se(Se({},x),{},{isShow:!0}))},g=0;g{var w=typeof c=="function"?c(x.value,P):x.value;return v==="width"?VC(tn(w,{fontSize:t,letterSpacing:r}),p,f):tn(w,{fontSize:t,letterSpacing:r})[v]},y=i.length>=2?ge(i[1].coordinate-i[0].coordinate):1,b=XC(a,y,v);return l==="equidistantPreserveStart"?JC(y,b,g,i,o):(l==="preserveStart"||l==="preserveStartEnd"?h=n_(y,b,g,i,o,l==="preserveStartEnd"):h=r_(y,b,g,i,o),h.filter(x=>x.isShow))}var i_=["viewBox"],a_=["viewBox"];function Ar(){return Ar=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:[],{tickLine:i,stroke:a,tick:o,tickFormatter:u,unit:l}=this.props,c=Rl(he(he({},this.props),{},{ticks:n}),t,r),s=this.getTickTextAnchor(),f=this.getTickVerticalAnchor(),d=z(this.props,!1),h=z(o,!1),v=he(he({},d),{},{fill:"none"},z(i,!1)),p=c.map((g,y)=>{var{line:b,tick:x}=this.getTickLineCoord(g),P=he(he(he(he({textAnchor:s,verticalAnchor:f},d),{},{stroke:"none",fill:a},h),x),{},{index:y,payload:g,visibleTicksCount:c.length,tickFormatter:u});return m.createElement(ye,Ar({className:"recharts-cartesian-axis-tick",key:"tick-".concat(g.value,"-").concat(g.coordinate,"-").concat(g.tickCoord)},ji(this.props,g,y)),i&&m.createElement("line",Ar({},v,b,{className:H("recharts-cartesian-axis-tick-line",qt(i,"className"))})),o&&Vt.renderTickItem(o,P,"".concat(typeof u=="function"?u(g.value,y):g.value).concat(l||"")))});return p.length>0?m.createElement("g",{className:"recharts-cartesian-axis-ticks"},p):null}render(){var{axisLine:t,width:r,height:n,className:i,hide:a}=this.props;if(a)return null;var{ticks:o}=this.props;return r!=null&&r<=0||n!=null&&n<=0?null:m.createElement(ye,{className:H("recharts-cartesian-axis",i),ref:u=>{if(u){var l=u.getElementsByClassName("recharts-cartesian-axis-tick-value");this.tickRefs.current=Array.from(l);var c=l[0];if(c){var s=window.getComputedStyle(c).fontSize,f=window.getComputedStyle(c).letterSpacing;(s!==this.state.fontSize||f!==this.state.letterSpacing)&&this.setState({fontSize:window.getComputedStyle(c).fontSize,letterSpacing:window.getComputedStyle(c).letterSpacing})}}}},t&&this.renderAxisLine(),this.renderTicks(this.state.fontSize,this.state.letterSpacing,o),qe.renderCallByParent(this.props))}}Ll(Vt,"displayName","CartesianAxis");Ll(Vt,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var l_=["x1","y1","x2","y2","key"],c_=["offset"],f_=["xAxisId","yAxisId"],d_=["xAxisId","yAxisId"];function $h(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function je(e){for(var t=1;t{var{fill:t}=e;if(!t||t==="none")return null;var{fillOpacity:r,x:n,y:i,width:a,height:o,ry:u}=e;return m.createElement("rect",{x:n,y:i,ry:u,width:a,height:o,stroke:"none",fill:t,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function ty(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var{x1:n,y1:i,x2:a,y2:o,key:u}=t,l=Ai(t,l_),c=z(l,!1),{offset:s}=c,f=Ai(c,c_);r=m.createElement("line",ar({},f,{x1:n,y1:i,x2:a,y2:o,fill:"none",key:u}))}return r}function y_(e){var{x:t,width:r,horizontal:n=!0,horizontalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Ai(e,f_),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:t,y1:c,x2:t+r,y2:c,key:"line-".concat(s),index:s});return ty(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-horizontal"},l)}function b_(e){var{y:t,height:r,vertical:n=!0,verticalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Ai(e,d_),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:c,y1:t,x2:c,y2:t+r,key:"line-".concat(s),index:s});return ty(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-vertical"},l)}function x_(e){var{horizontalFill:t,fillOpacity:r,x:n,y:i,width:a,height:o,horizontalPoints:u,horizontal:l=!0}=e;if(!l||!t||!t.length)return null;var c=u.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%t.length;return m.createElement("rect",{key:"react-".concat(d),y:f,x:n,height:v,width:a,stroke:"none",fill:t[p],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},s)}function w_(e){var{vertical:t=!0,verticalFill:r,fillOpacity:n,x:i,y:a,width:o,height:u,verticalPoints:l}=e;if(!t||!r||!r.length)return null;var c=l.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%r.length;return m.createElement("rect",{key:"react-".concat(d),x:f,y:a,width:v,height:u,stroke:"none",fill:r[p],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},s)}var P_=(e,t)=>{var{xAxis:r,width:n,height:i,offset:a}=e;return ep(Rl(je(je(je({},Vt.defaultProps),r),{},{ticks:tp(r),viewBox:{x:0,y:0,width:n,height:i}})),a.left,a.left+a.width,t)},O_=(e,t)=>{var{yAxis:r,width:n,height:i,offset:a}=e;return ep(Rl(je(je(je({},Vt.defaultProps),r),{},{ticks:tp(r),viewBox:{x:0,y:0,width:n,height:i}})),a.top,a.top+a.height,t)},A_={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0};function Bl(e){var t=sp(),r=lp(),n=up(),i=je(je({},it(e,A_)),{},{x:D(e.x)?e.x:n.left,y:D(e.y)?e.y:n.top,width:D(e.width)?e.width:n.width,height:D(e.height)?e.height:n.height}),{xAxisId:a,yAxisId:o,x:u,y:l,width:c,height:s,syncWithTicks:f,horizontalValues:d,verticalValues:h}=i,v=Ce(),p=$(T=>Id(T,"xAxis",a,v)),g=$(T=>Id(T,"yAxis",o,v));if(!D(c)||c<=0||!D(s)||s<=0||!D(u)||u!==+u||!D(l)||l!==+l)return null;var y=i.verticalCoordinatesGenerator||P_,b=i.horizontalCoordinatesGenerator||O_,{horizontalPoints:x,verticalPoints:P}=i;if((!x||!x.length)&&typeof b=="function"){var w=d&&d.length,O=b({yAxis:g?je(je({},g),{},{ticks:w?d:g.ticks}):void 0,width:t,height:r,offset:n},w?!0:f);en(Array.isArray(O),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof O,"]")),Array.isArray(O)&&(x=O)}if((!P||!P.length)&&typeof y=="function"){var A=h&&h.length,j=y({xAxis:p?je(je({},p),{},{ticks:A?h:p.ticks}):void 0,width:t,height:r,offset:n},A?!0:f);en(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(P=j)}return m.createElement("g",{className:"recharts-cartesian-grid"},m.createElement(g_,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),m.createElement(x_,ar({},i,{horizontalPoints:x})),m.createElement(w_,ar({},i,{verticalPoints:P})),m.createElement(y_,ar({},i,{offset:n,horizontalPoints:x,xAxis:p,yAxis:g})),m.createElement(b_,ar({},i,{offset:n,verticalPoints:P,xAxis:p,yAxis:g})))}Bl.displayName="CartesianGrid";var ry=(e,t,r,n)=>vt(e,"xAxis",t,n),ny=(e,t,r,n)=>Ft(e,"xAxis",t,n),iy=(e,t,r,n)=>vt(e,"yAxis",r,n),ay=(e,t,r,n)=>Ft(e,"yAxis",r,n),S_=E([Y,ry,iy,ny,ay],(e,t,r,n,i)=>Ut(e,"xAxis")?an(t,n,!1):an(r,i,!1)),E_=(e,t,r,n,i)=>i,j_=E([Zi,E_],(e,t)=>{if(e.some(r=>r.type==="line"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),T_=E([Y,ry,iy,ny,ay,j_,S_,Rs],(e,t,r,n,i,a,o,u)=>{var{chartData:l,dataStartIndex:c,dataEndIndex:s}=u;if(!(a==null||t==null||r==null||n==null||i==null||n.length===0||i.length===0||o==null)){var{dataKey:f,data:d}=a,h;if(d!=null&&d.length>0?h=d:h=l==null?void 0:l.slice(c,s+1),h!=null)return Y_({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataKey:f,bandSize:o,displayedData:h})}}),k_=["type","layout","connectNulls","needClip"],C_=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId"];function oy(e,t){if(e==null)return{};var r,n,i=__(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{dataKey:t,name:r,stroke:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Nr(r,t),payload:e}]};function N_(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:u,unit:l}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:Nr(o,t),hide:u,type:e.tooltipType,color:e.stroke,unit:l}}}var uy=(e,t)=>"".concat(t,"px ").concat(e-t,"px");function $_(e,t){for(var r=e.length%2!==0?[...e,0]:e,n=[],i=0;i{var n=r.reduce((f,d)=>f+d);if(!n)return uy(t,e);for(var i=Math.floor(e/n),a=e%n,o=t-e,u=[],l=0,c=0;la){u=[...r.slice(0,l),a-c];break}var s=u.length%2===0?[0,o]:[o];return[...$_(r,i),...u,...s].map(f=>"".concat(f,"px")).join(", ")};function L_(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var n=H("recharts-line-dot",typeof e!="boolean"?e.className:"");r=m.createElement(Sg,Ir({},t,{className:n}))}return r}function B_(e,t){return e==null?!1:t?!0:e.length===1}function K_(e){var{clipPathId:t,points:r,props:n}=e,{dot:i,dataKey:a,needClip:o}=n;if(!B_(r,i))return null;var u=Qh(i),l=z(n,!1),c=z(i,!0),s=r.map((d,h)=>{var v=ot(ot(ot({key:"dot-".concat(h),r:3},l),c),{},{index:h,cx:d.x,cy:d.y,dataKey:a,value:d.value,payload:d.payload,points:r});return L_(i,v)}),f={clipPath:o?"url(#clipPath-".concat(u?"":"dots-").concat(t,")"):null};return m.createElement(ye,Ir({className:"recharts-line-dots",key:"dots"},f),s)}function Nu(e){var{clipPathId:t,pathRef:r,points:n,strokeDasharray:i,props:a,showLabels:o}=e,{type:u,layout:l,connectNulls:c,needClip:s}=a,f=oy(a,k_),d=ot(ot({},z(f,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:s?"url(#clipPath-".concat(t,")"):null,points:n,type:u,layout:l,connectNulls:c,strokeDasharray:i??a.strokeDasharray});return m.createElement(m.Fragment,null,(n==null?void 0:n.length)>1&&m.createElement(fs,Ir({},d,{pathRef:r})),m.createElement(K_,{points:n,clipPathId:t,props:a}),o&&Kt.renderCallByParent(a,n))}function q_(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function z_(e){var{clipPathId:t,props:r,pathRef:n,previousPointsRef:i,longestAnimatedLengthRef:a}=e,{points:o,strokeDasharray:u,isAnimationActive:l,animationBegin:c,animationDuration:s,animationEasing:f,animateNewValues:d,width:h,height:v,onAnimationEnd:p,onAnimationStart:g}=r,y=i.current,b=Cl(r,"recharts-line-"),[x,P]=m.useState(!1),w=m.useCallback(()=>{typeof p=="function"&&p(),P(!1)},[p]),O=m.useCallback(()=>{typeof g=="function"&&g(),P(!0)},[g]),A=q_(n.current),j=a.current;return m.createElement(zt,{begin:c,duration:s,isActive:l,easing:f,from:{t:0},to:{t:1},onAnimationEnd:w,onAnimationStart:O,key:b},T=>{var{t:I}=T,C=Ke(j,A+j),_=Math.min(C(I),A),R;if(u){var B="".concat(u).split(/[,\s]+/gim).map(K=>parseFloat(K));R=R_(_,A,B)}else R=uy(A,_);if(y){var F=y.length/o.length,V=I===1?o:o.map((K,de)=>{var oe=Math.floor(de*F);if(y[oe]){var Ie=y[oe],Ge=Ke(Ie.x,K.x),L=Ke(Ie.y,K.y);return ot(ot({},K),{},{x:Ge(I),y:L(I)})}if(d){var we=Ke(h*2,K.x),Xt=Ke(v/2,K.y);return ot(ot({},K),{},{x:we(I),y:Xt(I)})}return ot(ot({},K),{},{x:K.x,y:K.y})});return i.current=V,m.createElement(Nu,{props:r,points:V,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})}return I>0&&A>0&&(i.current=o,a.current=_),m.createElement(Nu,{props:r,points:o,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})})}function F_(e){var{clipPathId:t,props:r}=e,{points:n,isAnimationActive:i}=r,a=m.useRef(null),o=m.useRef(0),u=m.useRef(null),l=a.current;return i&&n&&n.length&&l!==n?m.createElement(z_,{props:r,clipPathId:t,previousPointsRef:a,longestAnimatedLengthRef:o,pathRef:u}):m.createElement(Nu,{props:r,points:n,clipPathId:t,pathRef:u,showLabels:!0})}var W_=(e,t)=>({x:e.x,y:e.y,value:e.value,errorVal:re(e.payload,t)});class U_ extends m.Component{constructor(){super(...arguments),ua(this,"id",cr("recharts-line-"))}render(){var t,{hide:r,dot:n,points:i,className:a,xAxisId:o,yAxisId:u,top:l,left:c,width:s,height:f,id:d,needClip:h,layout:v}=this.props;if(r)return null;var p=H("recharts-line",a),g=J(d)?this.id:d,{r:y=3,strokeWidth:b=2}=(t=z(n,!1))!==null&&t!==void 0?t:{r:3,strokeWidth:2},x=Qh(n),P=y*2+b;return m.createElement(m.Fragment,null,m.createElement(ye,{className:p},h&&m.createElement("defs",null,m.createElement(Hg,{clipPathId:g,xAxisId:o,yAxisId:u}),!x&&m.createElement("clipPath",{id:"clipPath-dots-".concat(g)},m.createElement("rect",{x:c-P/2,y:l-P/2,width:s+P,height:f+P}))),m.createElement(F_,{props:this.props,clipPathId:g}),m.createElement(zg,{direction:v==="horizontal"?"y":"x"},m.createElement(Lg,{xAxisId:o,yAxisId:u,data:i,dataPointFormatter:W_,errorBarOffset:0},this.props.children))),m.createElement(Sk,{activeDot:this.props.activeDot,points:i,mainColor:this.props.stroke,itemDataKey:this.props.dataKey}))}}var sy={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:!pr.isSsr,label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0};function H_(e){var t=it(e,sy),{activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,connectNulls:u,dot:l,hide:c,isAnimationActive:s,label:f,legendType:d,xAxisId:h,yAxisId:v}=t,p=oy(t,C_),{needClip:g}=Dl(h,v),{height:y,width:b,x,y:P}=Ml(),w=qi(),O=Ce(),A=m.useMemo(()=>({dataKey:e.dataKey,data:e.data}),[e.dataKey,e.data]),j=$(T=>T_(T,h,v,O,A));return w!=="horizontal"&&w!=="vertical"?null:m.createElement(U_,Ir({},p,{connectNulls:u,dot:l,activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:s,hide:c,label:f,legendType:d,xAxisId:h,yAxisId:v,points:j,layout:w,height:y,width:b,left:x,top:P,needClip:g}))}function Y_(e){var{layout:t,xAxis:r,yAxis:n,xAxisTicks:i,yAxisTicks:a,dataKey:o,bandSize:u,displayedData:l}=e;return l.map((c,s)=>{var f=re(c,o);return t==="horizontal"?{x:pf({axis:r,ticks:i,bandSize:u,entry:c,index:s}),y:J(f)?null:n.scale(f),value:f,payload:c}:{x:J(f)?null:r.scale(f),y:pf({axis:n,ticks:a,bandSize:u,entry:c,index:s}),value:f,payload:c}})}class Kl extends m.PureComponent{render(){return m.createElement(Bg,{type:"line",data:this.props.data,xAxisId:this.props.xAxisId,yAxisId:this.props.yAxisId,zAxisId:0,dataKey:this.props.dataKey,stackId:void 0,hide:this.props.hide,barSize:void 0},m.createElement(Dg,{legendPayload:I_(this.props)}),m.createElement(kl,{fn:N_,args:this.props}),m.createElement(H_,this.props))}}ua(Kl,"displayName","Line");ua(Kl,"defaultProps",sy);function Lh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Bh(e){for(var t=1;t{var{children:a}=e,o=fy(e,iM);return o},[e]),n=$(a=>Dt(a,r.id)),i=r===n;return m.useEffect(()=>(t(J_(r)),()=>{t(Q_(r))}),[r,t]),i?e.children:null}var cM=e=>{var{xAxisId:t,className:r}=e,n=$(op),i=Ce(),a="xAxis",o=$(h=>qr(h,a,t,i)),u=$(h=>Um(h,a,t,i)),l=$(h=>qm(h,t)),c=$(h=>OS(h,t));if(l==null||c==null)return null;var{dangerouslySetInnerHTML:s,ticks:f}=e,d=fy(e,aM);return m.createElement(Vt,$u({},d,{scale:o,x:c.x,y:c.y,width:l.width,height:l.height,className:H("recharts-".concat(a," ").concat(a),r),viewBox:n,ticks:u}))},fM=e=>{var t,r,n,i,a;return m.createElement(lM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.xAxisId,scale:e.scale,type:e.type,padding:e.padding,allowDataOverflow:e.allowDataOverflow,domain:e.domain,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,height:e.height,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter},m.createElement(cM,e))};class sa extends m.Component{render(){return m.createElement(fM,this.props)}}cy(sa,"displayName","XAxis");cy(sa,"defaultProps",{allowDataOverflow:Re.allowDataOverflow,allowDecimals:Re.allowDecimals,allowDuplicatedCategory:Re.allowDuplicatedCategory,height:Re.height,hide:!1,mirror:Re.mirror,orientation:Re.orientation,padding:Re.padding,reversed:Re.reversed,scale:Re.scale,tickCount:Re.tickCount,type:Re.type,xAxisId:0});var dM=e=>{var{ticks:t,label:r,labelGapWithTick:n=5,tickSize:i=0,tickMargin:a=0}=e,o=0;if(t){t.forEach(s=>{if(s){var f=s.getBoundingClientRect();f.width>o&&(o=f.width)}});var u=r?r.getBoundingClientRect().width:0,l=i+a,c=o+l+u+(r?n:0);return Math.round(c)}return 0},hM=["dangerouslySetInnerHTML","ticks"];function dy(e,t,r){return(t=vM(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function vM(e){var t=pM(e,"string");return typeof t=="symbol"?t:t+""}function pM(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Ru(){return Ru=Object.assign?Object.assign.bind():function(e){for(var t=1;t(t(eM(e)),()=>{t(tM(e))}),[e,t]),null}var bM=e=>{var t,{yAxisId:r,className:n,width:i,label:a}=e,o=m.useRef(null),u=m.useRef(null),l=$(op),c=Ce(),s=ae(),f="yAxis",d=$(x=>qr(x,f,r,c)),h=$(x=>zm(x,r)),v=$(x=>AS(x,r)),p=$(x=>Um(x,f,r,c));if(m.useLayoutEffect(()=>{var x;if(!(i!=="auto"||!h||wl(a)||m.isValidElement(a))){var P=o.current,w=P==null||(x=P.tickRefs)===null||x===void 0?void 0:x.current,{tickSize:O,tickMargin:A}=P.props,j=dM({ticks:w,label:u.current,labelGapWithTick:5,tickSize:O,tickMargin:A});Math.round(h.width)!==Math.round(j)&&s(rM({id:r,width:j}))}},[o,o==null||(t=o.current)===null||t===void 0||(t=t.tickRefs)===null||t===void 0?void 0:t.current,h==null?void 0:h.width,h,s,a,r,i]),h==null||v==null)return null;var{dangerouslySetInnerHTML:g,ticks:y}=e,b=mM(e,hM);return m.createElement(Vt,Ru({},b,{ref:o,labelRef:u,scale:d,x:v.x,y:v.y,width:h.width,height:h.height,className:H("recharts-".concat(f," ").concat(f),n),viewBox:l,ticks:p}))},xM=e=>{var t,r,n,i,a;return m.createElement(m.Fragment,null,m.createElement(yM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.yAxisId,scale:e.scale,type:e.type,domain:e.domain,allowDataOverflow:e.allowDataOverflow,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,padding:e.padding,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,width:e.width,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter}),m.createElement(bM,e))},wM={allowDataOverflow:Le.allowDataOverflow,allowDecimals:Le.allowDecimals,allowDuplicatedCategory:Le.allowDuplicatedCategory,hide:!1,mirror:Le.mirror,orientation:Le.orientation,padding:Le.padding,reversed:Le.reversed,scale:Le.scale,tickCount:Le.tickCount,type:Le.type,width:Le.width,yAxisId:0};class la extends m.Component{render(){return m.createElement(xM,this.props)}}dy(la,"displayName","YAxis");dy(la,"defaultProps",wM);var Fo={exports:{}},Wo={};/** + * @license React + * use-sync-external-store-with-selector.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Kh;function PM(){if(Kh)return Wo;Kh=1;var e=zu();function t(l,c){return l===c&&(l!==0||1/l===1/c)||l!==l&&c!==c}var r=typeof Object.is=="function"?Object.is:t,n=e.useSyncExternalStore,i=e.useRef,a=e.useEffect,o=e.useMemo,u=e.useDebugValue;return Wo.useSyncExternalStoreWithSelector=function(l,c,s,f,d){var h=i(null);if(h.current===null){var v={hasValue:!1,value:null};h.current=v}else v=h.current;h=o(function(){function g(w){if(!y){if(y=!0,b=w,w=f(w),d!==void 0&&v.hasValue){var O=v.value;if(d(O,w))return x=O}return x=w}if(O=x,r(b,w))return O;var A=f(w);return d!==void 0&&d(O,A)?(b=w,O):(b=w,x=A)}var y=!1,b,x,P=s===void 0?null:s;return[function(){return g(c())},P===null?void 0:function(){return g(P())}]},[c,s,f,d]);var p=n(l,h[0],h[1]);return a(function(){v.hasValue=!0,v.value=p},[p]),u(p),p},Wo}var qh;function OM(){return qh||(qh=1,Fo.exports=PM()),Fo.exports}OM();function AM(e){e()}function SM(){let e=null,t=null;return{clear(){e=null,t=null},notify(){AM(()=>{let r=e;for(;r;)r.callback(),r=r.next})},get(){const r=[];let n=e;for(;n;)r.push(n),n=n.next;return r},subscribe(r){let n=!0;const i=t={callback:r,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!n||e===null||(n=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var zh={notify(){},get:()=>[]};function EM(e,t){let r,n=zh,i=0,a=!1;function o(p){s();const g=n.subscribe(p);let y=!1;return()=>{y||(y=!0,g(),f())}}function u(){n.notify()}function l(){v.onStateChange&&v.onStateChange()}function c(){return a}function s(){i++,r||(r=e.subscribe(l),n=SM())}function f(){i--,r&&i===0&&(r(),r=void 0,n.clear(),n=zh)}function d(){a||(a=!0,s())}function h(){a&&(a=!1,f())}const v={addNestedSub:o,notifyNestedSubs:u,handleChangeWrapper:l,isSubscribed:c,trySubscribe:d,tryUnsubscribe:h,getListeners:()=>n};return v}var jM=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",TM=jM(),kM=()=>typeof navigator<"u"&&navigator.product==="ReactNative",CM=kM(),_M=()=>TM||CM?m.useLayoutEffect:m.useEffect,MM=_M(),Uo=Symbol.for("react-redux-context"),Ho=typeof globalThis<"u"?globalThis:{};function DM(){if(!m.createContext)return{};const e=Ho[Uo]??(Ho[Uo]=new Map);let t=e.get(m.createContext);return t||(t=m.createContext(null),e.set(m.createContext,t)),t}var IM=DM();function NM(e){const{children:t,context:r,serverState:n,store:i}=e,a=m.useMemo(()=>{const l=EM(i);return{store:i,subscription:l,getServerState:n?()=>n:void 0}},[i,n]),o=m.useMemo(()=>i.getState(),[i]);MM(()=>{const{subscription:l}=a;return l.onStateChange=l.notifyNestedSubs,l.trySubscribe(),o!==i.getState()&&l.notifyNestedSubs(),()=>{l.tryUnsubscribe(),l.onStateChange=void 0}},[a,o]);const u=r||IM;return m.createElement(u.Provider,{value:a},t)}var $M=NM,RM=(e,t)=>t,ql=E([RM,Y,RA,xe,og,It,jE,ve],ME),zl=e=>{var t=e.currentTarget.getBoundingClientRect(),r=t.width/e.currentTarget.offsetWidth,n=t.height/e.currentTarget.offsetHeight;return{chartX:Math.round((e.clientX-t.left)/r),chartY:Math.round((e.clientY-t.top)/n)}},hy=tt("mouseClick"),vy=gn();vy.startListening({actionCreator:hy,effect:(e,t)=>{var r=e.payload,n=ql(t.getState(),zl(r));(n==null?void 0:n.activeIndex)!=null&&t.dispatch(RS({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var Lu=tt("mouseMove"),py=gn();py.startListening({actionCreator:Lu,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=ll(n,n.tooltip.settings.shared),a=ql(n,zl(r));i==="axis"&&((a==null?void 0:a.activeIndex)!=null?t.dispatch(Qm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate})):t.dispatch(Jm()))}});function LM(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":t}var Fh={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index"},my=nt({name:"rootProps",initialState:Fh,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=(r=t.payload.barGap)!==null&&r!==void 0?r:Fh.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className}}}),BM=my.reducer,{updateOptions:KM}=my.actions,gy=nt({name:"polarOptions",initialState:null,reducers:{updatePolarOptions:(e,t)=>t.payload}}),{updatePolarOptions:qM}=gy.actions,zM=gy.reducer,yy=tt("keyDown"),by=tt("focus"),Fl=gn();Fl.startListening({actionCreator:yy,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip,a=e.payload;if(!(a!=="ArrowRight"&&a!=="ArrowLeft"&&a!=="Enter")){var o=Number(cl(i,xr(r))),u=It(r);if(a==="Enter"){var l=bi(r,"axis","hover",String(i.index));t.dispatch(ju({active:!i.active,activeIndex:i.index,activeDataKey:i.dataKey,activeCoordinate:l}));return}var c=TS(r),s=c==="left-to-right"?1:-1,f=a==="ArrowRight"?1:-1,d=o+f*s;if(!(u==null||d>=u.length||d<0)){var h=bi(r,"axis","hover",String(d));t.dispatch(ju({active:!0,activeIndex:d.toString(),activeDataKey:void 0,activeCoordinate:h}))}}}}});Fl.startListening({actionCreator:by,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip;if(!i.active&&i.index==null){var a="0",o=bi(r,"axis","hover",String(a));t.dispatch(ju({activeDataKey:void 0,active:!0,activeIndex:a,activeCoordinate:o}))}}}});var Je=tt("externalEvent"),xy=gn();xy.startListening({actionCreator:Je,effect:(e,t)=>{if(e.payload.handler!=null){var r=t.getState(),n={activeCoordinate:gE(r),activeDataKey:cg(r),activeIndex:Wt(r),activeLabel:lg(r),activeTooltipIndex:Wt(r),isTooltipActive:yE(r)};e.payload.handler(n,e.payload.reactEvent)}}});var FM=E([zr],e=>e.tooltipItemPayloads),WM=E([FM,jn,(e,t,r)=>t,(e,t,r)=>r],(e,t,r,n)=>{var i=e.find(u=>u.settings.dataKey===n);if(i!=null){var{positions:a}=i;if(a!=null){var o=t(a,r);return o}}}),wy=tt("touchMove"),Py=gn();Py.startListening({actionCreator:wy,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=ll(n,n.tooltip.settings.shared);if(i==="axis"){var a=ql(n,zl({clientX:r.touches[0].clientX,clientY:r.touches[0].clientY,currentTarget:r.currentTarget}));(a==null?void 0:a.activeIndex)!=null&&t.dispatch(Qm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate}))}else if(i==="item"){var o,u=r.touches[0],l=document.elementFromPoint(u.clientX,u.clientY);if(!l||!l.getAttribute)return;var c=l.getAttribute(ip),s=(o=l.getAttribute(ap))!==null&&o!==void 0?o:void 0,f=WM(t.getState(),c,s);t.dispatch(Zm({activeDataKey:s,activeIndex:c,activeCoordinate:f}))}}});var UM=Cv({brush:BC,cartesianAxis:nM,chartData:GE,graphicalItems:kT,layout:Kx,legend:Ow,options:FE,polarAxis:hT,polarOptions:zM,referenceElements:HC,rootProps:BM,tooltip:LS}),HM=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Chart";return fx({reducer:UM,preloadedState:t,middleware:n=>n({serializableCheck:!1}).concat([vy.middleware,py.middleware,Fl.middleware,xy.middleware,Py.middleware]),devTools:{serialize:{replacer:LM},name:"recharts-".concat(r)}})};function Oy(e){var{preloadedState:t,children:r,reduxStoreName:n}=e,i=Ce(),a=m.useRef(null);if(i)return r;a.current==null&&(a.current=HM(t,n));var o=rs;return m.createElement($M,{context:o,store:a.current},r)}function Ay(e){var{layout:t,width:r,height:n,margin:i}=e,a=ae(),o=Ce();return m.useEffect(()=>{o||(a(Rx(t)),a(Lx({width:r,height:n})),a($x(i)))},[a,o,t,r,n,i]),null}function Sy(e){var t=ae();return m.useEffect(()=>{t(KM(e))},[t,e]),null}var YM=["children"];function GM(e,t){if(e==null)return{};var r,n,i=VM(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=sp(),n=lp(),i=hp();if(!kr(r)||!kr(n))return null;var{children:a,otherAttributes:o,title:u,desc:l}=e,c,s;return typeof o.tabIndex=="number"?c=o.tabIndex:c=i?0:void 0,typeof o.role=="string"?s=o.role:s=i?"application":void 0,m.createElement(ev,Si({},o,{title:u,desc:l,role:s,tabIndex:c,width:r,height:n,style:XM,ref:t}),a)}),JM=e=>{var{children:t}=e,r=$(Ki);if(!r)return null;var{width:n,height:i,y:a,x:o}=r;return m.createElement(ev,{width:n,height:i,x:o,y:a},t)},Wh=m.forwardRef((e,t)=>{var{children:r}=e,n=GM(e,YM),i=Ce();return i?m.createElement(JM,null,r):m.createElement(ZM,Si({ref:t},n),r)});function QM(){var e=ae(),[t,r]=m.useState(null),n=$(vw);return m.useEffect(()=>{if(t!=null){var i=t.getBoundingClientRect(),a=i.width/t.offsetWidth;Ye(a)&&a!==n&&e(Bx(a))}},[t,e,n]),r}function Uh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function e2(e){for(var t=1;t{var{children:r,className:n,height:i,onClick:a,onContextMenu:o,onDoubleClick:u,onMouseDown:l,onMouseEnter:c,onMouseLeave:s,onMouseMove:f,onMouseUp:d,onTouchEnd:h,onTouchMove:v,onTouchStart:p,style:g,width:y}=e,b=ae(),[x,P]=m.useState(null),[w,O]=m.useState(null);ZE();var A=QM(),j=m.useCallback(L=>{A(L),typeof t=="function"&&t(L),P(L),O(L)},[A,t,P,O]),T=m.useCallback(L=>{b(hy(L)),b(Je({handler:a,reactEvent:L}))},[b,a]),I=m.useCallback(L=>{b(Lu(L)),b(Je({handler:c,reactEvent:L}))},[b,c]),C=m.useCallback(L=>{b(Jm()),b(Je({handler:s,reactEvent:L}))},[b,s]),_=m.useCallback(L=>{b(Lu(L)),b(Je({handler:f,reactEvent:L}))},[b,f]),R=m.useCallback(()=>{b(by())},[b]),B=m.useCallback(L=>{b(yy(L.key))},[b]),F=m.useCallback(L=>{b(Je({handler:o,reactEvent:L}))},[b,o]),V=m.useCallback(L=>{b(Je({handler:u,reactEvent:L}))},[b,u]),K=m.useCallback(L=>{b(Je({handler:l,reactEvent:L}))},[b,l]),de=m.useCallback(L=>{b(Je({handler:d,reactEvent:L}))},[b,d]),oe=m.useCallback(L=>{b(Je({handler:p,reactEvent:L}))},[b,p]),Ie=m.useCallback(L=>{b(wy(L)),b(Je({handler:v,reactEvent:L}))},[b,v]),Ge=m.useCallback(L=>{b(Je({handler:h,reactEvent:L}))},[b,h]);return m.createElement(mg.Provider,{value:x},m.createElement(u0.Provider,{value:w},m.createElement("div",{className:H("recharts-wrapper",n),style:e2({position:"relative",cursor:"default",width:y,height:i},g),onClick:T,onContextMenu:F,onDoubleClick:V,onFocus:R,onKeyDown:B,onMouseDown:K,onMouseEnter:I,onMouseLeave:C,onMouseMove:_,onMouseUp:de,onTouchEnd:Ge,onTouchMove:Ie,onTouchStart:oe,ref:j},r)))}),a2=["children","className","width","height","style","compact","title","desc"];function o2(e,t){if(e==null)return{};var r,n,i=u2(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{children:r,className:n,width:i,height:a,style:o,compact:u,title:l,desc:c}=e,s=o2(e,a2),f=z(s,!1);return u?m.createElement(Wh,{otherAttributes:f,title:l,desc:c},r):m.createElement(i2,{className:n,style:o,width:i,height:a,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},m.createElement(Wh,{otherAttributes:f,title:l,desc:c,ref:t},m.createElement(GC,null,r)))}),s2=["width","height"];function Bu(){return Bu=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.createElement(jy,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:h2,tooltipPayloadSearcher:yl,categoricalChartProps:e,ref:t})),p2=["axis","item"],m2=m.forwardRef((e,t)=>m.createElement(jy,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:p2,tooltipPayloadSearcher:yl,categoricalChartProps:e,ref:t}));function g2(e){var t=ae();return m.useEffect(()=>{t(qM(e))},[t,e]),null}var y2=["width","height","layout"];function Ku(){return Ku=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=it(e,S2);return m.createElement(O2,{chartName:"PieChart",defaultTooltipEventType:"item",validateTooltipEventTypes:A2,tooltipPayloadSearcher:yl,categoricalChartProps:r,ref:t})});const Wl=(e="line")=>m.useMemo(()=>({...{margin:{top:5,right:30,left:20,bottom:5},gridProps:{strokeDasharray:"3 3",stroke:"#f3f4f6"},axisProps:{stroke:"#6b7280",fontSize:12}},...{line:{strokeWidth:3,dot:{strokeWidth:2,r:4},activeDot:{r:6,strokeWidth:2}},bar:{radius:[4,4,0,0]},pie:{innerRadius:60,outerRadius:80,paddingAngle:5}}[e]}),[e]),Ul=(e,t={})=>{const[r,n]=m.useState(null),[i,a]=m.useState(!0),[o,u]=m.useState(null),l=m.useCallback(async()=>{try{a(!0),u(null);const s=await e(t);n(s.data)}catch(s){console.error("Error fetching chart data:",s),u(s.message||"Failed to fetch chart data")}finally{a(!1)}},[e,t]);m.useEffect(()=>{l()},[l]);const c=m.useCallback(()=>{l()},[l]);return{data:r,loading:i,error:o,refresh:c}},j2=(e={})=>Ul(Fu.getSurvivalRate,e),T2=(e={})=>Ul(Fu.getHeightGrowth,e),k2=(e={})=>Ul(Fu.getCO2Absorption,e),C2=({filters:e={}})=>{var l,c;const{data:t,loading:r,error:n}=j2(e),i=((l=t==null?void 0:t.chartData)==null?void 0:l.length)>0&&((c=t.chartData[t.chartData.length-1])==null?void 0:c.survivalRate)||0,a={survived:i,lost:100-i},o=Wl("pie"),u=[{name:"Survived",value:a.survived,color:"#10b981"},{name:"Lost",value:a.lost,color:"#ef4444"}];return r?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Tree Survival Rate"})}),S.jsx("div",{className:"flex justify-center items-center h-48",children:S.jsx(Ei,{size:"32px",text:"Loading chart data..."})})]}):n?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Tree Survival Rate"})}),S.jsx("div",{className:"flex justify-center items-center h-48",children:S.jsxs("div",{className:"text-center",children:[S.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),S.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Tree Survival Rate"})}),S.jsx(Iy,{value:a.survived,label:"Survival Rate"}),S.jsx(xl,{width:"100%",height:200,children:S.jsxs(E2,{children:[S.jsx(_l,{data:u,cx:"50%",cy:"50%",innerRadius:o.innerRadius,outerRadius:o.outerRadius,paddingAngle:o.paddingAngle,dataKey:"value",children:u.map((s,f)=>S.jsx(Tn,{fill:s.color},`cell-${f}`))}),S.jsx(bl,{content:S.jsx(qu,{valueFormatter:s=>`${s.toFixed(1)}%`})})]})}),S.jsx(Ny,{data:u})]})},_2=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=T2(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>{var l,c;return{period:u.period,height:((l=u.species)==null?void 0:l.reduce((s,f)=>s+f.avgHeight,0))/(((c=u.species)==null?void 0:c.length)||1)||0}}))||[],a=Wl("line");return r?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Average Tree Height Over Time"})}),S.jsx("div",{className:"flex justify-center items-center h-72",children:S.jsx(Ei,{size:"32px",text:"Loading chart data..."})})]}):n?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Average Tree Height Over Time"})}),S.jsx("div",{className:"flex justify-center items-center h-72",children:S.jsxs("div",{className:"text-center",children:[S.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),S.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Average Tree Height Over Time"})}),S.jsx(xl,{width:"100%",height:300,children:S.jsxs(v2,{data:i,margin:a.margin,children:[S.jsx(Bl,{...a.gridProps}),S.jsx(sa,{dataKey:"period",...a.axisProps}),S.jsx(la,{...a.axisProps,label:{value:"Height (m)",angle:-90,position:"insideLeft",fontSize:12}}),S.jsx(bl,{content:S.jsx(qu,{valueFormatter:u=>`Average Height: ${u.toFixed(1)}m`})}),S.jsx(Kl,{type:"monotone",dataKey:"height",stroke:"#10b981",strokeWidth:a.strokeWidth,dot:{fill:"#10b981",...a.dot},activeDot:{r:6,stroke:"#10b981",...a.activeDot}})]})})]})},M2=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=k2(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>({period:u.period,co2:u.totalCO2||0})))||[],a=Wl("bar");return r?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"CO₂ Absorption Over Time"})}),S.jsx("div",{className:"flex justify-center items-center h-72",children:S.jsx(Ei,{size:"32px",text:"Loading chart data..."})})]}):n?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"CO₂ Absorption Over Time"})}),S.jsx("div",{className:"flex justify-center items-center h-72",children:S.jsxs("div",{className:"text-center",children:[S.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),S.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"CO₂ Absorption Over Time"})}),S.jsx(xl,{width:"100%",height:300,children:S.jsxs(m2,{data:i,margin:a.margin,children:[S.jsx(Bl,{...a.gridProps}),S.jsx(sa,{dataKey:"period",...a.axisProps}),S.jsx(la,{...a.axisProps,label:{value:"CO₂ (tons)",angle:-90,position:"insideLeft",fontSize:12}}),S.jsx(bl,{content:S.jsx(qu,{valueFormatter:u=>`CO₂ Absorption: ${u.toFixed(1)} tons`})}),S.jsx(Il,{dataKey:"co2",fill:"#8b5cf6",radius:a.radius})]})})]})},D2=(e=!1)=>{const[t,r]=m.useState(e),n=m.useCallback(()=>{r(o=>!o)},[]),i=m.useCallback(()=>{r(!0)},[]),a=m.useCallback(()=>{r(!1)},[]);return{sidebarOpen:t,toggleSidebar:n,openSidebar:i,closeSidebar:a}},I2=(e={})=>{const[t,r]=m.useState(null),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useCallback(async()=>{try{i(!0),o(null);const c=await Ky.getStats(e);r(c.data)}catch(c){console.error("Error fetching dashboard stats:",c),o(c.message||"Failed to fetch dashboard statistics")}finally{i(!1)}},[e]);m.useEffect(()=>{u()},[u]);const l=m.useCallback(()=>{u()},[u]);return{stats:t,loading:n,error:a,refresh:l}},N2=(e={})=>{const[t,r]=m.useState([]),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useCallback(async()=>{try{i(!0),o(null);const c=await By.getAll(e);r(c.data||[])}catch(c){console.error("Error fetching tree data:",c),o(c.message||"Failed to fetch tree data")}finally{i(!1)}},[e]);m.useEffect(()=>{u()},[u]);const l=m.useCallback(()=>{u()},[u]);return{trees:t,loading:n,error:a,refresh:l}},oD=()=>{var x,P,w,O;const{sidebarOpen:e,toggleSidebar:t,closeSidebar:r}=D2(),[n,i]=m.useState({}),{stats:a,loading:o,error:u,refresh:l}=I2(n),{trees:c,loading:s}=N2(n),f=m.useCallback(A=>{i(A)},[]),d=A=>A?A.toLocaleString():"0",h=A=>A?`${A.toFixed(1)}%`:"0%",v=A=>A?`${A.toFixed(1)}m`:"0m",p=A=>A?`${A.toFixed(1)}t`:"0t",g=()=>{console.log("Export started")},y=(A,j)=>{console.log(`Export completed: ${A} with ${j} records`)},b=A=>{console.error("Export error:",A)};return S.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[S.jsx(qy,{onToggleSidebar:t}),S.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[S.jsx(zy,{isOpen:e,onClose:r}),S.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:S.jsxs("div",{className:"max-w-7xl mx-auto",children:[S.jsx("div",{className:"mb-8",children:S.jsxs("div",{className:"flex justify-between items-center mb-4",children:[S.jsxs("div",{children:[S.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome to Nanwa"}),S.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Monitor your forests and track tree growth with real-time insights."})]}),S.jsx("div",{className:"flex items-center space-x-4",children:S.jsx(Ry,{data:c,fileName:"dashboard_tree_data",filters:n,loading:s,onExportStart:g,onExportComplete:y,onExportError:b})})]})}),S.jsx($y,{onFiltersChange:f}),o?S.jsx("div",{className:"flex justify-center items-center py-12",children:S.jsx(Ei,{text:"Loading dashboard statistics..."})}):u?S.jsxs("div",{className:"bg-red-50 border border-red-200 rounded-lg p-4 mb-8",children:[S.jsxs("p",{className:"text-red-600",children:["Error loading dashboard statistics: ",u]}),S.jsx("button",{onClick:l,className:"mt-2 text-red-600 hover:text-red-800 underline",children:"Try again"})]}):S.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:[S.jsx(kn,{icon:S.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),title:"Total Trees",value:d((x=a==null?void 0:a.overview)==null?void 0:x.totalTrees),color:"green"}),S.jsx(kn,{icon:S.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Survival Rate",value:h((P=a==null?void 0:a.overview)==null?void 0:P.survivalRate),color:"blue"}),S.jsx(kn,{icon:S.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"})}),title:"Avg Height",value:v((w=a==null?void 0:a.height)==null?void 0:w.average),color:"yellow"}),S.jsx(kn,{icon:S.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),title:"CO₂ Absorbed",value:p((O=a==null?void 0:a.co2)==null?void 0:O.totalAbsorption),color:"purple"})]}),S.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6 mb-8",children:[S.jsx("div",{className:"lg:col-span-1",children:S.jsx(C2,{filters:n})}),S.jsx("div",{className:"lg:col-span-1 xl:col-span-2",children:S.jsx(_2,{filters:n})}),S.jsx("div",{className:"lg:col-span-2 xl:col-span-3",children:S.jsx(M2,{filters:n})})]}),S.jsx(Fy,{})]})})]})]})};export{oD as DashboardPage}; diff --git a/frontend/dist/assets/DashboardPage-BnZglKQh.js b/frontend/dist/assets/DashboardPage-BnZglKQh.js deleted file mode 100644 index 34ef1e994b..0000000000 --- a/frontend/dist/assets/DashboardPage-BnZglKQh.js +++ /dev/null @@ -1,69 +0,0 @@ -var Sy=Object.defineProperty;var Ey=(e,t,r)=>t in e?Sy(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ia=(e,t,r)=>Ey(e,typeof t!="symbol"?t+"":t,r);import{u as qh,j as E,r as g,c as H,b as jy}from"./index-DJ39NcK9.js";import{C as Nu,a as $u,b as Ru,c as Ty,d as Lu,e as ky}from"./ChartComponents-BrntlwBm.js";import{g as St,r as Bu}from"./vendor-BtP0CW_r.js";import{G as Cy}from"./FilterHeader-DzCm_NrU.js";import{E as _y}from"./ExportButton-Y3IlBTFt.js";import{D as My}from"./DarkModeToggle-sLchHfDj.js";import"./IconButton-DIc-CK1Q.js";const Dy=({onToggleSidebar:e})=>{const{user:t,logout:r,isAdmin:n}=qh(),i=async()=>{await r()};return E.jsx("header",{className:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4 sticky top-0 z-50",children:E.jsxs("div",{className:"flex items-center justify-between",children:[E.jsxs("div",{className:"flex items-center gap-4",children:[E.jsx("button",{onClick:e,"aria-label":"Toggle menu",className:"lg:hidden flex items-center justify-center w-10 h-10 bg-none border-none cursor-pointer rounded-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-500 focus:outline-offset-2",children:E.jsx("svg",{className:"w-6 h-6 text-gray-700 dark:text-gray-300",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})}),E.jsx("h1",{className:"text-2xl font-bold text-green-600 dark:text-green-400 m-0",children:"Nanwa Dashboard"})]}),E.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[E.jsxs("span",{className:"text-gray-700 dark:text-gray-300",children:["Welcome, ",E.jsx("strong",{children:(t==null?void 0:t.firstName)||(t==null?void 0:t.name)}),n()&&E.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 text-xs rounded-full font-bold",children:"Admin"})]}),E.jsx(My,{size:"sm"}),E.jsxs("button",{onClick:i,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-red-600 dark:hover:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/30 rounded-lg transition-colors",title:"Logout",children:[E.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),"Logout"]})]})]})})},Iy=({isOpen:e,onClose:t})=>{const{isAdmin:r}=qh();return E.jsxs(E.Fragment,{children:[E.jsx("div",{className:`lg:hidden fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${e?"opacity-100 visible":"opacity-0 invisible"}`,onClick:t}),E.jsx("aside",{className:` - bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 w-full lg:w-64 fixed lg:sticky top-0 h-screen overflow-y-auto z-50 lg:z-10 transform transition-transform duration-300 ease-in-out - ${e?"translate-x-0":"-translate-x-full lg:translate-x-0"} - `,children:E.jsx("div",{className:"p-6",children:E.jsxs("nav",{className:"space-y-2",children:[E.jsxs("a",{href:"#dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30 rounded-lg",children:[E.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),E.jsxs("a",{href:"/map",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[E.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),E.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[E.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),r()&&E.jsxs("a",{href:"/admin",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[E.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})})]})},Sn=({icon:e,title:t,value:r,color:n="green"})=>{const i={green:"bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400",blue:"bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400",yellow:"bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400",purple:"bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400"};return E.jsx("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:E.jsxs("div",{className:"flex items-center",children:[E.jsx("div",{className:`p-2 rounded-lg ${i[n]}`,children:e}),E.jsxs("div",{className:"ml-4",children:[E.jsx("p",{className:"text-sm font-medium text-gray-600 dark:text-gray-300",children:t}),E.jsx("p",{className:"text-2xl font-bold text-gray-900 dark:text-white",children:r})]})]})})},Ny=()=>E.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:[E.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:"Forest Overview"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-4",children:"Your forests are performing excellently with strong growth indicators and high survival rates."}),E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Recent Activity"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full mr-3"}),"New measurements recorded for Forest A"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-blue-500 rounded-full mr-3"}),"Survival rate improved by 2.3%"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-purple-500 rounded-full mr-3"}),"CO₂ absorption increased by 15%"]})]})]}),E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Next Actions"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-yellow-500 rounded-full mr-3"}),"Schedule maintenance for Forest B"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-orange-500 rounded-full mr-3"}),"Review growth data for Q4 report"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-red-500 rounded-full mr-3"}),"Address low-performing areas in Forest C"]})]})]})]})]});var aa={},oa={},zl;function $y(){return zl||(zl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==="__proto__"}e.isUnsafeProperty=t}(oa)),oa}var ua={},Fl;function zh(){return Fl||(Fl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){switch(typeof r){case"number":case"symbol":return!1;case"string":return r.includes(".")||r.includes("[")||r.includes("]")}}e.isDeepKey=t}(ua)),ua}var sa={},Wl;function Fh(){return Wl||(Wl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var n;return typeof r=="string"||typeof r=="symbol"?r:Object.is((n=r==null?void 0:r.valueOf)==null?void 0:n.call(r),-0)?"-0":String(r)}e.toKey=t}(sa)),sa}var la={},Ul;function Ku(){return Ul||(Ul=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){const n=[],i=r.length;if(i===0)return n;let a=0,o="",u="",l=!1;for(r.charCodeAt(0)===46&&(n.push(""),a++);ae===0?0:e>0?1:-1,We=e=>typeof e=="number"&&e!=+e,Zt=e=>typeof e=="string"&&e.indexOf("%")===e.length-1,D=e=>(typeof e=="number"||e instanceof Number)&&!We(e),dt=e=>D(e)||typeof e=="string",zy=0,or=e=>{var t=++zy;return"".concat(e||"").concat(t)},ke=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!D(t)&&typeof t!="string")return n;var a;if(Zt(t)){if(r==null)return n;var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return We(a)&&(a=n),i&&r!=null&&a>r&&(a=r),a},Wh=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nD(e)&&D(t)?r=>e+r*(t-e):()=>t;function Uh(e,t,r){if(!(!e||!e.length))return e.find(n=>n&&(typeof t=="function"?t(n):Rt(n,t))===r)}var J=e=>e===null||typeof e>"u",fn=e=>J(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1)),Fy=["viewBox","children"],Wy=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],Xl=["points","pathLength"],da={svg:Fy,polygon:Xl,polyline:Xl},zu=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],Fu=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(g.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{zu.includes(i)&&(n[i]=a=>r[i](r,a))}),n},Uy=(e,t,r)=>n=>(e(t,r,n),null),wi=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var a=e[i];zu.includes(i)&&typeof a=="function"&&(n||(n={}),n[i]=Uy(a,t,r))}),n},Zl=e=>typeof e=="string"?e:e?e.displayName||e.name||"Component":"",Jl=null,ha=null,Hh=e=>{if(e===Jl&&Array.isArray(ha))return ha;var t=[];return g.Children.forEach(e,r=>{J(r)||(qy.isFragment(r)?t=t.concat(Hh(r.props.children)):t.push(r))}),ha=t,Jl=e,t};function dn(e,t){var r=[],n=[];return Array.isArray(t)?n=t.map(i=>Zl(i)):n=[Zl(t)],Hh(e).forEach(i=>{var a=Rt(i,"type.displayName")||Rt(i,"type.name");n.indexOf(a)!==-1&&r.push(i)}),r}var Yh=e=>e&&typeof e=="object"&&"clipDot"in e?!!e.clipDot:!0,Hy=(e,t,r,n)=>{var i,a=(i=n&&(da==null?void 0:da[n]))!==null&&i!==void 0?i:[];return t.startsWith("data-")||typeof e!="function"&&(n&&a.includes(t)||Wy.includes(t))||r&&zu.includes(t)},z=(e,t,r)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var n=e;if(g.isValidElement(e)&&(n=e.props),typeof n!="object"&&typeof n!="function")return null;var i={};return Object.keys(n).forEach(a=>{var o;Hy((o=n)===null||o===void 0?void 0:o[a],a,t,r)&&(i[a]=n[a])}),i},Yy=["children","width","height","viewBox","className","style","title","desc"];function qo(){return qo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,width:n,height:i,viewBox:a,className:o,style:u,title:l,desc:c}=e,s=Gy(e,Yy),f=a||{width:n,height:i,x:0,y:0},d=H("recharts-surface",o);return g.createElement("svg",qo({},z(s,!0,"svg"),{className:d,width:n,height:i,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height),ref:t}),g.createElement("title",null,l),g.createElement("desc",null,c),r)}),Xy=["children","className"];function zo(){return zo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,className:n}=e,i=Zy(e,Xy),a=H("recharts-layer",n);return g.createElement("g",zo({className:a},z(i,!0),{ref:t}),r)}),Qy=g.createContext(null);function ee(e){return function(){return e}}const Vh=Math.cos,qn=Math.sin,lt=Math.sqrt,zn=Math.PI,Pi=2*zn,Fo=Math.PI,Wo=2*Fo,Gt=1e-6,e0=Wo-Gt;function Xh(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Xh;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;iGt)if(!(Math.abs(f*l-c*s)>Gt)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let h=n-o,v=i-u,p=l*l+c*c,m=h*h+v*v,y=Math.sqrt(p),b=Math.sqrt(d),x=a*Math.tan((Fo-Math.acos((p+d-m)/(2*y*b)))/2),P=x/b,w=x/y;Math.abs(P-1)>Gt&&this._append`L${t+P*s},${r+P*f}`,this._append`A${a},${a},0,0,${+(f*h>s*v)},${this._x1=t+w*l},${this._y1=r+w*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),l=n*Math.sin(i),c=t+u,s=r+l,f=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${c},${s}`:(Math.abs(this._x1-c)>Gt||Math.abs(this._y1-s)>Gt)&&this._append`L${c},${s}`,n&&(d<0&&(d=d%Wo+Wo),d>e0?this._append`A${n},${n},0,1,${f},${t-u},${r-l}A${n},${n},0,1,${f},${this._x1=c},${this._y1=s}`:d>Gt&&this._append`A${n},${n},0,${+(d>=Fo)},${f},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Wu(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new r0(t)}function Uu(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Zh(e){this._context=e}Zh.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function Oi(e){return new Zh(e)}function Jh(e){return e[0]}function Qh(e){return e[1]}function ev(e,t){var r=ee(!0),n=null,i=Oi,a=null,o=Wu(u);e=typeof e=="function"?e:e===void 0?Jh:ee(e),t=typeof t=="function"?t:t===void 0?Qh:ee(t);function u(l){var c,s=(l=Uu(l)).length,f,d=!1,h;for(n==null&&(a=i(h=o())),c=0;c<=s;++c)!(c=h;--v)u.point(x[v],P[v]);u.lineEnd(),u.areaEnd()}y&&(x[d]=+e(m,d,f),P[d]=+t(m,d,f),u.point(n?+n(m,d,f):x[d],r?+r(m,d,f):P[d]))}if(b)return u=null,b+""||null}function s(){return ev().defined(i).curve(o).context(a)}return c.x=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),n=null,c):e},c.x0=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),c):e},c.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:ee(+f),c):n},c.y=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),r=null,c):t},c.y0=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),c):t},c.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:ee(+f),c):r},c.lineX0=c.lineY0=function(){return s().x(e).y(t)},c.lineY1=function(){return s().x(e).y(r)},c.lineX1=function(){return s().x(n).y(t)},c.defined=function(f){return arguments.length?(i=typeof f=="function"?f:ee(!!f),c):i},c.curve=function(f){return arguments.length?(o=f,a!=null&&(u=o(a)),c):o},c.context=function(f){return arguments.length?(f==null?a=u=null:u=o(a=f),c):a},c}class tv{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function n0(e){return new tv(e,!0)}function i0(e){return new tv(e,!1)}const Hu={draw(e,t){const r=lt(t/zn);e.moveTo(r,0),e.arc(0,0,r,0,Pi)}},a0={draw(e,t){const r=lt(t/5)/2;e.moveTo(-3*r,-r),e.lineTo(-r,-r),e.lineTo(-r,-3*r),e.lineTo(r,-3*r),e.lineTo(r,-r),e.lineTo(3*r,-r),e.lineTo(3*r,r),e.lineTo(r,r),e.lineTo(r,3*r),e.lineTo(-r,3*r),e.lineTo(-r,r),e.lineTo(-3*r,r),e.closePath()}},rv=lt(1/3),o0=rv*2,u0={draw(e,t){const r=lt(t/o0),n=r*rv;e.moveTo(0,-r),e.lineTo(n,0),e.lineTo(0,r),e.lineTo(-n,0),e.closePath()}},s0={draw(e,t){const r=lt(t),n=-r/2;e.rect(n,n,r,r)}},l0=.8908130915292852,nv=qn(zn/10)/qn(7*zn/10),c0=qn(Pi/10)*nv,f0=-Vh(Pi/10)*nv,d0={draw(e,t){const r=lt(t*l0),n=c0*r,i=f0*r;e.moveTo(0,-r),e.lineTo(n,i);for(let a=1;a<5;++a){const o=Pi*a/5,u=Vh(o),l=qn(o);e.lineTo(l*r,-u*r),e.lineTo(u*n-l*i,l*n+u*i)}e.closePath()}},va=lt(3),h0={draw(e,t){const r=-lt(t/(va*3));e.moveTo(0,r*2),e.lineTo(-va*r,-r),e.lineTo(va*r,-r),e.closePath()}},Xe=-.5,Ze=lt(3)/2,Uo=1/lt(12),v0=(Uo/2+1)*3,p0={draw(e,t){const r=lt(t/v0),n=r/2,i=r*Uo,a=n,o=r*Uo+r,u=-a,l=o;e.moveTo(n,i),e.lineTo(a,o),e.lineTo(u,l),e.lineTo(Xe*n-Ze*i,Ze*n+Xe*i),e.lineTo(Xe*a-Ze*o,Ze*a+Xe*o),e.lineTo(Xe*u-Ze*l,Ze*u+Xe*l),e.lineTo(Xe*n+Ze*i,Xe*i-Ze*n),e.lineTo(Xe*a+Ze*o,Xe*o-Ze*a),e.lineTo(Xe*u+Ze*l,Xe*l-Ze*u),e.closePath()}};function m0(e,t){let r=null,n=Wu(i);e=typeof e=="function"?e:ee(e||Hu),t=typeof t=="function"?t:ee(t===void 0?64:+t);function i(){let a;if(r||(r=a=n()),e.apply(this,arguments).draw(r,+t.apply(this,arguments)),a)return r=null,a+""||null}return i.type=function(a){return arguments.length?(e=typeof a=="function"?a:ee(a),i):e},i.size=function(a){return arguments.length?(t=typeof a=="function"?a:ee(+a),i):t},i.context=function(a){return arguments.length?(r=a??null,i):r},i}function Fn(){}function Wn(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function iv(e){this._context=e}iv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Wn(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Wn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function g0(e){return new iv(e)}function av(e){this._context=e}av.prototype={areaStart:Fn,areaEnd:Fn,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Wn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function y0(e){return new av(e)}function ov(e){this._context=e}ov.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Wn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function b0(e){return new ov(e)}function uv(e){this._context=e}uv.prototype={areaStart:Fn,areaEnd:Fn,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function x0(e){return new uv(e)}function Ql(e){return e<0?-1:1}function ec(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(Ql(a)+Ql(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function tc(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function pa(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function Un(e){this._context=e}Un.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:pa(this,this._t0,tc(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,pa(this,tc(this,r=ec(this,e,t)),r);break;default:pa(this,this._t0,r=ec(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function sv(e){this._context=new lv(e)}(sv.prototype=Object.create(Un.prototype)).point=function(e,t){Un.prototype.point.call(this,t,e)};function lv(e){this._context=e}lv.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function w0(e){return new Un(e)}function P0(e){return new sv(e)}function cv(e){this._context=e}cv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=rc(e),i=rc(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function A0(e){return new Ai(e,.5)}function S0(e){return new Ai(e,0)}function E0(e){return new Ai(e,1)}function Or(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function j0(e,t){return e[t]}function T0(e){const t=[];return t.key=e,t}function k0(){var e=ee([]),t=Ho,r=Or,n=j0;function i(a){var o=Array.from(e.apply(this,arguments),T0),u,l=o.length,c=-1,s;for(const f of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n{var t="symbol".concat(fn(e));return fv[t]||Hu},q0=(e,t,r)=>{if(t==="area")return e;switch(r){case"cross":return 5*e*e/9;case"diamond":return .5*e*e/Math.sqrt(3);case"square":return e*e;case"star":{var n=18*B0;return 1.25*e*e*(Math.tan(n)-Math.tan(n*2)*Math.tan(n)**2)}case"triangle":return Math.sqrt(3)*e*e/4;case"wye":return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}},z0=(e,t)=>{fv["symbol".concat(fn(e))]=t},dv=e=>{var{type:t="circle",size:r=64,sizeType:n="area"}=e,i=R0(e,D0),a=ic(ic({},i),{},{type:t,size:r,sizeType:n}),o=()=>{var f=K0(t),d=m0().type(f).size(q0(r,n,t));return d()},{className:u,cx:l,cy:c}=a,s=z(a,!0);return l===+l&&c===+c&&r===+r?g.createElement("path",Yo({},s,{className:H("recharts-symbols",u),transform:"translate(".concat(l,", ").concat(c,")"),d:o()})):null};dv.registerSymbol=z0;var ma={},ga={},ac;function F0(){return ac||(ac=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){const i=new Map;for(let a=0;a=0}e.isLength=t}(wa)),wa}var sc;function Yu(){return sc||(sc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=W0();function r(n){return n!=null&&typeof n!="function"&&t.isLength(n.length)}e.isArrayLike=r}(xa)),xa}var Pa={},lc;function U0(){return lc||(lc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="object"&&r!==null}e.isObjectLike=t}(Pa)),Pa}var cc;function H0(){return cc||(cc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Yu(),r=U0();function n(i){return r.isObjectLike(i)&&t.isArrayLike(i)}e.isArrayLikeObject=n}(ba)),ba}var Oa={},Aa={},fc;function Y0(){return fc||(fc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=qu();function r(n){return function(i){return t.get(i,n)}}e.property=r}(Aa)),Aa}var Sa={},Ea={},ja={},Ta={},dc;function vv(){return dc||(dc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r!==null&&(typeof r=="object"||typeof r=="function")}e.isObject=t}(Ta)),Ta}var ka={},hc;function pv(){return hc||(hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null||typeof r!="object"&&typeof r!="function"}e.isPrimitive=t}(ka)),ka}var Ca={},vc;function Gu(){return vc||(vc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){return r===n||Number.isNaN(r)&&Number.isNaN(n)}e.eq=t}(Ca)),Ca}var pc;function G0(){return pc||(pc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Vu(),r=vv(),n=pv(),i=Gu();function a(f,d,h){return typeof h!="function"?t.isMatch(f,d):o(f,d,function v(p,m,y,b,x,P){const w=h(p,m,y,b,x,P);return w!==void 0?!!w:o(p,m,v,P)},new Map)}function o(f,d,h,v){if(d===f)return!0;switch(typeof d){case"object":return u(f,d,h,v);case"function":return Object.keys(d).length>0?o(f,{...d},h,v):i.eq(f,d);default:return r.isObject(f)?typeof d=="string"?d==="":!0:i.eq(f,d)}}function u(f,d,h,v){if(d==null)return!0;if(Array.isArray(d))return c(f,d,h,v);if(d instanceof Map)return l(f,d,h,v);if(d instanceof Set)return s(f,d,h,v);const p=Object.keys(d);if(f==null)return p.length===0;if(p.length===0)return!0;if(v&&v.has(d))return v.get(d)===f;v&&v.set(d,f);try{for(let m=0;m{})}e.isMatch=r}(Ea)),Ea}var _a={},Ma={},Da={},gc;function mv(){return gc||(gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Object.getOwnPropertySymbols(r).filter(n=>Object.prototype.propertyIsEnumerable.call(r,n))}e.getSymbols=t}(Da)),Da}var Ia={},yc;function Xu(){return yc||(yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null?r===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(r)}e.getTag=t}(Ia)),Ia}var Na={},bc;function Zu(){return bc||(bc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t="[object RegExp]",r="[object String]",n="[object Number]",i="[object Boolean]",a="[object Arguments]",o="[object Symbol]",u="[object Date]",l="[object Map]",c="[object Set]",s="[object Array]",f="[object Function]",d="[object ArrayBuffer]",h="[object Object]",v="[object Error]",p="[object DataView]",m="[object Uint8Array]",y="[object Uint8ClampedArray]",b="[object Uint16Array]",x="[object Uint32Array]",P="[object BigUint64Array]",w="[object Int8Array]",O="[object Int16Array]",A="[object Int32Array]",j="[object BigInt64Array]",T="[object Float32Array]",I="[object Float64Array]";e.argumentsTag=a,e.arrayBufferTag=d,e.arrayTag=s,e.bigInt64ArrayTag=j,e.bigUint64ArrayTag=P,e.booleanTag=i,e.dataViewTag=p,e.dateTag=u,e.errorTag=v,e.float32ArrayTag=T,e.float64ArrayTag=I,e.functionTag=f,e.int16ArrayTag=O,e.int32ArrayTag=A,e.int8ArrayTag=w,e.mapTag=l,e.numberTag=n,e.objectTag=h,e.regexpTag=t,e.setTag=c,e.stringTag=r,e.symbolTag=o,e.uint16ArrayTag=b,e.uint32ArrayTag=x,e.uint8ArrayTag=m,e.uint8ClampedArrayTag=y}(Na)),Na}var $a={},xc;function V0(){return xc||(xc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return ArrayBuffer.isView(r)&&!(r instanceof DataView)}e.isTypedArray=t}($a)),$a}var wc;function gv(){return wc||(wc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=mv(),r=Xu(),n=Zu(),i=pv(),a=V0();function o(s,f){return u(s,void 0,s,new Map,f)}function u(s,f,d,h=new Map,v=void 0){const p=v==null?void 0:v(s,f,d,h);if(p!=null)return p;if(i.isPrimitive(s))return s;if(h.has(s))return h.get(s);if(Array.isArray(s)){const m=new Array(s.length);h.set(s,m);for(let y=0;yt.isMatch(a,i)}e.matches=n}(Sa)),Sa}var Ra={},La={},Ba={},Ac;function J0(){return Ac||(Ac=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=gv(),r=Zu();function n(i,a){return t.cloneDeepWith(i,(o,u,l,c)=>{const s=a==null?void 0:a(o,u,l,c);if(s!=null)return s;if(typeof i=="object")switch(Object.prototype.toString.call(i)){case r.numberTag:case r.stringTag:case r.booleanTag:{const f=new i.constructor(i==null?void 0:i.valueOf());return t.copyProperties(f,i),f}case r.argumentsTag:{const f={};return t.copyProperties(f,i),f.length=i.length,f[Symbol.iterator]=i[Symbol.iterator],f}default:return}})}e.cloneDeepWith=n}(Ba)),Ba}var Sc;function Q0(){return Sc||(Sc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=J0();function r(n){return t.cloneDeepWith(n)}e.cloneDeep=r}(La)),La}var Ka={},qa={},Ec;function yv(){return Ec||(Ec=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=/^(?:0|[1-9]\d*)$/;function r(n,i=Number.MAX_SAFE_INTEGER){switch(typeof n){case"number":return Number.isInteger(n)&&n>=0&&n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?c:u;return Ya.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:s,Ya}var Nc;function lb(){return Nc||(Nc=1,Ha.exports=sb()),Ha.exports}/** - * @license React - * use-sync-external-store-shim/with-selector.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var $c;function cb(){if($c)return Ua;$c=1;var e=Bu(),t=lb();function r(c,s){return c===s&&(c!==0||1/c===1/s)||c!==c&&s!==s}var n=typeof Object.is=="function"?Object.is:r,i=t.useSyncExternalStore,a=e.useRef,o=e.useEffect,u=e.useMemo,l=e.useDebugValue;return Ua.useSyncExternalStoreWithSelector=function(c,s,f,d,h){var v=a(null);if(v.current===null){var p={hasValue:!1,value:null};v.current=p}else p=v.current;v=u(function(){function y(O){if(!b){if(b=!0,x=O,O=d(O),h!==void 0&&p.hasValue){var A=p.value;if(h(A,O))return P=A}return P=O}if(A=P,n(x,O))return A;var j=d(O);return h!==void 0&&h(A,j)?(x=O,A):(x=O,P=j)}var b=!1,x,P,w=f===void 0?null:f;return[function(){return y(s())},w===null?void 0:function(){return y(w())}]},[s,f,d,h]);var m=i(c,v[0],v[1]);return o(function(){p.hasValue=!0,p.value=m},[m]),l(m),m},Ua}var Rc;function fb(){return Rc||(Rc=1,Wa.exports=cb()),Wa.exports}var db=fb(),Ju=g.createContext(null),hb=e=>e,ae=()=>{var e=g.useContext(Ju);return e?e.store.dispatch:hb},Kn=()=>{},vb=()=>Kn,pb=(e,t)=>e===t;function $(e){var t=g.useContext(Ju);return db.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:vb,t?t.store.getState:Kn,t?t.store.getState:Kn,t?e:Kn,pb)}function mb(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function gb(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!="object")throw new TypeError(t)}function yb(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var Lc=e=>Array.isArray(e)?e:[e];function bb(e){const t=Array.isArray(e[0])?e[0]:e;return yb(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function xb(e,t){const r=[],{length:n}=e;for(let i=0;i{r=jn(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function Ab(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let a=0,o=0,u,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),mb(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const s={...r,...l},{memoize:f,memoizeOptions:d=[],argsMemoize:h=bv,argsMemoizeOptions:v=[]}=s,p=Lc(d),m=Lc(v),y=bb(i),b=f(function(){return a++,c.apply(null,arguments)},...p),x=h(function(){o++;const w=xb(y,arguments);return u=b.apply(null,w),u},...m);return Object.assign(x,{resultFunc:c,memoizedResultFunc:b,dependencies:y,dependencyRecomputations:()=>o,resetDependencyRecomputations:()=>{o=0},lastResult:()=>u,recomputations:()=>a,resetRecomputations:()=>{a=0},memoize:f,argsMemoize:h})};return Object.assign(n,{withTypes:()=>n}),n}var S=Ab(bv),Sb=Object.assign((e,t=S)=>{gb(e,`createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof e}`);const r=Object.keys(e),n=r.map(a=>e[a]);return t(n,(...a)=>a.reduce((o,u,l)=>(o[r[l]]=u,o),{}))},{withTypes:()=>Sb}),Ga={},Va={},Xa={},Kc;function Eb(){return Kc||(Kc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(n){return typeof n=="symbol"?1:n===null?2:n===void 0?3:n!==n?4:0}const r=(n,i,a)=>{if(n!==i){const o=t(n),u=t(i);if(o===u&&o===0){if(ni)return a==="desc"?-1:1}return a==="desc"?u-o:o-u}return 0};e.compareValues=r}(Xa)),Xa}var Za={},Ja={},qc;function xv(){return qc||(qc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="symbol"||r instanceof Symbol}e.isSymbol=t}(Ja)),Ja}var zc;function jb(){return zc||(zc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=xv(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function i(a,o){return Array.isArray(a)?!1:typeof a=="number"||typeof a=="boolean"||a==null||t.isSymbol(a)?!0:typeof a=="string"&&(n.test(a)||!r.test(a))||o!=null&&Object.hasOwn(o,a)}e.isKey=i}(Za)),Za}var Fc;function Tb(){return Fc||(Fc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Eb(),r=jb(),n=Ku();function i(a,o,u,l){if(a==null)return[];u=l?void 0:u,Array.isArray(a)||(a=Object.values(a)),Array.isArray(o)||(o=o==null?[null]:[o]),o.length===0&&(o=[null]),Array.isArray(u)||(u=u==null?[]:[u]),u=u.map(h=>String(h));const c=(h,v)=>{let p=h;for(let m=0;mv==null||h==null?v:typeof h=="object"&&"key"in h?Object.hasOwn(v,h.key)?v[h.key]:c(v,h.path):typeof h=="function"?h(v):Array.isArray(h)?c(v,h):typeof v=="object"?v[h]:v,f=o.map(h=>(Array.isArray(h)&&h.length===1&&(h=h[0]),h==null||typeof h=="function"||Array.isArray(h)||r.isKey(h)?h:{key:h,path:n.toPath(h)}));return a.map(h=>({original:h,criteria:f.map(v=>s(v,h))})).slice().sort((h,v)=>{for(let p=0;ph.original)}e.orderBy=i}(Va)),Va}var Qa={},Wc;function kb(){return Wc||(Wc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=1){const i=[],a=Math.floor(n),o=(u,l)=>{for(let c=0;c1&&n.isIterateeCall(a,o[0],o[1])?o=[]:u>2&&n.isIterateeCall(o[0],o[1],o[2])&&(o=[o[0]]),t.orderBy(a,r.flatten(o),["asc"])}e.sortBy=i}(Ga)),Ga}var to,Yc;function _b(){return Yc||(Yc=1,to=Cb().sortBy),to}var Mb=_b();const Si=St(Mb);var Pv=e=>e.legend.settings,Db=e=>e.legend.size,Ib=e=>e.legend.payload;S([Ib,Pv],(e,t)=>{var{itemSorter:r}=t,n=e.flat(1);return r?Si(n,r):n});var Tn=1;function Nb(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],[t,r]=g.useState({height:0,left:0,top:0,width:0}),n=g.useCallback(i=>{if(i!=null){var a=i.getBoundingClientRect(),o={height:a.height,left:a.left,top:a.top,width:a.width};(Math.abs(o.height-t.height)>Tn||Math.abs(o.left-t.left)>Tn||Math.abs(o.top-t.top)>Tn||Math.abs(o.width-t.width)>Tn)&&r({height:o.height,left:o.left,top:o.top,width:o.width})}},[t.width,t.height,t.top,t.left,...e]);return[t,n]}function Pe(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var $b=typeof Symbol=="function"&&Symbol.observable||"@@observable",Gc=$b,ro=()=>Math.random().toString(36).substring(7).split("").join("."),Rb={INIT:`@@redux/INIT${ro()}`,REPLACE:`@@redux/REPLACE${ro()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${ro()}`},Hn=Rb;function Qu(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function Ov(e,t,r){if(typeof e!="function")throw new Error(Pe(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(Pe(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Pe(1));return r(Ov)(e,t)}let n=e,i=t,a=new Map,o=a,u=0,l=!1;function c(){o===a&&(o=new Map,a.forEach((m,y)=>{o.set(y,m)}))}function s(){if(l)throw new Error(Pe(3));return i}function f(m){if(typeof m!="function")throw new Error(Pe(4));if(l)throw new Error(Pe(5));let y=!0;c();const b=u++;return o.set(b,m),function(){if(y){if(l)throw new Error(Pe(6));y=!1,c(),o.delete(b),a=null}}}function d(m){if(!Qu(m))throw new Error(Pe(7));if(typeof m.type>"u")throw new Error(Pe(8));if(typeof m.type!="string")throw new Error(Pe(17));if(l)throw new Error(Pe(9));try{l=!0,i=n(i,m)}finally{l=!1}return(a=o).forEach(b=>{b()}),m}function h(m){if(typeof m!="function")throw new Error(Pe(10));n=m,d({type:Hn.REPLACE})}function v(){const m=f;return{subscribe(y){if(typeof y!="object"||y===null)throw new Error(Pe(11));function b(){const P=y;P.next&&P.next(s())}return b(),{unsubscribe:m(b)}},[Gc](){return this}}}return d({type:Hn.INIT}),{dispatch:d,subscribe:f,getState:s,replaceReducer:h,[Gc]:v}}function Lb(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:Hn.INIT})>"u")throw new Error(Pe(12));if(typeof r(void 0,{type:Hn.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Pe(13))})}function Av(e){const t=Object.keys(e),r={};for(let a=0;a"u")throw u&&u.type,new Error(Pe(14));c[f]=v,l=l||v!==h}return l=l||n.length!==Object.keys(o).length,l?c:o}}function Yn(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function Bb(...e){return t=>(r,n)=>{const i=t(r,n);let a=()=>{throw new Error(Pe(15))};const o={getState:i.getState,dispatch:(l,...c)=>a(l,...c)},u=e.map(l=>l(o));return a=Yn(...u)(i.dispatch),{...i,dispatch:a}}}function Sv(e){return Qu(e)&&"type"in e&&typeof e.type=="string"}var Ev=Symbol.for("immer-nothing"),Vc=Symbol.for("immer-draftable"),Ue=Symbol.for("immer-state");function ut(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Ar=Object.getPrototypeOf;function ur(e){return!!e&&!!e[Ue]}function wt(e){var t;return e?jv(e)||Array.isArray(e)||!!e[Vc]||!!((t=e.constructor)!=null&&t[Vc])||ji(e)||Ti(e):!1}var Kb=Object.prototype.constructor.toString();function jv(e){if(!e||typeof e!="object")return!1;const t=Ar(e);if(t===null)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object?!0:typeof r=="function"&&Function.toString.call(r)===Kb}function Gn(e,t){Ei(e)===0?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function Ei(e){const t=e[Ue];return t?t.type_:Array.isArray(e)?1:ji(e)?2:Ti(e)?3:0}function Go(e,t){return Ei(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Tv(e,t,r){const n=Ei(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function qb(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function ji(e){return e instanceof Map}function Ti(e){return e instanceof Set}function Vt(e){return e.copy_||e.base_}function Vo(e,t){if(ji(e))return new Map(e);if(Ti(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=jv(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[Ue];let i=Reflect.ownKeys(n);for(let a=0;a1&&(e.set=e.add=e.clear=e.delete=zb),Object.freeze(e),t&&Object.entries(e).forEach(([r,n])=>es(n,!0))),e}function zb(){ut(2)}function ki(e){return Object.isFrozen(e)}var Fb={};function sr(e){const t=Fb[e];return t||ut(0,e),t}var Jr;function kv(){return Jr}function Wb(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Xc(e,t){t&&(sr("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Xo(e){Zo(e),e.drafts_.forEach(Ub),e.drafts_=null}function Zo(e){e===Jr&&(Jr=e.parent_)}function Zc(e){return Jr=Wb(Jr,e)}function Ub(e){const t=e[Ue];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Jc(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[Ue].modified_&&(Xo(t),ut(4)),wt(e)&&(e=Vn(t,e),t.parent_||Xn(t,e)),t.patches_&&sr("Patches").generateReplacementPatches_(r[Ue].base_,e,t.patches_,t.inversePatches_)):e=Vn(t,r,[]),Xo(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==Ev?e:void 0}function Vn(e,t,r){if(ki(t))return t;const n=t[Ue];if(!n)return Gn(t,(i,a)=>Qc(e,n,t,i,a,r)),t;if(n.scope_!==e)return t;if(!n.modified_)return Xn(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const i=n.copy_;let a=i,o=!1;n.type_===3&&(a=new Set(i),i.clear(),o=!0),Gn(a,(u,l)=>Qc(e,n,i,u,l,r,o)),Xn(e,i,!1),r&&e.patches_&&sr("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function Qc(e,t,r,n,i,a,o){if(ur(i)){const u=a&&t&&t.type_!==3&&!Go(t.assigned_,n)?a.concat(n):void 0,l=Vn(e,i,u);if(Tv(r,n,l),ur(l))e.canAutoFreeze_=!1;else return}else o&&r.add(i);if(wt(i)&&!ki(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Vn(e,i),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&Object.prototype.propertyIsEnumerable.call(r,n)&&Xn(e,i)}}function Xn(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&es(t,r)}function Hb(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:kv(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,a=ts;r&&(i=[n],a=Qr);const{revoke:o,proxy:u}=Proxy.revocable(i,a);return n.draft_=u,n.revoke_=o,u}var ts={get(e,t){if(t===Ue)return e;const r=Vt(e);if(!Go(r,t))return Yb(e,r,t);const n=r[t];return e.finalized_||!wt(n)?n:n===no(e.base_,t)?(io(e),e.copy_[t]=Qo(n,e)):n},has(e,t){return t in Vt(e)},ownKeys(e){return Reflect.ownKeys(Vt(e))},set(e,t,r){const n=Cv(Vt(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=no(Vt(e),t),a=i==null?void 0:i[Ue];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(qb(r,i)&&(r!==void 0||Go(e.base_,t)))return!0;io(e),Jo(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return no(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,io(e),Jo(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Vt(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){ut(11)},getPrototypeOf(e){return Ar(e.base_)},setPrototypeOf(){ut(12)}},Qr={};Gn(ts,(e,t)=>{Qr[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});Qr.deleteProperty=function(e,t){return Qr.set.call(this,e,t,void 0)};Qr.set=function(e,t,r){return ts.set.call(this,e[0],t,r,e[0])};function no(e,t){const r=e[Ue];return(r?Vt(r):e)[t]}function Yb(e,t,r){var i;const n=Cv(t,r);return n?"value"in n?n.value:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function Cv(e,t){if(!(t in e))return;let r=Ar(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Ar(r)}}function Jo(e){e.modified_||(e.modified_=!0,e.parent_&&Jo(e.parent_))}function io(e){e.copy_||(e.copy_=Vo(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var Gb=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const a=r;r=t;const o=this;return function(l=a,...c){return o.produce(l,s=>r.call(this,s,...c))}}typeof r!="function"&&ut(6),n!==void 0&&typeof n!="function"&&ut(7);let i;if(wt(t)){const a=Zc(this),o=Qo(t,void 0);let u=!0;try{i=r(o),u=!1}finally{u?Xo(a):Zo(a)}return Xc(a,n),Jc(i,a)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===Ev&&(i=void 0),this.autoFreeze_&&es(i,!0),n){const a=[],o=[];sr("Patches").generateReplacementPatches_(t,i,a,o),n(a,o)}return i}else ut(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(o,...u)=>this.produceWithPatches(o,l=>t(l,...u));let n,i;return[this.produce(t,r,(o,u)=>{n=o,i=u}),n,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){wt(e)||ut(8),ur(e)&&(e=bt(e));const t=Zc(this),r=Qo(e,void 0);return r[Ue].isManual_=!0,Zo(t),r}finishDraft(e,t){const r=e&&e[Ue];(!r||!r.isManual_)&&ut(9);const{scope_:n}=r;return Xc(n,t),Jc(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const i=t[r];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}r>-1&&(t=t.slice(r+1));const n=sr("Patches").applyPatches_;return ur(e)?n(e,t):this.produce(e,i=>n(i,t))}};function Qo(e,t){const r=ji(e)?sr("MapSet").proxyMap_(e,t):Ti(e)?sr("MapSet").proxySet_(e,t):Hb(e,t);return(t?t.scope_:kv()).drafts_.push(r),r}function bt(e){return ur(e)||ut(10,e),_v(e)}function _v(e){if(!wt(e)||ki(e))return e;const t=e[Ue];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=Vo(e,t.scope_.immer_.useStrictShallowCopy_)}else r=Vo(e,!0);return Gn(r,(n,i)=>{Tv(r,n,_v(i))}),t&&(t.finalized_=!1),r}var He=new Gb,Mv=He.produce;He.produceWithPatches.bind(He);He.setAutoFreeze.bind(He);He.setUseStrictShallowCopy.bind(He);He.applyPatches.bind(He);He.createDraft.bind(He);He.finishDraft.bind(He);function Dv(e){return({dispatch:r,getState:n})=>i=>a=>typeof a=="function"?a(r,n,e):i(a)}var Vb=Dv(),Xb=Dv,Zb=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Yn:Yn.apply(null,arguments)};function tt(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(Fe(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>Sv(n)&&n.type===e,r}var Iv=class Gr extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,Gr.prototype)}static get[Symbol.species](){return Gr}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new Gr(...t[0].concat(this)):new Gr(...t.concat(this))}};function ef(e){return wt(e)?Mv(e,()=>{}):e}function kn(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function Jb(e){return typeof e=="boolean"}var Qb=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:a=!0}=t??{};let o=new Iv;return r&&(Jb(r)?o.push(Vb):o.push(Xb(r.extraArgument))),o},ex="RTK_autoBatch",tf=e=>t=>{setTimeout(t,e)},tx=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,a=!1,o=!1;const u=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:tf(10):e.type==="callback"?e.queueNotification:tf(e.timeout),c=()=>{o=!1,a&&(a=!1,u.forEach(s=>s()))};return Object.assign({},n,{subscribe(s){const f=()=>i&&s(),d=n.subscribe(f);return u.add(s),()=>{d(),u.delete(s)}},dispatch(s){var f;try{return i=!((f=s==null?void 0:s.meta)!=null&&f[ex]),a=!i,a&&(o||(o=!0,l(c))),n.dispatch(s)}finally{i=!0}}})},rx=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new Iv(e);return n&&i.push(tx(typeof n=="object"?n:void 0)),i};function nx(e){const t=Qb(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:a=void 0,enhancers:o=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(Qu(r))u=Av(r);else throw new Error(Fe(1));let l;typeof n=="function"?l=n(t):l=t();let c=Yn;i&&(c=Zb({trace:!1,...typeof i=="object"&&i}));const s=Bb(...l),f=rx(s);let d=typeof o=="function"?o(f):f();const h=c(...d);return Ov(u,a,h)}function Nv(e){const t={},r=[];let n;const i={addCase(a,o){const u=typeof a=="string"?a:a.type;if(!u)throw new Error(Fe(28));if(u in t)throw new Error(Fe(29));return t[u]=o,i},addMatcher(a,o){return r.push({matcher:a,reducer:o}),i},addDefaultCase(a){return n=a,i}};return e(i),[t,r,n]}function ix(e){return typeof e=="function"}function ax(e,t){let[r,n,i]=Nv(t),a;if(ix(e))a=()=>ef(e());else{const u=ef(e);a=()=>u}function o(u=a(),l){let c=[r[l.type],...n.filter(({matcher:s})=>s(l)).map(({reducer:s})=>s)];return c.filter(s=>!!s).length===0&&(c=[i]),c.reduce((s,f)=>{if(f)if(ur(s)){const h=f(s,l);return h===void 0?s:h}else{if(wt(s))return Mv(s,d=>f(d,l));{const d=f(s,l);if(d===void 0){if(s===null)return s;throw Error("A case reducer on a non-draftable value must not return undefined")}return d}}return s},u)}return o.getInitialState=a,o}var ox="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",ux=(e=21)=>{let t="",r=e;for(;r--;)t+=ox[Math.random()*64|0];return t},sx=Symbol.for("rtk-slice-createasyncthunk");function lx(e,t){return`${e}/${t}`}function cx({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[sx];return function(i){const{name:a,reducerPath:o=a}=i;if(!a)throw new Error(Fe(11));const u=(typeof i.reducers=="function"?i.reducers(dx()):i.reducers)||{},l=Object.keys(u),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(P,w){const O=typeof P=="string"?P:P.type;if(!O)throw new Error(Fe(12));if(O in c.sliceCaseReducersByType)throw new Error(Fe(13));return c.sliceCaseReducersByType[O]=w,s},addMatcher(P,w){return c.sliceMatchers.push({matcher:P,reducer:w}),s},exposeAction(P,w){return c.actionCreators[P]=w,s},exposeCaseReducer(P,w){return c.sliceCaseReducersByName[P]=w,s}};l.forEach(P=>{const w=u[P],O={reducerName:P,type:lx(a,P),createNotation:typeof i.reducers=="function"};vx(w)?mx(O,w,s,t):hx(O,w,s)});function f(){const[P={},w=[],O=void 0]=typeof i.extraReducers=="function"?Nv(i.extraReducers):[i.extraReducers],A={...P,...c.sliceCaseReducersByType};return ax(i.initialState,j=>{for(let T in A)j.addCase(T,A[T]);for(let T of c.sliceMatchers)j.addMatcher(T.matcher,T.reducer);for(let T of w)j.addMatcher(T.matcher,T.reducer);O&&j.addDefaultCase(O)})}const d=P=>P,h=new Map,v=new WeakMap;let p;function m(P,w){return p||(p=f()),p(P,w)}function y(){return p||(p=f()),p.getInitialState()}function b(P,w=!1){function O(j){let T=j[P];return typeof T>"u"&&w&&(T=kn(v,O,y)),T}function A(j=d){const T=kn(h,w,()=>new WeakMap);return kn(T,j,()=>{const I={};for(const[C,_]of Object.entries(i.selectors??{}))I[C]=fx(_,j,()=>kn(v,j,y),w);return I})}return{reducerPath:P,getSelectors:A,get selectors(){return A(O)},selectSlice:O}}const x={name:a,reducer:m,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:y,...b(o),injectInto(P,{reducerPath:w,...O}={}){const A=w??o;return P.inject({reducerPath:A,reducer:m},O),{...x,...b(A,!0)}}};return x}}function fx(e,t,r,n){function i(a,...o){let u=t(a);return typeof u>"u"&&n&&(u=r()),e(u,...o)}return i.unwrapped=e,i}var nt=cx();function dx(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function hx({type:e,reducerName:t,createNotation:r},n,i){let a,o;if("reducer"in n){if(r&&!px(n))throw new Error(Fe(17));a=n.reducer,o=n.prepare}else a=n;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?tt(e,o):tt(e))}function vx(e){return e._reducerDefinitionType==="asyncThunk"}function px(e){return e._reducerDefinitionType==="reducerWithPrepare"}function mx({type:e,reducerName:t},r,n,i){if(!i)throw new Error(Fe(18));const{payloadCreator:a,fulfilled:o,pending:u,rejected:l,settled:c,options:s}=r,f=i(e,a,s);n.exposeAction(t,f),o&&n.addCase(f.fulfilled,o),u&&n.addCase(f.pending,u),l&&n.addCase(f.rejected,l),c&&n.addMatcher(f.settled,c),n.exposeCaseReducer(t,{fulfilled:o||Cn,pending:u||Cn,rejected:l||Cn,settled:c||Cn})}function Cn(){}var gx="task",$v="listener",Rv="completed",rs="cancelled",yx=`task-${rs}`,bx=`task-${Rv}`,eu=`${$v}-${rs}`,xx=`${$v}-${Rv}`,Ci=class{constructor(e){ia(this,"name","TaskAbortError");ia(this,"message");this.code=e,this.message=`${gx} ${rs} (reason: ${e})`}},ns=(e,t)=>{if(typeof e!="function")throw new TypeError(Fe(32))},Zn=()=>{},Lv=(e,t=Zn)=>(e.catch(t),e),Bv=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),rr=(e,t)=>{const r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},nr=e=>{if(e.aborted){const{reason:t}=e;throw new Ci(t)}};function Kv(e,t){let r=Zn;return new Promise((n,i)=>{const a=()=>i(new Ci(e.reason));if(e.aborted){a();return}r=Bv(e,a),t.finally(()=>r()).then(n,i)}).finally(()=>{r=Zn})}var wx=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof Ci?"cancelled":"rejected",error:r}}finally{t==null||t()}},Jn=e=>t=>Lv(Kv(e,t).then(r=>(nr(e),r))),qv=e=>{const t=Jn(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:wr}=Object,rf={},_i="listenerMiddleware",Px=(e,t)=>{const r=n=>Bv(e,()=>rr(n,e.reason));return(n,i)=>{ns(n);const a=new AbortController;r(a);const o=wx(async()=>{nr(e),nr(a.signal);const u=await n({pause:Jn(a.signal),delay:qv(a.signal),signal:a.signal});return nr(a.signal),u},()=>rr(a,bx));return i!=null&&i.autoJoin&&t.push(o.catch(Zn)),{result:Jn(e)(o),cancel(){rr(a,yx)}}}},Ox=(e,t)=>{const r=async(n,i)=>{nr(t);let a=()=>{};const u=[new Promise((l,c)=>{let s=e({predicate:n,effect:(f,d)=>{d.unsubscribe(),l([f,d.getState(),d.getOriginalState()])}});a=()=>{s(),c()}})];i!=null&&u.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await Kv(t,Promise.race(u));return nr(t),l}finally{a()}};return(n,i)=>Lv(r(n,i))},zv=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:a}=e;if(t)i=tt(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(Fe(21));return ns(a),{predicate:i,type:t,effect:a}},Fv=wr(e=>{const{type:t,predicate:r,effect:n}=zv(e);return{id:ux(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(Fe(22))}}},{withTypes:()=>Fv}),nf=(e,t)=>{const{type:r,effect:n,predicate:i}=zv(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===i)&&a.effect===n)},tu=e=>{e.pending.forEach(t=>{rr(t,eu)})},Ax=e=>()=>{e.forEach(tu),e.clear()},af=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Wv=wr(tt(`${_i}/add`),{withTypes:()=>Wv}),Sx=tt(`${_i}/removeAll`),Uv=wr(tt(`${_i}/remove`),{withTypes:()=>Uv}),Ex=(...e)=>{console.error(`${_i}/error`,...e)},hn=(e={})=>{const t=new Map,{extra:r,onError:n=Ex}=e;ns(n);const i=s=>(s.unsubscribe=()=>t.delete(s.id),t.set(s.id,s),f=>{s.unsubscribe(),f!=null&&f.cancelActive&&tu(s)}),a=s=>{const f=nf(t,s)??Fv(s);return i(f)};wr(a,{withTypes:()=>a});const o=s=>{const f=nf(t,s);return f&&(f.unsubscribe(),s.cancelActive&&tu(f)),!!f};wr(o,{withTypes:()=>o});const u=async(s,f,d,h)=>{const v=new AbortController,p=Ox(a,v.signal),m=[];try{s.pending.add(v),await Promise.resolve(s.effect(f,wr({},d,{getOriginalState:h,condition:(y,b)=>p(y,b).then(Boolean),take:p,delay:qv(v.signal),pause:Jn(v.signal),extra:r,signal:v.signal,fork:Px(v.signal,m),unsubscribe:s.unsubscribe,subscribe:()=>{t.set(s.id,s)},cancelActiveListeners:()=>{s.pending.forEach((y,b,x)=>{y!==v&&(rr(y,eu),x.delete(y))})},cancel:()=>{rr(v,eu),s.pending.delete(v)},throwIfCancelled:()=>{nr(v.signal)}})))}catch(y){y instanceof Ci||af(n,y,{raisedBy:"effect"})}finally{await Promise.all(m),rr(v,xx),s.pending.delete(v)}},l=Ax(t);return{middleware:s=>f=>d=>{if(!Sv(d))return f(d);if(Wv.match(d))return a(d.payload);if(Sx.match(d)){l();return}if(Uv.match(d))return o(d.payload);let h=s.getState();const v=()=>{if(h===rf)throw new Error(Fe(23));return h};let p;try{if(p=f(d),t.size>0){const m=s.getState(),y=Array.from(t.values());for(const b of y){let x=!1;try{x=b.predicate(d,m,h)}catch(P){x=!1,af(n,P,{raisedBy:"predicate"})}x&&u(b,d,s,v)}}}finally{h=rf}return p},startListening:a,stopListening:o,clearListeners:l}};function Fe(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var jx={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},Hv=nt({name:"chartLayout",initialState:jx,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top,e.margin.right=t.payload.right,e.margin.bottom=t.payload.bottom,e.margin.left=t.payload.left},setScale(e,t){e.scale=t.payload}}}),{setMargin:Tx,setLayout:kx,setChartSize:Cx,setScale:_x}=Hv.actions,Mx=Hv.reducer;function of(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function uf(e){for(var t=1;te*180/Math.PI,ce=(e,t,r,n)=>({x:e+Math.cos(-Qn*n)*r,y:t+Math.sin(-Qn*n)*r}),Yv=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},Rx=(e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return Math.sqrt((r-i)**2+(n-a)**2)},Lx=(e,t)=>{var{x:r,y:n}=e,{cx:i,cy:a}=t,o=Rx({x:r,y:n},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var u=(r-i)/o,l=Math.acos(u);return n>a&&(l=2*Math.PI-l),{radius:o,angle:$x(l),angleInRadian:l}},Bx=e=>{var{startAngle:t,endAngle:r}=e,n=Math.floor(t/360),i=Math.floor(r/360),a=Math.min(n,i);return{startAngle:t-a*360,endAngle:r-a*360}},Kx=(e,t)=>{var{startAngle:r,endAngle:n}=t,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return e+o*360},qx=(e,t)=>{var{x:r,y:n}=e,{radius:i,angle:a}=Lx({x:r,y:n},t),{innerRadius:o,outerRadius:u}=t;if(iu||i===0)return null;var{startAngle:l,endAngle:c}=Bx(t),s=a,f;if(l<=c){for(;s>c;)s-=360;for(;s=l&&s<=c}else{for(;s>l;)s-=360;for(;s=c&&s<=l}return f?uf(uf({},t),{},{radius:i,angle:Kx(s,t)}):null};function sf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Qe(e){for(var t=1;t{var a,o=-1,u=(a=t==null?void 0:t.length)!==null&&a!==void 0?a:0;if(u<=1||e==null)return 0;if(n==="angleAxis"&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var l=0;l0?r[l-1].coordinate:r[u-1].coordinate,s=r[l].coordinate,f=l>=u-1?r[0].coordinate:r[l+1].coordinate,d=void 0;if(ge(s-c)!==ge(f-s)){var h=[];if(ge(f-s)===ge(i[1]-i[0])){d=f;var v=s+i[1]-i[0];h[0]=Math.min(v,(v+c)/2),h[1]=Math.max(v,(v+c)/2)}else{d=c;var p=f+i[1]-i[0];h[0]=Math.min(s,(p+s)/2),h[1]=Math.max(s,(p+s)/2)}var m=[Math.min(s,(d+s)/2),Math.max(s,(d+s)/2)];if(e>m[0]&&e<=m[1]||e>=h[0]&&e<=h[1]){({index:o}=r[l]);break}}else{var y=Math.min(c,f),b=Math.max(c,f);if(e>(y+s)/2&&e<=(b+s)/2){({index:o}=r[l]);break}}}else if(t){for(var x=0;x0&&x(t[x].coordinate+t[x-1].coordinate)/2&&e<=(t[x].coordinate+t[x+1].coordinate)/2||x===u-1&&e>(t[x].coordinate+t[x-1].coordinate)/2){({index:o}=t[x]);break}}return o},Hx=(e,t,r)=>{if(t&&r){var{width:n,height:i}=r,{align:a,verticalAlign:o,layout:u}=t;if((u==="vertical"||u==="horizontal"&&o==="middle")&&a!=="center"&&D(e[a]))return Qe(Qe({},e),{},{[a]:e[a]+(n||0)});if((u==="horizontal"||u==="vertical"&&a==="center")&&o!=="middle"&&D(e[o]))return Qe(Qe({},e),{},{[o]:e[o]+(i||0)})}return e},qt=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",Gv=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,a,o=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(a=!0),u.coordinate));return i||o.push(t),a||o.push(r),o},Vv=(e,t,r)=>{if(!e)return null;var{duplicateDomain:n,type:i,range:a,scale:o,realScaleType:u,isCategorical:l,categoricalDomain:c,tickCount:s,ticks:f,niceTicks:d,axisType:h}=e;if(!o)return null;var v=u==="scaleBand"&&o.bandwidth?o.bandwidth()/2:2,p=i==="category"&&o.bandwidth?o.bandwidth()/v:0;if(p=h==="angleAxis"&&a&&a.length>=2?ge(a[0]-a[1])*2*p:p,f||d){var m=(f||d||[]).map((y,b)=>{var x=n?n.indexOf(y):y;return{coordinate:o(x)+p,value:y,offset:p,index:b}});return m.filter(y=>!We(y.coordinate))}return l&&c?c.map((y,b)=>({coordinate:o(y)+p,value:y,index:b,offset:p})):o.ticks&&s!=null?o.ticks(s).map((y,b)=>({coordinate:o(y)+p,value:y,offset:p,index:b})):o.domain().map((y,b)=>({coordinate:o(y)+p,value:n?n[y]:y,index:b,offset:p}))},lf=1e-4,Yx=e=>{var t=e.domain();if(!(!t||t.length<=2)){var r=t.length,n=e.range(),i=Math.min(n[0],n[1])-lf,a=Math.max(n[0],n[1])+lf,o=e(t[0]),u=e(t[r-1]);(oa||ua)&&e.domain([t[0],t[r-1]])}},Gx=(e,t)=>{if(!t||t.length!==2||!D(t[0])||!D(t[1]))return e;var r=Math.min(t[0],t[1]),n=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!D(e[0])||e[0]n)&&(i[1]=n),i[0]>n&&(i[0]=n),i[1]{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[o][r][0]=i,e[o][r][1]=i+u,i=e[o][r][1]):(e[o][r][0]=a,e[o][r][1]=a+u,a=e[o][r][1])}},Xx=e=>{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[a][r][0]=i,e[a][r][1]=i+o,i=e[a][r][1]):(e[a][r][0]=0,e[a][r][1]=0)}},Zx={sign:Vx,expand:C0,none:Or,silhouette:_0,wiggle:M0,positive:Xx},Jx=(e,t,r)=>{var n=Zx[r],i=k0().keys(t).value((a,o)=>+re(a,o,0)).order(Ho).offset(n);return i(e)};function Xv(e){return e==null?void 0:String(e)}function cf(e){var{axis:t,ticks:r,bandSize:n,entry:i,index:a,dataKey:o}=e;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!J(i[t.dataKey])){var u=Uh(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r[a]?r[a].coordinate+n/2:null}var l=re(i,J(o)?t.dataKey:o);return J(l)?null:t.scale(l)}var ff=e=>{var{axis:t,ticks:r,offset:n,bandSize:i,entry:a,index:o}=e;if(t.type==="category")return r[o]?r[o].coordinate+n:null;var u=re(a,t.dataKey,t.scale.domain()[o]);return J(u)?null:t.scale(u)-i/2+n},Qx=e=>{var{numericAxis:t}=e,r=t.scale.domain();if(t.type==="number"){var n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return n<=0&&i>=0?0:i<0?i:n}return r[0]},ew=e=>{var t=e.flat(2).filter(D);return[Math.min(...t),Math.max(...t)]},tw=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],rw=(e,t,r)=>{if(e!=null)return tw(Object.keys(e).reduce((n,i)=>{var a=e[i],{stackedData:o}=a,u=o.reduce((l,c)=>{var s=ew(c.slice(t,r+1));return[Math.min(l[0],s[0]),Math.max(l[1],s[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},df=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,hf=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,en=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=Si(t,s=>s.coordinate),a=1/0,o=1,u=i.length;o=i.left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height;return a?{x:e,y:t}:null}return n?qx({x:e,y:t},n):null}var iw=(e,t,r,n)=>{var i=t.find(c=>c&&c.index===r);if(i){if(e==="horizontal")return{x:i.coordinate,y:n.y};if(e==="vertical")return{x:n.x,y:i.coordinate};if(e==="centric"){var a=i.coordinate,{radius:o}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,o,a)),{},{angle:a,radius:o})}var u=i.coordinate,{angle:l}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,u,l)),{},{angle:l,radius:u})}return{x:0,y:0}},aw=(e,t)=>t==="horizontal"?e.x:t==="vertical"?e.y:t==="centric"?e.angle:e.radius,Et=e=>e.layout.width,jt=e=>e.layout.height,ow=e=>e.layout.scale,Zv=e=>e.layout.margin,is=S(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),as=S(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),Jv="data-recharts-item-index",Qv="data-recharts-item-data-key",Mi=60;function pf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function _t(e){for(var t=1;te.brush.height,ve=S([Et,jt,Zv,cw,is,as,Pv,Db],(e,t,r,n,i,a,o,u)=>{var l=a.reduce((v,p)=>{var{orientation:m}=p;if(!p.mirror&&!p.hide){var y=typeof p.width=="number"?p.width:Mi;return _t(_t({},v),{},{[m]:v[m]+y})}return v},{left:r.left||0,right:r.right||0}),c=i.reduce((v,p)=>{var{orientation:m}=p;return!p.mirror&&!p.hide?_t(_t({},v),{},{[m]:Rt(v,"".concat(m))+p.height}):v},{top:r.top||0,bottom:r.bottom||0}),s=_t(_t({},c),l),f=s.bottom;s.bottom+=n,s=Hx(s,o,u);var d=e-s.left-s.right,h=t-s.top-s.bottom;return _t(_t({brushBottom:f},s),{},{width:Math.max(d,0),height:Math.max(h,0)})}),fw=S(ve,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),ep=S(Et,jt,(e,t)=>({x:0,y:0,width:e,height:t})),dw=g.createContext(null),Ce=()=>g.useContext(dw)!=null,Di=e=>e.brush,Ii=S([Di,ve,Zv],(e,t,r)=>({height:e.height,x:D(e.x)?e.x:t.left,y:D(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:D(e.width)?e.width:t.width})),os=()=>{var e,t=Ce(),r=$(fw),n=$(Ii),i=(e=$(Di))===null||e===void 0?void 0:e.padding;return!t||!n||!i?r:{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}},hw={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},tp=()=>{var e;return(e=$(ve))!==null&&e!==void 0?e:hw},rp=()=>$(Et),np=()=>$(jt),Y=e=>e.layout.layoutType,Ni=()=>$(Y),vw={settings:{layout:"horizontal",align:"center",verticalAlign:"middle",itemSorter:"value"},size:{width:0,height:0},payload:[]},ip=nt({name:"legend",initialState:vw,reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload(e,t){e.payload.push(t.payload)},removeLegendPayload(e,t){var r=bt(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)}}}),{setLegendSize:I2,setLegendSettings:N2,addLegendPayload:ap,removeLegendPayload:op}=ip.actions,pw=ip.reducer;function ru(){return ru=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{separator:t=" : ",contentStyle:r={},itemStyle:n={},labelStyle:i={},payload:a,formatter:o,itemSorter:u,wrapperClassName:l,labelClassName:c,label:s,labelFormatter:f,accessibilityLayer:d=!1}=e,h=()=>{if(a&&a.length){var w={padding:0,margin:0},O=(u?Si(a,u):a).map((A,j)=>{if(A.type==="none")return null;var T=A.formatter||o||bw,{value:I,name:C}=A,_=I,R=C;if(T){var B=T(I,C,A,j,a);if(Array.isArray(B))[_,R]=B;else if(B!=null)_=B;else return null}var F=ao({display:"block",paddingTop:4,paddingBottom:4,color:A.color||"#000"},n);return g.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(j),style:F},dt(R)?g.createElement("span",{className:"recharts-tooltip-item-name"},R):null,dt(R)?g.createElement("span",{className:"recharts-tooltip-item-separator"},t):null,g.createElement("span",{className:"recharts-tooltip-item-value"},_),g.createElement("span",{className:"recharts-tooltip-item-unit"},A.unit||""))});return g.createElement("ul",{className:"recharts-tooltip-item-list",style:w},O)}return null},v=ao({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},r),p=ao({margin:0},i),m=!J(s),y=m?s:"",b=H("recharts-default-tooltip",l),x=H("recharts-tooltip-label",c);m&&f&&a!==void 0&&a!==null&&(y=f(s,a));var P=d?{role:"status","aria-live":"assertive"}:{};return g.createElement("div",ru({className:b,style:v},P),g.createElement("p",{className:x,style:p},g.isValidElement(y)?y:"".concat(y)),h())},Kr="recharts-tooltip-wrapper",ww={visibility:"hidden"};function Pw(e){var{coordinate:t,translateX:r,translateY:n}=e;return H(Kr,{["".concat(Kr,"-right")]:D(r)&&t&&D(t.x)&&r>=t.x,["".concat(Kr,"-left")]:D(r)&&t&&D(t.x)&&r=t.y,["".concat(Kr,"-top")]:D(n)&&t&&D(t.y)&&n0?i:0),f=r[n]+i;if(t[n])return o[n]?s:f;var d=l[n];if(d==null)return 0;if(o[n]){var h=s,v=d;return hm?Math.max(s,d):Math.max(f,d)}function Ow(e){var{translateX:t,translateY:r,useTranslate3d:n}=e;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function Aw(e){var{allowEscapeViewBox:t,coordinate:r,offsetTopLeft:n,position:i,reverseDirection:a,tooltipBox:o,useTranslate3d:u,viewBox:l}=e,c,s,f;return o.height>0&&o.width>0&&r?(s=gf({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:l,viewBoxDimension:l.width}),f=gf({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:l,viewBoxDimension:l.height}),c=Ow({translateX:s,translateY:f,useTranslate3d:u})):c=ww,{cssProperties:c,cssClasses:Pw({translateX:s,translateY:f,coordinate:r})}}function yf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function _n(e){for(var t=1;t{if(t.key==="Escape"){var r,n,i,a;this.setState({dismissed:!0,dismissedAtCoordinate:{x:(r=(n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==null&&r!==void 0?r:0,y:(i=(a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==null&&i!==void 0?i:0}})}})}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown)}componentDidUpdate(){var t,r;this.state.dismissed&&(((t=this.props.coordinate)===null||t===void 0?void 0:t.x)!==this.state.dismissedAtCoordinate.x||((r=this.props.coordinate)===null||r===void 0?void 0:r.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}render(){var{active:t,allowEscapeViewBox:r,animationDuration:n,animationEasing:i,children:a,coordinate:o,hasPayload:u,isAnimationActive:l,offset:c,position:s,reverseDirection:f,useTranslate3d:d,viewBox:h,wrapperStyle:v,lastBoundingBox:p,innerRef:m,hasPortalFromProps:y}=this.props,{cssClasses:b,cssProperties:x}=Aw({allowEscapeViewBox:r,coordinate:o,offsetTopLeft:c,position:s,reverseDirection:f,tooltipBox:{height:p.height,width:p.width},useTranslate3d:d,viewBox:h}),P=y?{}:_n(_n({transition:l&&t?"transform ".concat(n,"ms ").concat(i):void 0},x),{},{pointerEvents:"none",visibility:!this.state.dismissed&&t&&u?"visible":"hidden",position:"absolute",top:0,left:0}),w=_n(_n({},P),{},{visibility:!this.state.dismissed&&t&&u?"visible":"hidden"},v);return g.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:b,style:w,ref:m},a)}}var Tw=()=>!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout),fr={isSsr:Tw()},up=()=>$(e=>e.rootProps.accessibilityLayer);function Ye(e){return Number.isFinite(e)}function Sr(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function iu(){return iu=Object.assign?Object.assign.bind():function(e){for(var t=1;tYe(e.x)&&Ye(e.y),qr=e=>e.x,zr=e=>e.y,Mw=(e,t)=>{if(typeof e=="function")return e;var r="curve".concat(fn(e));return(r==="curveMonotone"||r==="curveBump")&&t?wf["".concat(r).concat(t==="vertical"?"Y":"X")]:wf[r]||Oi},Dw=e=>{var{type:t="linear",points:r=[],baseLine:n,layout:i,connectNulls:a=!1}=e,o=Mw(t,i),u=a?r.filter(Mn):r,l;if(Array.isArray(n)){var c=a?n.filter(f=>Mn(f)):n,s=u.map((f,d)=>xf(xf({},f),{},{base:c[d]}));return i==="vertical"?l=En().y(zr).x1(qr).x0(f=>f.base.x):l=En().x(qr).y1(zr).y0(f=>f.base.y),l.defined(Mn).curve(o),l(s)}return i==="vertical"&&D(n)?l=En().y(zr).x1(qr).x0(n):D(n)?l=En().x(qr).y1(zr).y0(n):l=ev().x(qr).y(zr),l.defined(Mn).curve(o),l(u)},us=e=>{var{className:t,points:r,path:n,pathRef:i}=e;if((!r||!r.length)&&!n)return null;var a=r&&r.length?Dw(e):n;return g.createElement("path",iu({},z(e,!1),Fu(e),{className:H("recharts-curve",t),d:a===null?void 0:a,ref:i}))},Iw=["x","y","top","left","width","height","className"];function au(){return au=Object.assign?Object.assign.bind():function(e){for(var t=1;t"M".concat(e,",").concat(i,"v").concat(n,"M").concat(a,",").concat(t,"h").concat(r),zw=e=>{var{x:t=0,y:r=0,top:n=0,left:i=0,width:a=0,height:o=0,className:u}=e,l=Bw(e,Iw),c=Nw({x:t,y:r,top:n,left:i,width:a,height:o},l);return!D(t)||!D(r)||!D(a)||!D(o)||!D(n)||!D(i)?null:g.createElement("path",au({},z(c,!0),{className:H("recharts-cross",u),d:qw(t,r,a,o,n,i)}))};function Fw(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-i:r.left+.5,y:e==="horizontal"?r.top+.5:t.y-i,width:e==="horizontal"?n:r.width-1,height:e==="horizontal"?r.height-1:n}}function Of(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ww(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}var oo={},uo={},so={},Af;function Gw(){return Af||(Af=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){if(!r||typeof r!="object")return!1;const n=Object.getPrototypeOf(r);return n===null||n===Object.prototype||Object.getPrototypeOf(n)===null?Object.prototype.toString.call(r)==="[object Object]":!1}e.isPlainObject=t}(so)),so}var Sf;function Vw(){return Sf||(Sf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Gw(),r=mv(),n=Xu(),i=Zu(),a=Gu();function o(c,s,f){return u(c,s,void 0,void 0,void 0,void 0,f)}function u(c,s,f,d,h,v,p){const m=p(c,s,f,d,h,v);if(m!==void 0)return m;if(typeof c==typeof s)switch(typeof c){case"bigint":case"string":case"boolean":case"symbol":case"undefined":return c===s;case"number":return c===s||Object.is(c,s);case"function":return c===s;case"object":return l(c,s,v,p)}return l(c,s,v,p)}function l(c,s,f,d){if(Object.is(c,s))return!0;let h=n.getTag(c),v=n.getTag(s);if(h===i.argumentsTag&&(h=i.objectTag),v===i.argumentsTag&&(v=i.objectTag),h!==v)return!1;switch(h){case i.stringTag:return c.toString()===s.toString();case i.numberTag:{const y=c.valueOf(),b=s.valueOf();return a.eq(y,b)}case i.booleanTag:case i.dateTag:case i.symbolTag:return Object.is(c.valueOf(),s.valueOf());case i.regexpTag:return c.source===s.source&&c.flags===s.flags;case i.functionTag:return c===s}f=f??new Map;const p=f.get(c),m=f.get(s);if(p!=null&&m!=null)return p===s;f.set(c,s),f.set(s,c);try{switch(h){case i.mapTag:{if(c.size!==s.size)return!1;for(const[y,b]of c.entries())if(!s.has(y)||!u(b,s.get(y),y,c,s,f,d))return!1;return!0}case i.setTag:{if(c.size!==s.size)return!1;const y=Array.from(c.values()),b=Array.from(s.values());for(let x=0;xu(P,O,void 0,c,s,f,d));if(w===-1)return!1;b.splice(w,1)}return!0}case i.arrayTag:case i.uint8ArrayTag:case i.uint8ClampedArrayTag:case i.uint16ArrayTag:case i.uint32ArrayTag:case i.bigUint64ArrayTag:case i.int8ArrayTag:case i.int16ArrayTag:case i.int32ArrayTag:case i.bigInt64ArrayTag:case i.float32ArrayTag:case i.float64ArrayTag:{if(typeof Buffer<"u"&&Buffer.isBuffer(c)!==Buffer.isBuffer(s)||c.length!==s.length)return!1;for(let y=0;ynull,n=!1,i=null,a=o=>{if(!n){if(Array.isArray(o)){if(!o.length)return;var u=o,[l,...c]=u;if(typeof l=="number"){i=e.setTimeout(a.bind(null,c),l);return}a(l),i=e.setTimeout(a.bind(null,c));return}typeof o=="object"&&(t=o,r(t)),typeof o=="function"&&o()}};return{stop:()=>{n=!0},start:o=>{n=!1,i&&(i(),i=null),a(o)},subscribe:o=>(r=o,()=>{r=()=>null}),getTimeoutController:()=>e}}var ei=1e-4,sp=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],lp=(e,t)=>e.map((r,n)=>r*t**n).reduce((r,n)=>r+n),kf=(e,t)=>r=>{var n=sp(e,t);return lp(n,r)},r1=(e,t)=>r=>{var n=sp(e,t),i=[...n.map((a,o)=>a*o).slice(1),0];return lp(i,r)},Cf=function(){for(var t,r,n,i,a=arguments.length,o=new Array(a),u=0;uparseFloat(v)))}}else o.length===4&&([t,n,r,i]=o);var c=kf(t,r),s=kf(n,i),f=r1(t,r),d=v=>v>1?1:v<0?0:v,h=v=>{for(var p=v>1?1:v,m=p,y=0;y<8;++y){var b=c(m)-p,x=f(m);if(Math.abs(b-p)0&&arguments[0]!==void 0?arguments[0]:{},{stiff:r=100,damping:n=8,dt:i=17}=t,a=(o,u,l)=>{var c=-(o-u)*r,s=l*n,f=l+(c-s)*i/1e3,d=l*i/1e3+o;return Math.abs(d-u){if(typeof e=="string")switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return Cf(e);case"spring":return n1();default:if(e.split("(")[0]==="cubic-bezier")return Cf(e)}return typeof e=="function"?e:null};function _f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Mf(e){for(var t=1;te.replace(/([A-Z])/g,t=>"-".concat(t.toLowerCase())),l1=(e,t,r)=>e.map(n=>"".concat(s1(n)," ").concat(t,"ms ").concat(r)).join(","),c1=(e,t)=>[Object.keys(e),Object.keys(t)].reduce((r,n)=>r.filter(i=>n.includes(i))),tn=(e,t)=>Object.keys(t).reduce((r,n)=>Mf(Mf({},r),{},{[n]:e(n,t[n])}),{});function Df(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Oe(e){for(var t=1;te+(t-e)*r,ou=e=>{var{from:t,to:r}=e;return t!==r},cp=(e,t,r)=>{var n=tn((i,a)=>{if(ou(a)){var[o,u]=e(a.from,a.to,a.velocity);return Oe(Oe({},a),{},{from:o,velocity:u})}return a},t);return r<1?tn((i,a)=>ou(a)?Oe(Oe({},a),{},{velocity:ti(a.velocity,n[i].velocity,r),from:ti(a.from,n[i].from,r)}):a,t):cp(e,n,r-1)};function v1(e,t,r,n,i,a){var o,u=n.reduce((d,h)=>Oe(Oe({},d),{},{[h]:{from:e[h],velocity:0,to:t[h]}}),{}),l=()=>tn((d,h)=>h.from,u),c=()=>!Object.values(u).filter(ou).length,s=null,f=d=>{o||(o=d);var h=d-o,v=h/r.dt;u=cp(r,u,v),i(Oe(Oe(Oe({},e),t),l())),o=d,c()||(s=a.setTimeout(f))};return()=>(s=a.setTimeout(f),()=>{s()})}function p1(e,t,r,n,i,a,o){var u=null,l=i.reduce((f,d)=>Oe(Oe({},f),{},{[d]:[e[d],t[d]]}),{}),c,s=f=>{c||(c=f);var d=(f-c)/n,h=tn((p,m)=>ti(...m,r(d)),l);if(a(Oe(Oe(Oe({},e),t),h)),d<1)u=o.setTimeout(s);else{var v=tn((p,m)=>ti(...m,r(1)),l);a(Oe(Oe(Oe({},e),t),v))}};return()=>(u=o.setTimeout(s),()=>{u()})}const m1=(e,t,r,n,i,a)=>{var o=c1(e,t);return r.isStepper===!0?v1(e,t,r,o,i,a):p1(e,t,r,n,o,i,a)};class g1{setTimeout(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),i=null,a=o=>{o-n>=r?t(o):typeof requestAnimationFrame=="function"&&(i=requestAnimationFrame(a))};return i=requestAnimationFrame(a),()=>{cancelAnimationFrame(i)}}}var y1=["children","begin","duration","attributeName","easing","isActive","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart","animationManager"];function uu(){return uu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{this.stopJSAnimation=c()};this.manager.start([l,o,s,i,u])}runAnimation(t){var{begin:r,duration:n,attributeName:i,to:a,easing:o,onAnimationStart:u,onAnimationEnd:l,children:c}=t;if(this.unSubscribe=this.manager.subscribe(this.handleStyleChange),typeof o=="function"||typeof c=="function"||o==="spring"){this.runJSAnimation(t);return}var s=i?{[i]:a}:a,f=l1(Object.keys(s),n,o);this.manager.start([u,r,Mt(Mt({},s),{},{transition:f}),n,l])}render(){var t=this.props,{children:r,begin:n,duration:i,attributeName:a,easing:o,isActive:u,from:l,to:c,canBegin:s,onAnimationEnd:f,shouldReAnimate:d,onAnimationReStart:h,animationManager:v}=t,p=b1(t,y1),m=g.Children.count(r),y=this.state.style;if(typeof r=="function")return r(y);if(!u||m===0||i<=0)return r;var b=x=>{var{style:P={},className:w}=x.props,O=g.cloneElement(x,Mt(Mt({},p),{},{style:Mt(Mt({},P),y),className:w}));return O};return m===1?b(g.Children.only(r)):g.createElement("div",null,g.Children.map(r,x=>b(x)))}}Jt(ss,"displayName","Animate");Jt(ss,"defaultProps",{begin:0,duration:1e3,attributeName:"",easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}});var A1=g.createContext(null);function Lt(e){var t,r,n=g.useContext(A1);return g.createElement(ss,uu({},e,{animationManager:(t=(r=e.animationManager)!==null&&r!==void 0?r:n)!==null&&t!==void 0?t:O1()}))}function ri(){return ri=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=Math.min(Math.abs(r)/2,Math.abs(n)/2),o=n>=0?1:-1,u=r>=0?1:-1,l=n>=0&&r>=0||n<0&&r<0?1:0,c;if(a>0&&i instanceof Array){for(var s=[0,0,0,0],f=0,d=4;fa?a:i[f];c="M".concat(e,",").concat(t+o*s[0]),s[0]>0&&(c+="A ".concat(s[0],",").concat(s[0],",0,0,").concat(l,",").concat(e+u*s[0],",").concat(t)),c+="L ".concat(e+r-u*s[1],",").concat(t),s[1]>0&&(c+="A ".concat(s[1],",").concat(s[1],",0,0,").concat(l,`, - `).concat(e+r,",").concat(t+o*s[1])),c+="L ".concat(e+r,",").concat(t+n-o*s[2]),s[2]>0&&(c+="A ".concat(s[2],",").concat(s[2],",0,0,").concat(l,`, - `).concat(e+r-u*s[2],",").concat(t+n)),c+="L ".concat(e+u*s[3],",").concat(t+n),s[3]>0&&(c+="A ".concat(s[3],",").concat(s[3],",0,0,").concat(l,`, - `).concat(e,",").concat(t+n-o*s[3])),c+="Z"}else if(a>0&&i===+i&&i>0){var h=Math.min(a,i);c="M ".concat(e,",").concat(t+o*h,` - A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+u*h,",").concat(t,` - L `).concat(e+r-u*h,",").concat(t,` - A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r,",").concat(t+o*h,` - L `).concat(e+r,",").concat(t+n-o*h,` - A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r-u*h,",").concat(t+n,` - L `).concat(e+u*h,",").concat(t+n,` - A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e,",").concat(t+n-o*h," Z")}else c="M ".concat(e,",").concat(t," h ").concat(r," v ").concat(n," h ").concat(-r," Z");return c},S1={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},fp=e=>{var t=it(e,S1),r=g.useRef(null),[n,i]=g.useState(-1);g.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var y=r.current.getTotalLength();y&&i(y)}catch{}},[]);var{x:a,y:o,width:u,height:l,radius:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isAnimationActive:v,isUpdateAnimationActive:p}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||u===0||l===0)return null;var m=H("recharts-rectangle",s);return p?g.createElement(Lt,{canBegin:n>0,from:{width:u,height:l,x:a,y:o},to:{width:u,height:l,x:a,y:o},duration:d,animationEasing:f,isActive:p},y=>{var{width:b,height:x,x:P,y:w}=y;return g.createElement(Lt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,isActive:v,easing:f},g.createElement("path",ri({},z(t,!0),{className:m,d:Nf(P,w,b,x,c),ref:r})))}):g.createElement("path",ri({},z(t,!0),{className:m,d:Nf(a,o,u,l,c)}))};function dp(e){var{cx:t,cy:r,radius:n,startAngle:i,endAngle:a}=e,o=ce(t,r,n,i),u=ce(t,r,n,a);return{points:[o,u],cx:t,cy:r,radius:n,startAngle:i,endAngle:a}}function su(){return su=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=ge(t-e),n=Math.min(Math.abs(t-e),359.999);return r*n},Dn=e=>{var{cx:t,cy:r,radius:n,angle:i,sign:a,isExternal:o,cornerRadius:u,cornerIsExternal:l}=e,c=u*(o?1:-1)+n,s=Math.asin(u/c)/Qn,f=l?i:i+a*s,d=ce(t,r,c,f),h=ce(t,r,n,f),v=l?i-a*s:i,p=ce(t,r,c*Math.cos(s*Qn),v);return{center:d,circleTangency:h,lineTangency:p,theta:s}},hp=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:a,endAngle:o}=e,u=E1(a,o),l=a+u,c=ce(t,r,i,a),s=ce(t,r,i,l),f="M ".concat(c.x,",").concat(c.y,` - A `).concat(i,",").concat(i,`,0, - `).concat(+(Math.abs(u)>180),",").concat(+(a>l),`, - `).concat(s.x,",").concat(s.y,` - `);if(n>0){var d=ce(t,r,n,a),h=ce(t,r,n,l);f+="L ".concat(h.x,",").concat(h.y,` - A `).concat(n,",").concat(n,`,0, - `).concat(+(Math.abs(u)>180),",").concat(+(a<=l),`, - `).concat(d.x,",").concat(d.y," Z")}else f+="L ".concat(t,",").concat(r," Z");return f},j1=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,cornerRadius:a,forceCornerRadius:o,cornerIsExternal:u,startAngle:l,endAngle:c}=e,s=ge(c-l),{circleTangency:f,lineTangency:d,theta:h}=Dn({cx:t,cy:r,radius:i,angle:l,sign:s,cornerRadius:a,cornerIsExternal:u}),{circleTangency:v,lineTangency:p,theta:m}=Dn({cx:t,cy:r,radius:i,angle:c,sign:-s,cornerRadius:a,cornerIsExternal:u}),y=u?Math.abs(l-c):Math.abs(l-c)-h-m;if(y<0)return o?"M ".concat(d.x,",").concat(d.y,` - a`).concat(a,",").concat(a,",0,0,1,").concat(a*2,`,0 - a`).concat(a,",").concat(a,",0,0,1,").concat(-a*2,`,0 - `):hp({cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:l,endAngle:c});var b="M ".concat(d.x,",").concat(d.y,` - A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(f.x,",").concat(f.y,` - A`).concat(i,",").concat(i,",0,").concat(+(y>180),",").concat(+(s<0),",").concat(v.x,",").concat(v.y,` - A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(p.x,",").concat(p.y,` - `);if(n>0){var{circleTangency:x,lineTangency:P,theta:w}=Dn({cx:t,cy:r,radius:n,angle:l,sign:s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),{circleTangency:O,lineTangency:A,theta:j}=Dn({cx:t,cy:r,radius:n,angle:c,sign:-s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),T=u?Math.abs(l-c):Math.abs(l-c)-w-j;if(T<0&&a===0)return"".concat(b,"L").concat(t,",").concat(r,"Z");b+="L".concat(A.x,",").concat(A.y,` - A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(O.x,",").concat(O.y,` - A`).concat(n,",").concat(n,",0,").concat(+(T>180),",").concat(+(s>0),",").concat(x.x,",").concat(x.y,` - A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(P.x,",").concat(P.y,"Z")}else b+="L".concat(t,",").concat(r,"Z");return b},T1={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},vp=e=>{var t=it(e,T1),{cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:o,forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s,className:f}=t;if(a0&&Math.abs(c-s)<360?p=j1({cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:Math.min(v,h/2),forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s}):p=hp({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:c,endAngle:s}),g.createElement("path",su({},z(t,!0),{className:d,d:p}))};function k1(e,t,r){var n,i,a,o;if(e==="horizontal")n=t.x,a=n,i=r.top,o=r.top+r.height;else if(e==="vertical")i=t.y,o=i,n=r.left,a=r.left+r.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var{cx:u,cy:l,innerRadius:c,outerRadius:s,angle:f}=t,d=ce(u,l,c,f),h=ce(u,l,s,f);n=d.x,i=d.y,a=h.x,o=h.y}else return dp(t);return[{x:n,y:i},{x:a,y:o}]}var fo={},ho={},vo={},$f;function C1(){return $f||($f=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=xv();function r(n){return t.isSymbol(n)?NaN:Number(n)}e.toNumber=r}(vo)),vo}var Rf;function _1(){return Rf||(Rf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=C1();function r(n){return n?(n=t.toNumber(n),n===1/0||n===-1/0?(n<0?-1:1)*Number.MAX_VALUE:n===n?n:0):n===0?n:0}e.toFinite=r}(ho)),ho}var Lf;function M1(){return Lf||(Lf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=wv(),r=_1();function n(i,a,o){o&&typeof o!="number"&&t.isIterateeCall(i,a,o)&&(a=o=void 0),i=r.toFinite(i),a===void 0?(a=i,i=0):a=r.toFinite(a),o=o===void 0?it?1:e>=t?0:NaN}function N1(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function ls(e){let t,r,n;e.length!==2?(t=Nt,r=(u,l)=>Nt(e(u),l),n=(u,l)=>e(u)-l):(t=e===Nt||e===N1?e:$1,r=e,n=e);function i(u,l,c=0,s=u.length){if(c>>1;r(u[f],l)<0?c=f+1:s=f}while(c>>1;r(u[f],l)<=0?c=f+1:s=f}while(cc&&n(u[f-1],l)>-n(u[f],l)?f-1:f}return{left:i,center:o,right:a}}function $1(){return 0}function mp(e){return e===null?NaN:+e}function*R1(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const L1=ls(Nt),vn=L1.right;ls(mp).center;class Kf extends Map{constructor(t,r=q1){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(qf(this,t))}has(t){return super.has(qf(this,t))}set(t,r){return super.set(B1(this,t),r)}delete(t){return super.delete(K1(this,t))}}function qf({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function B1({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function K1({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function q1(e){return e!==null&&typeof e=="object"?e.valueOf():e}function z1(e=Nt){if(e===Nt)return gp;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function gp(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const F1=Math.sqrt(50),W1=Math.sqrt(10),U1=Math.sqrt(2);function ni(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=F1?10:a>=W1?5:a>=U1?2:1;let u,l,c;return i<0?(c=Math.pow(10,-i)/o,u=Math.round(e*c),l=Math.round(t*c),u/ct&&--l,c=-c):(c=Math.pow(10,i)*o,u=Math.round(e/c),l=Math.round(t/c),u*ct&&--l),l0))return[];if(e===t)return[e];const n=t=i))return[];const u=a-i+1,l=new Array(u);if(n)if(o<0)for(let c=0;c=n)&&(r=n);return r}function Ff(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function yp(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?gp:z1(i);n>r;){if(n-r>600){const l=n-r+1,c=t-r+1,s=Math.log(l),f=.5*Math.exp(2*s/3),d=.5*Math.sqrt(s*f*(l-f)/l)*(c-l/2<0?-1:1),h=Math.max(r,Math.floor(t-c*f/l+d)),v=Math.min(n,Math.floor(t+(l-c)*f/l+d));yp(e,t,h,v,i)}const a=e[t];let o=r,u=n;for(Fr(e,r,t),i(e[n],a)>0&&Fr(e,r,n);o0;)--u}i(e[r],a)===0?Fr(e,r,u):(++u,Fr(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function Fr(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function H1(e,t,r){if(e=Float64Array.from(R1(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Ff(e);if(t>=1)return zf(e);var n,i=(n-1)*t,a=Math.floor(i),o=zf(yp(e,a).subarray(0,a+1)),u=Ff(e.subarray(a+1));return o+(u-o)*(i-a)}}function Y1(e,t,r=mp){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return o+(u-o)*(i-a)}}function G1(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?In(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?In(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Z1.exec(e))?new De(t[1],t[2],t[3],1):(t=J1.exec(e))?new De(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Q1.exec(e))?In(t[1],t[2],t[3],t[4]):(t=eP.exec(e))?In(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=tP.exec(e))?Xf(t[1],t[2]/100,t[3]/100,1):(t=rP.exec(e))?Xf(t[1],t[2]/100,t[3]/100,t[4]):Wf.hasOwnProperty(e)?Yf(Wf[e]):e==="transparent"?new De(NaN,NaN,NaN,0):null}function Yf(e){return new De(e>>16&255,e>>8&255,e&255,1)}function In(e,t,r,n){return n<=0&&(e=t=r=NaN),new De(e,t,r,n)}function aP(e){return e instanceof pn||(e=an(e)),e?(e=e.rgb(),new De(e.r,e.g,e.b,e.opacity)):new De}function hu(e,t,r,n){return arguments.length===1?aP(e):new De(e,t,r,n??1)}function De(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}ds(De,hu,xp(pn,{brighter(e){return e=e==null?ii:Math.pow(ii,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?rn:Math.pow(rn,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new De(ir(this.r),ir(this.g),ir(this.b),ai(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Gf,formatHex:Gf,formatHex8:oP,formatRgb:Vf,toString:Vf}));function Gf(){return`#${Qt(this.r)}${Qt(this.g)}${Qt(this.b)}`}function oP(){return`#${Qt(this.r)}${Qt(this.g)}${Qt(this.b)}${Qt((isNaN(this.opacity)?1:this.opacity)*255)}`}function Vf(){const e=ai(this.opacity);return`${e===1?"rgb(":"rgba("}${ir(this.r)}, ${ir(this.g)}, ${ir(this.b)}${e===1?")":`, ${e})`}`}function ai(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ir(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Qt(e){return e=ir(e),(e<16?"0":"")+e.toString(16)}function Xf(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new st(e,t,r,n)}function wp(e){if(e instanceof st)return new st(e.h,e.s,e.l,e.opacity);if(e instanceof pn||(e=an(e)),!e)return new st;if(e instanceof st)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,u=a-i,l=(a+i)/2;return u?(t===a?o=(r-n)/u+(r0&&l<1?0:o,new st(o,u,l,e.opacity)}function uP(e,t,r,n){return arguments.length===1?wp(e):new st(e,t,r,n??1)}function st(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}ds(st,uP,xp(pn,{brighter(e){return e=e==null?ii:Math.pow(ii,e),new st(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?rn:Math.pow(rn,e),new st(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new De(mo(e>=240?e-240:e+120,i,n),mo(e,i,n),mo(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new st(Zf(this.h),Nn(this.s),Nn(this.l),ai(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=ai(this.opacity);return`${e===1?"hsl(":"hsla("}${Zf(this.h)}, ${Nn(this.s)*100}%, ${Nn(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Zf(e){return e=(e||0)%360,e<0?e+360:e}function Nn(e){return Math.max(0,Math.min(1,e||0))}function mo(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const hs=e=>()=>e;function sP(e,t){return function(r){return e+r*t}}function lP(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function cP(e){return(e=+e)==1?Pp:function(t,r){return r-t?lP(t,r,e):hs(isNaN(t)?r:t)}}function Pp(e,t){var r=t-e;return r?sP(e,r):hs(isNaN(e)?t:e)}const Jf=function e(t){var r=cP(t);function n(i,a){var o=r((i=hu(i)).r,(a=hu(a)).r),u=r(i.g,a.g),l=r(i.b,a.b),c=Pp(i.opacity,a.opacity);return function(s){return i.r=o(s),i.g=u(s),i.b=l(s),i.opacity=c(s),i+""}}return n.gamma=e,n}(1);function fP(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),u[o]?u[o]+=a:u[++o]=a),(n=n[0])===(i=i[0])?u[o]?u[o]+=i:u[++o]=i:(u[++o]=null,l.push({i:o,x:oi(n,i)})),r=go.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function PP(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?OP:PP,l=c=null,f}function f(d){return d==null||isNaN(d=+d)?a:(l||(l=u(e.map(n),t,r)))(n(o(d)))}return f.invert=function(d){return o(i((c||(c=u(t,e.map(n),oi)))(d)))},f.domain=function(d){return arguments.length?(e=Array.from(d,ui),s()):e.slice()},f.range=function(d){return arguments.length?(t=Array.from(d),s()):t.slice()},f.rangeRound=function(d){return t=Array.from(d),r=vs,s()},f.clamp=function(d){return arguments.length?(o=d?!0:Te,s()):o!==Te},f.interpolate=function(d){return arguments.length?(r=d,s()):r},f.unknown=function(d){return arguments.length?(a=d,f):a},function(d,h){return n=d,i=h,s()}}function ps(){return $i()(Te,Te)}function AP(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function si(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Er(e){return e=si(Math.abs(e)),e?e[1]:NaN}function SP(e,t){return function(r,n){for(var i=r.length,a=[],o=0,u=e[0],l=0;i>0&&u>0&&(l+u+1>n&&(u=Math.max(1,n-l)),a.push(r.substring(i-=u,i+u)),!((l+=u+1)>n));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}function EP(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var jP=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function on(e){if(!(t=jP.exec(e)))throw new Error("invalid format: "+e);var t;return new ms({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}on.prototype=ms.prototype;function ms(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}ms.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function TP(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var Op;function kP(e,t){var r=si(e,t);if(!r)return e+"";var n=r[0],i=r[1],a=i-(Op=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+si(e,Math.max(0,t+a-1))[0]}function ed(e,t){var r=si(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const td={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:AP,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>ed(e*100,t),r:ed,s:kP,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function rd(e){return e}var nd=Array.prototype.map,id=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function CP(e){var t=e.grouping===void 0||e.thousands===void 0?rd:SP(nd.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?rd:EP(nd.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function c(f){f=on(f);var d=f.fill,h=f.align,v=f.sign,p=f.symbol,m=f.zero,y=f.width,b=f.comma,x=f.precision,P=f.trim,w=f.type;w==="n"?(b=!0,w="g"):td[w]||(x===void 0&&(x=12),P=!0,w="g"),(m||d==="0"&&h==="=")&&(m=!0,d="0",h="=");var O=p==="$"?r:p==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",A=p==="$"?n:/[%p]/.test(w)?o:"",j=td[w],T=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function I(C){var _=O,R=A,B,F,V;if(w==="c")R=j(C)+R,C="";else{C=+C;var K=C<0||1/C<0;if(C=isNaN(C)?l:j(Math.abs(C),x),P&&(C=TP(C)),K&&+C==0&&v!=="+"&&(K=!1),_=(K?v==="("?v:u:v==="-"||v==="("?"":v)+_,R=(w==="s"?id[8+Op/3]:"")+R+(K&&v==="("?")":""),T){for(B=-1,F=C.length;++BV||V>57){R=(V===46?i+C.slice(B+1):C.slice(B))+R,C=C.slice(0,B);break}}}b&&!m&&(C=t(C,1/0));var de=_.length+C.length+R.length,oe=de>1)+_+C+R+oe.slice(de);break;default:C=oe+_+C+R;break}return a(C)}return I.toString=function(){return f+""},I}function s(f,d){var h=c((f=on(f),f.type="f",f)),v=Math.max(-8,Math.min(8,Math.floor(Er(d)/3)))*3,p=Math.pow(10,-v),m=id[8+v/3];return function(y){return h(p*y)+m}}return{format:c,formatPrefix:s}}var $n,gs,Ap;_P({thousands:",",grouping:[3],currency:["$",""]});function _P(e){return $n=CP(e),gs=$n.format,Ap=$n.formatPrefix,$n}function MP(e){return Math.max(0,-Er(Math.abs(e)))}function DP(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Er(t)/3)))*3-Er(Math.abs(e)))}function IP(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Er(t)-Er(e))+1}function Sp(e,t,r,n){var i=fu(e,t,r),a;switch(n=on(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=DP(i,o))&&(n.precision=a),Ap(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=IP(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=MP(i))&&(n.precision=a-(n.type==="%")*2);break}}return gs(n)}function zt(e){var t=e.domain;return e.ticks=function(r){var n=t();return lu(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return Sp(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],u=n[a],l,c,s=10;for(u0;){if(c=cu(o,u,r),c===l)return n[i]=o,n[a]=u,t(n);if(c>0)o=Math.floor(o/c)*c,u=Math.ceil(u/c)*c;else if(c<0)o=Math.ceil(o*c)/c,u=Math.floor(u*c)/c;else break;l=c}return e},e}function Ep(){var e=ps();return e.copy=function(){return mn(e,Ep())},at.apply(e,arguments),zt(e)}function jp(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,ui),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return jp(e).unknown(t)},e=arguments.length?Array.from(e,ui):[0,1],zt(r)}function Tp(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function BP(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function ud(e){return(t,r)=>-e(-t,r)}function ys(e){const t=e(ad,od),r=t.domain;let n=10,i,a;function o(){return i=BP(n),a=LP(n),r()[0]<0?(i=ud(i),a=ud(a),e(NP,$P)):e(ad,od),t}return t.base=function(u){return arguments.length?(n=+u,o()):n},t.domain=function(u){return arguments.length?(r(u),o()):r()},t.ticks=u=>{const l=r();let c=l[0],s=l[l.length-1];const f=s0){for(;d<=h;++d)for(v=1;vs)break;y.push(p)}}else for(;d<=h;++d)for(v=n-1;v>=1;--v)if(p=d>0?v/a(-d):v*a(d),!(ps)break;y.push(p)}y.length*2{if(u==null&&(u=10),l==null&&(l=n===10?"s":","),typeof l!="function"&&(!(n%1)&&(l=on(l)).precision==null&&(l.trim=!0),l=gs(l)),u===1/0)return l;const c=Math.max(1,n*u/t.ticks().length);return s=>{let f=s/a(Math.round(i(s)));return f*nr(Tp(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function kp(){const e=ys($i()).domain([1,10]);return e.copy=()=>mn(e,kp()).base(e.base()),at.apply(e,arguments),e}function sd(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function ld(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function bs(e){var t=1,r=e(sd(t),ld(t));return r.constant=function(n){return arguments.length?e(sd(t=+n),ld(t)):t},zt(r)}function Cp(){var e=bs($i());return e.copy=function(){return mn(e,Cp()).constant(e.constant())},at.apply(e,arguments)}function cd(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function KP(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function qP(e){return e<0?-e*e:e*e}function xs(e){var t=e(Te,Te),r=1;function n(){return r===1?e(Te,Te):r===.5?e(KP,qP):e(cd(r),cd(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},zt(t)}function ws(){var e=xs($i());return e.copy=function(){return mn(e,ws()).exponent(e.exponent())},at.apply(e,arguments),e}function zP(){return ws.apply(null,arguments).exponent(.5)}function fd(e){return Math.sign(e)*e*e}function FP(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function _p(){var e=ps(),t=[0,1],r=!1,n;function i(a){var o=FP(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(fd(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,ui)).map(fd)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return _p(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},at.apply(i,arguments),zt(i)}function Mp(){var e=[],t=[],r=[],n;function i(){var o=0,u=Math.max(1,t.length);for(r=new Array(u-1);++o0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[c-1],n[c]]},o.unknown=function(l){return arguments.length&&(a=l),o},o.thresholds=function(){return n.slice()},o.copy=function(){return Dp().domain([e,t]).range(i).unknown(a)},at.apply(zt(o),arguments)}function Ip(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[vn(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return Ip().domain(e).range(t).unknown(r)},at.apply(i,arguments)}const yo=new Date,bo=new Date;function pe(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),u=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,u)=>{const l=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a0))return l;let c;do l.push(c=new Date(+a)),t(a,u),e(a);while(cpe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,u)=>{if(o>=o)if(u<0)for(;++u<=0;)for(;t(o,-1),!a(o););else for(;--u>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(yo.setTime(+a),bo.setTime(+o),e(yo),e(bo),Math.floor(r(yo,bo))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const li=pe(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);li.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?pe(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):li);li.range;const gt=1e3,et=gt*60,yt=et*60,Pt=yt*24,Ps=Pt*7,dd=Pt*30,xo=Pt*365,er=pe(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*gt)},(e,t)=>(t-e)/gt,e=>e.getUTCSeconds());er.range;const Os=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getMinutes());Os.range;const As=pe(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getUTCMinutes());As.range;const Ss=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt-e.getMinutes()*et)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getHours());Ss.range;const Es=pe(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getUTCHours());Es.range;const gn=pe(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*et)/Pt,e=>e.getDate()-1);gn.range;const Ri=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Pt,e=>e.getUTCDate()-1);Ri.range;const Np=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Pt,e=>Math.floor(e/Pt));Np.range;function dr(e){return pe(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*et)/Ps)}const Li=dr(0),ci=dr(1),WP=dr(2),UP=dr(3),jr=dr(4),HP=dr(5),YP=dr(6);Li.range;ci.range;WP.range;UP.range;jr.range;HP.range;YP.range;function hr(e){return pe(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Ps)}const Bi=hr(0),fi=hr(1),GP=hr(2),VP=hr(3),Tr=hr(4),XP=hr(5),ZP=hr(6);Bi.range;fi.range;GP.range;VP.range;Tr.range;XP.range;ZP.range;const js=pe(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());js.range;const Ts=pe(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Ts.range;const Ot=pe(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Ot.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});Ot.range;const At=pe(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());At.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});At.range;function $p(e,t,r,n,i,a){const o=[[er,1,gt],[er,5,5*gt],[er,15,15*gt],[er,30,30*gt],[a,1,et],[a,5,5*et],[a,15,15*et],[a,30,30*et],[i,1,yt],[i,3,3*yt],[i,6,6*yt],[i,12,12*yt],[n,1,Pt],[n,2,2*Pt],[r,1,Ps],[t,1,dd],[t,3,3*dd],[e,1,xo]];function u(c,s,f){const d=sm).right(o,d);if(h===o.length)return e.every(fu(c/xo,s/xo,f));if(h===0)return li.every(Math.max(fu(c,s,f),1));const[v,p]=o[d/o[h-1][2]53)return null;"w"in k||(k.w=1),"Z"in k?(Q=Po(Wr(k.y,0,1)),Ne=Q.getUTCDay(),Q=Ne>4||Ne===0?fi.ceil(Q):fi(Q),Q=Ri.offset(Q,(k.V-1)*7),k.y=Q.getUTCFullYear(),k.m=Q.getUTCMonth(),k.d=Q.getUTCDate()+(k.w+6)%7):(Q=wo(Wr(k.y,0,1)),Ne=Q.getDay(),Q=Ne>4||Ne===0?ci.ceil(Q):ci(Q),Q=gn.offset(Q,(k.V-1)*7),k.y=Q.getFullYear(),k.m=Q.getMonth(),k.d=Q.getDate()+(k.w+6)%7)}else("W"in k||"U"in k)&&("w"in k||(k.w="u"in k?k.u%7:"W"in k?1:0),Ne="Z"in k?Po(Wr(k.y,0,1)).getUTCDay():wo(Wr(k.y,0,1)).getDay(),k.m=0,k.d="W"in k?(k.w+6)%7+k.W*7-(Ne+5)%7:k.w+k.U*7-(Ne+6)%7);return"Z"in k?(k.H+=k.Z/100|0,k.M+=k.Z%100,Po(k)):wo(k)}}function j(N,q,W,k){for(var _e=0,Q=q.length,Ne=W.length,$e,Yt;_e=Ne)return-1;if($e=q.charCodeAt(_e++),$e===37){if($e=q.charAt(_e++),Yt=w[$e in hd?q.charAt(_e++):$e],!Yt||(k=Yt(N,W,k))<0)return-1}else if($e!=W.charCodeAt(k++))return-1}return k}function T(N,q,W){var k=c.exec(q.slice(W));return k?(N.p=s.get(k[0].toLowerCase()),W+k[0].length):-1}function I(N,q,W){var k=h.exec(q.slice(W));return k?(N.w=v.get(k[0].toLowerCase()),W+k[0].length):-1}function C(N,q,W){var k=f.exec(q.slice(W));return k?(N.w=d.get(k[0].toLowerCase()),W+k[0].length):-1}function _(N,q,W){var k=y.exec(q.slice(W));return k?(N.m=b.get(k[0].toLowerCase()),W+k[0].length):-1}function R(N,q,W){var k=p.exec(q.slice(W));return k?(N.m=m.get(k[0].toLowerCase()),W+k[0].length):-1}function B(N,q,W){return j(N,t,q,W)}function F(N,q,W){return j(N,r,q,W)}function V(N,q,W){return j(N,n,q,W)}function K(N){return o[N.getDay()]}function de(N){return a[N.getDay()]}function oe(N){return l[N.getMonth()]}function Ie(N){return u[N.getMonth()]}function Ge(N){return i[+(N.getHours()>=12)]}function L(N){return 1+~~(N.getMonth()/3)}function we(N){return o[N.getUTCDay()]}function Ht(N){return a[N.getUTCDay()]}function Ve(N){return l[N.getUTCMonth()]}function Py(N){return u[N.getUTCMonth()]}function Oy(N){return i[+(N.getUTCHours()>=12)]}function Ay(N){return 1+~~(N.getUTCMonth()/3)}return{format:function(N){var q=O(N+="",x);return q.toString=function(){return N},q},parse:function(N){var q=A(N+="",!1);return q.toString=function(){return N},q},utcFormat:function(N){var q=O(N+="",P);return q.toString=function(){return N},q},utcParse:function(N){var q=A(N+="",!0);return q.toString=function(){return N},q}}}var hd={"-":"",_:" ",0:"0"},be=/^\s*\d+/,nO=/^%/,iO=/[\\^$*+?|[\]().{}]/g;function U(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function oO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function uO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function sO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function lO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function cO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function vd(e,t,r){var n=be.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function pd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function fO(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function dO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function hO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function md(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function vO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function gd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function pO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function mO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function gO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function yO(e,t,r){var n=be.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function bO(e,t,r){var n=nO.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function xO(e,t,r){var n=be.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function wO(e,t,r){var n=be.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function yd(e,t){return U(e.getDate(),t,2)}function PO(e,t){return U(e.getHours(),t,2)}function OO(e,t){return U(e.getHours()%12||12,t,2)}function AO(e,t){return U(1+gn.count(Ot(e),e),t,3)}function Rp(e,t){return U(e.getMilliseconds(),t,3)}function SO(e,t){return Rp(e,t)+"000"}function EO(e,t){return U(e.getMonth()+1,t,2)}function jO(e,t){return U(e.getMinutes(),t,2)}function TO(e,t){return U(e.getSeconds(),t,2)}function kO(e){var t=e.getDay();return t===0?7:t}function CO(e,t){return U(Li.count(Ot(e)-1,e),t,2)}function Lp(e){var t=e.getDay();return t>=4||t===0?jr(e):jr.ceil(e)}function _O(e,t){return e=Lp(e),U(jr.count(Ot(e),e)+(Ot(e).getDay()===4),t,2)}function MO(e){return e.getDay()}function DO(e,t){return U(ci.count(Ot(e)-1,e),t,2)}function IO(e,t){return U(e.getFullYear()%100,t,2)}function NO(e,t){return e=Lp(e),U(e.getFullYear()%100,t,2)}function $O(e,t){return U(e.getFullYear()%1e4,t,4)}function RO(e,t){var r=e.getDay();return e=r>=4||r===0?jr(e):jr.ceil(e),U(e.getFullYear()%1e4,t,4)}function LO(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+U(t/60|0,"0",2)+U(t%60,"0",2)}function bd(e,t){return U(e.getUTCDate(),t,2)}function BO(e,t){return U(e.getUTCHours(),t,2)}function KO(e,t){return U(e.getUTCHours()%12||12,t,2)}function qO(e,t){return U(1+Ri.count(At(e),e),t,3)}function Bp(e,t){return U(e.getUTCMilliseconds(),t,3)}function zO(e,t){return Bp(e,t)+"000"}function FO(e,t){return U(e.getUTCMonth()+1,t,2)}function WO(e,t){return U(e.getUTCMinutes(),t,2)}function UO(e,t){return U(e.getUTCSeconds(),t,2)}function HO(e){var t=e.getUTCDay();return t===0?7:t}function YO(e,t){return U(Bi.count(At(e)-1,e),t,2)}function Kp(e){var t=e.getUTCDay();return t>=4||t===0?Tr(e):Tr.ceil(e)}function GO(e,t){return e=Kp(e),U(Tr.count(At(e),e)+(At(e).getUTCDay()===4),t,2)}function VO(e){return e.getUTCDay()}function XO(e,t){return U(fi.count(At(e)-1,e),t,2)}function ZO(e,t){return U(e.getUTCFullYear()%100,t,2)}function JO(e,t){return e=Kp(e),U(e.getUTCFullYear()%100,t,2)}function QO(e,t){return U(e.getUTCFullYear()%1e4,t,4)}function eA(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Tr(e):Tr.ceil(e),U(e.getUTCFullYear()%1e4,t,4)}function tA(){return"+0000"}function xd(){return"%"}function wd(e){return+e}function Pd(e){return Math.floor(+e/1e3)}var gr,qp,zp;rA({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function rA(e){return gr=rO(e),qp=gr.format,gr.parse,zp=gr.utcFormat,gr.utcParse,gr}function nA(e){return new Date(e)}function iA(e){return e instanceof Date?+e:+new Date(+e)}function ks(e,t,r,n,i,a,o,u,l,c){var s=ps(),f=s.invert,d=s.domain,h=c(".%L"),v=c(":%S"),p=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),b=c("%b %d"),x=c("%B"),P=c("%Y");function w(O){return(l(O)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>H1(e,a/n))},r.copy=function(){return Hp(t).domain(e)},Tt.apply(r,arguments)}function qi(){var e=0,t=.5,r=1,n=1,i,a,o,u,l,c=Te,s,f=!1,d;function h(p){return isNaN(p=+p)?d:(p=.5+((p=+s(p))-a)*(n*pe.chartData,Ms=S([vr],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),Ds=(e,t,r,n)=>n?Ms(e):vr(e);function kr(e){if(Array.isArray(e)&&e.length===2){var[t,r]=e;if(Ye(t)&&Ye(r))return!0}return!1}function Od(e,t,r){return r?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function lA(e,t){if(t&&typeof e!="function"&&Array.isArray(e)&&e.length===2){var[r,n]=e,i,a;if(Ye(r))i=r;else if(typeof r=="function")return;if(Ye(n))a=n;else if(typeof n=="function")return;var o=[i,a];if(kr(o))return o}}function cA(e,t,r){if(!(!r&&t==null)){if(typeof e=="function"&&t!=null)try{var n=e(t,r);if(kr(n))return Od(n,t,r)}catch{}if(Array.isArray(e)&&e.length===2){var[i,a]=e,o,u;if(i==="auto")t!=null&&(o=Math.min(...t));else if(D(i))o=i;else if(typeof i=="function")try{t!=null&&(o=i(t==null?void 0:t[0]))}catch{}else if(typeof i=="string"&&df.test(i)){var l=df.exec(i);if(l==null||t==null)o=void 0;else{var c=+l[1];o=t[0]-c}}else o=t==null?void 0:t[0];if(a==="auto")t!=null&&(u=Math.max(...t));else if(D(a))u=a;else if(typeof a=="function")try{t!=null&&(u=a(t==null?void 0:t[1]))}catch{}else if(typeof a=="string"&&hf.test(a)){var s=hf.exec(a);if(s==null||t==null)u=void 0;else{var f=+s[1];u=t[1]+f}}else u=t==null?void 0:t[1];var d=[o,u];if(kr(d))return t==null?d:Od(d,t,r)}}}var Dr=1e9,fA={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Ns,ne=!0,rt="[DecimalError] ",ar=rt+"Invalid argument: ",Is=rt+"Exponent out of range: ",Ir=Math.floor,Xt=Math.pow,dA=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,ze,me=1e7,te=7,Xp=9007199254740991,di=Ir(Xp/te),M={};M.absoluteValue=M.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};M.comparedTo=M.cmp=function(e){var t,r,n,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};M.decimalPlaces=M.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*te;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};M.dividedBy=M.div=function(e){return xt(this,new this.constructor(e))};M.dividedToIntegerBy=M.idiv=function(e){var t=this,r=t.constructor;return Z(xt(t,new r(e),0,1),r.precision)};M.equals=M.eq=function(e){return!this.cmp(e)};M.exponent=function(){return fe(this)};M.greaterThan=M.gt=function(e){return this.cmp(e)>0};M.greaterThanOrEqualTo=M.gte=function(e){return this.cmp(e)>=0};M.isInteger=M.isint=function(){return this.e>this.d.length-2};M.isNegative=M.isneg=function(){return this.s<0};M.isPositive=M.ispos=function(){return this.s>0};M.isZero=function(){return this.s===0};M.lessThan=M.lt=function(e){return this.cmp(e)<0};M.lessThanOrEqualTo=M.lte=function(e){return this.cmp(e)<1};M.logarithm=M.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(ze))throw Error(rt+"NaN");if(r.s<1)throw Error(rt+(r.s?"NaN":"-Infinity"));return r.eq(ze)?new n(0):(ne=!1,t=xt(un(r,a),un(e,a),a),ne=!0,Z(t,i))};M.minus=M.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Qp(t,e):Zp(t,(e.s=-e.s,e))};M.modulo=M.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(rt+"NaN");return r.s?(ne=!1,t=xt(r,e,0,1).times(e),ne=!0,r.minus(t)):Z(new n(r),i)};M.naturalExponential=M.exp=function(){return Jp(this)};M.naturalLogarithm=M.ln=function(){return un(this)};M.negated=M.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};M.plus=M.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Zp(t,e):Qp(t,(e.s=-e.s,e))};M.precision=M.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(ar+e);if(t=fe(i)+1,n=i.d.length-1,r=n*te+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};M.squareRoot=M.sqrt=function(){var e,t,r,n,i,a,o,u=this,l=u.constructor;if(u.s<1){if(!u.s)return new l(0);throw Error(rt+"NaN")}for(e=fe(u),ne=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=ct(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Ir((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new l(t)):n=new l(i.toString()),r=l.precision,i=o=r+3;;)if(a=n,n=a.plus(xt(u,a,o+2)).times(.5),ct(a.d).slice(0,o)===(t=ct(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(Z(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;o+=4}return ne=!0,Z(n,r)};M.times=M.mul=function(e){var t,r,n,i,a,o,u,l,c,s=this,f=s.constructor,d=s.d,h=(e=new f(e)).d;if(!s.s||!e.s)return new f(0);for(e.s*=s.s,r=s.e+e.e,l=d.length,c=h.length,l=0;){for(t=0,i=l+n;i>n;)u=a[i]+h[n]*d[i-n-1]+t,a[i--]=u%me|0,t=u/me|0;a[i]=(a[i]+t)%me|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,ne?Z(e,f.precision):e};M.toDecimalPlaces=M.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(ht(e,0,Dr),t===void 0?t=n.rounding:ht(t,0,8),Z(r,e+fe(r)+1,t))};M.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=lr(n,!0):(ht(e,0,Dr),t===void 0?t=i.rounding:ht(t,0,8),n=Z(new i(n),e+1,t),r=lr(n,!0,e+1)),r};M.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?lr(i):(ht(e,0,Dr),t===void 0?t=a.rounding:ht(t,0,8),n=Z(new a(i),e+fe(i)+1,t),r=lr(n.abs(),!1,e+fe(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};M.toInteger=M.toint=function(){var e=this,t=e.constructor;return Z(new t(e),fe(e)+1,t.rounding)};M.toNumber=function(){return+this};M.toPower=M.pow=function(e){var t,r,n,i,a,o,u=this,l=u.constructor,c=12,s=+(e=new l(e));if(!e.s)return new l(ze);if(u=new l(u),!u.s){if(e.s<1)throw Error(rt+"Infinity");return u}if(u.eq(ze))return u;if(n=l.precision,e.eq(ze))return Z(u,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=u.s,o){if((r=s<0?-s:s)<=Xp){for(i=new l(ze),t=Math.ceil(n/te+4),ne=!1;r%2&&(i=i.times(u),Sd(i.d,t)),r=Ir(r/2),r!==0;)u=u.times(u),Sd(u.d,t);return ne=!0,e.s<0?new l(ze).div(i):Z(i,n)}}else if(a<0)throw Error(rt+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,ne=!1,i=e.times(un(u,n+c)),ne=!0,i=Jp(i),i.s=a,i};M.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=fe(i),n=lr(i,r<=a.toExpNeg||r>=a.toExpPos)):(ht(e,1,Dr),t===void 0?t=a.rounding:ht(t,0,8),i=Z(new a(i),e,t),r=fe(i),n=lr(i,e<=r||r<=a.toExpNeg,e)),n};M.toSignificantDigits=M.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(ht(e,1,Dr),t===void 0?t=n.rounding:ht(t,0,8)),Z(new n(r),e,t)};M.toString=M.valueOf=M.val=M.toJSON=M[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=fe(e),r=e.constructor;return lr(e,t<=r.toExpNeg||t>=r.toExpPos)};function Zp(e,t){var r,n,i,a,o,u,l,c,s=e.constructor,f=s.precision;if(!e.s||!t.s)return t.s||(t=new s(e)),ne?Z(t,f):t;if(l=e.d,c=t.d,o=e.e,i=t.e,l=l.slice(),a=o-i,a){for(a<0?(n=l,a=-a,u=c.length):(n=c,i=o,u=l.length),o=Math.ceil(f/te),u=o>u?o+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=l.length,a=c.length,u-a<0&&(a=u,n=c,c=l,l=n),r=0;a;)r=(l[--a]=l[a]+c[a]+r)/me|0,l[a]%=me;for(r&&(l.unshift(r),++i),u=l.length;l[--u]==0;)l.pop();return t.d=l,t.e=i,ne?Z(t,f):t}function ht(e,t,r){if(e!==~~e||er)throw Error(ar+e)}function ct(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(u=l=0;ui[u]?1:-1;break}return l}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var u,l,c,s,f,d,h,v,p,m,y,b,x,P,w,O,A,j,T=n.constructor,I=n.s==i.s?1:-1,C=n.d,_=i.d;if(!n.s)return new T(n);if(!i.s)throw Error(rt+"Division by zero");for(l=n.e-i.e,A=_.length,w=C.length,h=new T(I),v=h.d=[],c=0;_[c]==(C[c]||0);)++c;if(_[c]>(C[c]||0)&&--l,a==null?b=a=T.precision:o?b=a+(fe(n)-fe(i))+1:b=a,b<0)return new T(0);if(b=b/te+2|0,c=0,A==1)for(s=0,_=_[0],b++;(c1&&(_=e(_,s),C=e(C,s),A=_.length,w=C.length),P=A,p=C.slice(0,A),m=p.length;m=me/2&&++O;do s=0,u=t(_,p,A,m),u<0?(y=p[0],A!=m&&(y=y*me+(p[1]||0)),s=y/O|0,s>1?(s>=me&&(s=me-1),f=e(_,s),d=f.length,m=p.length,u=t(f,p,d,m),u==1&&(s--,r(f,A16)throw Error(Is+fe(e));if(!e.s)return new s(ze);for(ne=!1,u=f,o=new s(.03125);e.abs().gte(.1);)e=e.times(o),c+=5;for(n=Math.log(Xt(2,c))/Math.LN10*2+5|0,u+=n,r=i=a=new s(ze),s.precision=u;;){if(i=Z(i.times(e),u),r=r.times(++l),o=a.plus(xt(i,r,u)),ct(o.d).slice(0,u)===ct(a.d).slice(0,u)){for(;c--;)a=Z(a.times(a),u);return s.precision=f,t==null?(ne=!0,Z(a,f)):a}a=o}}function fe(e){for(var t=e.e*te,r=e.d[0];r>=10;r/=10)t++;return t}function Oo(e,t,r){if(t>e.LN10.sd())throw ne=!0,r&&(e.precision=r),Error(rt+"LN10 precision limit exceeded");return Z(new e(e.LN10),t)}function Dt(e){for(var t="";e--;)t+="0";return t}function un(e,t){var r,n,i,a,o,u,l,c,s,f=1,d=10,h=e,v=h.d,p=h.constructor,m=p.precision;if(h.s<1)throw Error(rt+(h.s?"NaN":"-Infinity"));if(h.eq(ze))return new p(0);if(t==null?(ne=!1,c=m):c=t,h.eq(10))return t==null&&(ne=!0),Oo(p,c);if(c+=d,p.precision=c,r=ct(v),n=r.charAt(0),a=fe(h),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)h=h.times(e),r=ct(h.d),n=r.charAt(0),f++;a=fe(h),n>1?(h=new p("0."+r),a++):h=new p(n+"."+r.slice(1))}else return l=Oo(p,c+2,m).times(a+""),h=un(new p(n+"."+r.slice(1)),c-d).plus(l),p.precision=m,t==null?(ne=!0,Z(h,m)):h;for(u=o=h=xt(h.minus(ze),h.plus(ze),c),s=Z(h.times(h),c),i=3;;){if(o=Z(o.times(s),c),l=u.plus(xt(o,new p(i),c)),ct(l.d).slice(0,c)===ct(u.d).slice(0,c))return u=u.times(2),a!==0&&(u=u.plus(Oo(p,c+2,m).times(a+""))),u=xt(u,new p(f),c),p.precision=m,t==null?(ne=!0,Z(u,m)):u;u=l,i+=2}}function Ad(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Ir(r/te),e.d=[],n=(r+1)%te,r<0&&(n+=te),ndi||e.e<-di))throw Error(Is+r)}else e.s=0,e.e=0,e.d=[0];return e}function Z(e,t,r){var n,i,a,o,u,l,c,s,f=e.d;for(o=1,a=f[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=te,i=t,c=f[s=0];else{if(s=Math.ceil((n+1)/te),a=f.length,s>=a)return e;for(c=a=f[s],o=1;a>=10;a/=10)o++;n%=te,i=n-te+o}if(r!==void 0&&(a=Xt(10,o-i-1),u=c/a%10|0,l=t<0||f[s+1]!==void 0||c%a,l=r<4?(u||l)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||l||r==6&&(n>0?i>0?c/Xt(10,o-i):0:f[s-1])%10&1||r==(e.s<0?8:7))),t<1||!f[0])return l?(a=fe(e),f.length=1,t=t-a-1,f[0]=Xt(10,(te-t%te)%te),e.e=Ir(-t/te)||0):(f.length=1,f[0]=e.e=e.s=0),e;if(n==0?(f.length=s,a=1,s--):(f.length=s+1,a=Xt(10,te-n),f[s]=i>0?(c/Xt(10,o-i)%Xt(10,i)|0)*a:0),l)for(;;)if(s==0){(f[0]+=a)==me&&(f[0]=1,++e.e);break}else{if(f[s]+=a,f[s]!=me)break;f[s--]=0,a=1}for(n=f.length;f[--n]===0;)f.pop();if(ne&&(e.e>di||e.e<-di))throw Error(Is+fe(e));return e}function Qp(e,t){var r,n,i,a,o,u,l,c,s,f,d=e.constructor,h=d.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new d(e),ne?Z(t,h):t;if(l=e.d,f=t.d,n=t.e,c=e.e,l=l.slice(),o=c-n,o){for(s=o<0,s?(r=l,o=-o,u=f.length):(r=f,n=c,u=l.length),i=Math.max(Math.ceil(h/te),u)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=l.length,u=f.length,s=i0;--i)l[u++]=0;for(i=f.length;i>o;){if(l[--i]0?a=a.charAt(0)+"."+a.slice(1)+Dt(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+Dt(-i-1)+a,r&&(n=r-o)>0&&(a+=Dt(n))):i>=o?(a+=Dt(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+Dt(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=Dt(n))),e.s<0?"-"+a:a}function Sd(e,t){if(e.length>t)return e.length=t,!0}function em(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(ar+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return Ad(o,a.toString())}else if(typeof a!="string")throw Error(ar+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,dA.test(a))Ad(o,a);else throw Error(ar+a)}if(i.prototype=M,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=em,i.config=i.set=hA,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(ar+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(ar+r+": "+n);return this}var Ns=em(fA);ze=new Ns(1);const G=Ns;var vA=e=>e,tm={},rm=e=>e===tm,Ed=e=>function t(){return arguments.length===0||arguments.length===1&&rm(arguments.length<=0?void 0:arguments[0])?t:e(...arguments)},nm=(e,t)=>e===1?t:Ed(function(){for(var r=arguments.length,n=new Array(r),i=0;io!==tm).length;return a>=e?t(...n):nm(e-a,Ed(function(){for(var o=arguments.length,u=new Array(o),l=0;lrm(s)?u.shift():s);return t(...c,...u)}))}),zi=e=>nm(e.length,e),mu=(e,t)=>{for(var r=[],n=e;nArray.isArray(t)?t.map(e):Object.keys(t).map(r=>t[r]).map(e)),mA=function(){for(var t=arguments.length,r=new Array(t),n=0;nl(u),a(...arguments))}},gu=e=>Array.isArray(e)?e.reverse():e.split("").reverse().join(""),im=e=>{var t=null,r=null;return function(){for(var n=arguments.length,i=new Array(n),a=0;a{var l;return o===((l=t)===null||l===void 0?void 0:l[u])})||(t=i,r=e(...i)),r}};function am(e){var t;return e===0?t=1:t=Math.floor(new G(e).abs().log(10).toNumber())+1,t}function om(e,t,r){for(var n=new G(e),i=0,a=[];n.lt(t)&&i<1e5;)a.push(n.toNumber()),n=n.add(r),i++;return a}zi((e,t,r)=>{var n=+e,i=+t;return n+r*(i-n)});zi((e,t,r)=>{var n=t-+e;return n=n||1/0,(r-e)/n});zi((e,t,r)=>{var n=t-+e;return n=n||1/0,Math.max(0,Math.min(1,(r-e)/n))});var um=e=>{var[t,r]=e,[n,i]=[t,r];return t>r&&([n,i]=[r,t]),[n,i]},sm=(e,t,r)=>{if(e.lte(0))return new G(0);var n=am(e.toNumber()),i=new G(10).pow(n),a=e.div(i),o=n!==1?.05:.1,u=new G(Math.ceil(a.div(o).toNumber())).add(r).mul(o),l=u.mul(i);return t?new G(l.toNumber()):new G(Math.ceil(l.toNumber()))},gA=(e,t,r)=>{var n=new G(1),i=new G(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new G(10).pow(am(e)-1),i=new G(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new G(Math.floor(e)))}else e===0?i=new G(Math.floor((t-1)/2)):r||(i=new G(Math.floor(e)));var o=Math.floor((t-1)/2),u=mA(pA(l=>i.add(new G(l-o).mul(n)).toNumber()),mu);return u(0,t)},lm=function(t,r,n,i){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((r-t)/(n-1)))return{step:new G(0),tickMin:new G(0),tickMax:new G(0)};var o=sm(new G(r).sub(t).div(n-1),i,a),u;t<=0&&r>=0?u=new G(0):(u=new G(t).add(r).div(2),u=u.sub(new G(u).mod(o)));var l=Math.ceil(u.sub(t).div(o).toNumber()),c=Math.ceil(new G(r).sub(u).div(o).toNumber()),s=l+c+1;return s>n?lm(t,r,n,i,a+1):(s0?c+(n-s):c,l=r>0?l:l+(n-s)),{step:o,tickMin:u.sub(new G(l).mul(o)),tickMax:u.add(new G(c).mul(o))})};function yA(e){var[t,r]=e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Math.max(n,2),[o,u]=um([t,r]);if(o===-1/0||u===1/0){var l=u===1/0?[o,...mu(0,n-1).map(()=>1/0)]:[...mu(0,n-1).map(()=>-1/0),u];return t>r?gu(l):l}if(o===u)return gA(o,n,i);var{step:c,tickMin:s,tickMax:f}=lm(o,u,a,i,0),d=om(s,f.add(new G(.1).mul(c)),c);return t>r?gu(d):d}function bA(e,t){var[r,n]=e,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,[a,o]=um([r,n]);if(a===-1/0||o===1/0)return[r,n];if(a===o)return[a];var u=Math.max(t,2),l=sm(new G(o).sub(a).div(u-1),i,0),c=[...om(new G(a),new G(o),l),o];return i===!1&&(c=c.map(s=>Math.round(s))),r>n?gu(c):c}var xA=im(yA),wA=im(bA),cm=e=>e.rootProps.maxBarSize,PA=e=>e.rootProps.barGap,fm=e=>e.rootProps.barCategoryGap,OA=e=>e.rootProps.barSize,yn=e=>e.rootProps.stackOffset,$s=e=>e.options.chartName,Rs=e=>e.rootProps.syncId,dm=e=>e.rootProps.syncMethod,Ls=e=>e.options.eventEmitter,pt={allowDuplicatedCategory:!0,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"category"},Be={allowDataOverflow:!1,allowDuplicatedCategory:!0,radiusAxisId:0,scale:"auto",tick:!0,tickCount:5,type:"number"},Fi=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t},AA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!1,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:pt.reversed,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:pt.type,unit:void 0},SA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:Be.type,unit:void 0},EA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:pt.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:"number",unit:void 0},jA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:"category",unit:void 0},Bs=(e,t)=>e.polarAxis.angleAxis[t]!=null?e.polarAxis.angleAxis[t]:e.layout.layoutType==="radial"?EA:AA,Ks=(e,t)=>e.polarAxis.radiusAxis[t]!=null?e.polarAxis.radiusAxis[t]:e.layout.layoutType==="radial"?jA:SA,Wi=e=>e.polarOptions,qs=S([Et,jt,ve],Yv),hm=S([Wi,qs],(e,t)=>{if(e!=null)return ke(e.innerRadius,t,0)}),vm=S([Wi,qs],(e,t)=>{if(e!=null)return ke(e.outerRadius,t,t*.8)}),TA=e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:r}=e;return[t,r]},pm=S([Wi],TA);S([Bs,pm],Fi);var mm=S([qs,hm,vm],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});S([Ks,mm],Fi);var kA=S([Y,Wi,hm,vm,Et,jt],(e,t,r,n,i,a)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var{cx:o,cy:u,startAngle:l,endAngle:c}=t;return{cx:ke(o,i,i/2),cy:ke(u,a,a/2),innerRadius:r,outerRadius:n,startAngle:l,endAngle:c,clockWise:!1}}}),ue=(e,t)=>t,bn=(e,t,r)=>r;function jd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function hi(e){for(var t=1;t{var r=e.cartesianAxis.xAxis[t];return r??Re},Le={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:yu,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,width:Mi},Wt=(e,t)=>{var r=e.cartesianAxis.yAxis[t];return r??Le},DA={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},zs=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??DA},se=(e,t,r)=>{switch(t){case"xAxis":return kt(e,r);case"yAxis":return Wt(e,r);case"zAxis":return zs(e,r);case"angleAxis":return Bs(e,r);case"radiusAxis":return Ks(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},IA=(e,t,r)=>{switch(t){case"xAxis":return kt(e,r);case"yAxis":return Wt(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},xn=(e,t,r)=>{switch(t){case"xAxis":return kt(e,r);case"yAxis":return Wt(e,r);case"angleAxis":return Bs(e,r);case"radiusAxis":return Ks(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},gm=e=>e.graphicalItems.countOfBars>0;function Fs(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var Ui=e=>e.graphicalItems.cartesianItems,NA=S([ue,bn],Fs),Ws=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),wn=S([Ui,se,NA],Ws),ym=e=>e.filter(t=>t.stackId===void 0),$A=S([wn],ym),Us=e=>e.map(t=>t.data).filter(Boolean).flat(1),RA=S([wn],Us),Hs=(e,t)=>{var{chartData:r=[],dataStartIndex:n,dataEndIndex:i}=t;return e.length>0?e:r.slice(n,i+1)},Hi=S([RA,Ds],Hs),Ys=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:re(i,n)}))):e.map(n=>({value:n})),Yi=S([Hi,se,wn],Ys);function bm(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function pr(e){return e.filter(t=>dt(t)||t instanceof Date).map(Number).filter(t=>We(t)===!1)}function LA(e,t,r){return!r||typeof t!="number"||We(t)?[]:r.length?pr(r.flatMap(n=>{var i=re(e,n.dataKey),a,o;if(Array.isArray(i)?[a,o]=i:a=o=i,!(!Ye(a)||!Ye(o)))return[t-a,t+o]})):[]}var xm=(e,t,r)=>{var n={},i=t.reduce((a,o)=>(o.stackId==null||(a[o.stackId]==null&&(a[o.stackId]=[]),a[o.stackId].push(o)),a),n);return Object.fromEntries(Object.entries(i).map(a=>{var[o,u]=a,l=u.map(c=>c.dataKey);return[o,{stackedData:Jx(e,l,r),graphicalItems:u}]}))},bu=S([Hi,wn,yn],xm),wm=(e,t,r)=>{var{dataStartIndex:n,dataEndIndex:i}=t;if(r!=="zAxis"){var a=rw(e,n,i);if(!(a!=null&&a[0]===0&&a[1]===0))return a}},BA=S([bu,vr,ue],wm),Pm=(e,t,r,n)=>r.length>0?e.flatMap(i=>r.flatMap(a=>{var o,u,l=(o=a.errorBars)===null||o===void 0?void 0:o.filter(s=>bm(n,s)),c=re(i,(u=t.dataKey)!==null&&u!==void 0?u:a.dataKey);return{value:c,errorDomain:LA(i,c,l)}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(i=>({value:re(i,t.dataKey),errorDomain:[]})):e.map(i=>({value:i,errorDomain:[]})),KA=S(Hi,se,$A,ue,Pm);function qA(e){var{value:t}=e;if(dt(t)||t instanceof Date)return t}var zA=e=>{var t=e.flatMap(n=>[n.value,n.errorDomain]).flat(1),r=pr(t);if(r.length!==0)return[Math.min(...r),Math.max(...r)]},FA=(e,t,r)=>{var n=e.map(qA).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&Wh(n))?pp(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},Gs=e=>{var t;if(e==null||!("domain"in e))return yu;if(e.domain!=null)return e.domain;if(e.ticks!=null){if(e.type==="number"){var r=pr(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:yu},Vs=function(){for(var t=arguments.length,r=new Array(t),n=0;ne.referenceElements.dots,Nr=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),WA=S([Om,ue,bn],Nr),Am=e=>e.referenceElements.areas,UA=S([Am,ue,bn],Nr),Sm=e=>e.referenceElements.lines,HA=S([Sm,ue,bn],Nr),Em=(e,t)=>{var r=pr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},YA=S(WA,ue,Em),jm=(e,t)=>{var r=pr(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},GA=S([UA,ue],jm),Tm=(e,t)=>{var r=pr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},VA=S(HA,ue,Tm),XA=S(YA,VA,GA,(e,t,r)=>Vs(e,r,t)),km=S([se],Gs),Xs=(e,t,r,n,i)=>{var a=lA(t,e.allowDataOverflow);return a??cA(t,Vs(r,i,zA(n)),e.allowDataOverflow)},ZA=S([se,km,BA,KA,XA],Xs),JA=[0,1],Zs=(e,t,r,n,i,a,o)=>{if(!(e==null||r==null||r.length===0)){var{dataKey:u,type:l}=e,c=qt(t,a);return c&&u==null?pp(0,r.length):l==="category"?FA(n,e,c):i==="expand"?JA:o}},Js=S([se,Y,Hi,Yi,yn,ue,ZA],Zs),Cm=(e,t,r,n,i)=>{if(e!=null){var{scale:a,type:o}=e;if(a==="auto")return t==="radial"&&i==="radiusAxis"?"band":t==="radial"&&i==="angleAxis"?"linear":o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?"point":o==="category"?"band":"linear";if(typeof a=="string"){var u="scale".concat(fn(a));return u in Vr?u:"point"}}},$r=S([se,Y,gm,$s,ue],Cm);function QA(e){if(e!=null){if(e in Vr)return Vr[e]();var t="scale".concat(fn(e));if(t in Vr)return Vr[t]()}}function Qs(e,t,r,n){if(!(r==null||n==null)){if(typeof e.scale=="function")return e.scale.copy().domain(r).range(n);var i=QA(t);if(i!=null){var a=i.domain(r).range(n);return Yx(a),a}}}var el=(e,t,r)=>{var n=Gs(t);if(!(r!=="auto"&&r!=="linear")){if(t!=null&&t.tickCount&&Array.isArray(n)&&(n[0]==="auto"||n[1]==="auto")&&kr(e))return xA(e,t.tickCount,t.allowDecimals);if(t!=null&&t.tickCount&&t.type==="number"&&kr(e))return wA(e,t.tickCount,t.allowDecimals)}},tl=S([Js,xn,$r],el),rl=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&kr(t)&&Array.isArray(r)&&r.length>0){var i=t[0],a=r[0],o=t[1],u=r[r.length-1];return[Math.min(i,a),Math.max(o,u)]}return t},eS=S([se,Js,tl,ue],rl),tS=S(Yi,se,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(pr(e.map(u=>u.value))).sort((u,l)=>u-l);if(n.length<2)return 1/0;var i=n[n.length-1]-n[0];if(i===0)return 1/0;for(var a=0;an,(e,t,r,n,i)=>{if(!Ye(e))return 0;var a=t==="vertical"?n.height:n.width;if(i==="gap")return e*a/2;if(i==="no-gap"){var o=ke(r,e*a),u=e*a/2;return u-o-(u-o)/a*o}return 0}),rS=(e,t)=>{var r=kt(e,t);return r==null||typeof r.padding!="string"?0:_m(e,"xAxis",t,r.padding)},nS=(e,t)=>{var r=Wt(e,t);return r==null||typeof r.padding!="string"?0:_m(e,"yAxis",t,r.padding)},iS=S(kt,rS,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var{padding:i}=e;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),aS=S(Wt,nS,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var{padding:i}=e;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),oS=S([ve,iS,Ii,Di,(e,t,r)=>r],(e,t,r,n,i)=>{var{padding:a}=n;return i?[a.left,r.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),uS=S([ve,Y,aS,Ii,Di,(e,t,r)=>r],(e,t,r,n,i,a)=>{var{padding:o}=i;return a?[n.height-o.bottom,o.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),Pn=(e,t,r,n)=>{var i;switch(t){case"xAxis":return oS(e,r,n);case"yAxis":return uS(e,r,n);case"zAxis":return(i=zs(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return pm(e);case"radiusAxis":return mm(e,r);default:return}},Mm=S([se,Pn],Fi),Rr=S([se,$r,eS,Mm],Qs);S(wn,ue,(e,t)=>e.flatMap(r=>{var n;return(n=r.errorBars)!==null&&n!==void 0?n:[]}).filter(r=>bm(t,r)));function Dm(e,t){return e.idt.id?1:0}var Gi=(e,t)=>t,Vi=(e,t,r)=>r,sS=S(is,Gi,Vi,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(Dm)),lS=S(as,Gi,Vi,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(Dm)),Im=(e,t)=>({width:e.width,height:t.height}),cS=(e,t)=>{var r=typeof t.width=="number"?t.width:Mi;return{width:r,height:e.height}},Nm=S(ve,kt,Im),fS=(e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}},dS=(e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}},hS=S(jt,ve,sS,Gi,Vi,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=Im(t,u);o==null&&(o=fS(t,n,e));var c=n==="top"&&!i||n==="bottom"&&i;a[u.id]=o-Number(c)*l.height,o+=(c?-1:1)*l.height}),a}),vS=S(Et,ve,lS,Gi,Vi,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=cS(t,u);o==null&&(o=dS(t,n,e));var c=n==="left"&&!i||n==="right"&&i;a[u.id]=o-Number(c)*l.width,o+=(c?-1:1)*l.width}),a}),pS=(e,t)=>{var r=ve(e),n=kt(e,t);if(n!=null){var i=hS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:r.left,y:0}:{x:r.left,y:a}}},mS=(e,t)=>{var r=ve(e),n=Wt(e,t);if(n!=null){var i=vS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:0,y:r.top}:{x:a,y:r.top}}},$m=S(ve,Wt,(e,t)=>{var r=typeof t.width=="number"?t.width:Mi;return{width:r,height:e.height}}),Td=(e,t,r)=>{switch(t){case"xAxis":return Nm(e,r).width;case"yAxis":return $m(e,r).height;default:return}},Rm=(e,t,r,n)=>{if(r!=null){var{allowDuplicatedCategory:i,type:a,dataKey:o}=r,u=qt(e,n),l=t.map(c=>c.value);if(o&&u&&a==="category"&&i&&Wh(l))return l}},nl=S([Y,Yi,se,ue],Rm),Lm=(e,t,r,n)=>{if(!(r==null||r.dataKey==null)){var{type:i,scale:a}=r,o=qt(e,n);if(o&&(i==="number"||a!=="auto"))return t.map(u=>u.value)}},il=S([Y,Yi,xn,ue],Lm),kd=S([Y,IA,$r,Rr,nl,il,Pn,tl,ue],(e,t,r,n,i,a,o,u,l)=>{if(t==null)return null;var c=qt(e,l);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:l,categoricalDomain:a,duplicateDomain:i,isCategorical:c,niceTicks:u,range:o,realScaleType:r,scale:n}}),gS=(e,t,r,n,i,a,o,u,l)=>{if(!(t==null||n==null)){var c=qt(e,l),{type:s,ticks:f,tickCount:d}=t,h=r==="scaleBand"&&typeof n.bandwidth=="function"?n.bandwidth()/2:2,v=s==="category"&&n.bandwidth?n.bandwidth()/h:0;v=l==="angleAxis"&&a!=null&&a.length>=2?ge(a[0]-a[1])*2*v:v;var p=f||i;if(p){var m=p.map((y,b)=>{var x=o?o.indexOf(y):y;return{index:b,coordinate:n(x)+v,value:y,offset:v}});return m.filter(y=>!We(y.coordinate))}return c&&u?u.map((y,b)=>({coordinate:n(y)+v,value:y,index:b,offset:v})):n.ticks?n.ticks(d).map(y=>({coordinate:n(y)+v,value:y,offset:v})):n.domain().map((y,b)=>({coordinate:n(y)+v,value:o?o[y]:y,index:b,offset:v}))}},Bm=S([Y,xn,$r,Rr,tl,Pn,nl,il,ue],gS),yS=(e,t,r,n,i,a,o)=>{if(!(t==null||r==null||n==null||n[0]===n[1])){var u=qt(e,o),{tickCount:l}=t,c=0;return c=o==="angleAxis"&&(n==null?void 0:n.length)>=2?ge(n[0]-n[1])*2*c:c,u&&a?a.map((s,f)=>({coordinate:r(s)+c,value:s,index:f,offset:c})):r.ticks?r.ticks(l).map(s=>({coordinate:r(s)+c,value:s,offset:c})):r.domain().map((s,f)=>({coordinate:r(s)+c,value:i?i[s]:s,index:f,offset:c}))}},Bt=S([Y,xn,Rr,Pn,nl,il,ue],yS),vt=S(se,Rr,(e,t)=>{if(!(e==null||t==null))return hi(hi({},e),{},{scale:t})}),bS=S([se,$r,Js,Mm],Qs);S((e,t,r)=>zs(e,r),bS,(e,t)=>{if(!(e==null||t==null))return hi(hi({},e),{},{scale:t})});var xS=S([Y,is,as],(e,t,r)=>{switch(e){case"horizontal":return t.some(n=>n.reversed)?"right-to-left":"left-to-right";case"vertical":return r.some(n=>n.reversed)?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}}),Km=e=>e.options.defaultTooltipEventType,qm=e=>e.options.validateTooltipEventTypes;function zm(e,t,r){if(e==null)return t;var n=e?"axis":"item";return r==null?t:r.includes(n)?n:t}function al(e,t){var r=Km(e),n=qm(e);return zm(t,r,n)}function wS(e){return $(t=>al(t,e))}var Fm=(e,t)=>{var r,n=Number(t);if(!(We(n)||t==null))return n>=0?e==null||(r=e[n])===null||r===void 0?void 0:r.value:void 0},PS=e=>e.tooltip.settings,It={active:!1,index:null,dataKey:void 0,coordinate:void 0},OS={itemInteraction:{click:It,hover:It},axisInteraction:{click:It,hover:It},keyboardInteraction:It,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},Wm=nt({name:"tooltip",initialState:OS,reducers:{addTooltipEntrySettings(e,t){e.tooltipItemPayloads.push(t.payload)},removeTooltipEntrySettings(e,t){var r=bt(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate,e.keyboardInteraction.dataKey=t.payload.activeDataKey}}}),{addTooltipEntrySettings:AS,removeTooltipEntrySettings:SS,setTooltipSettingsState:ES,setActiveMouseOverItemIndex:Um,mouseLeaveItem:jS,mouseLeaveChart:Hm,setActiveClickItemIndex:TS,setMouseOverAxisIndex:Ym,setMouseClickAxisIndex:kS,setSyncInteraction:xu,setKeyboardInteraction:wu}=Wm.actions,CS=Wm.reducer;function Cd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Rn(e){for(var t=1;t{if(t==null)return It;var i=IS(e,t,r);if(i==null)return It;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var a=e.settings.active===!0;if(NS(i)){if(a)return Rn(Rn({},i),{},{active:!0})}else if(n!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:n};return Rn(Rn({},It),{},{coordinate:i.coordinate})},ol=(e,t)=>{var r=e==null?void 0:e.index;if(r==null)return null;var n=Number(r);if(!Ye(n))return r;var i=0,a=1/0;return t.length>0&&(a=t.length-1),String(Math.max(i,Math.min(n,a)))},Vm=(e,t,r,n,i,a,o,u)=>{if(!(a==null||u==null)){var l=o[0],c=l==null?void 0:u(l.positions,a);if(c!=null)return c;var s=i==null?void 0:i[Number(a)];if(s)switch(r){case"horizontal":return{x:s.coordinate,y:(n.top+t)/2};default:return{x:(n.left+e)/2,y:s.coordinate}}}},Xm=(e,t,r,n)=>{if(t==="axis")return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i;return r==="hover"?i=e.itemInteraction.hover.dataKey:i=e.itemInteraction.click.dataKey,i==null&&n!=null?[e.tooltipItemPayloads[0]]:e.tooltipItemPayloads.filter(a=>{var o;return((o=a.settings)===null||o===void 0?void 0:o.dataKey)===i})},On=e=>e.options.tooltipPayloadSearcher,Lr=e=>e.tooltip;function _d(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Md(e){for(var t=1;t{if(!(t==null||a==null)){var{chartData:u,computedData:l,dataStartIndex:c,dataEndIndex:s}=r,f=[];return e.reduce((d,h)=>{var v,{dataDefinedOnItem:p,settings:m}=h,y=KS(p,u),b=BS(y,c,s),x=(v=m==null?void 0:m.dataKey)!==null&&v!==void 0?v:n==null?void 0:n.dataKey,P=m==null?void 0:m.nameKey,w;if(n!=null&&n.dataKey&&Array.isArray(b)&&!Array.isArray(b[0])&&o==="axis"?w=Uh(b,n.dataKey,i):w=a(b,t,l,P),Array.isArray(w))w.forEach(A=>{var j=Md(Md({},m),{},{name:A.name,unit:A.unit,color:void 0,fill:void 0});d.push(vf({tooltipEntrySettings:j,dataKey:A.dataKey,payload:A.payload,value:re(A.payload,A.dataKey),name:A.name}))});else{var O;d.push(vf({tooltipEntrySettings:m,dataKey:x,payload:w,value:re(w,x),name:(O=re(w,P))!==null&&O!==void 0?O:m==null?void 0:m.name}))}return d},f)}},xe=e=>{var t=Y(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},Br=e=>e.tooltip.settings.axisId,Ae=e=>{var t=xe(e),r=Br(e);return xn(e,t,r)},ul=S([Ae,Y,gm,$s,xe],Cm),qS=S([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),zS=S([xe,Br],Fs),Xi=S([qS,Ae,zS],Ws),FS=S([Xi],Us),mr=S([FS,vr],Hs),sl=S([mr,Ae,Xi],Ys),WS=S([Ae],Gs),US=S([mr,Xi,yn],xm),HS=S([US,vr,xe],wm),YS=S([Xi],ym),GS=S([mr,Ae,YS,xe],Pm),VS=S([Om,xe,Br],Nr),XS=S([VS,xe],Em),ZS=S([Am,xe,Br],Nr),JS=S([ZS,xe],jm),QS=S([Sm,xe,Br],Nr),eE=S([QS,xe],Tm),tE=S([XS,eE,JS],Vs),rE=S([Ae,WS,HS,GS,tE],Xs),Jm=S([Ae,Y,mr,sl,yn,xe,rE],Zs),nE=S([Jm,Ae,ul],el),iE=S([Ae,Jm,nE,xe],rl),Qm=e=>{var t=xe(e),r=Br(e),n=!1;return Pn(e,t,r,n)},eg=S([Ae,Qm],Fi),tg=S([Ae,ul,iE,eg],Qs),aE=S([Y,sl,Ae,xe],Rm),oE=S([Y,sl,Ae,xe],Lm),uE=(e,t,r,n,i,a,o,u)=>{if(t){var{type:l}=t,c=qt(e,u);if(n){var s=r==="scaleBand"&&n.bandwidth?n.bandwidth()/2:2,f=l==="category"&&n.bandwidth?n.bandwidth()/s:0;return f=u==="angleAxis"&&i!=null&&(i==null?void 0:i.length)>=2?ge(i[0]-i[1])*2*f:f,c&&o?o.map((d,h)=>({coordinate:n(d)+f,value:d,index:h,offset:f})):n.domain().map((d,h)=>({coordinate:n(d)+f,value:a?a[d]:d,index:h,offset:f}))}}},Ct=S([Y,Ae,ul,tg,Qm,aE,oE,xe],uE),ll=S([Km,qm,PS],(e,t,r)=>zm(r.shared,e,t)),rg=e=>e.tooltip.settings.trigger,cl=e=>e.tooltip.settings.defaultIndex,Zi=S([Lr,ll,rg,cl],Gm),Kt=S([Zi,mr],ol),ng=S([Ct,Kt],Fm),ig=S([Zi],e=>{if(e)return e.dataKey}),ag=S([Lr,ll,rg,cl],Xm),sE=S([Et,jt,Y,ve,Ct,cl,ag,On],Vm),lE=S([Zi,sE],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),cE=S([Zi],e=>e.active),fE=S([ag,Kt,vr,Ae,ng,On,ll],Zm),dE=S([fE],e=>{if(e!=null){var t=e.map(r=>r.payload).filter(r=>r!=null);return Array.from(new Set(t))}});function Dd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Id(e){for(var t=1;t$(Ae),gE=()=>{var e=mE(),t=$(Ct),r=$(tg);return en(Id(Id({},e),{},{scale:r}),t)},yE=()=>$($s),fl=(e,t)=>t,og=(e,t,r)=>r,dl=(e,t,r,n)=>n,bE=S(Ct,e=>Si(e,t=>t.coordinate)),hl=S([Lr,fl,og,dl],Gm),ug=S([hl,mr],ol),xE=(e,t,r)=>{if(t!=null){var n=Lr(e);return t==="axis"?r==="hover"?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:r==="hover"?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},sg=S([Lr,fl,og,dl],Xm),vi=S([Et,jt,Y,ve,Ct,dl,sg,On],Vm),wE=S([hl,vi],(e,t)=>{var r;return(r=e.coordinate)!==null&&r!==void 0?r:t}),lg=S(Ct,ug,Fm),PE=S([sg,ug,vr,Ae,lg,On,fl],Zm),OE=S([hl],e=>({isActive:e.active,activeIndex:e.index})),AE=(e,t,r,n,i,a,o,u)=>{if(!(!e||!t||!n||!i||!a)){var l=nw(e.chartX,e.chartY,t,r,u);if(l){var c=aw(l,t),s=Ux(c,o,a,n,i),f=iw(t,a,s,l);return{activeIndex:String(s),activeCoordinate:f}}}};function Pu(){return Pu=Object.assign?Object.assign.bind():function(e){for(var t=1;tg.useContext(cg),Ao={exports:{}},$d;function _E(){return $d||($d=1,function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(r=!1));function i(l,c,s){this.fn=l,this.context=c,this.once=s||!1}function a(l,c,s,f,d){if(typeof s!="function")throw new TypeError("The listener must be a function");var h=new i(s,f||l,d),v=r?r+c:c;return l._events[v]?l._events[v].fn?l._events[v]=[l._events[v],h]:l._events[v].push(h):(l._events[v]=h,l._eventsCount++),l}function o(l,c){--l._eventsCount===0?l._events=new n:delete l._events[c]}function u(){this._events=new n,this._eventsCount=0}u.prototype.eventNames=function(){var c=[],s,f;if(this._eventsCount===0)return c;for(f in s=this._events)t.call(s,f)&&c.push(r?f.slice(1):f);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(s)):c},u.prototype.listeners=function(c){var s=r?r+c:c,f=this._events[s];if(!f)return[];if(f.fn)return[f.fn];for(var d=0,h=f.length,v=new Array(h);d{e.eventEmitter==null&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),NE=fg.reducer,{createEventEmitter:$E}=fg.actions;function RE(e){return e.tooltip.syncInteraction}var LE={chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},dg=nt({name:"chartData",initialState:LE,reducers:{setChartData(e,t){if(e.chartData=t.payload,t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var{startIndex:r,endIndex:n}=t.payload;r!=null&&(e.dataStartIndex=r),n!=null&&(e.dataEndIndex=n)}}}),{setChartData:Ld,setDataStartEndIndexes:BE,setComputedData:$2}=dg.actions,KE=dg.reducer,hg=()=>{};function qE(){var e=$(Rs),t=$(Ls),r=ae(),n=$(dm),i=$(Ct),a=Ni(),o=os(),u=$(l=>l.rootProps.className);g.useEffect(()=>{if(e==null)return hg;var l=(c,s,f)=>{if(t!==f&&e===c){if(n==="index"){r(s);return}if(i!=null){var d;if(typeof n=="function"){var h={activeTooltipIndex:s.payload.index==null?void 0:Number(s.payload.index),isTooltipActive:s.payload.active,activeIndex:s.payload.index==null?void 0:Number(s.payload.index),activeLabel:s.payload.label,activeDataKey:s.payload.dataKey,activeCoordinate:s.payload.coordinate},v=n(i,h);d=i[v]}else n==="value"&&(d=i.find(O=>String(O.value)===s.payload.label));var{coordinate:p}=s.payload;if(d==null||s.payload.active===!1||p==null||o==null){r(xu({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0}));return}var{x:m,y}=p,b=Math.min(m,o.x+o.width),x=Math.min(y,o.y+o.height),P={x:a==="horizontal"?d.coordinate:b,y:a==="horizontal"?x:d.coordinate},w=xu({active:s.payload.active,coordinate:P,dataKey:s.payload.dataKey,index:String(d.index),label:s.payload.label});r(w)}}};return sn.on(Ou,l),()=>{sn.off(Ou,l)}},[u,r,t,e,n,i,a,o])}function zE(){var e=$(Rs),t=$(Ls),r=ae();g.useEffect(()=>{if(e==null)return hg;var n=(i,a,o)=>{t!==o&&e===i&&r(BE(a))};return sn.on(Rd,n),()=>{sn.off(Rd,n)}},[r,t,e])}function FE(){var e=ae();g.useEffect(()=>{e($E())},[e]),qE(),zE()}function WE(e,t,r,n,i,a){var o=$(d=>xE(d,e,t)),u=$(Ls),l=$(Rs),c=$(dm),s=$(RE),f=s==null?void 0:s.active;g.useEffect(()=>{if(!f&&l!=null&&u!=null){var d=xu({active:a,coordinate:r,dataKey:o,index:i,label:typeof n=="number"?String(n):n});sn.emit(Ou,l,d,u)}},[f,r,o,i,n,u,l,c,a])}function Bd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Kd(e){for(var t=1;t{w(ES({shared:m,trigger:y,axisId:P,active:r,defaultIndex:O}))},[w,m,y,P,r,O]);var A=os(),j=up(),T=wS(m),{activeIndex:I,isActive:C}=$(Ve=>OE(Ve,T,y,O)),_=$(Ve=>PE(Ve,T,y,O)),R=$(Ve=>lg(Ve,T,y,O)),B=$(Ve=>wE(Ve,T,y,O)),F=_,V=CE(),K=r??C,[de,oe]=Nb([F,K]),Ie=T==="axis"?R:void 0;WE(T,y,B,Ie,I,K);var Ge=x??V;if(Ge==null)return null;var L=F??qd;K||(L=qd),u&&L.length&&(L=ub(F.filter(Ve=>Ve.value!=null&&(Ve.hide!==!0||t.includeHidden)),s,GE));var we=L.length>0,Ht=g.createElement(jw,{allowEscapeViewBox:n,animationDuration:i,animationEasing:a,isAnimationActive:l,active:K,coordinate:B,hasPayload:we,offset:c,position:f,reverseDirection:d,useTranslate3d:h,viewBox:A,wrapperStyle:v,lastBoundingBox:de,innerRef:oe,hasPortalFromProps:!!x},VE(o,Kd(Kd({},t),{},{payload:L,label:Ie,active:K,coordinate:B,accessibilityLayer:j})));return g.createElement(g.Fragment,null,jy.createPortal(Ht,Ge),K&&g.createElement(kE,{cursor:p,tooltipEventType:T,coordinate:B,payload:F,index:I}))}var So={},Eo={},zd;function ZE(){return zd||(zd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=0,i={}){typeof i!="object"&&(i={});let a=null,o=null,u=null,l=0,c=null,s;const{leading:f=!1,trailing:d=!0,maxWait:h}=i,v="maxWait"in i,p=v?Math.max(Number(h)||0,n):0,m=A=>(a!==null&&(s=r.apply(o,a)),a=o=null,l=A,s),y=A=>(l=A,c=setTimeout(w,n),f&&a!==null?m(A):s),b=A=>(c=null,d&&a!==null?m(A):s),x=A=>{if(u===null)return!0;const j=A-u,T=j>=n||j<0,I=v&&A-l>=p;return T||I},P=A=>{const j=u===null?0:A-u,T=n-j,I=p-(A-l);return v?Math.min(T,I):T},w=()=>{const A=Date.now();if(x(A))return b(A);c=setTimeout(w,P(A))},O=function(...A){const j=Date.now(),T=x(j);if(a=A,o=this,u=j,T){if(c===null)return y(j);if(v)return clearTimeout(c),c=setTimeout(w,n),m(j)}return c===null&&(c=setTimeout(w,n)),s};return O.cancel=()=>{c!==null&&clearTimeout(c),l=0,u=a=o=c=null},O.flush=()=>c===null?s:b(Date.now()),O}e.debounce=t}(Eo)),Eo}var Fd;function JE(){return Fd||(Fd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=ZE();function r(n,i=0,a={}){const{leading:o=!0,trailing:u=!0}=a;return t.debounce(n,i,{leading:o,maxWait:i,trailing:u})}e.throttle=r}(So)),So}var jo,Wd;function QE(){return Wd||(Wd=1,jo=JE().throttle),jo}var ej=QE();const tj=St(ej);var Xr=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;a{var{aspect:r,initialDimension:n={width:-1,height:-1},width:i="100%",height:a="100%",minWidth:o=0,minHeight:u,maxHeight:l,children:c,debounce:s=0,id:f,className:d,onResize:h,style:v={}}=e,p=g.useRef(null),m=g.useRef();m.current=h,g.useImperativeHandle(t,()=>p.current);var[y,b]=g.useState({containerWidth:n.width,containerHeight:n.height}),x=g.useCallback((w,O)=>{b(A=>{var j=Math.round(w),T=Math.round(O);return A.containerWidth===j&&A.containerHeight===T?A:{containerWidth:j,containerHeight:T}})},[]);g.useEffect(()=>{var w=T=>{var I,{width:C,height:_}=T[0].contentRect;x(C,_),(I=m.current)===null||I===void 0||I.call(m,C,_)};s>0&&(w=tj(w,s,{trailing:!0,leading:!1}));var O=new ResizeObserver(w),{width:A,height:j}=p.current.getBoundingClientRect();return x(A,j),O.observe(p.current),()=>{O.disconnect()}},[x,s]);var P=g.useMemo(()=>{var{containerWidth:w,containerHeight:O}=y;if(w<0||O<0)return null;Xr(Zt(i)||Zt(a),`The width(%s) and height(%s) are both fixed numbers, - maybe you don't need to use a ResponsiveContainer.`,i,a),Xr(!r||r>0,"The aspect(%s) must be greater than zero.",r);var A=Zt(i)?w:i,j=Zt(a)?O:a;return r&&r>0&&(A?j=A/r:j&&(A=j*r),l&&j>l&&(j=l)),Xr(A>0||j>0,`The width(%s) and height(%s) of chart should be greater than 0, - please check the style of container, or the props width(%s) and height(%s), - or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the - height and width.`,A,j,i,a,o,u,r),g.Children.map(c,T=>g.cloneElement(T,{width:A,height:j,style:To({width:A,height:j},T.props.style)}))},[r,c,a,l,u,o,y,i]);return g.createElement("div",{id:f?"".concat(f):void 0,className:H("recharts-responsive-container",d),style:To(To({},v),{},{width:i,height:a,minWidth:o,minHeight:u,maxHeight:l}),ref:p},g.createElement("div",{style:{width:0,height:0,overflow:"visible"}},P))}),An=e=>null;An.displayName="Cell";function Hd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Au(e){for(var t=1;t{t[r]||delete t[r]}),t}var Zr=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||fr.isSsr)return{width:0,height:0};var n=cj(r),i=JSON.stringify({text:t,copyStyle:n});if(yr.widthCache[i])return yr.widthCache[i];try{var a=document.getElementById(Yd);a||(a=document.createElement("span"),a.setAttribute("id",Yd),a.setAttribute("aria-hidden","true"),document.body.appendChild(a));var o=Au(Au({},lj),n);Object.assign(a.style,o),a.textContent="".concat(t);var u=a.getBoundingClientRect(),l={width:u.width,height:u.height};return yr.widthCache[i]=l,++yr.cacheCount>sj&&(yr.cacheCount=0,yr.widthCache={}),l}catch{return{width:0,height:0}}},Gd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,Vd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,fj=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,dj=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,vg={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},hj=Object.keys(vg),br="NaN";function vj(e,t){return e*vg[t]}class Me{static parse(t){var r,[,n,i]=(r=dj.exec(t))!==null&&r!==void 0?r:[];return new Me(parseFloat(n),i??"")}constructor(t,r){this.num=t,this.unit=r,this.num=t,this.unit=r,We(t)&&(this.unit=""),r!==""&&!fj.test(r)&&(this.num=NaN,this.unit=""),hj.includes(r)&&(this.num=vj(t,r),this.unit="px")}add(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num+t.num,this.unit)}subtract(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num-t.num,this.unit)}multiply(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num*t.num,this.unit||t.unit)}divide(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num/t.num,this.unit||t.unit)}toString(){return"".concat(this.num).concat(this.unit)}isNaN(){return We(this.num)}}function pg(e){if(e.includes(br))return br;for(var t=e;t.includes("*")||t.includes("/");){var r,[,n,i,a]=(r=Gd.exec(t))!==null&&r!==void 0?r:[],o=Me.parse(n??""),u=Me.parse(a??""),l=i==="*"?o.multiply(u):o.divide(u);if(l.isNaN())return br;t=t.replace(Gd,l.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,[,s,f,d]=(c=Vd.exec(t))!==null&&c!==void 0?c:[],h=Me.parse(s??""),v=Me.parse(d??""),p=f==="+"?h.add(v):h.subtract(v);if(p.isNaN())return br;t=t.replace(Vd,p.toString())}return t}var Xd=/\(([^()]*)\)/;function pj(e){for(var t=e,r;(r=Xd.exec(t))!=null;){var[,n]=r;t=t.replace(Xd,pg(n))}return t}function mj(e){var t=e.replace(/\s+/g,"");return t=pj(t),t=pg(t),t}function gj(e){try{return mj(e)}catch{return br}}function ko(e){var t=gj(e.slice(5,-1));return t===br?"":t}var yj=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],bj=["dx","dy","angle","className","breakAll"];function Su(){return Su=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:t,breakAll:r,style:n}=e;try{var i=[];J(t)||(r?i=t.toString().split(""):i=t.toString().split(mg));var a=i.map(u=>({word:u,width:Zr(u,n).width})),o=r?0:Zr(" ",n).width;return{wordsWithComputedWidth:a,spaceWidth:o}}catch{return null}},wj=(e,t,r,n,i)=>{var{maxLines:a,children:o,style:u,breakAll:l}=e,c=D(a),s=o,f=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return C.reduce((_,R)=>{var{word:B,width:F}=R,V=_[_.length-1];if(V&&(n==null||i||V.width+F+rI.reduce((C,_)=>C.width>_.width?C:_);if(!c||i)return d;var v=d.length>a||h(d).width>Number(n);if(!v)return d;for(var p="…",m=I=>{var C=s.slice(0,I),_=gg({breakAll:l,style:u,children:C+p}).wordsWithComputedWidth,R=f(_),B=R.length>a||h(R).width>Number(n);return[B,R]},y=0,b=s.length-1,x=0,P;y<=b&&x<=s.length-1;){var w=Math.floor((y+b)/2),O=w-1,[A,j]=m(O),[T]=m(w);if(!A&&!T&&(y=w+1),A&&T&&(b=w-1),!A&&T){P=j;break}x++}return P||d},Jd=e=>{var t=J(e)?[]:e.toString().split(mg);return[{words:t}]},Pj=e=>{var{width:t,scaleToFit:r,children:n,style:i,breakAll:a,maxLines:o}=e;if((t||r)&&!fr.isSsr){var u,l,c=gg({breakAll:a,children:n,style:i});if(c){var{wordsWithComputedWidth:s,spaceWidth:f}=c;u=s,l=f}else return Jd(n);return wj({breakAll:a,children:n,maxLines:o,style:i},u,l,t,r)}return Jd(n)},Qd="#808080",Ji=g.forwardRef((e,t)=>{var{x:r=0,y:n=0,lineHeight:i="1em",capHeight:a="0.71em",scaleToFit:o=!1,textAnchor:u="start",verticalAnchor:l="end",fill:c=Qd}=e,s=Zd(e,yj),f=g.useMemo(()=>Pj({breakAll:s.breakAll,children:s.children,maxLines:s.maxLines,scaleToFit:o,style:s.style,width:s.width}),[s.breakAll,s.children,s.maxLines,o,s.style,s.width]),{dx:d,dy:h,angle:v,className:p,breakAll:m}=s,y=Zd(s,bj);if(!dt(r)||!dt(n))return null;var b=r+(D(d)?d:0),x=n+(D(h)?h:0),P;switch(l){case"start":P=ko("calc(".concat(a,")"));break;case"middle":P=ko("calc(".concat((f.length-1)/2," * -").concat(i," + (").concat(a," / 2))"));break;default:P=ko("calc(".concat(f.length-1," * -").concat(i,")"));break}var w=[];if(o){var O=f[0].width,{width:A}=s;w.push("scale(".concat(D(A)?A/O:1,")"))}return v&&w.push("rotate(".concat(v,", ").concat(b,", ").concat(x,")")),w.length&&(y.transform=w.join(" ")),g.createElement("text",Su({},z(y,!0),{ref:t,x:b,y:x,className:H("recharts-text",p),textAnchor:u,fill:c.includes("url")?Qd:c}),f.map((j,T)=>{var I=j.words.join(m?"":" ");return g.createElement("tspan",{x:b,dy:T===0?P:i,key:"".concat(I,"-").concat(T)},I)}))});Ji.displayName="Text";var Oj=["offset"],Aj=["labelRef"];function eh(e,t){if(e==null)return{};var r,n,i=Sj(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{value:t,formatter:r}=e,n=J(e.children)?t:e.children;return typeof r=="function"?r(n):n},gl=e=>e!=null&&typeof e=="function",Cj=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},_j=(e,t,r)=>{var{position:n,viewBox:i,offset:a,className:o}=e,{cx:u,cy:l,innerRadius:c,outerRadius:s,startAngle:f,endAngle:d,clockWise:h}=i,v=(c+s)/2,p=Cj(f,d),m=p>=0?1:-1,y,b;n==="insideStart"?(y=f+m*a,b=h):n==="insideEnd"?(y=d-m*a,b=!h):n==="end"&&(y=d+m*a,b=h),b=p<=0?b:!b;var x=ce(u,l,v,y),P=ce(u,l,v,y+(b?1:-1)*359),w="M".concat(x.x,",").concat(x.y,` - A`).concat(v,",").concat(v,",0,1,").concat(b?0:1,`, - `).concat(P.x,",").concat(P.y),O=J(e.id)?or("recharts-radial-line-"):e.id;return g.createElement("text",mt({},r,{dominantBaseline:"central",className:H("recharts-radial-bar-label",o)}),g.createElement("defs",null,g.createElement("path",{id:O,d:w})),g.createElement("textPath",{xlinkHref:"#".concat(O)},t))},Mj=e=>{var{viewBox:t,offset:r,position:n}=e,{cx:i,cy:a,innerRadius:o,outerRadius:u,startAngle:l,endAngle:c}=t,s=(l+c)/2;if(n==="outside"){var{x:f,y:d}=ce(i,a,u+r,s);return{x:f,y:d,textAnchor:f>=i?"start":"end",verticalAnchor:"middle"}}if(n==="center")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"middle"};if(n==="centerTop")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"start"};if(n==="centerBottom")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"end"};var h=(o+u)/2,{x:v,y:p}=ce(i,a,h,s);return{x:v,y:p,textAnchor:"middle",verticalAnchor:"middle"}},Dj=(e,t)=>{var{parentViewBox:r,offset:n,position:i}=e,{x:a,y:o,width:u,height:l}=t,c=l>=0?1:-1,s=c*n,f=c>0?"end":"start",d=c>0?"start":"end",h=u>=0?1:-1,v=h*n,p=h>0?"end":"start",m=h>0?"start":"end";if(i==="top"){var y={x:a+u/2,y:o-c*n,textAnchor:"middle",verticalAnchor:f};return le(le({},y),r?{height:Math.max(o-r.y,0),width:u}:{})}if(i==="bottom"){var b={x:a+u/2,y:o+l+s,textAnchor:"middle",verticalAnchor:d};return le(le({},b),r?{height:Math.max(r.y+r.height-(o+l),0),width:u}:{})}if(i==="left"){var x={x:a-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"};return le(le({},x),r?{width:Math.max(x.x-r.x,0),height:l}:{})}if(i==="right"){var P={x:a+u+v,y:o+l/2,textAnchor:m,verticalAnchor:"middle"};return le(le({},P),r?{width:Math.max(r.x+r.width-P.x,0),height:l}:{})}var w=r?{width:u,height:l}:{};return i==="insideLeft"?le({x:a+v,y:o+l/2,textAnchor:m,verticalAnchor:"middle"},w):i==="insideRight"?le({x:a+u-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"},w):i==="insideTop"?le({x:a+u/2,y:o+s,textAnchor:"middle",verticalAnchor:d},w):i==="insideBottom"?le({x:a+u/2,y:o+l-s,textAnchor:"middle",verticalAnchor:f},w):i==="insideTopLeft"?le({x:a+v,y:o+s,textAnchor:m,verticalAnchor:d},w):i==="insideTopRight"?le({x:a+u-v,y:o+s,textAnchor:p,verticalAnchor:d},w):i==="insideBottomLeft"?le({x:a+v,y:o+l-s,textAnchor:m,verticalAnchor:f},w):i==="insideBottomRight"?le({x:a+u-v,y:o+l-s,textAnchor:p,verticalAnchor:f},w):i&&typeof i=="object"&&(D(i.x)||Zt(i.x))&&(D(i.y)||Zt(i.y))?le({x:a+ke(i.x,u),y:o+ke(i.y,l),textAnchor:"end",verticalAnchor:"end"},w):le({x:a+u/2,y:o+l/2,textAnchor:"middle",verticalAnchor:"middle"},w)},Ij=e=>"cx"in e&&D(e.cx);function qe(e){var{offset:t=5}=e,r=eh(e,Oj),n=le({offset:t},r),{viewBox:i,position:a,value:o,children:u,content:l,className:c="",textBreakAll:s,labelRef:f}=n,d=os(),h=i||d;if(!h||J(o)&&J(u)&&!g.isValidElement(l)&&typeof l!="function")return null;if(g.isValidElement(l)){var{labelRef:v}=n,p=eh(n,Aj);return g.cloneElement(l,p)}var m;if(typeof l=="function"){if(m=g.createElement(l,n),g.isValidElement(m))return m}else m=kj(n);var y=Ij(h),b=z(n,!0);if(y&&(a==="insideStart"||a==="insideEnd"||a==="end"))return _j(n,m,b);var x=y?Mj(n):Dj(n,h);return g.createElement(Ji,mt({ref:f,className:H("recharts-label",c)},b,x,{breakAll:s}),m)}qe.displayName="Label";var yg=e=>{var{cx:t,cy:r,angle:n,startAngle:i,endAngle:a,r:o,radius:u,innerRadius:l,outerRadius:c,x:s,y:f,top:d,left:h,width:v,height:p,clockWise:m,labelViewBox:y}=e;if(y)return y;if(D(v)&&D(p)){if(D(s)&&D(f))return{x:s,y:f,width:v,height:p};if(D(d)&&D(h))return{x:d,y:h,width:v,height:p}}if(D(s)&&D(f))return{x:s,y:f,width:0,height:0};if(D(t)&&D(r))return{cx:t,cy:r,startAngle:i||n||0,endAngle:a||n||0,innerRadius:l||0,outerRadius:c||u||o||0,clockWise:m};if(e.viewBox)return e.viewBox},Nj=(e,t,r)=>{if(!e)return null;var n={viewBox:t,labelRef:r};return e===!0?g.createElement(qe,mt({key:"label-implicit"},n)):dt(e)?g.createElement(qe,mt({key:"label-implicit",value:e},n)):g.isValidElement(e)?e.type===qe?g.cloneElement(e,le({key:"label-implicit"},n)):g.createElement(qe,mt({key:"label-implicit",content:e},n)):gl(e)?g.createElement(qe,mt({key:"label-implicit",content:e},n)):e&&typeof e=="object"?g.createElement(qe,mt({},e,{key:"label-implicit"},n)):null},$j=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var{children:i,labelRef:a}=t,o=yg(t),u=dn(i,qe).map((c,s)=>g.cloneElement(c,{viewBox:r||o,key:"label-".concat(s)}));if(!n)return u;var l=Nj(t.label,r||o,a);return[l,...u]};qe.parseViewBox=yg;qe.renderCallByParent=$j;var Co={},_o={},rh;function Rj(){return rh||(rh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r[r.length-1]}e.last=t}(_o)),_o}var Mo={},nh;function Lj(){return nh||(nh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Array.isArray(r)?r:Array.from(r)}e.toArray=t}(Mo)),Mo}var ih;function Bj(){return ih||(ih=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Rj(),r=Lj(),n=Yu();function i(a){if(n.isArrayLike(a))return t.last(r.toArray(a))}e.last=i}(Co)),Co}var Do,ah;function Kj(){return ah||(ah=1,Do=Bj().last),Do}var qj=Kj();const zj=St(qj);var Fj=["valueAccessor"],Wj=["data","dataKey","clockWise","id","textBreakAll"];function pi(){return pi=Object.assign?Object.assign.bind():function(e){for(var t=1;tArray.isArray(e.value)?zj(e.value):e.value;function $t(e){var{valueAccessor:t=Vj}=e,r=sh(e,Fj),{data:n,dataKey:i,clockWise:a,id:o,textBreakAll:u}=r,l=sh(r,Wj);return!n||!n.length?null:g.createElement(ye,{className:"recharts-label-list"},n.map((c,s)=>{var f=J(i)?t(c,s):re(c&&c.payload,i),d=J(o)?{}:{id:"".concat(o,"-").concat(s)};return g.createElement(qe,pi({},z(c,!0),l,d,{parentViewBox:c.parentViewBox,value:f,textBreakAll:u,viewBox:qe.parseViewBox(J(a)?c:uh(uh({},c),{},{clockWise:a})),key:"label-".concat(s),index:s}))}))}$t.displayName="LabelList";function Xj(e,t){return e?e===!0?g.createElement($t,{key:"labelList-implicit",data:t}):g.isValidElement(e)||gl(e)?g.createElement($t,{key:"labelList-implicit",data:t,content:e}):typeof e=="object"?g.createElement($t,pi({data:t},e,{key:"labelList-implicit"})):null:null}function Zj(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var{children:n}=e,i=dn(n,$t).map((o,u)=>g.cloneElement(o,{data:t,key:"labelList-".concat(u)}));if(!r)return i;var a=Xj(e.label,t);return[a,...i]}$t.renderCallByParent=Zj;function Eu(){return Eu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{cx:t,cy:r,r:n,className:i}=e,a=H("recharts-dot",i);return t===+t&&r===+r&&n===+n?g.createElement("circle",Eu({},z(e,!1),Fu(e),{className:a,cx:t,cy:r,r:n})):null},xg=e=>e.graphicalItems.polarItems,Jj=S([ue,bn],Fs),yl=S([xg,se,Jj],Ws),Qj=S([yl],Us),bl=S([Qj,Ms],Hs),eT=S([bl,se,yl],Ys),tT=S([bl,se,yl],(e,t,r)=>r.length>0?e.flatMap(n=>r.flatMap(i=>{var a,o=re(n,(a=t.dataKey)!==null&&a!==void 0?a:i.dataKey);return{value:o,errorDomain:[]}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey),errorDomain:[]})):e.map(n=>({value:n,errorDomain:[]}))),lh=()=>{},rT=S([se,km,lh,tT,lh],Xs),wg=S([se,Y,bl,eT,yn,ue,rT],Zs),nT=S([wg,se,$r],el);S([se,wg,nT,ue],rl);var iT={radiusAxis:{},angleAxis:{}},Pg=nt({name:"polarAxis",initialState:iT,reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),{addRadiusAxis:R2,removeRadiusAxis:L2,addAngleAxis:B2,removeAngleAxis:K2}=Pg.actions,aT=Pg.reducer;function ch(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function fh(e){for(var t=1;tt,lT=[],wl=(e,t,r)=>(r==null?void 0:r.length)===0?lT:r,Og=S([Ms,xl,wl],(e,t,r)=>{var{chartData:n}=e,i;if((t==null?void 0:t.data)!=null&&t.data.length>0?i=t.data:i=n,(!i||!i.length)&&r!=null&&(i=r.map(a=>fh(fh({},t.presentationProps),a.props))),i!=null)return i}),cT=S([Og,xl,wl],(e,t,r)=>{if(e!=null)return e.map((n,i)=>{var a,o=re(n,t.nameKey,t.name),u;return r!=null&&(a=r[i])!==null&&a!==void 0&&(a=a.props)!==null&&a!==void 0&&a.fill?u=r[i].props.fill:typeof n=="object"&&n!=null&&"fill"in n?u=n.fill:u=t.fill,{value:_r(o,t.dataKey),color:u,payload:n,type:t.legendType}})}),fT=S([xg,xl],(e,t)=>{if(e.some(r=>r.type==="pie"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),dT=S([Og,fT,wl,ve],(e,t,r,n)=>{if(!(t==null||e==null))return nk({offset:n,pieSettings:t,displayedData:e,cells:r})}),hT={countOfBars:0,cartesianItems:[],polarItems:[]},Ag=nt({name:"graphicalItems",initialState:hT,reducers:{addBar(e){e.countOfBars+=1},removeBar(e){e.countOfBars-=1},addCartesianGraphicalItem(e,t){e.cartesianItems.push(t.payload)},replaceCartesianGraphicalItem(e,t){var{prev:r,next:n}=t.payload,i=bt(e).cartesianItems.indexOf(r);i>-1&&(e.cartesianItems[i]=n)},removeCartesianGraphicalItem(e,t){var r=bt(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},addPolarGraphicalItem(e,t){e.polarItems.push(t.payload)},removePolarGraphicalItem(e,t){var r=bt(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)}}}),{addBar:vT,removeBar:pT,addCartesianGraphicalItem:mT,replaceCartesianGraphicalItem:gT,removeCartesianGraphicalItem:yT,addPolarGraphicalItem:bT,removePolarGraphicalItem:xT}=Ag.actions,wT=Ag.reducer;function dh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function hh(e){for(var t=1;t{var n=hh(hh({},e),{},{stackId:Xv(e.stackId)});r.current===null?t(mT(n)):r.current!==n&&t(gT({prev:r.current,next:n})),r.current=n},[t,e]),g.useEffect(()=>()=>{r.current&&(t(yT(r.current)),r.current=null)},[t]),null}function ET(e){var t=ae();return g.useEffect(()=>(t(bT(e)),()=>{t(xT(e))}),[t,e]),null}var Io={},vh;function jT(){return vh||(vh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var i;if(typeof r!="object"||r==null)return!1;if(Object.getPrototypeOf(r)===null)return!0;if(Object.prototype.toString.call(r)!=="[object Object]"){const a=r[Symbol.toStringTag];return a==null||!((i=Object.getOwnPropertyDescriptor(r,Symbol.toStringTag))!=null&&i.writable)?!1:r.toString()===`[object ${a}]`}let n=r;for(;Object.getPrototypeOf(n)!==null;)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(r)===n}e.isPlainObject=t}(Io)),Io}var No,ph;function TT(){return ph||(ph=1,No=jT().isPlainObject),No}var kT=TT();const CT=St(kT);function mi(){return mi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=r-n,o;return o="M ".concat(e,",").concat(t),o+="L ".concat(e+r,",").concat(t),o+="L ".concat(e+r-a/2,",").concat(t+i),o+="L ".concat(e+r-a/2-n,",").concat(t+i),o+="L ".concat(e,",").concat(t," Z"),o},_T={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},MT=e=>{var t=it(e,_T),r=g.useRef(),[n,i]=g.useState(-1);g.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var m=r.current.getTotalLength();m&&i(m)}catch{}},[]);var{x:a,y:o,upperWidth:u,lowerWidth:l,height:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isUpdateAnimationActive:v}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||c!==+c||u===0&&l===0||c===0)return null;var p=H("recharts-trapezoid",s);return v?g.createElement(Lt,{canBegin:n>0,from:{upperWidth:0,lowerWidth:0,height:c,x:a,y:o},to:{upperWidth:u,lowerWidth:l,height:c,x:a,y:o},duration:d,animationEasing:f,isActive:v},m=>{var{upperWidth:y,lowerWidth:b,height:x,x:P,y:w}=m;return g.createElement(Lt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,easing:f},g.createElement("path",mi({},z(t,!0),{className:p,d:mh(P,w,y,b,x),ref:r})))}):g.createElement("g",null,g.createElement("path",mi({},z(t,!0),{className:p,d:mh(a,o,u,l,c)})))},DT=["option","shapeType","propTransformer","activeClassName","isActive"];function IT(e,t){if(e==null)return{};var r,n,i=NT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(Um({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}},Ol=e=>{var t=ae();return(r,n)=>i=>{e==null||e(r,n,i),t(jS())}},Al=(e,t)=>{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(TS({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}};function Sl(e){var{fn:t,args:r}=e,n=ae(),i=Ce();return g.useEffect(()=>{if(!i){var a=t(r);return n(AS(a)),()=>{n(SS(a))}}},[t,r,n,i]),null}var Eg=()=>{};function jg(e){var{legendPayload:t}=e,r=ae(),n=Ce();return g.useEffect(()=>n?Eg:(r(ap(t)),()=>{r(op(t))}),[r,n,t]),null}function zT(e){var{legendPayload:t}=e,r=ae(),n=$(Y);return g.useEffect(()=>n!=="centric"&&n!=="radial"?Eg:(r(ap(t)),()=>{r(op(t))}),[r,n,t]),null}function El(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"animation-",r=g.useRef(or(t)),n=g.useRef(e);return n.current!==e&&(r.current=or(t),n.current=e),r.current}var FT=["onMouseEnter","onClick","onMouseLeave"];function WT(e,t){if(e==null)return{};var r,n,i=UT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;nz(e,!1),[e]),r=g.useMemo(()=>dn(e.children,An),[e.children]),n=g.useMemo(()=>({name:e.name,nameKey:e.nameKey,tooltipType:e.tooltipType,data:e.data,dataKey:e.dataKey,cx:e.cx,cy:e.cy,startAngle:e.startAngle,endAngle:e.endAngle,minAngle:e.minAngle,paddingAngle:e.paddingAngle,innerRadius:e.innerRadius,outerRadius:e.outerRadius,cornerRadius:e.cornerRadius,legendType:e.legendType,fill:e.fill,presentationProps:t}),[e.cornerRadius,e.cx,e.cy,e.data,e.dataKey,e.endAngle,e.innerRadius,e.minAngle,e.name,e.nameKey,e.outerRadius,e.paddingAngle,e.startAngle,e.tooltipType,e.legendType,e.fill,t]),i=$(a=>cT(a,n,r));return g.createElement(zT,{legendPayload:i})}function VT(e){var{dataKey:t,nameKey:r,sectors:n,stroke:i,strokeWidth:a,fill:o,name:u,hide:l,tooltipType:c}=e;return{dataDefinedOnItem:n==null?void 0:n.map(s=>s.tooltipPayload),positions:n==null?void 0:n.map(s=>s.tooltipPosition),settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:r,name:_r(u,t),hide:l,type:c,color:o,unit:""}}}var XT=(e,t)=>e>t?"start":etypeof t=="function"?t(e):ke(t,r,r*.8),JT=(e,t,r)=>{var{top:n,left:i,width:a,height:o}=t,u=Yv(a,o),l=i+ke(e.cx,a,a/2),c=n+ke(e.cy,o,o/2),s=ke(e.innerRadius,u,0),f=ZT(r,e.outerRadius,u),d=e.maxRadius||Math.sqrt(a*a+o*o)/2;return{cx:l,cy:c,innerRadius:s,outerRadius:f,maxRadius:d}},QT=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},ek=(e,t)=>{if(g.isValidElement(e))return g.cloneElement(e,t);if(typeof e=="function")return e(t);var r=H("recharts-pie-label-line",typeof e!="boolean"?e.className:"");return g.createElement(us,cr({},t,{type:"linear",className:r}))},tk=(e,t,r)=>{if(g.isValidElement(e))return g.cloneElement(e,t);var n=r;if(typeof e=="function"&&(n=e(t),g.isValidElement(n)))return n;var i=H("recharts-pie-label-text",typeof e!="boolean"&&typeof e!="function"?e.className:"");return g.createElement(Ji,cr({},t,{alignmentBaseline:"middle",className:i}),n)};function rk(e){var{sectors:t,props:r,showLabels:n}=e,{label:i,labelLine:a,dataKey:o}=r;if(!n||!i||!t)return null;var u=z(r,!1),l=z(i,!1),c=z(a,!1),s=typeof i=="object"&&"offsetRadius"in i&&i.offsetRadius||20,f=t.map((d,h)=>{var v=(d.startAngle+d.endAngle)/2,p=ce(d.cx,d.cy,d.outerRadius+s,v),m=ie(ie(ie(ie({},u),d),{},{stroke:"none"},l),{},{index:h,textAnchor:XT(p.x,d.cx)},p),y=ie(ie(ie(ie({},u),d),{},{fill:"none",stroke:d.fill},c),{},{index:h,points:[ce(d.cx,d.cy,d.outerRadius,v),p],key:"line"});return g.createElement(ye,{key:"label-".concat(d.startAngle,"-").concat(d.endAngle,"-").concat(d.midAngle,"-").concat(h)},a&&ek(a,y),tk(i,m,re(d,o)))});return g.createElement(ye,{className:"recharts-pie-labels"},f)}function Tg(e){var{sectors:t,activeShape:r,inactiveShape:n,allOtherPieProps:i,showLabels:a}=e,o=$(Kt),{onMouseEnter:u,onClick:l,onMouseLeave:c}=i,s=WT(i,FT),f=Pl(u,i.dataKey),d=Ol(c),h=Al(l,i.dataKey);return t==null?null:g.createElement(g.Fragment,null,t.map((v,p)=>{if((v==null?void 0:v.startAngle)===0&&(v==null?void 0:v.endAngle)===0&&t.length!==1)return null;var m=r&&String(p)===o,y=o?n:null,b=m?r:y,x=ie(ie({},v),{},{stroke:v.stroke,tabIndex:-1,[Jv]:p,[Qv]:i.dataKey});return g.createElement(ye,cr({tabIndex:-1,className:"recharts-pie-sector"},wi(s,v,p),{onMouseEnter:f(v,p),onMouseLeave:d(v,p),onClick:h(v,p),key:"sector-".concat(v==null?void 0:v.startAngle,"-").concat(v==null?void 0:v.endAngle,"-").concat(v.midAngle,"-").concat(p)}),g.createElement(Sg,cr({option:b,isActive:m,shapeType:"sector"},x)))}),g.createElement(rk,{sectors:t,props:i,showLabels:a}))}function nk(e){var t,{pieSettings:r,displayedData:n,cells:i,offset:a}=e,{cornerRadius:o,startAngle:u,endAngle:l,dataKey:c,nameKey:s,tooltipType:f}=r,d=Math.abs(r.minAngle),h=QT(u,l),v=Math.abs(h),p=n.length<=1?0:(t=r.paddingAngle)!==null&&t!==void 0?t:0,m=n.filter(O=>re(O,c,0)!==0).length,y=(v>=360?m:m-1)*p,b=v-m*d-y,x=n.reduce((O,A)=>{var j=re(A,c,0);return O+(D(j)?j:0)},0),P;if(x>0){var w;P=n.map((O,A)=>{var j=re(O,c,0),T=re(O,s,A),I=JT(r,a,O),C=(D(j)?j:0)/x,_,R=ie(ie({},O),i&&i[A]&&i[A].props);A?_=w.endAngle+ge(h)*p*(j!==0?1:0):_=u;var B=_+ge(h)*((j!==0?d:0)+C*b),F=(_+B)/2,V=(I.innerRadius+I.outerRadius)/2,K=[{name:T,value:j,payload:R,dataKey:c,type:f}],de=ce(I.cx,I.cy,V,F);return w=ie(ie(ie(ie({},r.presentationProps),{},{percent:C,cornerRadius:o,name:T,tooltipPayload:K,midAngle:F,middleRadius:V,tooltipPosition:de},R),I),{},{value:re(O,c),startAngle:_,endAngle:B,payload:R,paddingAngle:ge(h)*p}),w})}return P}function ik(e){var{props:t,previousSectorsRef:r}=e,{sectors:n,isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:u,activeShape:l,inactiveShape:c,onAnimationStart:s,onAnimationEnd:f}=t,d=El(t,"recharts-pie-"),h=r.current,[v,p]=g.useState(!0),m=g.useCallback(()=>{typeof f=="function"&&f(),p(!1)},[f]),y=g.useCallback(()=>{typeof s=="function"&&s(),p(!0)},[s]);return g.createElement(Lt,{begin:a,duration:o,isActive:i,easing:u,from:{t:0},to:{t:1},onAnimationStart:y,onAnimationEnd:m,key:d},b=>{var{t:x}=b,P=[],w=n&&n[0],O=w.startAngle;return n.forEach((A,j)=>{var T=h&&h[j],I=j>0?Rt(A,"paddingAngle",0):0;if(T){var C=Ke(T.endAngle-T.startAngle,A.endAngle-A.startAngle),_=ie(ie({},A),{},{startAngle:O+I,endAngle:O+C(x)+I});P.push(_),O=_.endAngle}else{var{endAngle:R,startAngle:B}=A,F=Ke(0,R-B),V=F(x),K=ie(ie({},A),{},{startAngle:O+I,endAngle:O+V+I});P.push(K),O=K.endAngle}}),r.current=P,g.createElement(ye,null,g.createElement(Tg,{sectors:P,activeShape:l,inactiveShape:c,allOtherPieProps:t,showLabels:!v}))})}function ak(e){var{sectors:t,isAnimationActive:r,activeShape:n,inactiveShape:i}=e,a=g.useRef(null),o=a.current;return r&&t&&t.length&&(!o||o!==t)?g.createElement(ik,{props:e,previousSectorsRef:a}):g.createElement(Tg,{sectors:t,activeShape:n,inactiveShape:i,allOtherPieProps:e,showLabels:!0})}function ok(e){var{hide:t,className:r,rootTabIndex:n}=e,i=H("recharts-pie",r);return t?null:g.createElement(ye,{tabIndex:n,className:i},g.createElement(ak,e))}var kg={animationBegin:400,animationDuration:1500,animationEasing:"ease",cx:"50%",cy:"50%",dataKey:"value",endAngle:360,fill:"#808080",hide:!1,innerRadius:0,isAnimationActive:!fr.isSsr,labelLine:!0,legendType:"rect",minAngle:0,nameKey:"name",outerRadius:"80%",paddingAngle:0,rootTabIndex:0,startAngle:0,stroke:"#fff"};function uk(e){var t=it(e,kg),r=g.useMemo(()=>dn(e.children,An),[e.children]),n=z(t,!1),i=g.useMemo(()=>({name:t.name,nameKey:t.nameKey,tooltipType:t.tooltipType,data:t.data,dataKey:t.dataKey,cx:t.cx,cy:t.cy,startAngle:t.startAngle,endAngle:t.endAngle,minAngle:t.minAngle,paddingAngle:t.paddingAngle,innerRadius:t.innerRadius,outerRadius:t.outerRadius,cornerRadius:t.cornerRadius,legendType:t.legendType,fill:t.fill,presentationProps:n}),[t.cornerRadius,t.cx,t.cy,t.data,t.dataKey,t.endAngle,t.innerRadius,t.minAngle,t.name,t.nameKey,t.outerRadius,t.paddingAngle,t.startAngle,t.tooltipType,t.legendType,t.fill,n]),a=$(o=>dT(o,i,r));return g.createElement(g.Fragment,null,g.createElement(Sl,{fn:VT,args:ie(ie({},t),{},{sectors:a})}),g.createElement(ok,cr({},t,{sectors:a})))}class jl extends g.PureComponent{constructor(){super(...arguments),Qi(this,"id",or("recharts-pie-"))}render(){return g.createElement(g.Fragment,null,g.createElement(ET,{data:this.props.data,dataKey:this.props.dataKey,hide:this.props.hide,angleAxisId:0,radiusAxisId:0,stackId:void 0,barSize:void 0,type:"pie"}),g.createElement(GT,this.props),g.createElement(uk,this.props),this.props.children)}}Qi(jl,"displayName","Pie");Qi(jl,"defaultProps",kg);var sk=S([ve],e=>{if(e)return{top:e.top,bottom:e.bottom,left:e.left,right:e.right}}),lk=S([sk,Et,jt],(e,t,r)=>{if(!(!e||t==null||r==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}}),ck=e=>{var t=Ce();return $(r=>vt(r,"xAxis",e,t))},fk=e=>{var t=Ce();return $(r=>vt(r,"yAxis",e,t))},Tl=()=>$(lk),dk=()=>$(dE);function xh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function wh(e){for(var t=1;t{var{point:t,childIndex:r,mainColor:n,activeDot:i,dataKey:a}=e;if(i===!1||t.x==null||t.y==null)return null;var o=wh(wh({index:r,dataKey:a,cx:t.x,cy:t.y,r:4,fill:n??"none",strokeWidth:2,stroke:"#fff",payload:t.payload,value:t.value},z(i,!1)),Fu(i)),u;return g.isValidElement(i)?u=g.cloneElement(i,o):typeof i=="function"?u=i(o):u=g.createElement(bg,o),g.createElement(ye,{className:"recharts-active-dot"},u)};function gk(e){var{points:t,mainColor:r,activeDot:n,itemDataKey:i}=e,a=$(Kt),o=dk();if(t==null||o==null)return null;var u=t.find(l=>o.includes(l.payload));return J(u)?null:mk({point:u,childIndex:Number(a),mainColor:r,dataKey:i,activeDot:n})}var yk=()=>{var e=ae();return g.useEffect(()=>(e(vT()),()=>{e(pT())})),null},bk=["children"];function xk(e,t){if(e==null)return{};var r,n,i=wk(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{},Cg=g.createContext({addErrorBar:Ph,removeErrorBar:Ph}),Pk={data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0},_g=g.createContext(Pk);function Mg(e){var{children:t}=e,r=xk(e,bk);return g.createElement(_g.Provider,{value:r},t)}var Ok=()=>g.useContext(_g),Dg=e=>{var{children:t,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,data:o,stackId:u,hide:l,type:c,barSize:s}=e,[f,d]=g.useState([]),h=g.useCallback(m=>{d(y=>[...y,m])},[d]),v=g.useCallback(m=>{d(y=>y.filter(b=>b!==m))},[d]),p=Ce();return g.createElement(Cg.Provider,{value:{addErrorBar:h,removeErrorBar:v}},g.createElement(ST,{type:c,data:o,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,errorBars:f,stackId:u,hide:l,barSize:s,isPanorama:p}),t)};function Ak(e){var{addErrorBar:t,removeErrorBar:r}=g.useContext(Cg);return g.useEffect(()=>(t(e),()=>{r(e)}),[t,r,e]),null}var Sk=["direction","width","dataKey","isAnimationActive","animationBegin","animationDuration","animationEasing"];function Ig(e,t,r){return(t=Ek(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ek(e){var t=jk(e,"string");return typeof t=="symbol"?t:t+""}function jk(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function ln(){return ln=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{x,y:P,value:w,errorVal:O}=f(b,n,t);if(!O)return null;var A=[],j,T;if(Array.isArray(O)?[j,T]=O:j=T=O,t==="x"){var{scale:I}=p,C=P+v,_=C+r,R=C-r,B=I(w-j),F=I(w+T);A.push({x1:F,y1:_,x2:F,y2:R}),A.push({x1:B,y1:C,x2:F,y2:C}),A.push({x1:B,y1:_,x2:B,y2:R})}else if(t==="y"){var{scale:V}=m,K=x+v,de=K-r,oe=K+r,Ie=V(w-j),Ge=V(w+T);A.push({x1:de,y1:Ge,x2:oe,y2:Ge}),A.push({x1:K,y1:Ie,x2:K,y2:Ge}),A.push({x1:de,y1:Ie,x2:oe,y2:Ie})}var L="".concat(x+v,"px ").concat(P+v,"px");return g.createElement(ye,ln({className:"recharts-errorBar",key:"bar-".concat(A.map(we=>"".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2)))},c),A.map(we=>{var Ht=i?{transformOrigin:"".concat(we.x1-5,"px")}:void 0;return g.createElement(Lt,{from:{transform:"scaleY(0)",transformOrigin:L},to:{transform:"scaleY(1)",transformOrigin:L},begin:a,easing:u,isActive:i,duration:o,key:"line-".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2),style:{transformOrigin:L}},g.createElement("line",ln({},we,{style:Ht})))}))});return g.createElement(ye,{className:"recharts-errorBars"},y)}var Ng=g.createContext(void 0);function _k(e){var t=g.useContext(Ng);return e??t??"x"}function $g(e){var{direction:t,children:r}=e;return g.createElement(Ng.Provider,{value:t},r)}var Rg={stroke:"black",strokeWidth:1.5,width:5,offset:0,isAnimationActive:!0,animationBegin:0,animationDuration:400,animationEasing:"ease-in-out"};function Mk(e){var t=_k(e.direction),{width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o}=it(e,Rg);return g.createElement(g.Fragment,null,g.createElement(Ak,{dataKey:e.dataKey,direction:t}),g.createElement(Ck,ln({},e,{direction:t,width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o})))}class Lg extends g.Component{render(){return g.createElement(Mk,this.props)}}Ig(Lg,"defaultProps",Rg);Ig(Lg,"displayName","ErrorBar");var Dk="Invariant failed";function Ik(e,t){throw new Error(Dk)}var Nk=["x","y"];function ju(){return ju=Object.assign?Object.assign.bind():function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:0;return(n,i)=>{if(D(t))return t;var a=D(n)||J(n);return a?t(n,i):(a||Ik(),r)}};function kl(e,t){var r,n,i=$(c=>kt(c,e)),a=$(c=>Wt(c,t)),o=(r=i==null?void 0:i.allowDataOverflow)!==null&&r!==void 0?r:Re.allowDataOverflow,u=(n=a==null?void 0:a.allowDataOverflow)!==null&&n!==void 0?n:Le.allowDataOverflow,l=o||u;return{needClip:l,needClipX:o,needClipY:u}}function Kg(e){var{xAxisId:t,yAxisId:r,clipPathId:n}=e,i=Tl(),{needClipX:a,needClipY:o,needClip:u}=kl(t,r);if(!u)return null;var{x:l,y:c,width:s,height:f}=i;return g.createElement("clipPath",{id:"clipPath-".concat(n)},g.createElement("rect",{x:a?l:l-s/2,y:o?c:c-f/2,width:a?s:s*2,height:o?f:f*2}))}var Fk=["onMouseEnter","onMouseLeave","onClick"],Wk=["value","background","tooltipPosition"],Uk=["onMouseEnter","onClick","onMouseLeave"];function cn(){return cn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:r,fill:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:_r(r,t),payload:e}]};function Xk(e){var{dataKey:t,stroke:r,strokeWidth:n,fill:i,name:a,hide:o,unit:u}=e;return{dataDefinedOnItem:void 0,positions:void 0,settings:{stroke:r,strokeWidth:n,fill:i,dataKey:t,nameKey:void 0,name:_r(a,t),hide:o,type:e.tooltipType,color:e.fill,unit:u}}}function Zk(e){var t=$(Kt),{data:r,dataKey:n,background:i,allOtherBarProps:a}=e,{onMouseEnter:o,onMouseLeave:u,onClick:l}=a,c=Tu(a,Fk),s=Pl(o,n),f=Ol(u),d=Al(l,n);if(!i||r==null)return null;var h=z(i,!1);return g.createElement(g.Fragment,null,r.map((v,p)=>{var{value:m,background:y,tooltipPosition:b}=v,x=Tu(v,Wk);if(!y)return null;var P=s(v,p),w=f(v,p),O=d(v,p),A=Ee(Ee(Ee(Ee(Ee({option:i,isActive:String(p)===t},x),{},{fill:"#eee"},y),h),wi(c,v,p)),{},{onMouseEnter:P,onMouseLeave:w,onClick:O,dataKey:n,index:p,className:"recharts-bar-background-rectangle"});return g.createElement(Bg,cn({key:"background-bar-".concat(p)},A))}))}function qg(e){var{data:t,props:r,showLabels:n}=e,i=z(r,!1),{shape:a,dataKey:o,activeBar:u}=r,l=$(Kt),c=$(ig),{onMouseEnter:s,onClick:f,onMouseLeave:d}=r,h=Tu(r,Uk),v=Pl(s,o),p=Ol(d),m=Al(f,o);return t?g.createElement(g.Fragment,null,t.map((y,b)=>{var x=u&&String(b)===l&&(c==null||o===c),P=x?u:a,w=Ee(Ee(Ee({},i),y),{},{isActive:x,option:P,index:b,dataKey:o});return g.createElement(ye,cn({className:"recharts-bar-rectangle"},wi(h,y,b),{onMouseEnter:v(y,b),onMouseLeave:p(y,b),onClick:m(y,b),key:"rectangle-".concat(y==null?void 0:y.x,"-").concat(y==null?void 0:y.y,"-").concat(y==null?void 0:y.value,"-").concat(b)}),g.createElement(Bg,w))}),n&&$t.renderCallByParent(r,t)):null}function Jk(e){var{props:t,previousRectanglesRef:r}=e,{data:n,layout:i,isAnimationActive:a,animationBegin:o,animationDuration:u,animationEasing:l,onAnimationEnd:c,onAnimationStart:s}=t,f=r.current,d=El(t,"recharts-bar-"),[h,v]=g.useState(!1),p=g.useCallback(()=>{typeof c=="function"&&c(),v(!1)},[c]),m=g.useCallback(()=>{typeof s=="function"&&s(),v(!0)},[s]);return g.createElement(Lt,{begin:o,duration:u,isActive:a,easing:l,from:{t:0},to:{t:1},onAnimationEnd:p,onAnimationStart:m,key:d},y=>{var{t:b}=y,x=b===1?n:n.map((P,w)=>{var O=f&&f[w];if(O){var A=Ke(O.x,P.x),j=Ke(O.y,P.y),T=Ke(O.width,P.width),I=Ke(O.height,P.height);return Ee(Ee({},P),{},{x:A(b),y:j(b),width:T(b),height:I(b)})}if(i==="horizontal"){var C=Ke(0,P.height),_=C(b);return Ee(Ee({},P),{},{y:P.y+P.height-_,height:_})}var R=Ke(0,P.width),B=R(b);return Ee(Ee({},P),{},{width:B})});return b>0&&(r.current=x),g.createElement(ye,null,g.createElement(qg,{props:t,data:x,showLabels:!h}))})}function Qk(e){var{data:t,isAnimationActive:r}=e,n=g.useRef(null);return r&&t&&t.length&&(n.current==null||n.current!==t)?g.createElement(Jk,{previousRectanglesRef:n,props:e}):g.createElement(qg,{props:e,data:t,showLabels:!0})}var zg=0,eC=(e,t)=>{var r=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:r,errorVal:re(e,t)}};class tC extends g.PureComponent{constructor(){super(...arguments),ea(this,"id",or("recharts-bar-"))}render(){var{hide:t,data:r,dataKey:n,className:i,xAxisId:a,yAxisId:o,needClip:u,background:l,id:c,layout:s}=this.props;if(t)return null;var f=H("recharts-bar",i),d=J(c)?this.id:c;return g.createElement(ye,{className:f},u&&g.createElement("defs",null,g.createElement(Kg,{clipPathId:d,xAxisId:a,yAxisId:o})),g.createElement(ye,{className:"recharts-bar-rectangles",clipPath:u?"url(#clipPath-".concat(d,")"):null},g.createElement(Zk,{data:r,dataKey:n,background:l,allOtherBarProps:this.props}),g.createElement(Qk,this.props)),g.createElement($g,{direction:s==="horizontal"?"y":"x"},this.props.children))}}var Fg={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",hide:!1,isAnimationActive:!fr.isSsr,legendType:"rect",minPointSize:zg,xAxisId:0,yAxisId:0};function rC(e){var{xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s}=it(e,Fg),{needClip:f}=kl(t,r),d=Ni(),h=Ce(),v=g.useMemo(()=>({barSize:e.barSize,data:void 0,dataKey:e.dataKey,maxBarSize:e.maxBarSize,minPointSize:a,stackId:Xv(e.stackId)}),[e.barSize,e.dataKey,e.maxBarSize,a,e.stackId]),p=dn(e.children,An),m=$(x=>CC(x,t,r,h,v,p));if(d!=="vertical"&&d!=="horizontal")return null;var y,b=m==null?void 0:m[0];return b==null||b.height==null||b.width==null?y=0:y=d==="vertical"?b.height/2:b.width/2,g.createElement(Mg,{xAxisId:t,yAxisId:r,data:m,dataPointFormatter:eC,errorBarOffset:y},g.createElement(tC,cn({},e,{layout:d,needClip:f,data:m,xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s})))}function nC(e){var{layout:t,barSettings:{dataKey:r,minPointSize:n},pos:i,bandSize:a,xAxis:o,yAxis:u,xAxisTicks:l,yAxisTicks:c,stackedData:s,displayedData:f,offset:d,cells:h}=e,v=t==="horizontal"?u:o,p=s?v.scale.domain():null,m=Qx({numericAxis:v});return f.map((y,b)=>{var x,P,w,O,A,j;s?x=Gx(s[b],p):(x=re(y,r),Array.isArray(x)||(x=[m,x]));var T=zk(n,zg)(x[1],b);if(t==="horizontal"){var I,[C,_]=[u.scale(x[0]),u.scale(x[1])];P=ff({axis:o,ticks:l,bandSize:a,offset:i.offset,entry:y,index:b}),w=(I=_??C)!==null&&I!==void 0?I:void 0,O=i.size;var R=C-_;if(A=We(R)?0:R,j={x:P,y:d.top,width:O,height:d.height},Math.abs(T)>0&&Math.abs(A)0&&Math.abs(O)t,sC=(e,t,r)=>r,lC=(e,t,r,n)=>n,_l=(e,t,r,n,i)=>i,cC=(e,t,r,n,i)=>i.maxBarSize,fC=(e,t,r,n,i,a)=>a,Eh=(e,t,r)=>{var n=r??e;if(!J(n))return ke(n,t,0)},dC=S([Y,Ui,uC,sC,lC],(e,t,r,n,i)=>t.filter(a=>e==="horizontal"?a.xAxisId===r:a.yAxisId===n).filter(a=>a.isPanorama===i).filter(a=>a.hide===!1).filter(a=>a.type==="bar")),hC=(e,t,r,n)=>{var i=Y(e);return i==="horizontal"?bu(e,"yAxis",r,n):bu(e,"xAxis",t,n)},vC=(e,t,r)=>{var n=Y(e);return n==="horizontal"?Td(e,"xAxis",t):Td(e,"yAxis",r)};function pC(e){return e.stackId!=null&&e.dataKey!=null}var mC=(e,t,r)=>{var n={},i=e.filter(pC),a=e.filter(c=>c.stackId==null),o=i.reduce((c,s)=>(c[s.stackId]||(c[s.stackId]=[]),c[s.stackId].push(s),c),n),u=Object.entries(o).map(c=>{var[s,f]=c,d=f.map(v=>v.dataKey),h=Eh(t,r,f[0].barSize);return{stackId:s,dataKeys:d,barSize:h}}),l=a.map(c=>{var s=[c.dataKey].filter(d=>d!=null),f=Eh(t,r,c.barSize);return{stackId:void 0,dataKeys:s,barSize:f}});return[...u,...l]},gC=S([dC,OA,vC],mC),yC=(e,t,r,n,i)=>{var a,o,u=Y(e),l=cm(e),{maxBarSize:c}=i,s=J(c)?l:c,f,d;return u==="horizontal"?(f=vt(e,"xAxis",t,n),d=Bt(e,"xAxis",t,n)):(f=vt(e,"yAxis",r,n),d=Bt(e,"yAxis",r,n)),(a=(o=en(f,d,!0))!==null&&o!==void 0?o:s)!==null&&a!==void 0?a:0},Wg=(e,t,r,n)=>{var i=Y(e),a,o;return i==="horizontal"?(a=vt(e,"xAxis",t,n),o=Bt(e,"xAxis",t,n)):(a=vt(e,"yAxis",r,n),o=Bt(e,"yAxis",r,n)),en(a,o)};function bC(e,t,r,n,i){var a=n.length;if(!(a<1)){var o=ke(e,r,0,!0),u,l=[];if(Ye(n[0].barSize)){var c=!1,s=r/a,f=n.reduce((y,b)=>y+(b.barSize||0),0);f+=(a-1)*o,f>=r&&(f-=(a-1)*o,o=0),f>=r&&s>0&&(c=!0,s*=.9,f=a*s);var d=(r-f)/2>>0,h={offset:d-o,size:0};u=n.reduce((y,b)=>{var x,P={stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:h.offset+h.size+o,size:c?s:(x=b.barSize)!==null&&x!==void 0?x:0}},w=[...y,P];return h=w[w.length-1].position,w},l)}else{var v=ke(t,r,0,!0);r-2*v-(a-1)*o<=0&&(o=0);var p=(r-2*v-(a-1)*o)/a;p>1&&(p>>=0);var m=Ye(i)?Math.min(p,i):p;u=n.reduce((y,b,x)=>[...y,{stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:v+(p+o)*x+(p-m)/2,size:m}}],l)}return u}}var xC=(e,t,r,n,i,a,o)=>{var u=J(o)?t:o,l=bC(r,n,i!==a?i:a,e,u);return i!==a&&l!=null&&(l=l.map(c=>Bn(Bn({},c),{},{position:Bn(Bn({},c.position),{},{offset:c.position.offset-i/2})}))),l},wC=S([gC,cm,PA,fm,yC,Wg,cC],xC),PC=(e,t,r,n)=>vt(e,"xAxis",t,n),OC=(e,t,r,n)=>vt(e,"yAxis",r,n),AC=(e,t,r,n)=>Bt(e,"xAxis",t,n),SC=(e,t,r,n)=>Bt(e,"yAxis",r,n),EC=S([wC,_l],(e,t)=>{if(e!=null){var r=e.find(n=>n.stackId===t.stackId&&n.dataKeys.includes(t.dataKey));if(r!=null)return r.position}}),jC=(e,t)=>{if(!(!e||(t==null?void 0:t.dataKey)==null)){var{stackId:r}=t;if(r!=null){var n=e[r];if(n){var{stackedData:i}=n;if(i){var a=i.find(o=>o.key===t.dataKey);return a}}}}},TC=S([Ui,_l],(e,t)=>{if(e.some(r=>r.type==="bar"&&t.dataKey===r.dataKey&&t.stackId===r.stackId&&t.stackId===r.stackId))return t}),kC=S([hC,_l],jC),CC=S([ve,PC,OC,AC,SC,EC,Y,Ds,Wg,kC,TC,fC],(e,t,r,n,i,a,o,u,l,c,s,f)=>{var{chartData:d,dataStartIndex:h,dataEndIndex:v}=u;if(!(s==null||a==null||o!=="horizontal"&&o!=="vertical"||t==null||r==null||n==null||i==null||l==null)){var{data:p}=s,m;if(p!=null&&p.length>0?m=p:m=d==null?void 0:d.slice(h,v+1),m!=null)return nC({layout:o,barSettings:s,pos:a,bandSize:l,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,stackedData:c,displayedData:m,offset:e,cells:f})}}),Ug=e=>{var{chartData:t}=e,r=ae(),n=Ce();return g.useEffect(()=>n?()=>{}:(r(Ld(t)),()=>{r(Ld(void 0))}),[t,r,n]),null},jh={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},Hg=nt({name:"brush",initialState:jh,reducers:{setBrushSettings(e,t){return t.payload==null?jh:t.payload}}}),{setBrushSettings:q2}=Hg.actions,_C=Hg.reducer;function MC(e,t,r){return(t=DC(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function DC(e){var t=IC(e,"string");return typeof t=="symbol"?t:t+""}function IC(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}class Ml{static create(t){return new Ml(t)}constructor(t){this.scale=t}get domain(){return this.scale.domain}get range(){return this.scale.range}get rangeMin(){return this.range()[0]}get rangeMax(){return this.range()[1]}get bandwidth(){return this.scale.bandwidth}apply(t){var{bandAware:r,position:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t!==void 0){if(n)switch(n){case"start":return this.scale(t);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+i}case"end":{var a=this.bandwidth?this.bandwidth():0;return this.scale(t)+a}default:return this.scale(t)}if(r){var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+o}return this.scale(t)}}isInRange(t){var r=this.range(),n=r[0],i=r[r.length-1];return n<=i?t>=n&&t<=i:t>=i&&t<=n}}MC(Ml,"EPS",1e-4);function NC(e){return(e%180+180)%180}var $C=function(t){var{width:r,height:n}=t,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=NC(i),o=a*Math.PI/180,u=Math.atan(n/r),l=o>u&&o{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=bt(e).dots.findIndex(n=>n===t.payload);r!==-1&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=bt(e).areas.findIndex(n=>n===t.payload);r!==-1&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=bt(e).lines.findIndex(n=>n===t.payload);r!==-1&&e.lines.splice(r,1)}}}),{addDot:z2,removeDot:F2,addArea:W2,removeArea:U2,addLine:H2,removeLine:Y2}=Yg.actions,LC=Yg.reducer,BC=g.createContext(void 0),KC=e=>{var{children:t}=e,[r]=g.useState("".concat(or("recharts"),"-clip")),n=Tl();if(n==null)return null;var{x:i,y:a,width:o,height:u}=n;return g.createElement(BC.Provider,{value:r},g.createElement("defs",null,g.createElement("clipPath",{id:r},g.createElement("rect",{x:i,y:a,height:u,width:o}))),t)};function $o(e,t){for(var r in e)if({}.hasOwnProperty.call(e,r)&&(!{}.hasOwnProperty.call(t,r)||e[r]!==t[r]))return!1;for(var n in t)if({}.hasOwnProperty.call(t,n)&&!{}.hasOwnProperty.call(e,n))return!1;return!0}function Gg(e,t,r){if(t<1)return[];if(t===1&&r===void 0)return e;for(var n=[],i=0;ie*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function FC(e,t){return Gg(e,t+1)}function WC(e,t,r,n,i){for(var a=(n||[]).slice(),{start:o,end:u}=t,l=0,c=1,s=o,f=function(){var v=n==null?void 0:n[l];if(v===void 0)return{v:Gg(n,c)};var p=l,m,y=()=>(m===void 0&&(m=r(v,p)),m),b=v.coordinate,x=l===0||yi(e,b,y,s,u);x||(l=0,s=o,c+=1),x&&(s=b+e*(y()/2+i),l+=c)},d;c<=a.length;)if(d=f(),d)return d.v;return[]}function Th(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t(v===void 0&&(v=r(h,d)),v);if(d===o-1){var m=e*(h.coordinate+e*p()/2-l);a[d]=h=Se(Se({},h),{},{tickCoord:m>0?h.coordinate-m*e:h.coordinate})}else a[d]=h=Se(Se({},h),{},{tickCoord:h.coordinate});var y=yi(e,h.tickCoord,p,u,l);y&&(l=h.tickCoord-e*(p()/2+i),a[d]=Se(Se({},h),{},{isShow:!0}))},s=o-1;s>=0;s--)c(s);return a}function VC(e,t,r,n,i,a){var o=(n||[]).slice(),u=o.length,{start:l,end:c}=t;if(a){var s=n[u-1],f=r(s,u-1),d=e*(s.coordinate+e*f/2-c);o[u-1]=s=Se(Se({},s),{},{tickCoord:d>0?s.coordinate-d*e:s.coordinate});var h=yi(e,s.tickCoord,()=>f,l,c);h&&(c=s.tickCoord-e*(f/2+i),o[u-1]=Se(Se({},s),{},{isShow:!0}))}for(var v=a?u-1:u,p=function(b){var x=o[b],P,w=()=>(P===void 0&&(P=r(x,b)),P);if(b===0){var O=e*(x.coordinate-e*w()/2-l);o[b]=x=Se(Se({},x),{},{tickCoord:O<0?x.coordinate-O*e:x.coordinate})}else o[b]=x=Se(Se({},x),{},{tickCoord:x.coordinate});var A=yi(e,x.tickCoord,w,l,c);A&&(l=x.tickCoord+e*(w()/2+i),o[b]=Se(Se({},x),{},{isShow:!0}))},m=0;m{var w=typeof c=="function"?c(x.value,P):x.value;return v==="width"?qC(Zr(w,{fontSize:t,letterSpacing:r}),p,f):Zr(w,{fontSize:t,letterSpacing:r})[v]},y=i.length>=2?ge(i[1].coordinate-i[0].coordinate):1,b=zC(a,y,v);return l==="equidistantPreserveStart"?WC(y,b,m,i,o):(l==="preserveStart"||l==="preserveStartEnd"?h=VC(y,b,m,i,o,l==="preserveStartEnd"):h=GC(y,b,m,i,o),h.filter(x=>x.isShow))}var XC=["viewBox"],ZC=["viewBox"];function xr(){return xr=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:[],{tickLine:i,stroke:a,tick:o,tickFormatter:u,unit:l}=this.props,c=Dl(he(he({},this.props),{},{ticks:n}),t,r),s=this.getTickTextAnchor(),f=this.getTickVerticalAnchor(),d=z(this.props,!1),h=z(o,!1),v=he(he({},d),{},{fill:"none"},z(i,!1)),p=c.map((m,y)=>{var{line:b,tick:x}=this.getTickLineCoord(m),P=he(he(he(he({textAnchor:s,verticalAnchor:f},d),{},{stroke:"none",fill:a},h),x),{},{index:y,payload:m,visibleTicksCount:c.length,tickFormatter:u});return g.createElement(ye,xr({className:"recharts-cartesian-axis-tick",key:"tick-".concat(m.value,"-").concat(m.coordinate,"-").concat(m.tickCoord)},wi(this.props,m,y)),i&&g.createElement("line",xr({},v,b,{className:H("recharts-cartesian-axis-tick-line",Rt(i,"className"))})),o&&Ut.renderTickItem(o,P,"".concat(typeof u=="function"?u(m.value,y):m.value).concat(l||"")))});return p.length>0?g.createElement("g",{className:"recharts-cartesian-axis-ticks"},p):null}render(){var{axisLine:t,width:r,height:n,className:i,hide:a}=this.props;if(a)return null;var{ticks:o}=this.props;return r!=null&&r<=0||n!=null&&n<=0?null:g.createElement(ye,{className:H("recharts-cartesian-axis",i),ref:u=>{if(u){var l=u.getElementsByClassName("recharts-cartesian-axis-tick-value");this.tickRefs.current=Array.from(l);var c=l[0];if(c){var s=window.getComputedStyle(c).fontSize,f=window.getComputedStyle(c).letterSpacing;(s!==this.state.fontSize||f!==this.state.letterSpacing)&&this.setState({fontSize:window.getComputedStyle(c).fontSize,letterSpacing:window.getComputedStyle(c).letterSpacing})}}}},t&&this.renderAxisLine(),this.renderTicks(this.state.fontSize,this.state.letterSpacing,o),qe.renderCallByParent(this.props))}}Il(Ut,"displayName","CartesianAxis");Il(Ut,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var t_=["x1","y1","x2","y2","key"],r_=["offset"],n_=["xAxisId","yAxisId"],i_=["xAxisId","yAxisId"];function _h(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function je(e){for(var t=1;t{var{fill:t}=e;if(!t||t==="none")return null;var{fillOpacity:r,x:n,y:i,width:a,height:o,ry:u}=e;return g.createElement("rect",{x:n,y:i,ry:u,width:a,height:o,stroke:"none",fill:t,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function Vg(e,t){var r;if(g.isValidElement(e))r=g.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var{x1:n,y1:i,x2:a,y2:o,key:u}=t,l=bi(t,t_),c=z(l,!1),{offset:s}=c,f=bi(c,r_);r=g.createElement("line",tr({},f,{x1:n,y1:i,x2:a,y2:o,fill:"none",key:u}))}return r}function c_(e){var{x:t,width:r,horizontal:n=!0,horizontalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=bi(e,n_),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:t,y1:c,x2:t+r,y2:c,key:"line-".concat(s),index:s});return Vg(n,f)});return g.createElement("g",{className:"recharts-cartesian-grid-horizontal"},l)}function f_(e){var{y:t,height:r,vertical:n=!0,verticalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=bi(e,i_),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:c,y1:t,x2:c,y2:t+r,key:"line-".concat(s),index:s});return Vg(n,f)});return g.createElement("g",{className:"recharts-cartesian-grid-vertical"},l)}function d_(e){var{horizontalFill:t,fillOpacity:r,x:n,y:i,width:a,height:o,horizontalPoints:u,horizontal:l=!0}=e;if(!l||!t||!t.length)return null;var c=u.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%t.length;return g.createElement("rect",{key:"react-".concat(d),y:f,x:n,height:v,width:a,stroke:"none",fill:t[p],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return g.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},s)}function h_(e){var{vertical:t=!0,verticalFill:r,fillOpacity:n,x:i,y:a,width:o,height:u,verticalPoints:l}=e;if(!t||!r||!r.length)return null;var c=l.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%r.length;return g.createElement("rect",{key:"react-".concat(d),x:f,y:a,width:v,height:u,stroke:"none",fill:r[p],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return g.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},s)}var v_=(e,t)=>{var{xAxis:r,width:n,height:i,offset:a}=e;return Gv(Dl(je(je(je({},Ut.defaultProps),r),{},{ticks:Vv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.left,a.left+a.width,t)},p_=(e,t)=>{var{yAxis:r,width:n,height:i,offset:a}=e;return Gv(Dl(je(je(je({},Ut.defaultProps),r),{},{ticks:Vv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.top,a.top+a.height,t)},m_={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0};function Nl(e){var t=rp(),r=np(),n=tp(),i=je(je({},it(e,m_)),{},{x:D(e.x)?e.x:n.left,y:D(e.y)?e.y:n.top,width:D(e.width)?e.width:n.width,height:D(e.height)?e.height:n.height}),{xAxisId:a,yAxisId:o,x:u,y:l,width:c,height:s,syncWithTicks:f,horizontalValues:d,verticalValues:h}=i,v=Ce(),p=$(T=>kd(T,"xAxis",a,v)),m=$(T=>kd(T,"yAxis",o,v));if(!D(c)||c<=0||!D(s)||s<=0||!D(u)||u!==+u||!D(l)||l!==+l)return null;var y=i.verticalCoordinatesGenerator||v_,b=i.horizontalCoordinatesGenerator||p_,{horizontalPoints:x,verticalPoints:P}=i;if((!x||!x.length)&&typeof b=="function"){var w=d&&d.length,O=b({yAxis:m?je(je({},m),{},{ticks:w?d:m.ticks}):void 0,width:t,height:r,offset:n},w?!0:f);Xr(Array.isArray(O),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof O,"]")),Array.isArray(O)&&(x=O)}if((!P||!P.length)&&typeof y=="function"){var A=h&&h.length,j=y({xAxis:p?je(je({},p),{},{ticks:A?h:p.ticks}):void 0,width:t,height:r,offset:n},A?!0:f);Xr(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(P=j)}return g.createElement("g",{className:"recharts-cartesian-grid"},g.createElement(l_,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),g.createElement(d_,tr({},i,{horizontalPoints:x})),g.createElement(h_,tr({},i,{verticalPoints:P})),g.createElement(c_,tr({},i,{offset:n,horizontalPoints:x,xAxis:p,yAxis:m})),g.createElement(f_,tr({},i,{offset:n,verticalPoints:P,xAxis:p,yAxis:m})))}Nl.displayName="CartesianGrid";var Xg=(e,t,r,n)=>vt(e,"xAxis",t,n),Zg=(e,t,r,n)=>Bt(e,"xAxis",t,n),Jg=(e,t,r,n)=>vt(e,"yAxis",r,n),Qg=(e,t,r,n)=>Bt(e,"yAxis",r,n),g_=S([Y,Xg,Jg,Zg,Qg],(e,t,r,n,i)=>qt(e,"xAxis")?en(t,n,!1):en(r,i,!1)),y_=(e,t,r,n,i)=>i,b_=S([Ui,y_],(e,t)=>{if(e.some(r=>r.type==="line"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),x_=S([Y,Xg,Jg,Zg,Qg,b_,g_,Ds],(e,t,r,n,i,a,o,u)=>{var{chartData:l,dataStartIndex:c,dataEndIndex:s}=u;if(!(a==null||t==null||r==null||n==null||i==null||n.length===0||i.length===0||o==null)){var{dataKey:f,data:d}=a,h;if(d!=null&&d.length>0?h=d:h=l==null?void 0:l.slice(c,s+1),h!=null)return B_({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataKey:f,bandSize:o,displayedData:h})}}),w_=["type","layout","connectNulls","needClip"],P_=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId"];function ey(e,t){if(e==null)return{};var r,n,i=O_(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{dataKey:t,name:r,stroke:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:_r(r,t),payload:e}]};function j_(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:u,unit:l}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:_r(o,t),hide:u,type:e.tooltipType,color:e.stroke,unit:l}}}var ty=(e,t)=>"".concat(t,"px ").concat(e-t,"px");function T_(e,t){for(var r=e.length%2!==0?[...e,0]:e,n=[],i=0;i{var n=r.reduce((f,d)=>f+d);if(!n)return ty(t,e);for(var i=Math.floor(e/n),a=e%n,o=t-e,u=[],l=0,c=0;la){u=[...r.slice(0,l),a-c];break}var s=u.length%2===0?[0,o]:[o];return[...T_(r,i),...u,...s].map(f=>"".concat(f,"px")).join(", ")};function C_(e,t){var r;if(g.isValidElement(e))r=g.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var n=H("recharts-line-dot",typeof e!="boolean"?e.className:"");r=g.createElement(bg,Cr({},t,{className:n}))}return r}function __(e,t){return e==null?!1:t?!0:e.length===1}function M_(e){var{clipPathId:t,points:r,props:n}=e,{dot:i,dataKey:a,needClip:o}=n;if(!__(r,i))return null;var u=Yh(i),l=z(n,!1),c=z(i,!0),s=r.map((d,h)=>{var v=ot(ot(ot({key:"dot-".concat(h),r:3},l),c),{},{index:h,cx:d.x,cy:d.y,dataKey:a,value:d.value,payload:d.payload,points:r});return C_(i,v)}),f={clipPath:o?"url(#clipPath-".concat(u?"":"dots-").concat(t,")"):null};return g.createElement(ye,Cr({className:"recharts-line-dots",key:"dots"},f),s)}function ku(e){var{clipPathId:t,pathRef:r,points:n,strokeDasharray:i,props:a,showLabels:o}=e,{type:u,layout:l,connectNulls:c,needClip:s}=a,f=ey(a,w_),d=ot(ot({},z(f,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:s?"url(#clipPath-".concat(t,")"):null,points:n,type:u,layout:l,connectNulls:c,strokeDasharray:i??a.strokeDasharray});return g.createElement(g.Fragment,null,(n==null?void 0:n.length)>1&&g.createElement(us,Cr({},d,{pathRef:r})),g.createElement(M_,{points:n,clipPathId:t,props:a}),o&&$t.renderCallByParent(a,n))}function D_(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function I_(e){var{clipPathId:t,props:r,pathRef:n,previousPointsRef:i,longestAnimatedLengthRef:a}=e,{points:o,strokeDasharray:u,isAnimationActive:l,animationBegin:c,animationDuration:s,animationEasing:f,animateNewValues:d,width:h,height:v,onAnimationEnd:p,onAnimationStart:m}=r,y=i.current,b=El(r,"recharts-line-"),[x,P]=g.useState(!1),w=g.useCallback(()=>{typeof p=="function"&&p(),P(!1)},[p]),O=g.useCallback(()=>{typeof m=="function"&&m(),P(!0)},[m]),A=D_(n.current),j=a.current;return g.createElement(Lt,{begin:c,duration:s,isActive:l,easing:f,from:{t:0},to:{t:1},onAnimationEnd:w,onAnimationStart:O,key:b},T=>{var{t:I}=T,C=Ke(j,A+j),_=Math.min(C(I),A),R;if(u){var B="".concat(u).split(/[,\s]+/gim).map(K=>parseFloat(K));R=k_(_,A,B)}else R=ty(A,_);if(y){var F=y.length/o.length,V=I===1?o:o.map((K,de)=>{var oe=Math.floor(de*F);if(y[oe]){var Ie=y[oe],Ge=Ke(Ie.x,K.x),L=Ke(Ie.y,K.y);return ot(ot({},K),{},{x:Ge(I),y:L(I)})}if(d){var we=Ke(h*2,K.x),Ht=Ke(v/2,K.y);return ot(ot({},K),{},{x:we(I),y:Ht(I)})}return ot(ot({},K),{},{x:K.x,y:K.y})});return i.current=V,g.createElement(ku,{props:r,points:V,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})}return I>0&&A>0&&(i.current=o,a.current=_),g.createElement(ku,{props:r,points:o,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})})}function N_(e){var{clipPathId:t,props:r}=e,{points:n,isAnimationActive:i}=r,a=g.useRef(null),o=g.useRef(0),u=g.useRef(null),l=a.current;return i&&n&&n.length&&l!==n?g.createElement(I_,{props:r,clipPathId:t,previousPointsRef:a,longestAnimatedLengthRef:o,pathRef:u}):g.createElement(ku,{props:r,points:n,clipPathId:t,pathRef:u,showLabels:!0})}var $_=(e,t)=>({x:e.x,y:e.y,value:e.value,errorVal:re(e.payload,t)});class R_ extends g.Component{constructor(){super(...arguments),ta(this,"id",or("recharts-line-"))}render(){var t,{hide:r,dot:n,points:i,className:a,xAxisId:o,yAxisId:u,top:l,left:c,width:s,height:f,id:d,needClip:h,layout:v}=this.props;if(r)return null;var p=H("recharts-line",a),m=J(d)?this.id:d,{r:y=3,strokeWidth:b=2}=(t=z(n,!1))!==null&&t!==void 0?t:{r:3,strokeWidth:2},x=Yh(n),P=y*2+b;return g.createElement(g.Fragment,null,g.createElement(ye,{className:p},h&&g.createElement("defs",null,g.createElement(Kg,{clipPathId:m,xAxisId:o,yAxisId:u}),!x&&g.createElement("clipPath",{id:"clipPath-dots-".concat(m)},g.createElement("rect",{x:c-P/2,y:l-P/2,width:s+P,height:f+P}))),g.createElement(N_,{props:this.props,clipPathId:m}),g.createElement($g,{direction:v==="horizontal"?"y":"x"},g.createElement(Mg,{xAxisId:o,yAxisId:u,data:i,dataPointFormatter:$_,errorBarOffset:0},this.props.children))),g.createElement(gk,{activeDot:this.props.activeDot,points:i,mainColor:this.props.stroke,itemDataKey:this.props.dataKey}))}}var ry={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:!fr.isSsr,label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0};function L_(e){var t=it(e,ry),{activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,connectNulls:u,dot:l,hide:c,isAnimationActive:s,label:f,legendType:d,xAxisId:h,yAxisId:v}=t,p=ey(t,P_),{needClip:m}=kl(h,v),{height:y,width:b,x,y:P}=Tl(),w=Ni(),O=Ce(),A=g.useMemo(()=>({dataKey:e.dataKey,data:e.data}),[e.dataKey,e.data]),j=$(T=>x_(T,h,v,O,A));return w!=="horizontal"&&w!=="vertical"?null:g.createElement(R_,Cr({},p,{connectNulls:u,dot:l,activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:s,hide:c,label:f,legendType:d,xAxisId:h,yAxisId:v,points:j,layout:w,height:y,width:b,left:x,top:P,needClip:m}))}function B_(e){var{layout:t,xAxis:r,yAxis:n,xAxisTicks:i,yAxisTicks:a,dataKey:o,bandSize:u,displayedData:l}=e;return l.map((c,s)=>{var f=re(c,o);return t==="horizontal"?{x:cf({axis:r,ticks:i,bandSize:u,entry:c,index:s}),y:J(f)?null:n.scale(f),value:f,payload:c}:{x:J(f)?null:r.scale(f),y:cf({axis:n,ticks:a,bandSize:u,entry:c,index:s}),value:f,payload:c}})}class $l extends g.PureComponent{render(){return g.createElement(Dg,{type:"line",data:this.props.data,xAxisId:this.props.xAxisId,yAxisId:this.props.yAxisId,zAxisId:0,dataKey:this.props.dataKey,stackId:void 0,hide:this.props.hide,barSize:void 0},g.createElement(jg,{legendPayload:E_(this.props)}),g.createElement(Sl,{fn:j_,args:this.props}),g.createElement(L_,this.props))}}ta($l,"displayName","Line");ta($l,"defaultProps",ry);function Dh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ih(e){for(var t=1;t{var{children:a}=e,o=ay(e,X_);return o},[e]),n=$(a=>kt(a,r.id)),i=r===n;return g.useEffect(()=>(t(W_(r)),()=>{t(U_(r))}),[r,t]),i?e.children:null}var rM=e=>{var{xAxisId:t,className:r}=e,n=$(ep),i=Ce(),a="xAxis",o=$(h=>Rr(h,a,t,i)),u=$(h=>Bm(h,a,t,i)),l=$(h=>Nm(h,t)),c=$(h=>pS(h,t));if(l==null||c==null)return null;var{dangerouslySetInnerHTML:s,ticks:f}=e,d=ay(e,Z_);return g.createElement(Ut,Cu({},d,{scale:o,x:c.x,y:c.y,width:l.width,height:l.height,className:H("recharts-".concat(a," ").concat(a),r),viewBox:n,ticks:u}))},nM=e=>{var t,r,n,i,a;return g.createElement(tM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.xAxisId,scale:e.scale,type:e.type,padding:e.padding,allowDataOverflow:e.allowDataOverflow,domain:e.domain,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,height:e.height,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter},g.createElement(rM,e))};class ra extends g.Component{render(){return g.createElement(nM,this.props)}}iy(ra,"displayName","XAxis");iy(ra,"defaultProps",{allowDataOverflow:Re.allowDataOverflow,allowDecimals:Re.allowDecimals,allowDuplicatedCategory:Re.allowDuplicatedCategory,height:Re.height,hide:!1,mirror:Re.mirror,orientation:Re.orientation,padding:Re.padding,reversed:Re.reversed,scale:Re.scale,tickCount:Re.tickCount,type:Re.type,xAxisId:0});var iM=e=>{var{ticks:t,label:r,labelGapWithTick:n=5,tickSize:i=0,tickMargin:a=0}=e,o=0;if(t){t.forEach(s=>{if(s){var f=s.getBoundingClientRect();f.width>o&&(o=f.width)}});var u=r?r.getBoundingClientRect().width:0,l=i+a,c=o+l+u+(r?n:0);return Math.round(c)}return 0},aM=["dangerouslySetInnerHTML","ticks"];function oy(e,t,r){return(t=oM(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function oM(e){var t=uM(e,"string");return typeof t=="symbol"?t:t+""}function uM(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function _u(){return _u=Object.assign?Object.assign.bind():function(e){for(var t=1;t(t(H_(e)),()=>{t(Y_(e))}),[e,t]),null}var fM=e=>{var t,{yAxisId:r,className:n,width:i,label:a}=e,o=g.useRef(null),u=g.useRef(null),l=$(ep),c=Ce(),s=ae(),f="yAxis",d=$(x=>Rr(x,f,r,c)),h=$(x=>$m(x,r)),v=$(x=>mS(x,r)),p=$(x=>Bm(x,f,r,c));if(g.useLayoutEffect(()=>{var x;if(!(i!=="auto"||!h||gl(a)||g.isValidElement(a))){var P=o.current,w=P==null||(x=P.tickRefs)===null||x===void 0?void 0:x.current,{tickSize:O,tickMargin:A}=P.props,j=iM({ticks:w,label:u.current,labelGapWithTick:5,tickSize:O,tickMargin:A});Math.round(h.width)!==Math.round(j)&&s(G_({id:r,width:j}))}},[o,o==null||(t=o.current)===null||t===void 0||(t=t.tickRefs)===null||t===void 0?void 0:t.current,h==null?void 0:h.width,h,s,a,r,i]),h==null||v==null)return null;var{dangerouslySetInnerHTML:m,ticks:y}=e,b=sM(e,aM);return g.createElement(Ut,_u({},b,{ref:o,labelRef:u,scale:d,x:v.x,y:v.y,width:h.width,height:h.height,className:H("recharts-".concat(f," ").concat(f),n),viewBox:l,ticks:p}))},dM=e=>{var t,r,n,i,a;return g.createElement(g.Fragment,null,g.createElement(cM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.yAxisId,scale:e.scale,type:e.type,domain:e.domain,allowDataOverflow:e.allowDataOverflow,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,padding:e.padding,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,width:e.width,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter}),g.createElement(fM,e))},hM={allowDataOverflow:Le.allowDataOverflow,allowDecimals:Le.allowDecimals,allowDuplicatedCategory:Le.allowDuplicatedCategory,hide:!1,mirror:Le.mirror,orientation:Le.orientation,padding:Le.padding,reversed:Le.reversed,scale:Le.scale,tickCount:Le.tickCount,type:Le.type,width:Le.width,yAxisId:0};class na extends g.Component{render(){return g.createElement(dM,this.props)}}oy(na,"displayName","YAxis");oy(na,"defaultProps",hM);var Ro={exports:{}},Lo={};/** - * @license React - * use-sync-external-store-with-selector.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Nh;function vM(){if(Nh)return Lo;Nh=1;var e=Bu();function t(l,c){return l===c&&(l!==0||1/l===1/c)||l!==l&&c!==c}var r=typeof Object.is=="function"?Object.is:t,n=e.useSyncExternalStore,i=e.useRef,a=e.useEffect,o=e.useMemo,u=e.useDebugValue;return Lo.useSyncExternalStoreWithSelector=function(l,c,s,f,d){var h=i(null);if(h.current===null){var v={hasValue:!1,value:null};h.current=v}else v=h.current;h=o(function(){function m(w){if(!y){if(y=!0,b=w,w=f(w),d!==void 0&&v.hasValue){var O=v.value;if(d(O,w))return x=O}return x=w}if(O=x,r(b,w))return O;var A=f(w);return d!==void 0&&d(O,A)?(b=w,O):(b=w,x=A)}var y=!1,b,x,P=s===void 0?null:s;return[function(){return m(c())},P===null?void 0:function(){return m(P())}]},[c,s,f,d]);var p=n(l,h[0],h[1]);return a(function(){v.hasValue=!0,v.value=p},[p]),u(p),p},Lo}var $h;function pM(){return $h||($h=1,Ro.exports=vM()),Ro.exports}pM();function mM(e){e()}function gM(){let e=null,t=null;return{clear(){e=null,t=null},notify(){mM(()=>{let r=e;for(;r;)r.callback(),r=r.next})},get(){const r=[];let n=e;for(;n;)r.push(n),n=n.next;return r},subscribe(r){let n=!0;const i=t={callback:r,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!n||e===null||(n=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var Rh={notify(){},get:()=>[]};function yM(e,t){let r,n=Rh,i=0,a=!1;function o(p){s();const m=n.subscribe(p);let y=!1;return()=>{y||(y=!0,m(),f())}}function u(){n.notify()}function l(){v.onStateChange&&v.onStateChange()}function c(){return a}function s(){i++,r||(r=e.subscribe(l),n=gM())}function f(){i--,r&&i===0&&(r(),r=void 0,n.clear(),n=Rh)}function d(){a||(a=!0,s())}function h(){a&&(a=!1,f())}const v={addNestedSub:o,notifyNestedSubs:u,handleChangeWrapper:l,isSubscribed:c,trySubscribe:d,tryUnsubscribe:h,getListeners:()=>n};return v}var bM=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",xM=bM(),wM=()=>typeof navigator<"u"&&navigator.product==="ReactNative",PM=wM(),OM=()=>xM||PM?g.useLayoutEffect:g.useEffect,AM=OM(),Bo=Symbol.for("react-redux-context"),Ko=typeof globalThis<"u"?globalThis:{};function SM(){if(!g.createContext)return{};const e=Ko[Bo]??(Ko[Bo]=new Map);let t=e.get(g.createContext);return t||(t=g.createContext(null),e.set(g.createContext,t)),t}var EM=SM();function jM(e){const{children:t,context:r,serverState:n,store:i}=e,a=g.useMemo(()=>{const l=yM(i);return{store:i,subscription:l,getServerState:n?()=>n:void 0}},[i,n]),o=g.useMemo(()=>i.getState(),[i]);AM(()=>{const{subscription:l}=a;return l.onStateChange=l.notifyNestedSubs,l.trySubscribe(),o!==i.getState()&&l.notifyNestedSubs(),()=>{l.tryUnsubscribe(),l.onStateChange=void 0}},[a,o]);const u=r||EM;return g.createElement(u.Provider,{value:a},t)}var TM=jM,kM=(e,t)=>t,Rl=S([kM,Y,kA,xe,eg,Ct,bE,ve],AE),Ll=e=>{var t=e.currentTarget.getBoundingClientRect(),r=t.width/e.currentTarget.offsetWidth,n=t.height/e.currentTarget.offsetHeight;return{chartX:Math.round((e.clientX-t.left)/r),chartY:Math.round((e.clientY-t.top)/n)}},uy=tt("mouseClick"),sy=hn();sy.startListening({actionCreator:uy,effect:(e,t)=>{var r=e.payload,n=Rl(t.getState(),Ll(r));(n==null?void 0:n.activeIndex)!=null&&t.dispatch(kS({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var Mu=tt("mouseMove"),ly=hn();ly.startListening({actionCreator:Mu,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=al(n,n.tooltip.settings.shared),a=Rl(n,Ll(r));i==="axis"&&((a==null?void 0:a.activeIndex)!=null?t.dispatch(Ym({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate})):t.dispatch(Hm()))}});function CM(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":t}var Lh={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index"},cy=nt({name:"rootProps",initialState:Lh,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=(r=t.payload.barGap)!==null&&r!==void 0?r:Lh.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className}}}),_M=cy.reducer,{updateOptions:MM}=cy.actions,fy=nt({name:"polarOptions",initialState:null,reducers:{updatePolarOptions:(e,t)=>t.payload}}),{updatePolarOptions:DM}=fy.actions,IM=fy.reducer,dy=tt("keyDown"),hy=tt("focus"),Bl=hn();Bl.startListening({actionCreator:dy,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip,a=e.payload;if(!(a!=="ArrowRight"&&a!=="ArrowLeft"&&a!=="Enter")){var o=Number(ol(i,mr(r))),u=Ct(r);if(a==="Enter"){var l=vi(r,"axis","hover",String(i.index));t.dispatch(wu({active:!i.active,activeIndex:i.index,activeDataKey:i.dataKey,activeCoordinate:l}));return}var c=xS(r),s=c==="left-to-right"?1:-1,f=a==="ArrowRight"?1:-1,d=o+f*s;if(!(u==null||d>=u.length||d<0)){var h=vi(r,"axis","hover",String(d));t.dispatch(wu({active:!0,activeIndex:d.toString(),activeDataKey:void 0,activeCoordinate:h}))}}}}});Bl.startListening({actionCreator:hy,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip;if(!i.active&&i.index==null){var a="0",o=vi(r,"axis","hover",String(a));t.dispatch(wu({activeDataKey:void 0,active:!0,activeIndex:a,activeCoordinate:o}))}}}});var Je=tt("externalEvent"),vy=hn();vy.startListening({actionCreator:Je,effect:(e,t)=>{if(e.payload.handler!=null){var r=t.getState(),n={activeCoordinate:lE(r),activeDataKey:ig(r),activeIndex:Kt(r),activeLabel:ng(r),activeTooltipIndex:Kt(r),isTooltipActive:cE(r)};e.payload.handler(n,e.payload.reactEvent)}}});var NM=S([Lr],e=>e.tooltipItemPayloads),$M=S([NM,On,(e,t,r)=>t,(e,t,r)=>r],(e,t,r,n)=>{var i=e.find(u=>u.settings.dataKey===n);if(i!=null){var{positions:a}=i;if(a!=null){var o=t(a,r);return o}}}),py=tt("touchMove"),my=hn();my.startListening({actionCreator:py,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=al(n,n.tooltip.settings.shared);if(i==="axis"){var a=Rl(n,Ll({clientX:r.touches[0].clientX,clientY:r.touches[0].clientY,currentTarget:r.currentTarget}));(a==null?void 0:a.activeIndex)!=null&&t.dispatch(Ym({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate}))}else if(i==="item"){var o,u=r.touches[0],l=document.elementFromPoint(u.clientX,u.clientY);if(!l||!l.getAttribute)return;var c=l.getAttribute(Jv),s=(o=l.getAttribute(Qv))!==null&&o!==void 0?o:void 0,f=$M(t.getState(),c,s);t.dispatch(Um({activeDataKey:s,activeIndex:c,activeCoordinate:f}))}}});var RM=Av({brush:_C,cartesianAxis:V_,chartData:KE,graphicalItems:wT,layout:Mx,legend:pw,options:NE,polarAxis:aT,polarOptions:IM,referenceElements:LC,rootProps:_M,tooltip:CS}),LM=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Chart";return nx({reducer:RM,preloadedState:t,middleware:n=>n({serializableCheck:!1}).concat([sy.middleware,ly.middleware,Bl.middleware,vy.middleware,my.middleware]),devTools:{serialize:{replacer:CM},name:"recharts-".concat(r)}})};function gy(e){var{preloadedState:t,children:r,reduxStoreName:n}=e,i=Ce(),a=g.useRef(null);if(i)return r;a.current==null&&(a.current=LM(t,n));var o=Ju;return g.createElement(TM,{context:o,store:a.current},r)}function yy(e){var{layout:t,width:r,height:n,margin:i}=e,a=ae(),o=Ce();return g.useEffect(()=>{o||(a(kx(t)),a(Cx({width:r,height:n})),a(Tx(i)))},[a,o,t,r,n,i]),null}function by(e){var t=ae();return g.useEffect(()=>{t(MM(e))},[t,e]),null}var BM=["children"];function KM(e,t){if(e==null)return{};var r,n,i=qM(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=rp(),n=np(),i=up();if(!Sr(r)||!Sr(n))return null;var{children:a,otherAttributes:o,title:u,desc:l}=e,c,s;return typeof o.tabIndex=="number"?c=o.tabIndex:c=i?0:void 0,typeof o.role=="string"?s=o.role:s=i?"application":void 0,g.createElement(Gh,xi({},o,{title:u,desc:l,role:s,tabIndex:c,width:r,height:n,style:zM,ref:t}),a)}),WM=e=>{var{children:t}=e,r=$(Ii);if(!r)return null;var{width:n,height:i,y:a,x:o}=r;return g.createElement(Gh,{width:n,height:i,x:o,y:a},t)},Bh=g.forwardRef((e,t)=>{var{children:r}=e,n=KM(e,BM),i=Ce();return i?g.createElement(WM,null,r):g.createElement(FM,xi({ref:t},n),r)});function UM(){var e=ae(),[t,r]=g.useState(null),n=$(ow);return g.useEffect(()=>{if(t!=null){var i=t.getBoundingClientRect(),a=i.width/t.offsetWidth;Ye(a)&&a!==n&&e(_x(a))}},[t,e,n]),r}function Kh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function HM(e){for(var t=1;t{var{children:r,className:n,height:i,onClick:a,onContextMenu:o,onDoubleClick:u,onMouseDown:l,onMouseEnter:c,onMouseLeave:s,onMouseMove:f,onMouseUp:d,onTouchEnd:h,onTouchMove:v,onTouchStart:p,style:m,width:y}=e,b=ae(),[x,P]=g.useState(null),[w,O]=g.useState(null);FE();var A=UM(),j=g.useCallback(L=>{A(L),typeof t=="function"&&t(L),P(L),O(L)},[A,t,P,O]),T=g.useCallback(L=>{b(uy(L)),b(Je({handler:a,reactEvent:L}))},[b,a]),I=g.useCallback(L=>{b(Mu(L)),b(Je({handler:c,reactEvent:L}))},[b,c]),C=g.useCallback(L=>{b(Hm()),b(Je({handler:s,reactEvent:L}))},[b,s]),_=g.useCallback(L=>{b(Mu(L)),b(Je({handler:f,reactEvent:L}))},[b,f]),R=g.useCallback(()=>{b(hy())},[b]),B=g.useCallback(L=>{b(dy(L.key))},[b]),F=g.useCallback(L=>{b(Je({handler:o,reactEvent:L}))},[b,o]),V=g.useCallback(L=>{b(Je({handler:u,reactEvent:L}))},[b,u]),K=g.useCallback(L=>{b(Je({handler:l,reactEvent:L}))},[b,l]),de=g.useCallback(L=>{b(Je({handler:d,reactEvent:L}))},[b,d]),oe=g.useCallback(L=>{b(Je({handler:p,reactEvent:L}))},[b,p]),Ie=g.useCallback(L=>{b(py(L)),b(Je({handler:v,reactEvent:L}))},[b,v]),Ge=g.useCallback(L=>{b(Je({handler:h,reactEvent:L}))},[b,h]);return g.createElement(cg.Provider,{value:x},g.createElement(Qy.Provider,{value:w},g.createElement("div",{className:H("recharts-wrapper",n),style:HM({position:"relative",cursor:"default",width:y,height:i},m),onClick:T,onContextMenu:F,onDoubleClick:V,onFocus:R,onKeyDown:B,onMouseDown:K,onMouseEnter:I,onMouseLeave:C,onMouseMove:_,onMouseUp:de,onTouchEnd:Ge,onTouchMove:Ie,onTouchStart:oe,ref:j},r)))}),ZM=["children","className","width","height","style","compact","title","desc"];function JM(e,t){if(e==null)return{};var r,n,i=QM(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{children:r,className:n,width:i,height:a,style:o,compact:u,title:l,desc:c}=e,s=JM(e,ZM),f=z(s,!1);return u?g.createElement(Bh,{otherAttributes:f,title:l,desc:c},r):g.createElement(XM,{className:n,style:o,width:i,height:a,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},g.createElement(Bh,{otherAttributes:f,title:l,desc:c,ref:t},g.createElement(KC,null,r)))}),e2=["width","height"];function Du(){return Du=Object.assign?Object.assign.bind():function(e){for(var t=1;tg.createElement(wy,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:a2,tooltipPayloadSearcher:vl,categoricalChartProps:e,ref:t})),u2=["axis","item"],s2=g.forwardRef((e,t)=>g.createElement(wy,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:u2,tooltipPayloadSearcher:vl,categoricalChartProps:e,ref:t}));function l2(e){var t=ae();return g.useEffect(()=>{t(DM(e))},[t,e]),null}var c2=["width","height","layout"];function Iu(){return Iu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=it(e,g2);return g.createElement(p2,{chartName:"PieChart",defaultTooltipEventType:"item",validateTooltipEventTypes:m2,tooltipPayloadSearcher:vl,categoricalChartProps:r,ref:t})});const Kl=(e="line")=>g.useMemo(()=>({...{margin:{top:5,right:30,left:20,bottom:5},gridProps:{strokeDasharray:"3 3",stroke:"#f3f4f6"},axisProps:{stroke:"#6b7280",fontSize:12}},...{line:{strokeWidth:3,dot:{strokeWidth:2,r:4},activeDot:{r:6,strokeWidth:2}},bar:{radius:[4,4,0,0]},pie:{innerRadius:60,outerRadius:80,paddingAngle:5}}[e]}),[e]),b2=({data:e={survived:95.2,lost:4.8}})=>{const t=Kl("pie"),r=[{name:"Survived",value:e.survived,color:"#10b981"},{name:"Lost",value:e.lost,color:"#ef4444"}];return E.jsxs(Nu,{children:[E.jsx($u,{children:E.jsx(Ru,{children:"Tree Survival Rate"})}),E.jsx(Ty,{value:e.survived,label:"Survival Rate"}),E.jsx(ml,{width:"100%",height:200,children:E.jsxs(y2,{children:[E.jsx(jl,{data:r,cx:"50%",cy:"50%",innerRadius:t.innerRadius,outerRadius:t.outerRadius,paddingAngle:t.paddingAngle,dataKey:"value",children:r.map((n,i)=>E.jsx(An,{fill:n.color},`cell-${i}`))}),E.jsx(pl,{content:E.jsx(Lu,{valueFormatter:n=>`${n}%`})})]})}),E.jsx(ky,{data:r})]})},x2=[{month:"Jan",height:1.2},{month:"Feb",height:1.4},{month:"Mar",height:1.6},{month:"Apr",height:1.8},{month:"May",height:2},{month:"Jun",height:2.2},{month:"Jul",height:2.4},{month:"Aug",height:2.6},{month:"Sep",height:2.8},{month:"Oct",height:3},{month:"Nov",height:3.2},{month:"Dec",height:3.4}],w2=({data:e=x2})=>{const t=Kl("line");return E.jsxs(Nu,{children:[E.jsx($u,{children:E.jsx(Ru,{children:"Average Tree Height Over Time"})}),E.jsx(ml,{width:"100%",height:300,children:E.jsxs(o2,{data:e,margin:t.margin,children:[E.jsx(Nl,{...t.gridProps}),E.jsx(ra,{dataKey:"month",...t.axisProps}),E.jsx(na,{...t.axisProps,label:{value:"Height (m)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(pl,{content:E.jsx(Lu,{valueFormatter:r=>`Average Height: ${r}m`})}),E.jsx($l,{type:"monotone",dataKey:"height",stroke:"#10b981",strokeWidth:t.strokeWidth,dot:{fill:"#10b981",...t.dot},activeDot:{r:6,stroke:"#10b981",...t.activeDot}})]})})]})},P2=[{month:"Jan",co2:.8},{month:"Feb",co2:1.2},{month:"Mar",co2:1.6},{month:"Apr",co2:2},{month:"May",co2:2.4},{month:"Jun",co2:2.8},{month:"Jul",co2:3.2},{month:"Aug",co2:3.6},{month:"Sep",co2:4},{month:"Oct",co2:4.4},{month:"Nov",co2:4.8},{month:"Dec",co2:5.2}],O2=({data:e=P2})=>{const t=Kl("bar");return E.jsxs(Nu,{children:[E.jsx($u,{children:E.jsx(Ru,{children:"CO₂ Absorption Over Time"})}),E.jsx(ml,{width:"100%",height:300,children:E.jsxs(s2,{data:e,margin:t.margin,children:[E.jsx(Nl,{...t.gridProps}),E.jsx(ra,{dataKey:"month",...t.axisProps}),E.jsx(na,{...t.axisProps,label:{value:"CO₂ (tons)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(pl,{content:E.jsx(Lu,{valueFormatter:r=>`CO₂ Absorption: ${r} tons`})}),E.jsx(Cl,{dataKey:"co2",fill:"#8b5cf6",radius:t.radius})]})})]})},A2=(e=!1)=>{const[t,r]=g.useState(e),n=g.useCallback(()=>{r(o=>!o)},[]),i=g.useCallback(()=>{r(!0)},[]),a=g.useCallback(()=>{r(!1)},[]);return{sidebarOpen:t,toggleSidebar:n,openSidebar:i,closeSidebar:a}},S2=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],X2=()=>{const{sidebarOpen:e,toggleSidebar:t,closeSidebar:r}=A2(),[n,i]=g.useState({}),a=g.useCallback(c=>{i(c),console.log("Filters changed:",c)},[]),o=()=>{console.log("Export started")},u=(c,s)=>{console.log(`Export completed: ${c} with ${s} records`)},l=c=>{console.error("Export error:",c)};return E.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[E.jsx(Dy,{onToggleSidebar:t}),E.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[E.jsx(Iy,{isOpen:e,onClose:r}),E.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:E.jsxs("div",{className:"max-w-7xl mx-auto",children:[E.jsx("div",{className:"mb-8",children:E.jsxs("div",{className:"flex justify-between items-center mb-4",children:[E.jsxs("div",{children:[E.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome to Nanwa"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Monitor your forests and track tree growth with real-time insights."})]}),E.jsx("div",{className:"flex items-center space-x-4",children:E.jsx(_y,{data:S2,fileName:"dashboard_data",filters:n,onExportStart:o,onExportComplete:u,onExportError:l})})]})}),E.jsx(Cy,{onFiltersChange:a}),E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:[E.jsx(Sn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),title:"Total Trees",value:"10,247",color:"green"}),E.jsx(Sn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Survival Rate",value:"95.2%",color:"blue"}),E.jsx(Sn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"})}),title:"Avg Height",value:"2.4m",color:"yellow"}),E.jsx(Sn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),title:"CO₂ Absorbed",value:"1.2t",color:"purple"})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6 mb-8",children:[E.jsx("div",{className:"lg:col-span-1",children:E.jsx(b2,{})}),E.jsx("div",{className:"lg:col-span-1 xl:col-span-2",children:E.jsx(w2,{})}),E.jsx("div",{className:"lg:col-span-2 xl:col-span-3",children:E.jsx(O2,{})})]}),E.jsx(Ny,{})]})})]})]})};export{X2 as DashboardPage}; diff --git a/frontend/dist/assets/ErrorPages-D4z_BlyV.js b/frontend/dist/assets/ErrorPages-pitdcj5q.js similarity index 91% rename from frontend/dist/assets/ErrorPages-D4z_BlyV.js rename to frontend/dist/assets/ErrorPages-pitdcj5q.js index bee73d7afe..c1ce5e3b0d 100644 --- a/frontend/dist/assets/ErrorPages-D4z_BlyV.js +++ b/frontend/dist/assets/ErrorPages-pitdcj5q.js @@ -1 +1 @@ -import{j as e,f as n,a as k,B as g,o as s}from"./index-DJ39NcK9.js";import"./IconButton-DIc-CK1Q.js";import{B as p}from"./TreeDetailLayout-CKxWzGm5.js";import"./ExportButton-Y3IlBTFt.js";import"./FormElements-5NQybTAT.js";import"./Table-BCdM5JW5.js";import"./ChartComponents-BrntlwBm.js";import"./MapSidebar-yNxbJbqT.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-C5b08Ak3.js";const v=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"9,22 9,12 15,12 15,22"})]}),L=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"23,4 23,10 17,10"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"1,20 1,14 7,14"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.49,9A9,9,0,0,0,5.64,5.64L1,10"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3.51,15A9,9,0,0,0,18.36,18.36L23,14"})]}),w=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("circle",{cx:"11",cy:"11",r:"8",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 21l-4.35-4.35"})]}),y=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6v6"}),e.jsx("circle",{cx:"12",cy:"16",r:"1",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2})]}),f=({className:r,children:o,...t})=>e.jsx("div",{className:n("min-h-screen flex items-center justify-center p-8 bg-gradient-to-br from-blue-500 to-purple-600",r),...t,children:o}),B=({className:r,children:o,...t})=>e.jsx("div",{className:n("bg-white rounded-2xl p-12 max-w-lg w-full text-center shadow-2xl","md:p-8 md:mx-4",r),...t,children:o}),N=({className:r,children:o,...t})=>e.jsx("div",{className:n("mb-8 [&>svg]:w-30 [&>svg]:h-30 [&>svg]:opacity-70","md:[&>svg]:w-20 md:[&>svg]:h-20",r),...t,children:o}),W=({className:r,children:o,...t})=>e.jsx("h1",{className:n("text-6xl font-extrabold text-red-500 m-0 leading-none","md:text-4xl",r),...t,children:o}),E=({className:r,children:o,...t})=>e.jsx("h2",{className:n("text-2xl font-semibold text-gray-800 my-4","md:text-xl",r),...t,children:o}),P=({className:r,children:o,...t})=>e.jsx("p",{className:n("text-lg text-gray-600 leading-relaxed my-6 mb-8",r),...t,children:o}),C=()=>{const r=k();return{goBack:()=>{r(-1)},goHome:()=>{r("/")},reload:()=>{window.location.reload()}}},a=({code:r,title:o,message:t,illustration:i,showBackButton:d=!0,showHomeButton:l=!0,showReloadButton:c=!1,className:x,...u})=>{const{goBack:h,goHome:j,reload:m}=C();return e.jsx(f,{className:x,...u,children:e.jsxs(B,{children:[e.jsx(N,{children:i}),e.jsx(W,{children:r}),e.jsx(E,{children:o}),e.jsx(P,{children:t}),e.jsxs(g,{className:"flex justify-center gap-4 flex-wrap mt-8",children:[d&&e.jsxs(s,{onClick:h,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(p,{className:"w-4 h-4"}),"Go Back"]}),c&&e.jsxs(s,{onClick:m,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(L,{className:"w-4 h-4"}),"Try Again"]}),l&&e.jsxs(s,{onClick:j,variant:"secondary",className:"flex items-center gap-2",children:[e.jsx(v,{className:"w-4 h-4"}),"Go Home"]})]})]})})},b=({className:r="",...o})=>e.jsxs("div",{className:r,...o,children:[e.jsx(w,{className:"text-gray-400"}),e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",className:"absolute inset-0 text-red-500",style:{width:"100%",height:"100%"},children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 8l-8 8"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 8l8 8"})]})]}),I=({className:r="",...o})=>e.jsx("div",{className:r,...o,children:e.jsx(y,{className:"text-gray-400"})}),q=()=>e.jsx(a,{code:"404",title:"Page Not Found",message:"The page you're looking for doesn't exist. It might have been moved, deleted, or you entered the wrong URL.",illustration:e.jsx(b,{}),showBackButton:!0,showHomeButton:!0,showReloadButton:!1}),D=()=>e.jsx(a,{code:"500",title:"Internal Server Error",message:"Something went wrong on our end. We're working to fix it. Please try again in a few moments.",illustration:e.jsx(I,{}),showBackButton:!1,showHomeButton:!0,showReloadButton:!0});export{q as NotFoundPage,D as ServerErrorPage}; +import{j as e,g as n,a as k,B as g,o as s}from"./index-Dzr7PBfw.js";import"./IconButton-CsSKj4cW.js";import{B as p}from"./TreeDetailLayout-Cc_P7nbu.js";import"./ExportButton-BvRt6B34.js";import"./FormElements-RQ7qOmSO.js";import"./Table-CZfmBv9T.js";import"./ChartComponents-CUdy75Zt.js";import"./MapSidebar-DZT3HTLm.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BRnXQ3uS.js";const v=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"9,22 9,12 15,12 15,22"})]}),L=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"23,4 23,10 17,10"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"1,20 1,14 7,14"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.49,9A9,9,0,0,0,5.64,5.64L1,10"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3.51,15A9,9,0,0,0,18.36,18.36L23,14"})]}),w=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("circle",{cx:"11",cy:"11",r:"8",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 21l-4.35-4.35"})]}),y=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6v6"}),e.jsx("circle",{cx:"12",cy:"16",r:"1",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2})]}),f=({className:r,children:o,...t})=>e.jsx("div",{className:n("min-h-screen flex items-center justify-center p-8 bg-gradient-to-br from-blue-500 to-purple-600",r),...t,children:o}),B=({className:r,children:o,...t})=>e.jsx("div",{className:n("bg-white rounded-2xl p-12 max-w-lg w-full text-center shadow-2xl","md:p-8 md:mx-4",r),...t,children:o}),N=({className:r,children:o,...t})=>e.jsx("div",{className:n("mb-8 [&>svg]:w-30 [&>svg]:h-30 [&>svg]:opacity-70","md:[&>svg]:w-20 md:[&>svg]:h-20",r),...t,children:o}),W=({className:r,children:o,...t})=>e.jsx("h1",{className:n("text-6xl font-extrabold text-red-500 m-0 leading-none","md:text-4xl",r),...t,children:o}),E=({className:r,children:o,...t})=>e.jsx("h2",{className:n("text-2xl font-semibold text-gray-800 my-4","md:text-xl",r),...t,children:o}),P=({className:r,children:o,...t})=>e.jsx("p",{className:n("text-lg text-gray-600 leading-relaxed my-6 mb-8",r),...t,children:o}),C=()=>{const r=k();return{goBack:()=>{r(-1)},goHome:()=>{r("/")},reload:()=>{window.location.reload()}}},a=({code:r,title:o,message:t,illustration:i,showBackButton:d=!0,showHomeButton:l=!0,showReloadButton:c=!1,className:x,...u})=>{const{goBack:h,goHome:j,reload:m}=C();return e.jsx(f,{className:x,...u,children:e.jsxs(B,{children:[e.jsx(N,{children:i}),e.jsx(W,{children:r}),e.jsx(E,{children:o}),e.jsx(P,{children:t}),e.jsxs(g,{className:"flex justify-center gap-4 flex-wrap mt-8",children:[d&&e.jsxs(s,{onClick:h,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(p,{className:"w-4 h-4"}),"Go Back"]}),c&&e.jsxs(s,{onClick:m,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(L,{className:"w-4 h-4"}),"Try Again"]}),l&&e.jsxs(s,{onClick:j,variant:"secondary",className:"flex items-center gap-2",children:[e.jsx(v,{className:"w-4 h-4"}),"Go Home"]})]})]})})},b=({className:r="",...o})=>e.jsxs("div",{className:r,...o,children:[e.jsx(w,{className:"text-gray-400"}),e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",className:"absolute inset-0 text-red-500",style:{width:"100%",height:"100%"},children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 8l-8 8"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 8l8 8"})]})]}),I=({className:r="",...o})=>e.jsx("div",{className:r,...o,children:e.jsx(y,{className:"text-gray-400"})}),q=()=>e.jsx(a,{code:"404",title:"Page Not Found",message:"The page you're looking for doesn't exist. It might have been moved, deleted, or you entered the wrong URL.",illustration:e.jsx(b,{}),showBackButton:!0,showHomeButton:!0,showReloadButton:!1}),D=()=>e.jsx(a,{code:"500",title:"Internal Server Error",message:"Something went wrong on our end. We're working to fix it. Please try again in a few moments.",illustration:e.jsx(I,{}),showBackButton:!1,showHomeButton:!0,showReloadButton:!0});export{q as NotFoundPage,D as ServerErrorPage}; diff --git a/frontend/dist/assets/ExportButton-Y3IlBTFt.js b/frontend/dist/assets/ExportButton-BvRt6B34.js similarity index 99% rename from frontend/dist/assets/ExportButton-Y3IlBTFt.js rename to frontend/dist/assets/ExportButton-BvRt6B34.js index 0a043312b0..f6517ea569 100644 --- a/frontend/dist/assets/ExportButton-Y3IlBTFt.js +++ b/frontend/dist/assets/ExportButton-BvRt6B34.js @@ -1,4 +1,4 @@ -import{r as Rn,j as Ne,d as et,l as $t}from"./index-DJ39NcK9.js";import{g as Za}from"./vendor-BtP0CW_r.js";var nn={exports:{}};/* @license +import{r as Rn,j as Ne,d as et,l as $t}from"./index-Dzr7PBfw.js";import{g as Za}from"./vendor-BtP0CW_r.js";var nn={exports:{}};/* @license Papa Parse v5.5.3 https://github.com/mholt/PapaParse diff --git a/frontend/dist/assets/FilterHeader-DzCm_NrU.js b/frontend/dist/assets/FilterHeader-CBw4AnG_.js similarity index 99% rename from frontend/dist/assets/FilterHeader-DzCm_NrU.js rename to frontend/dist/assets/FilterHeader-CBw4AnG_.js index 40dd236a75..de814f59ce 100644 --- a/frontend/dist/assets/FilterHeader-DzCm_NrU.js +++ b/frontend/dist/assets/FilterHeader-CBw4AnG_.js @@ -1,4 +1,4 @@ -var ta=Object.defineProperty;var ra=(n,a,t)=>a in n?ta(n,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[a]=t;var M=(n,a,t)=>ra(n,typeof a!="symbol"?a+"":a,t);import{r as D,h as wn,b as na,j as T,R as m,c as re,i as aa,d as H,k as oa,l as Pr}from"./index-DJ39NcK9.js";const ia=(n,a,t)=>{const[e,r]=D.useState(a||new Date(new Date().getFullYear(),0,1)),[o,i]=D.useState(t||new Date),s=D.useRef(n),c=D.useRef(!1);return D.useEffect(()=>{s.current=n},[n]),D.useEffect(()=>{if(!c.current){c.current=!0;return}const f=setTimeout(()=>{s.current&&e&&o&&s.current({startDate:e,endDate:o})},1e3);return()=>clearTimeout(f)},[e,o]),{startDate:e,endDate:o,handleStartDateChange:f=>{r(f),f&&o&&f>o&&i(f)},handleEndDateChange:f=>{i(f),f&&e&&f{const f=new Date(new Date().getFullYear(),0,1),p=new Date;r(f),i(p),s.current&&s.current({startDate:f,endDate:p})}}},Dn=6048e5,sa=864e5,Vt=6e4,qt=36e5,ca=1e3,Tr=Symbol.for("constructDateFrom");function U(n,a){return typeof n=="function"?n(a):n&&typeof n=="object"&&Tr in n?n[Tr](a):n instanceof Date?new n.constructor(a):new Date(a)}function E(n,a){return U(a||n,n)}function pe(n,a,t){const e=E(n,t==null?void 0:t.in);return isNaN(a)?U((t==null?void 0:t.in)||n,NaN):(a&&e.setDate(e.getDate()+a),e)}function he(n,a,t){const e=E(n,t==null?void 0:t.in);if(isNaN(a))return U(n,NaN);if(!a)return e;const r=e.getDate(),o=U(n,e.getTime());o.setMonth(e.getMonth()+a+1,0);const i=o.getDate();return r>=i?o:(e.setFullYear(o.getFullYear(),o.getMonth(),r),e)}function yn(n,a,t){return U(n,+E(n)+a)}function la(n,a,t){return yn(n,a*qt)}let ua={};function qe(){return ua}function Ee(n,a){var s,c,l,u;const t=qe(),e=(a==null?void 0:a.weekStartsOn)??((c=(s=a==null?void 0:a.locale)==null?void 0:s.options)==null?void 0:c.weekStartsOn)??t.weekStartsOn??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.weekStartsOn)??0,r=E(n,a==null?void 0:a.in),o=r.getDay(),i=(o=o.getTime()?e+1:t.getTime()>=s.getTime()?e:e-1}function Ot(n){const a=E(n),t=new Date(Date.UTC(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds()));return t.setUTCFullYear(a.getFullYear()),+n-+t}function Pe(n,...a){const t=U.bind(null,a.find(e=>typeof e=="object"));return a.map(t)}function Qe(n,a){const t=E(n,a==null?void 0:a.in);return t.setHours(0,0,0,0),t}function Xe(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Qe(e),i=Qe(r),s=+o-Ot(o),c=+i-Ot(i);return Math.round((s-c)/sa)}function da(n,a){const t=bn(n,a),e=U(n,0);return e.setFullYear(t,0,4),e.setHours(0,0,0,0),ze(e)}function cr(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setTime(e.getTime()+a*Vt),e}function mr(n,a,t){return he(n,a*3,t)}function fa(n,a,t){return yn(n,a*1e3)}function Rt(n,a,t){return pe(n,a*7,t)}function _e(n,a,t){return he(n,a*12,t)}function Or(n,a){let t,e=a==null?void 0:a.in;return n.forEach(r=>{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=E(r,e);(!t||t{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=E(r,e);(!t||t>o||isNaN(+o))&&(t=o)}),U(e,t||NaN)}function pa(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+Qe(e)==+Qe(r)}function xe(n){return n instanceof Date||typeof n=="object"&&Object.prototype.toString.call(n)==="[object Date]"}function Nt(n){return!(!xe(n)&&typeof n!="number"||isNaN(+E(n)))}function Yt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),i=e.getMonth()-r.getMonth();return o*12+i}function We(n,a){const t=E(n,a==null?void 0:a.in);return Math.trunc(t.getMonth()/3)+1}function Lt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),i=We(e)-We(r);return o*4+i}function Ft(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()-r.getFullYear()}function ha(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Nr(e,r),i=Math.abs(Xe(e,r));e.setDate(e.getDate()-o*i);const s=+(Nr(e,r)===-o),c=o*(i-s);return c===0?0:c}function Nr(n,a){const t=n.getFullYear()-a.getFullYear()||n.getMonth()-a.getMonth()||n.getDate()-a.getDate()||n.getHours()-a.getHours()||n.getMinutes()-a.getMinutes()||n.getSeconds()-a.getSeconds()||n.getMilliseconds()-a.getMilliseconds();return t<0?-1:t>0?1:t}function kn(n,a){const t=E(n,a==null?void 0:a.in);return t.setHours(23,59,59,999),t}function _n(n,a){const t=E(n,a==null?void 0:a.in),e=t.getMonth();return t.setFullYear(t.getFullYear(),e+1,0),t.setHours(23,59,59,999),t}function lr(n,a){const t=E(n,a==null?void 0:a.in),e=t.getMonth(),r=e-e%3;return t.setMonth(r,1),t.setHours(0,0,0,0),t}function xn(n,a){const t=E(n,a==null?void 0:a.in);return t.setDate(1),t.setHours(0,0,0,0),t}function Mn(n,a){const t=E(n,a==null?void 0:a.in),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function Kt(n,a){const t=E(n,a==null?void 0:a.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function ma(n,a){var s,c;const t=qe(),e=t.weekStartsOn??((c=(s=t.locale)==null?void 0:s.options)==null?void 0:c.weekStartsOn)??0,r=E(n,a==null?void 0:a.in),o=r.getDay(),i=(o{let e;const r=ga[n];return typeof r=="string"?e=r:a===1?e=r.one:e=r.other.replace("{{count}}",a.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+e:e+" ago":e};function Jt(n){return(a={})=>{const t=a.width?String(a.width):n.defaultWidth;return n.formats[t]||n.formats[n.defaultWidth]}}const wa={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Da={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},ya={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},ba={date:Jt({formats:wa,defaultWidth:"full"}),time:Jt({formats:Da,defaultWidth:"full"}),dateTime:Jt({formats:ya,defaultWidth:"full"})},ka={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},_a=(n,a,t,e)=>ka[n];function at(n){return(a,t)=>{const e=t!=null&&t.context?String(t.context):"standalone";let r;if(e==="formatting"&&n.formattingValues){const i=n.defaultFormattingWidth||n.defaultWidth,s=t!=null&&t.width?String(t.width):i;r=n.formattingValues[s]||n.formattingValues[i]}else{const i=n.defaultWidth,s=t!=null&&t.width?String(t.width):n.defaultWidth;r=n.values[s]||n.values[i]}const o=n.argumentCallback?n.argumentCallback(a):a;return r[o]}}const xa={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Ma={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Ca={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Sa={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Ea={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Pa={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Ta=(n,a)=>{const t=Number(n),e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},Oa={ordinalNumber:Ta,era:at({values:xa,defaultWidth:"wide"}),quarter:at({values:Ma,defaultWidth:"wide",argumentCallback:n=>n-1}),month:at({values:Ca,defaultWidth:"wide"}),day:at({values:Sa,defaultWidth:"wide"}),dayPeriod:at({values:Ea,defaultWidth:"wide",formattingValues:Pa,defaultFormattingWidth:"wide"})};function ot(n){return(a,t={})=>{const e=t.width,r=e&&n.matchPatterns[e]||n.matchPatterns[n.defaultMatchWidth],o=a.match(r);if(!o)return null;const i=o[0],s=e&&n.parsePatterns[e]||n.parsePatterns[n.defaultParseWidth],c=Array.isArray(s)?Na(s,d=>d.test(i)):Ra(s,d=>d.test(i));let l;l=n.valueCallback?n.valueCallback(c):c,l=t.valueCallback?t.valueCallback(l):l;const u=a.slice(i.length);return{value:l,rest:u}}}function Ra(n,a){for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&a(n[t]))return t}function Na(n,a){for(let t=0;t{const e=a.match(n.matchPattern);if(!e)return null;const r=e[0],o=a.match(n.parsePattern);if(!o)return null;let i=n.valueCallback?n.valueCallback(o[0]):o[0];i=t.valueCallback?t.valueCallback(i):i;const s=a.slice(r.length);return{value:i,rest:s}}}const La=/^(\d+)(th|st|nd|rd)?/i,Fa=/\d+/i,Ia={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Aa={any:[/^b/i,/^(a|c)/i]},Wa={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Ha={any:[/1/i,/2/i,/3/i,/4/i]},Ba={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Qa={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},ja={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Va={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},qa={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Ka={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Ua={ordinalNumber:Ya({matchPattern:La,parsePattern:Fa,valueCallback:n=>parseInt(n,10)}),era:ot({matchPatterns:Ia,defaultMatchWidth:"wide",parsePatterns:Aa,defaultParseWidth:"any"}),quarter:ot({matchPatterns:Wa,defaultMatchWidth:"wide",parsePatterns:Ha,defaultParseWidth:"any",valueCallback:n=>n+1}),month:ot({matchPatterns:Ba,defaultMatchWidth:"wide",parsePatterns:Qa,defaultParseWidth:"any"}),day:ot({matchPatterns:ja,defaultMatchWidth:"wide",parsePatterns:Va,defaultParseWidth:"any"}),dayPeriod:ot({matchPatterns:qa,defaultMatchWidth:"any",parsePatterns:Ka,defaultParseWidth:"any"})},Cn={code:"en-US",formatDistance:va,formatLong:ba,formatRelative:_a,localize:Oa,match:Ua,options:{weekStartsOn:0,firstWeekContainsDate:1}};function $a(n,a){const t=E(n,a==null?void 0:a.in);return Xe(t,Kt(t))+1}function gr(n,a){const t=E(n,a==null?void 0:a.in),e=+ze(t)-+da(t);return Math.round(e/Dn)+1}function vr(n,a){var u,d,f,p;const t=E(n,a==null?void 0:a.in),e=t.getFullYear(),r=qe(),o=(a==null?void 0:a.firstWeekContainsDate)??((d=(u=a==null?void 0:a.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??r.firstWeekContainsDate??((p=(f=r.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,i=U((a==null?void 0:a.in)||n,0);i.setFullYear(e+1,0,o),i.setHours(0,0,0,0);const s=Ee(i,a),c=U((a==null?void 0:a.in)||n,0);c.setFullYear(e,0,o),c.setHours(0,0,0,0);const l=Ee(c,a);return+t>=+s?e+1:+t>=+l?e:e-1}function Ga(n,a){var s,c,l,u;const t=qe(),e=(a==null?void 0:a.firstWeekContainsDate)??((c=(s=a==null?void 0:a.locale)==null?void 0:s.options)==null?void 0:c.firstWeekContainsDate)??t.firstWeekContainsDate??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.firstWeekContainsDate)??1,r=vr(n,a),o=U((a==null?void 0:a.in)||n,0);return o.setFullYear(r,0,e),o.setHours(0,0,0,0),Ee(o,a)}function Sn(n,a){const t=E(n,a==null?void 0:a.in),e=+Ee(t,a)-+Ga(t,a);return Math.round(e/Dn)+1}function K(n,a){const t=n<0?"-":"",e=Math.abs(n).toString().padStart(a,"0");return t+e}const Te={y(n,a){const t=n.getFullYear(),e=t>0?t:1-t;return K(a==="yy"?e%100:e,a.length)},M(n,a){const t=n.getMonth();return a==="M"?String(t+1):K(t+1,2)},d(n,a){return K(n.getDate(),a.length)},a(n,a){const t=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(n,a){return K(n.getHours()%12||12,a.length)},H(n,a){return K(n.getHours(),a.length)},m(n,a){return K(n.getMinutes(),a.length)},s(n,a){return K(n.getSeconds(),a.length)},S(n,a){const t=a.length,e=n.getMilliseconds(),r=Math.trunc(e*Math.pow(10,t-3));return K(r,a.length)}},Ke={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Yr={G:function(n,a,t){const e=n.getFullYear()>0?1:0;switch(a){case"G":case"GG":case"GGG":return t.era(e,{width:"abbreviated"});case"GGGGG":return t.era(e,{width:"narrow"});case"GGGG":default:return t.era(e,{width:"wide"})}},y:function(n,a,t){if(a==="yo"){const e=n.getFullYear(),r=e>0?e:1-e;return t.ordinalNumber(r,{unit:"year"})}return Te.y(n,a)},Y:function(n,a,t,e){const r=vr(n,e),o=r>0?r:1-r;if(a==="YY"){const i=o%100;return K(i,2)}return a==="Yo"?t.ordinalNumber(o,{unit:"year"}):K(o,a.length)},R:function(n,a){const t=bn(n);return K(t,a.length)},u:function(n,a){const t=n.getFullYear();return K(t,a.length)},Q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"Q":return String(e);case"QQ":return K(e,2);case"Qo":return t.ordinalNumber(e,{unit:"quarter"});case"QQQ":return t.quarter(e,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(e,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(e,{width:"wide",context:"formatting"})}},q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"q":return String(e);case"qq":return K(e,2);case"qo":return t.ordinalNumber(e,{unit:"quarter"});case"qqq":return t.quarter(e,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(e,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(e,{width:"wide",context:"standalone"})}},M:function(n,a,t){const e=n.getMonth();switch(a){case"M":case"MM":return Te.M(n,a);case"Mo":return t.ordinalNumber(e+1,{unit:"month"});case"MMM":return t.month(e,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(e,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(e,{width:"wide",context:"formatting"})}},L:function(n,a,t){const e=n.getMonth();switch(a){case"L":return String(e+1);case"LL":return K(e+1,2);case"Lo":return t.ordinalNumber(e+1,{unit:"month"});case"LLL":return t.month(e,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(e,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(e,{width:"wide",context:"standalone"})}},w:function(n,a,t,e){const r=Sn(n,e);return a==="wo"?t.ordinalNumber(r,{unit:"week"}):K(r,a.length)},I:function(n,a,t){const e=gr(n);return a==="Io"?t.ordinalNumber(e,{unit:"week"}):K(e,a.length)},d:function(n,a,t){return a==="do"?t.ordinalNumber(n.getDate(),{unit:"date"}):Te.d(n,a)},D:function(n,a,t){const e=$a(n);return a==="Do"?t.ordinalNumber(e,{unit:"dayOfYear"}):K(e,a.length)},E:function(n,a,t){const e=n.getDay();switch(a){case"E":case"EE":case"EEE":return t.day(e,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(e,{width:"short",context:"formatting"});case"EEEE":default:return t.day(e,{width:"wide",context:"formatting"})}},e:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"e":return String(o);case"ee":return K(o,2);case"eo":return t.ordinalNumber(o,{unit:"day"});case"eee":return t.day(r,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(r,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(r,{width:"short",context:"formatting"});case"eeee":default:return t.day(r,{width:"wide",context:"formatting"})}},c:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"c":return String(o);case"cc":return K(o,a.length);case"co":return t.ordinalNumber(o,{unit:"day"});case"ccc":return t.day(r,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(r,{width:"narrow",context:"standalone"});case"cccccc":return t.day(r,{width:"short",context:"standalone"});case"cccc":default:return t.day(r,{width:"wide",context:"standalone"})}},i:function(n,a,t){const e=n.getDay(),r=e===0?7:e;switch(a){case"i":return String(r);case"ii":return K(r,a.length);case"io":return t.ordinalNumber(r,{unit:"day"});case"iii":return t.day(e,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(e,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(e,{width:"short",context:"formatting"});case"iiii":default:return t.day(e,{width:"wide",context:"formatting"})}},a:function(n,a,t){const r=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(n,a,t){const e=n.getHours();let r;switch(e===12?r=Ke.noon:e===0?r=Ke.midnight:r=e/12>=1?"pm":"am",a){case"b":case"bb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(n,a,t){const e=n.getHours();let r;switch(e>=17?r=Ke.evening:e>=12?r=Ke.afternoon:e>=4?r=Ke.morning:r=Ke.night,a){case"B":case"BB":case"BBB":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(n,a,t){if(a==="ho"){let e=n.getHours()%12;return e===0&&(e=12),t.ordinalNumber(e,{unit:"hour"})}return Te.h(n,a)},H:function(n,a,t){return a==="Ho"?t.ordinalNumber(n.getHours(),{unit:"hour"}):Te.H(n,a)},K:function(n,a,t){const e=n.getHours()%12;return a==="Ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},k:function(n,a,t){let e=n.getHours();return e===0&&(e=24),a==="ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},m:function(n,a,t){return a==="mo"?t.ordinalNumber(n.getMinutes(),{unit:"minute"}):Te.m(n,a)},s:function(n,a,t){return a==="so"?t.ordinalNumber(n.getSeconds(),{unit:"second"}):Te.s(n,a)},S:function(n,a){return Te.S(n,a)},X:function(n,a,t){const e=n.getTimezoneOffset();if(e===0)return"Z";switch(a){case"X":return Fr(e);case"XXXX":case"XX":return Fe(e);case"XXXXX":case"XXX":default:return Fe(e,":")}},x:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"x":return Fr(e);case"xxxx":case"xx":return Fe(e);case"xxxxx":case"xxx":default:return Fe(e,":")}},O:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"O":case"OO":case"OOO":return"GMT"+Lr(e,":");case"OOOO":default:return"GMT"+Fe(e,":")}},z:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"z":case"zz":case"zzz":return"GMT"+Lr(e,":");case"zzzz":default:return"GMT"+Fe(e,":")}},t:function(n,a,t){const e=Math.trunc(+n/1e3);return K(e,a.length)},T:function(n,a,t){return K(+n,a.length)}};function Lr(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=Math.trunc(e/60),o=e%60;return o===0?t+String(r):t+String(r)+a+K(o,2)}function Fr(n,a){return n%60===0?(n>0?"-":"+")+K(Math.abs(n)/60,2):Fe(n,a)}function Fe(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=K(Math.trunc(e/60),2),o=K(e%60,2);return t+r+a+o}const Ir=(n,a)=>{switch(n){case"P":return a.date({width:"short"});case"PP":return a.date({width:"medium"});case"PPP":return a.date({width:"long"});case"PPPP":default:return a.date({width:"full"})}},En=(n,a)=>{switch(n){case"p":return a.time({width:"short"});case"pp":return a.time({width:"medium"});case"ppp":return a.time({width:"long"});case"pppp":default:return a.time({width:"full"})}},za=(n,a)=>{const t=n.match(/(P+)(p+)?/)||[],e=t[1],r=t[2];if(!r)return Ir(n,a);let o;switch(e){case"P":o=a.dateTime({width:"short"});break;case"PP":o=a.dateTime({width:"medium"});break;case"PPP":o=a.dateTime({width:"long"});break;case"PPPP":default:o=a.dateTime({width:"full"});break}return o.replace("{{date}}",Ir(e,a)).replace("{{time}}",En(r,a))},ur={p:En,P:za},Xa=/^D+$/,Za=/^Y+$/,Ja=["D","DD","YY","YYYY"];function eo(n){return Xa.test(n)}function to(n){return Za.test(n)}function ro(n,a,t){const e=no(n,a,t);if(console.warn(e),Ja.includes(n))throw new RangeError(e)}function no(n,a,t){const e=n[0]==="Y"?"years":"days of the month";return`Use \`${n.toLowerCase()}\` instead of \`${n}\` (in \`${a}\`) for formatting ${e} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const ao=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,oo=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,io=/^'([^]*?)'?$/,so=/''/g,co=/[a-zA-Z]/;function Ar(n,a,t){var u,d,f,p,h,v,g,y;const e=qe(),r=(t==null?void 0:t.locale)??e.locale??Cn,o=(t==null?void 0:t.firstWeekContainsDate)??((d=(u=t==null?void 0:t.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??e.firstWeekContainsDate??((p=(f=e.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,i=(t==null?void 0:t.weekStartsOn)??((v=(h=t==null?void 0:t.locale)==null?void 0:h.options)==null?void 0:v.weekStartsOn)??e.weekStartsOn??((y=(g=e.locale)==null?void 0:g.options)==null?void 0:y.weekStartsOn)??0,s=E(n,t==null?void 0:t.in);if(!Nt(s))throw new RangeError("Invalid time value");let c=a.match(oo).map(_=>{const w=_[0];if(w==="p"||w==="P"){const b=ur[w];return b(_,r.formatLong)}return _}).join("").match(ao).map(_=>{if(_==="''")return{isToken:!1,value:"'"};const w=_[0];if(w==="'")return{isToken:!1,value:lo(_)};if(Yr[w])return{isToken:!0,value:_};if(w.match(co))throw new RangeError("Format string contains an unescaped latin alphabet character `"+w+"`");return{isToken:!1,value:_}});r.localize.preprocessor&&(c=r.localize.preprocessor(s,c));const l={firstWeekContainsDate:o,weekStartsOn:i,locale:r};return c.map(_=>{if(!_.isToken)return _.value;const w=_.value;(!(t!=null&&t.useAdditionalWeekYearTokens)&&to(w)||!(t!=null&&t.useAdditionalDayOfYearTokens)&&eo(w))&&ro(w,a,String(n));const b=Yr[w[0]];return b(s,w,r.localize,l)}).join("")}function lo(n){const a=n.match(io);return a?a[1].replace(so,"'"):n}function Wr(n,a){return E(n,a==null?void 0:a.in).getDate()}function uo(n,a){return E(n,a==null?void 0:a.in).getDay()}function fo(n,a){const t=E(n,a==null?void 0:a.in),e=t.getFullYear(),r=t.getMonth(),o=U(t,0);return o.setFullYear(e,r+1,0),o.setHours(0,0,0,0),o.getDate()}function po(){return Object.assign({},qe())}function Me(n,a){return E(n,a==null?void 0:a.in).getHours()}function ho(n,a){const t=E(n,a==null?void 0:a.in).getDay();return t===0?7:t}function Ce(n,a){return E(n,a==null?void 0:a.in).getMinutes()}function ne(n,a){return E(n,a==null?void 0:a.in).getMonth()}function Re(n){return E(n).getSeconds()}function dr(n){return+E(n)}function L(n,a){return E(n,a==null?void 0:a.in).getFullYear()}function Ye(n,a){return+E(n)>+E(a)}function je(n,a){return+E(n)<+E(a)}function mo(n,a){return+E(n)==+E(a)}function go(n,a){const t=vo(a)?new a(0):U(a,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t.setHours(n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()),t}function vo(n){var a;return typeof n=="function"&&((a=n.prototype)==null?void 0:a.constructor)===n}const wo=10;class Pn{constructor(){M(this,"subPriority",0)}validate(a,t){return!0}}class Do extends Pn{constructor(a,t,e,r,o){super(),this.value=a,this.validateValue=t,this.setValue=e,this.priority=r,o&&(this.subPriority=o)}validate(a,t){return this.validateValue(a,this.value,t)}set(a,t,e){return this.setValue(a,t,this.value,e)}}class yo extends Pn{constructor(t,e){super();M(this,"priority",wo);M(this,"subPriority",-1);this.context=t||(r=>U(e,r))}set(t,e){return e.timestampIsSet?t:U(t,go(t,this.context))}}class B{run(a,t,e,r){const o=this.parse(a,t,e,r);return o?{setter:new Do(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(a,t,e){return!0}}class bo extends B{constructor(){super(...arguments);M(this,"priority",140);M(this,"incompatibleTokens",["R","u","t","T"])}parse(t,e,r){switch(e){case"G":case"GG":case"GGG":return r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"});case"GGGGG":return r.era(t,{width:"narrow"});case"GGGG":default:return r.era(t,{width:"wide"})||r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"})}}set(t,e,r){return e.era=r,t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}const Z={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},ve={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function J(n,a){return n&&{value:a(n.value),rest:n.rest}}function z(n,a){const t=a.match(n);return t?{value:parseInt(t[0],10),rest:a.slice(t[0].length)}:null}function we(n,a){const t=a.match(n);if(!t)return null;if(t[0]==="Z")return{value:0,rest:a.slice(1)};const e=t[1]==="+"?1:-1,r=t[2]?parseInt(t[2],10):0,o=t[3]?parseInt(t[3],10):0,i=t[5]?parseInt(t[5],10):0;return{value:e*(r*qt+o*Vt+i*ca),rest:a.slice(t[0].length)}}function Tn(n){return z(Z.anyDigitsSigned,n)}function X(n,a){switch(n){case 1:return z(Z.singleDigit,a);case 2:return z(Z.twoDigits,a);case 3:return z(Z.threeDigits,a);case 4:return z(Z.fourDigits,a);default:return z(new RegExp("^\\d{1,"+n+"}"),a)}}function It(n,a){switch(n){case 1:return z(Z.singleDigitSigned,a);case 2:return z(Z.twoDigitsSigned,a);case 3:return z(Z.threeDigitsSigned,a);case 4:return z(Z.fourDigitsSigned,a);default:return z(new RegExp("^-?\\d{1,"+n+"}"),a)}}function wr(n){switch(n){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function On(n,a){const t=a>0,e=t?a:1-a;let r;if(e<=50)r=n||100;else{const o=e+50,i=Math.trunc(o/100)*100,s=n>=o%100;r=n+i-(s?100:0)}return t?r:1-r}function Rn(n){return n%400===0||n%4===0&&n%100!==0}class ko extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(t,e,r){const o=i=>({year:i,isTwoDigitYear:e==="yy"});switch(e){case"y":return J(X(4,t),o);case"yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r){const o=t.getFullYear();if(r.isTwoDigitYear){const s=On(r.year,o);return t.setFullYear(s,0,1),t.setHours(0,0,0,0),t}const i=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(i,0,1),t.setHours(0,0,0,0),t}}class _o extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(t,e,r){const o=i=>({year:i,isTwoDigitYear:e==="YY"});switch(e){case"Y":return J(X(4,t),o);case"Yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r,o){const i=vr(t,o);if(r.isTwoDigitYear){const c=On(r.year,i);return t.setFullYear(c,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}const s=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(s,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}}class xo extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(t,e){return It(e==="R"?4:e.length,t)}set(t,e,r){const o=U(t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),ze(o)}}class Mo extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(t,e){return It(e==="u"?4:e.length,t)}set(t,e,r){return t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}class Co extends B{constructor(){super(...arguments);M(this,"priority",120);M(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"Q":case"QQ":return X(e.length,t);case"Qo":return r.ordinalNumber(t,{unit:"quarter"});case"QQQ":return r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQ":default:return r.quarter(t,{width:"wide",context:"formatting"})||r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class So extends B{constructor(){super(...arguments);M(this,"priority",120);M(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"q":case"qq":return X(e.length,t);case"qo":return r.ordinalNumber(t,{unit:"quarter"});case"qqq":return r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(t,{width:"narrow",context:"standalone"});case"qqqq":default:return r.quarter(t,{width:"wide",context:"standalone"})||r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class Eo extends B{constructor(){super(...arguments);M(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]);M(this,"priority",110)}parse(t,e,r){const o=i=>i-1;switch(e){case"M":return J(z(Z.month,t),o);case"MM":return J(X(2,t),o);case"Mo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"MMM":return r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(t,{width:"narrow",context:"formatting"});case"MMMM":default:return r.month(t,{width:"wide",context:"formatting"})||r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}class Po extends B{constructor(){super(...arguments);M(this,"priority",110);M(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(t,e,r){const o=i=>i-1;switch(e){case"L":return J(z(Z.month,t),o);case"LL":return J(X(2,t),o);case"Lo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"LLL":return r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(t,{width:"narrow",context:"standalone"});case"LLLL":default:return r.month(t,{width:"wide",context:"standalone"})||r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}function To(n,a,t){const e=E(n,t==null?void 0:t.in),r=Sn(e,t)-a;return e.setDate(e.getDate()-r*7),E(e,t==null?void 0:t.in)}class Oo extends B{constructor(){super(...arguments);M(this,"priority",100);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(t,e,r){switch(e){case"w":return z(Z.week,t);case"wo":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r,o){return Ee(To(t,r,o),o)}}function Ro(n,a,t){const e=E(n,t==null?void 0:t.in),r=gr(e,t)-a;return e.setDate(e.getDate()-r*7),e}class No extends B{constructor(){super(...arguments);M(this,"priority",100);M(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(t,e,r){switch(e){case"I":return z(Z.week,t);case"Io":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r){return ze(Ro(t,r))}}const Yo=[31,28,31,30,31,30,31,31,30,31,30,31],Lo=[31,29,31,30,31,30,31,31,30,31,30,31];class Fo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"subPriority",1);M(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"d":return z(Z.date,t);case"do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear(),o=Rn(r),i=t.getMonth();return o?e>=1&&e<=Lo[i]:e>=1&&e<=Yo[i]}set(t,e,r){return t.setDate(r),t.setHours(0,0,0,0),t}}class Io extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"subpriority",1);M(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(t,e,r){switch(e){case"D":case"DD":return z(Z.dayOfYear,t);case"Do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear();return Rn(r)?e>=1&&e<=366:e>=1&&e<=365}set(t,e,r){return t.setMonth(0,r),t.setHours(0,0,0,0),t}}function Dr(n,a,t){var d,f,p,h;const e=qe(),r=(t==null?void 0:t.weekStartsOn)??((f=(d=t==null?void 0:t.locale)==null?void 0:d.options)==null?void 0:f.weekStartsOn)??e.weekStartsOn??((h=(p=e.locale)==null?void 0:p.options)==null?void 0:h.weekStartsOn)??0,o=E(n,t==null?void 0:t.in),i=o.getDay(),c=(a%7+7)%7,l=7-r,u=a<0||a>6?a-(i+l)%7:(c+l)%7-(i+l)%7;return pe(o,u,t)}class Ao extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"E":case"EE":case"EEE":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEE":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Wo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(t,e,r,o){const i=s=>{const c=Math.floor((s-1)/7)*7;return(s+o.weekStartsOn+6)%7+c};switch(e){case"e":case"ee":return J(X(e.length,t),i);case"eo":return J(r.ordinalNumber(t,{unit:"day"}),i);case"eee":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeeee":return r.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeee":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Ho extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(t,e,r,o){const i=s=>{const c=Math.floor((s-1)/7)*7;return(s+o.weekStartsOn+6)%7+c};switch(e){case"c":case"cc":return J(X(e.length,t),i);case"co":return J(r.ordinalNumber(t,{unit:"day"}),i);case"ccc":return r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"ccccc":return r.day(t,{width:"narrow",context:"standalone"});case"cccccc":return r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"cccc":default:return r.day(t,{width:"wide",context:"standalone"})||r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}function Bo(n,a,t){const e=E(n,t==null?void 0:t.in),r=ho(e,t),o=a-r;return pe(e,o,t)}class Qo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(t,e,r){const o=i=>i===0?7:i;switch(e){case"i":case"ii":return X(e.length,t);case"io":return r.ordinalNumber(t,{unit:"day"});case"iii":return J(r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiii":return J(r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiiii":return J(r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiii":default:return J(r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o)}}validate(t,e){return e>=1&&e<=7}set(t,e,r){return t=Bo(t,r),t.setHours(0,0,0,0),t}}class jo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(t,e,r){switch(e){case"a":case"aa":case"aaa":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaaa":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaa":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Vo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(t,e,r){switch(e){case"b":case"bb":case"bbb":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbbb":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbb":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class qo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["a","b","t","T"])}parse(t,e,r){switch(e){case"B":case"BB":case"BBB":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBBB":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBB":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Ko extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["H","K","k","t","T"])}parse(t,e,r){switch(e){case"h":return z(Z.hour12h,t);case"ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=12}set(t,e,r){const o=t.getHours()>=12;return o&&r<12?t.setHours(r+12,0,0,0):!o&&r===12?t.setHours(0,0,0,0):t.setHours(r,0,0,0),t}}class Uo extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(t,e,r){switch(e){case"H":return z(Z.hour23h,t);case"Ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=23}set(t,e,r){return t.setHours(r,0,0,0),t}}class $o extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["h","H","k","t","T"])}parse(t,e,r){switch(e){case"K":return z(Z.hour11h,t);case"Ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.getHours()>=12&&r<12?t.setHours(r+12,0,0,0):t.setHours(r,0,0,0),t}}class Go extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(t,e,r){switch(e){case"k":return z(Z.hour24h,t);case"ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=24}set(t,e,r){const o=r<=24?r%24:r;return t.setHours(o,0,0,0),t}}class zo extends B{constructor(){super(...arguments);M(this,"priority",60);M(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"m":return z(Z.minute,t);case"mo":return r.ordinalNumber(t,{unit:"minute"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setMinutes(r,0,0),t}}class Xo extends B{constructor(){super(...arguments);M(this,"priority",50);M(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"s":return z(Z.second,t);case"so":return r.ordinalNumber(t,{unit:"second"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setSeconds(r,0),t}}class Zo extends B{constructor(){super(...arguments);M(this,"priority",30);M(this,"incompatibleTokens",["t","T"])}parse(t,e){const r=o=>Math.trunc(o*Math.pow(10,-e.length+3));return J(X(e.length,t),r)}set(t,e,r){return t.setMilliseconds(r),t}}class Jo extends B{constructor(){super(...arguments);M(this,"priority",10);M(this,"incompatibleTokens",["t","T","x"])}parse(t,e){switch(e){case"X":return we(ve.basicOptionalMinutes,t);case"XX":return we(ve.basic,t);case"XXXX":return we(ve.basicOptionalSeconds,t);case"XXXXX":return we(ve.extendedOptionalSeconds,t);case"XXX":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class ei extends B{constructor(){super(...arguments);M(this,"priority",10);M(this,"incompatibleTokens",["t","T","X"])}parse(t,e){switch(e){case"x":return we(ve.basicOptionalMinutes,t);case"xx":return we(ve.basic,t);case"xxxx":return we(ve.basicOptionalSeconds,t);case"xxxxx":return we(ve.extendedOptionalSeconds,t);case"xxx":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class ti extends B{constructor(){super(...arguments);M(this,"priority",40);M(this,"incompatibleTokens","*")}parse(t){return Tn(t)}set(t,e,r){return[U(t,r*1e3),{timestampIsSet:!0}]}}class ri extends B{constructor(){super(...arguments);M(this,"priority",20);M(this,"incompatibleTokens","*")}parse(t){return Tn(t)}set(t,e,r){return[U(t,r),{timestampIsSet:!0}]}}const ni={G:new bo,y:new ko,Y:new _o,R:new xo,u:new Mo,Q:new Co,q:new So,M:new Eo,L:new Po,w:new Oo,I:new No,d:new Fo,D:new Io,E:new Ao,e:new Wo,c:new Ho,i:new Qo,a:new jo,b:new Vo,B:new qo,h:new Ko,H:new Uo,K:new $o,k:new Go,m:new zo,s:new Xo,S:new Zo,X:new Jo,x:new ei,t:new ti,T:new ri},ai=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,oi=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,ii=/^'([^]*?)'?$/,si=/''/g,ci=/\S/,li=/[a-zA-Z]/;function ui(n,a,t,e){var g,y,_,w,b,P,O,C;const r=()=>U((e==null?void 0:e.in)||t,NaN),o=po(),i=(e==null?void 0:e.locale)??o.locale??Cn,s=(e==null?void 0:e.firstWeekContainsDate)??((y=(g=e==null?void 0:e.locale)==null?void 0:g.options)==null?void 0:y.firstWeekContainsDate)??o.firstWeekContainsDate??((w=(_=o.locale)==null?void 0:_.options)==null?void 0:w.firstWeekContainsDate)??1,c=(e==null?void 0:e.weekStartsOn)??((P=(b=e==null?void 0:e.locale)==null?void 0:b.options)==null?void 0:P.weekStartsOn)??o.weekStartsOn??((C=(O=o.locale)==null?void 0:O.options)==null?void 0:C.weekStartsOn)??0;if(!a)return n?r():E(t,e==null?void 0:e.in);const l={firstWeekContainsDate:s,weekStartsOn:c,locale:i},u=[new yo(e==null?void 0:e.in,t)],d=a.match(oi).map(k=>{const S=k[0];if(S in ur){const N=ur[S];return N(k,i.formatLong)}return k}).join("").match(ai),f=[];for(let k of d){const S=k[0],N=ni[S];if(N){const{incompatibleTokens:Q}=N;if(Array.isArray(Q)){const $=f.find(j=>Q.includes(j.token)||j.token===S);if($)throw new RangeError(`The format string mustn't contain \`${$.fullToken}\` and \`${k}\` at the same time`)}else if(N.incompatibleTokens==="*"&&f.length>0)throw new RangeError(`The format string mustn't contain \`${k}\` and any other token at the same time`);f.push({token:S,fullToken:k});const I=N.run(n,k,i.match,l);if(!I)return r();u.push(I.setter),n=I.rest}else{if(S.match(li))throw new RangeError("Format string contains an unescaped latin alphabet character `"+S+"`");if(k==="''"?k="'":S==="'"&&(k=di(k)),n.indexOf(k)===0)n=n.slice(k.length);else return r()}}if(n.length>0&&ci.test(n))return r();const p=u.map(k=>k.priority).sort((k,S)=>S-k).filter((k,S,N)=>N.indexOf(k)===S).map(k=>u.filter(S=>S.priority===k).sort((S,N)=>N.subPriority-S.subPriority)).map(k=>k[0]);let h=E(t,e==null?void 0:e.in);if(isNaN(+h))return r();const v={};for(const k of p){if(!k.validate(h,l))return r();const S=k.set(h,v,l);Array.isArray(S)?(h=S[0],Object.assign(v,S[1])):h=S}return h}function di(n){return n.match(ii)[1].replace(si,"'")}function fi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()&&e.getMonth()===r.getMonth()}function pi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+lr(e)==+lr(r)}function hi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()}function ut(n,a,t){const e=+E(n,t==null?void 0:t.in),[r,o]=[+E(a.start,t==null?void 0:t.in),+E(a.end,t==null?void 0:t.in)].sort((i,s)=>i-s);return e>=r&&e<=o}function mi(n,a,t){return pe(n,-1,t)}function gi(n,a){const t=()=>U(a==null?void 0:a.in,NaN),r=yi(n);let o;if(r.date){const l=bi(r.date,2);o=ki(l.restDateString,l.year)}if(!o||isNaN(+o))return t();const i=+o;let s=0,c;if(r.time&&(s=_i(r.time),isNaN(s)))return t();if(r.timezone){if(c=xi(r.timezone),isNaN(c))return t()}else{const l=new Date(i+s),u=E(0,a==null?void 0:a.in);return u.setFullYear(l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate()),u.setHours(l.getUTCHours(),l.getUTCMinutes(),l.getUTCSeconds(),l.getUTCMilliseconds()),u}return E(i+s+c,a==null?void 0:a.in)}const vt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},vi=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,wi=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Di=/^([+-])(\d{2})(?::?(\d{2}))?$/;function yi(n){const a={},t=n.split(vt.dateTimeDelimiter);let e;if(t.length>2)return a;if(/:/.test(t[0])?e=t[0]:(a.date=t[0],e=t[1],vt.timeZoneDelimiter.test(a.date)&&(a.date=n.split(vt.timeZoneDelimiter)[0],e=n.substr(a.date.length,n.length))),e){const r=vt.timezone.exec(e);r?(a.time=e.replace(r[1],""),a.timezone=r[1]):a.time=e}return a}function bi(n,a){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+a)+"})|(\\d{2}|[+-]\\d{"+(2+a)+"})$)"),e=n.match(t);if(!e)return{year:NaN,restDateString:""};const r=e[1]?parseInt(e[1]):null,o=e[2]?parseInt(e[2]):null;return{year:o===null?r:o*100,restDateString:n.slice((e[1]||e[2]).length)}}function ki(n,a){if(a===null)return new Date(NaN);const t=n.match(vi);if(!t)return new Date(NaN);const e=!!t[4],r=it(t[1]),o=it(t[2])-1,i=it(t[3]),s=it(t[4]),c=it(t[5])-1;if(e)return Pi(a,s,c)?Mi(a,s,c):new Date(NaN);{const l=new Date(0);return!Si(a,o,i)||!Ei(a,r)?new Date(NaN):(l.setUTCFullYear(a,o,Math.max(r,i)),l)}}function it(n){return n?parseInt(n):1}function _i(n){const a=n.match(wi);if(!a)return NaN;const t=er(a[1]),e=er(a[2]),r=er(a[3]);return Ti(t,e,r)?t*qt+e*Vt+r*1e3:NaN}function er(n){return n&&parseFloat(n.replace(",","."))||0}function xi(n){if(n==="Z")return 0;const a=n.match(Di);if(!a)return 0;const t=a[1]==="+"?-1:1,e=parseInt(a[2]),r=a[3]&&parseInt(a[3])||0;return Oi(e,r)?t*(e*qt+r*Vt):NaN}function Mi(n,a,t){const e=new Date(0);e.setUTCFullYear(n,0,4);const r=e.getUTCDay()||7,o=(a-1)*7+t+1-r;return e.setUTCDate(e.getUTCDate()+o),e}const Ci=[31,null,31,30,31,30,31,31,30,31,30,31];function Nn(n){return n%400===0||n%4===0&&n%100!==0}function Si(n,a,t){return a>=0&&a<=11&&t>=1&&t<=(Ci[a]||(Nn(n)?29:28))}function Ei(n,a){return a>=1&&a<=(Nn(n)?366:365)}function Pi(n,a,t){return a>=1&&a<=53&&t>=0&&t<=6}function Ti(n,a,t){return n===24?a===0&&t===0:t>=0&&t<60&&a>=0&&a<60&&n>=0&&n<25}function Oi(n,a){return a>=0&&a<=59}function ce(n,a,t){const e=E(n,t==null?void 0:t.in),r=e.getFullYear(),o=e.getDate(),i=U(n,0);i.setFullYear(r,a,15),i.setHours(0,0,0,0);const s=fo(i);return e.setMonth(a,Math.min(o,s)),e}function xt(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setHours(a),e}function Mt(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setMinutes(a),e}function Ue(n,a,t){const e=E(n,t==null?void 0:t.in),r=Math.trunc(e.getMonth()/3)+1,o=a-r;return ce(e,e.getMonth()+o*3)}function Ct(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setSeconds(a),e}function me(n,a,t){const e=E(n,t==null?void 0:t.in);return isNaN(+e)?U(n,NaN):(e.setFullYear(a),e)}function He(n,a,t){return he(n,-a,t)}function Yn(n,a,t){return mr(n,-1,t)}function Hr(n,a,t){return Rt(n,-1,t)}function Ze(n,a,t){return _e(n,-a,t)}function Ut(){return typeof window<"u"}function nt(n){return Ln(n)?(n.nodeName||"").toLowerCase():"#document"}function ie(n){var a;return(n==null||(a=n.ownerDocument)==null?void 0:a.defaultView)||window}function ke(n){var a;return(a=(Ln(n)?n.ownerDocument:n.document)||window.document)==null?void 0:a.documentElement}function Ln(n){return Ut()?n instanceof Node||n instanceof ie(n).Node:!1}function oe(n){return Ut()?n instanceof Element||n instanceof ie(n).Element:!1}function be(n){return Ut()?n instanceof HTMLElement||n instanceof ie(n).HTMLElement:!1}function Br(n){return!Ut()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof ie(n).ShadowRoot}const Ri=new Set(["inline","contents"]);function pt(n){const{overflow:a,overflowX:t,overflowY:e,display:r}=ue(n);return/auto|scroll|overlay|hidden|clip/.test(a+e+t)&&!Ri.has(r)}const Ni=new Set(["table","td","th"]);function Yi(n){return Ni.has(nt(n))}const Li=[":popover-open",":modal"];function $t(n){return Li.some(a=>{try{return n.matches(a)}catch{return!1}})}const Fi=["transform","translate","scale","rotate","perspective"],Ii=["transform","translate","scale","rotate","perspective","filter"],Ai=["paint","layout","strict","content"];function yr(n){const a=br(),t=oe(n)?ue(n):n;return Fi.some(e=>t[e]?t[e]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!a&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!a&&(t.filter?t.filter!=="none":!1)||Ii.some(e=>(t.willChange||"").includes(e))||Ai.some(e=>(t.contain||"").includes(e))}function Wi(n){let a=Le(n);for(;be(a)&&!Je(a);){if(yr(a))return a;if($t(a))return null;a=Le(a)}return null}function br(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Hi=new Set(["html","body","#document"]);function Je(n){return Hi.has(nt(n))}function ue(n){return ie(n).getComputedStyle(n)}function Gt(n){return oe(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function Le(n){if(nt(n)==="html")return n;const a=n.assignedSlot||n.parentNode||Br(n)&&n.host||ke(n);return Br(a)?a.host:a}function Fn(n){const a=Le(n);return Je(a)?n.ownerDocument?n.ownerDocument.body:n.body:be(a)&&pt(a)?a:Fn(a)}function dt(n,a,t){var e;a===void 0&&(a=[]),t===void 0&&(t=!0);const r=Fn(n),o=r===((e=n.ownerDocument)==null?void 0:e.body),i=ie(r);if(o){const s=fr(i);return a.concat(i,i.visualViewport||[],pt(r)?r:[],s&&t?dt(s):[])}return a.concat(r,dt(r,[],t))}function fr(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}const et=Math.min,Be=Math.max,At=Math.round,wt=Math.floor,ye=n=>({x:n,y:n}),Bi={left:"right",right:"left",bottom:"top",top:"bottom"},Qi={start:"end",end:"start"};function ji(n,a,t){return Be(n,et(a,t))}function zt(n,a){return typeof n=="function"?n(a):n}function tt(n){return n.split("-")[0]}function ht(n){return n.split("-")[1]}function Vi(n){return n==="x"?"y":"x"}function kr(n){return n==="y"?"height":"width"}const qi=new Set(["top","bottom"]);function Ie(n){return qi.has(tt(n))?"y":"x"}function _r(n){return Vi(Ie(n))}function Ki(n,a,t){t===void 0&&(t=!1);const e=ht(n),r=_r(n),o=kr(r);let i=r==="x"?e===(t?"end":"start")?"right":"left":e==="start"?"bottom":"top";return a.reference[o]>a.floating[o]&&(i=Wt(i)),[i,Wt(i)]}function Ui(n){const a=Wt(n);return[pr(n),a,pr(a)]}function pr(n){return n.replace(/start|end/g,a=>Qi[a])}const Qr=["left","right"],jr=["right","left"],$i=["top","bottom"],Gi=["bottom","top"];function zi(n,a,t){switch(n){case"top":case"bottom":return t?a?jr:Qr:a?Qr:jr;case"left":case"right":return a?$i:Gi;default:return[]}}function Xi(n,a,t,e){const r=ht(n);let o=zi(tt(n),t==="start",e);return r&&(o=o.map(i=>i+"-"+r),a&&(o=o.concat(o.map(pr)))),o}function Wt(n){return n.replace(/left|right|bottom|top/g,a=>Bi[a])}function Zi(n){return{top:0,right:0,bottom:0,left:0,...n}}function In(n){return typeof n!="number"?Zi(n):{top:n,right:n,bottom:n,left:n}}function Ht(n){const{x:a,y:t,width:e,height:r}=n;return{width:e,height:r,top:t,left:a,right:a+e,bottom:t+r,x:a,y:t}}var Ji=typeof document<"u",es=function(){},Bt=Ji?D.useLayoutEffect:es;const ts={...wn},rs=ts.useInsertionEffect,ns=rs||(n=>n());function as(n){const a=D.useRef(()=>{});return ns(()=>{a.current=n}),D.useCallback(function(){for(var t=arguments.length,e=new Array(t),r=0;r{const{placement:e="bottom",strategy:r="absolute",middleware:o=[],platform:i}=t,s=o.filter(Boolean),c=await(i.isRTL==null?void 0:i.isRTL(a));let l=await i.getElementRects({reference:n,floating:a,strategy:r}),{x:u,y:d}=Vr(l,e,c),f=e,p={},h=0;for(let v=0;v({name:"arrow",options:n,async fn(a){const{x:t,y:e,placement:r,rects:o,platform:i,elements:s,middlewareData:c}=a,{element:l,padding:u=0}=zt(n,a)||{};if(l==null)return{};const d=In(u),f={x:t,y:e},p=_r(r),h=kr(p),v=await i.getDimensions(l),g=p==="y",y=g?"top":"left",_=g?"bottom":"right",w=g?"clientHeight":"clientWidth",b=o.reference[h]+o.reference[p]-f[p]-o.floating[h],P=f[p]-o.reference[p],O=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l));let C=O?O[w]:0;(!C||!await(i.isElement==null?void 0:i.isElement(O)))&&(C=s.floating[w]||o.floating[h]);const k=b/2-P/2,S=C/2-v[h]/2-1,N=et(d[y],S),Q=et(d[_],S),I=N,$=C-v[h]-Q,j=C/2-v[h]/2+k,q=ji(I,j,$),R=!c.arrow&&ht(r)!=null&&j!==q&&o.reference[h]/2-(jj<=0)){var Q,I;const j=(((Q=o.flip)==null?void 0:Q.index)||0)+1,q=C[j];if(q&&(!(d==="alignment"?_!==Ie(q):!1)||N.every(Y=>Y.overflows[0]>0&&Ie(Y.placement)===_)))return{data:{index:j,overflows:N},reset:{placement:q}};let R=(I=N.filter(F=>F.overflows[0]<=0).sort((F,Y)=>F.overflows[1]-Y.overflows[1])[0])==null?void 0:I.placement;if(!R)switch(p){case"bestFit":{var $;const F=($=N.filter(Y=>{if(O){const ee=Ie(Y.placement);return ee===_||ee==="y"}return!0}).map(Y=>[Y.placement,Y.overflows.filter(ee=>ee>0).reduce((ee,de)=>ee+de,0)]).sort((Y,ee)=>Y[1]-ee[1])[0])==null?void 0:$[0];F&&(R=F);break}case"initialPlacement":R=s;break}if(r!==R)return{reset:{placement:R}}}return{}}}},ls=new Set(["left","top"]);async function us(n,a){const{placement:t,platform:e,elements:r}=n,o=await(e.isRTL==null?void 0:e.isRTL(r.floating)),i=tt(t),s=ht(t),c=Ie(t)==="y",l=ls.has(i)?-1:1,u=o&&c?-1:1,d=zt(a,n);let{mainAxis:f,crossAxis:p,alignmentAxis:h}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof h=="number"&&(p=s==="end"?h*-1:h),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}const ds=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(a){var t,e;const{x:r,y:o,placement:i,middlewareData:s}=a,c=await us(a,n);return i===((t=s.offset)==null?void 0:t.placement)&&(e=s.arrow)!=null&&e.alignmentOffset?{}:{x:r+c.x,y:o+c.y,data:{...c,placement:i}}}}};function An(n){const a=ue(n);let t=parseFloat(a.width)||0,e=parseFloat(a.height)||0;const r=be(n),o=r?n.offsetWidth:t,i=r?n.offsetHeight:e,s=At(t)!==o||At(e)!==i;return s&&(t=o,e=i),{width:t,height:e,$:s}}function xr(n){return oe(n)?n:n.contextElement}function $e(n){const a=xr(n);if(!be(a))return ye(1);const t=a.getBoundingClientRect(),{width:e,height:r,$:o}=An(a);let i=(o?At(t.width):t.width)/e,s=(o?At(t.height):t.height)/r;return(!i||!Number.isFinite(i))&&(i=1),(!s||!Number.isFinite(s))&&(s=1),{x:i,y:s}}const fs=ye(0);function Wn(n){const a=ie(n);return!br()||!a.visualViewport?fs:{x:a.visualViewport.offsetLeft,y:a.visualViewport.offsetTop}}function ps(n,a,t){return a===void 0&&(a=!1),!t||a&&t!==ie(n)?!1:a}function Ve(n,a,t,e){a===void 0&&(a=!1),t===void 0&&(t=!1);const r=n.getBoundingClientRect(),o=xr(n);let i=ye(1);a&&(e?oe(e)&&(i=$e(e)):i=$e(n));const s=ps(o,t,e)?Wn(o):ye(0);let c=(r.left+s.x)/i.x,l=(r.top+s.y)/i.y,u=r.width/i.x,d=r.height/i.y;if(o){const f=ie(o),p=e&&oe(e)?ie(e):e;let h=f,v=fr(h);for(;v&&e&&p!==h;){const g=$e(v),y=v.getBoundingClientRect(),_=ue(v),w=y.left+(v.clientLeft+parseFloat(_.paddingLeft))*g.x,b=y.top+(v.clientTop+parseFloat(_.paddingTop))*g.y;c*=g.x,l*=g.y,u*=g.x,d*=g.y,c+=w,l+=b,h=ie(v),v=fr(h)}}return Ht({width:u,height:d,x:c,y:l})}function Mr(n,a){const t=Gt(n).scrollLeft;return a?a.left+t:Ve(ke(n)).left+t}function Hn(n,a,t){t===void 0&&(t=!1);const e=n.getBoundingClientRect(),r=e.left+a.scrollLeft-(t?0:Mr(n,e)),o=e.top+a.scrollTop;return{x:r,y:o}}function hs(n){let{elements:a,rect:t,offsetParent:e,strategy:r}=n;const o=r==="fixed",i=ke(e),s=a?$t(a.floating):!1;if(e===i||s&&o)return t;let c={scrollLeft:0,scrollTop:0},l=ye(1);const u=ye(0),d=be(e);if((d||!d&&!o)&&((nt(e)!=="body"||pt(i))&&(c=Gt(e)),be(e))){const p=Ve(e);l=$e(e),u.x=p.x+e.clientLeft,u.y=p.y+e.clientTop}const f=i&&!d&&!o?Hn(i,c,!0):ye(0);return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:t.y*l.y-c.scrollTop*l.y+u.y+f.y}}function ms(n){return Array.from(n.getClientRects())}function gs(n){const a=ke(n),t=Gt(n),e=n.ownerDocument.body,r=Be(a.scrollWidth,a.clientWidth,e.scrollWidth,e.clientWidth),o=Be(a.scrollHeight,a.clientHeight,e.scrollHeight,e.clientHeight);let i=-t.scrollLeft+Mr(n);const s=-t.scrollTop;return ue(e).direction==="rtl"&&(i+=Be(a.clientWidth,e.clientWidth)-r),{width:r,height:o,x:i,y:s}}function vs(n,a){const t=ie(n),e=ke(n),r=t.visualViewport;let o=e.clientWidth,i=e.clientHeight,s=0,c=0;if(r){o=r.width,i=r.height;const l=br();(!l||l&&a==="fixed")&&(s=r.offsetLeft,c=r.offsetTop)}return{width:o,height:i,x:s,y:c}}const ws=new Set(["absolute","fixed"]);function Ds(n,a){const t=Ve(n,!0,a==="fixed"),e=t.top+n.clientTop,r=t.left+n.clientLeft,o=be(n)?$e(n):ye(1),i=n.clientWidth*o.x,s=n.clientHeight*o.y,c=r*o.x,l=e*o.y;return{width:i,height:s,x:c,y:l}}function qr(n,a,t){let e;if(a==="viewport")e=vs(n,t);else if(a==="document")e=gs(ke(n));else if(oe(a))e=Ds(a,t);else{const r=Wn(n);e={x:a.x-r.x,y:a.y-r.y,width:a.width,height:a.height}}return Ht(e)}function Bn(n,a){const t=Le(n);return t===a||!oe(t)||Je(t)?!1:ue(t).position==="fixed"||Bn(t,a)}function ys(n,a){const t=a.get(n);if(t)return t;let e=dt(n,[],!1).filter(s=>oe(s)&&nt(s)!=="body"),r=null;const o=ue(n).position==="fixed";let i=o?Le(n):n;for(;oe(i)&&!Je(i);){const s=ue(i),c=yr(i);!c&&s.position==="fixed"&&(r=null),(o?!c&&!r:!c&&s.position==="static"&&!!r&&ws.has(r.position)||pt(i)&&!c&&Bn(n,i))?e=e.filter(u=>u!==i):r=s,i=Le(i)}return a.set(n,e),e}function bs(n){let{element:a,boundary:t,rootBoundary:e,strategy:r}=n;const i=[...t==="clippingAncestors"?$t(a)?[]:ys(a,this._c):[].concat(t),e],s=i[0],c=i.reduce((l,u)=>{const d=qr(a,u,r);return l.top=Be(d.top,l.top),l.right=et(d.right,l.right),l.bottom=et(d.bottom,l.bottom),l.left=Be(d.left,l.left),l},qr(a,s,r));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function ks(n){const{width:a,height:t}=An(n);return{width:a,height:t}}function _s(n,a,t){const e=be(a),r=ke(a),o=t==="fixed",i=Ve(n,!0,o,a);let s={scrollLeft:0,scrollTop:0};const c=ye(0);function l(){c.x=Mr(r)}if(e||!e&&!o)if((nt(a)!=="body"||pt(r))&&(s=Gt(a)),e){const p=Ve(a,!0,o,a);c.x=p.x+a.clientLeft,c.y=p.y+a.clientTop}else r&&l();o&&!e&&r&&l();const u=r&&!e&&!o?Hn(r,s):ye(0),d=i.left+s.scrollLeft-c.x-u.x,f=i.top+s.scrollTop-c.y-u.y;return{x:d,y:f,width:i.width,height:i.height}}function tr(n){return ue(n).position==="static"}function Kr(n,a){if(!be(n)||ue(n).position==="fixed")return null;if(a)return a(n);let t=n.offsetParent;return ke(n)===t&&(t=t.ownerDocument.body),t}function Qn(n,a){const t=ie(n);if($t(n))return t;if(!be(n)){let r=Le(n);for(;r&&!Je(r);){if(oe(r)&&!tr(r))return r;r=Le(r)}return t}let e=Kr(n,a);for(;e&&Yi(e)&&tr(e);)e=Kr(e,a);return e&&Je(e)&&tr(e)&&!yr(e)?t:e||Wi(n)||t}const xs=async function(n){const a=this.getOffsetParent||Qn,t=this.getDimensions,e=await t(n.floating);return{reference:_s(n.reference,await a(n.floating),n.strategy),floating:{x:0,y:0,width:e.width,height:e.height}}};function Ms(n){return ue(n).direction==="rtl"}const Cs={convertOffsetParentRelativeRectToViewportRelativeRect:hs,getDocumentElement:ke,getClippingRect:bs,getOffsetParent:Qn,getElementRects:xs,getClientRects:ms,getDimensions:ks,getScale:$e,isElement:oe,isRTL:Ms};function jn(n,a){return n.x===a.x&&n.y===a.y&&n.width===a.width&&n.height===a.height}function Ss(n,a){let t=null,e;const r=ke(n);function o(){var s;clearTimeout(e),(s=t)==null||s.disconnect(),t=null}function i(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),o();const l=n.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(s||a(),!f||!p)return;const h=wt(d),v=wt(r.clientWidth-(u+f)),g=wt(r.clientHeight-(d+p)),y=wt(u),w={rootMargin:-h+"px "+-v+"px "+-g+"px "+-y+"px",threshold:Be(0,et(1,c))||1};let b=!0;function P(O){const C=O[0].intersectionRatio;if(C!==c){if(!b)return i();C?i(!1,C):e=setTimeout(()=>{i(!1,1e-7)},1e3)}C===1&&!jn(l,n.getBoundingClientRect())&&i(),b=!1}try{t=new IntersectionObserver(P,{...w,root:r.ownerDocument})}catch{t=new IntersectionObserver(P,w)}t.observe(n)}return i(!0),o}function Es(n,a,t,e){e===void 0&&(e={});const{ancestorScroll:r=!0,ancestorResize:o=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:c=!1}=e,l=xr(n),u=r||o?[...l?dt(l):[],...dt(a)]:[];u.forEach(y=>{r&&y.addEventListener("scroll",t,{passive:!0}),o&&y.addEventListener("resize",t)});const d=l&&s?Ss(l,t):null;let f=-1,p=null;i&&(p=new ResizeObserver(y=>{let[_]=y;_&&_.target===l&&p&&(p.unobserve(a),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var w;(w=p)==null||w.observe(a)})),t()}),l&&!c&&p.observe(l),p.observe(a));let h,v=c?Ve(n):null;c&&g();function g(){const y=Ve(n);v&&!jn(v,y)&&t(),v=y,h=requestAnimationFrame(g)}return t(),()=>{var y;u.forEach(_=>{r&&_.removeEventListener("scroll",t),o&&_.removeEventListener("resize",t)}),d==null||d(),(y=p)==null||y.disconnect(),p=null,c&&cancelAnimationFrame(h)}}const Ps=ds,Ts=cs,Ur=ss,Os=(n,a,t)=>{const e=new Map,r={platform:Cs,...t},o={...r.platform,_c:e};return os(n,a,{...r,platform:o})};var Rs=typeof document<"u",Ns=function(){},St=Rs?D.useLayoutEffect:Ns;function Qt(n,a){if(n===a)return!0;if(typeof n!=typeof a)return!1;if(typeof n=="function"&&n.toString()===a.toString())return!0;let t,e,r;if(n&&a&&typeof n=="object"){if(Array.isArray(n)){if(t=n.length,t!==a.length)return!1;for(e=t;e--!==0;)if(!Qt(n[e],a[e]))return!1;return!0}if(r=Object.keys(n),t=r.length,t!==Object.keys(a).length)return!1;for(e=t;e--!==0;)if(!{}.hasOwnProperty.call(a,r[e]))return!1;for(e=t;e--!==0;){const o=r[e];if(!(o==="_owner"&&n.$$typeof)&&!Qt(n[o],a[o]))return!1}return!0}return n!==n&&a!==a}function Vn(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function $r(n,a){const t=Vn(n);return Math.round(a*t)/t}function rr(n){const a=D.useRef(n);return St(()=>{a.current=n}),a}function Ys(n){n===void 0&&(n={});const{placement:a="bottom",strategy:t="absolute",middleware:e=[],platform:r,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:c,open:l}=n,[u,d]=D.useState({x:0,y:0,strategy:t,placement:a,middlewareData:{},isPositioned:!1}),[f,p]=D.useState(e);Qt(f,e)||p(e);const[h,v]=D.useState(null),[g,y]=D.useState(null),_=D.useCallback(Y=>{Y!==O.current&&(O.current=Y,v(Y))},[]),w=D.useCallback(Y=>{Y!==C.current&&(C.current=Y,y(Y))},[]),b=o||h,P=i||g,O=D.useRef(null),C=D.useRef(null),k=D.useRef(u),S=c!=null,N=rr(c),Q=rr(r),I=rr(l),$=D.useCallback(()=>{if(!O.current||!C.current)return;const Y={placement:a,strategy:t,middleware:f};Q.current&&(Y.platform=Q.current),Os(O.current,C.current,Y).then(ee=>{const de={...ee,isPositioned:I.current!==!1};j.current&&!Qt(k.current,de)&&(k.current=de,na.flushSync(()=>{d(de)}))})},[f,a,t,Q,I]);St(()=>{l===!1&&k.current.isPositioned&&(k.current.isPositioned=!1,d(Y=>({...Y,isPositioned:!1})))},[l]);const j=D.useRef(!1);St(()=>(j.current=!0,()=>{j.current=!1}),[]),St(()=>{if(b&&(O.current=b),P&&(C.current=P),b&&P){if(N.current)return N.current(b,P,$);$()}},[b,P,$,N,S]);const q=D.useMemo(()=>({reference:O,floating:C,setReference:_,setFloating:w}),[_,w]),R=D.useMemo(()=>({reference:b,floating:P}),[b,P]),F=D.useMemo(()=>{const Y={position:t,left:0,top:0};if(!R.floating)return Y;const ee=$r(R.floating,u.x),de=$r(R.floating,u.y);return s?{...Y,transform:"translate("+ee+"px, "+de+"px)",...Vn(R.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:ee,top:de}},[t,s,R.floating,u.x,u.y]);return D.useMemo(()=>({...u,update:$,refs:q,elements:R,floatingStyles:F}),[u,$,q,R,F])}const Ls=n=>{function a(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:n,fn(t){const{element:e,padding:r}=typeof n=="function"?n(t):n;return e&&a(e)?e.current!=null?Ur({element:e.current,padding:r}).fn(t):{}:e?Ur({element:e,padding:r}).fn(t):{}}}},Fs=(n,a)=>({...Ps(n),options:[n,a]}),Is=(n,a)=>({...Ts(n),options:[n,a]}),As=(n,a)=>({...Ls(n),options:[n,a]}),Ws={...wn};let Gr=!1,Hs=0;const zr=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Hs++;function Bs(){const[n,a]=D.useState(()=>Gr?zr():void 0);return Bt(()=>{n==null&&a(zr())},[]),D.useEffect(()=>{Gr=!0},[]),n}const Qs=Ws.useId,qn=Qs||Bs,js=D.forwardRef(function(a,t){const{context:{placement:e,elements:{floating:r},middlewareData:{arrow:o,shift:i}},width:s=14,height:c=7,tipRadius:l=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h,...v}={},...g}=a,y=qn(),[_,w]=D.useState(!1);if(Bt(()=>{if(!r)return;ue(r).direction==="rtl"&&w(!0)},[r]),!r)return null;const[b,P]=e.split("-"),O=b==="top"||b==="bottom";let C=d;(O&&i!=null&&i.x||!O&&i!=null&&i.y)&&(C=null);const k=u*2,S=k/2,N=s/2*(l/-8+1),Q=c/2*l/4,I=!!p,$=C&&P==="end"?"bottom":"top";let j=C&&P==="end"?"right":"left";C&&_&&(j=P==="end"?"left":"right");const q=(o==null?void 0:o.x)!=null?C||o.x:"",R=(o==null?void 0:o.y)!=null?C||o.y:"",F=p||"M0,0"+(" H"+s)+(" L"+(s-N)+","+(c-Q))+(" Q"+s/2+","+c+" "+N+","+(c-Q))+" Z",Y={top:I?"rotate(180deg)":"",left:I?"rotate(90deg)":"rotate(-90deg)",bottom:I?"":"rotate(180deg)",right:I?"rotate(-90deg)":"rotate(90deg)"}[b];return T.jsxs("svg",{...g,"aria-hidden":!0,ref:t,width:I?s:s+k,height:s,viewBox:"0 0 "+s+" "+(c>s?c:s),style:{position:"absolute",pointerEvents:"none",[j]:q,[$]:R,[b]:O||I?"100%":"calc(100% - "+k/2+"px)",transform:[Y,h].filter(ee=>!!ee).join(" "),...v},children:[k>0&&T.jsx("path",{clipPath:"url(#"+y+")",fill:"none",stroke:f,strokeWidth:k+(p?0:1),d:F}),T.jsx("path",{stroke:k&&!p?g.fill:"none",d:F}),T.jsx("clipPath",{id:y,children:T.jsx("rect",{x:-S,y:S*(I?-1:1),width:s+k,height:s})})]})});function Vs(){const n=new Map;return{emit(a,t){var e;(e=n.get(a))==null||e.forEach(r=>r(t))},on(a,t){n.has(a)||n.set(a,new Set),n.get(a).add(t)},off(a,t){var e;(e=n.get(a))==null||e.delete(t)}}}const qs=D.createContext(null),Ks=D.createContext(null),Us=()=>{var n;return((n=D.useContext(qs))==null?void 0:n.id)||null},$s=()=>D.useContext(Ks);function Gs(n){const{open:a=!1,onOpenChange:t,elements:e}=n,r=qn(),o=D.useRef({}),[i]=D.useState(()=>Vs()),s=Us()!=null,[c,l]=D.useState(e.reference),u=as((p,h,v)=>{o.current.openEvent=p?h:void 0,i.emit("openchange",{open:p,event:h,reason:v,nested:s}),t==null||t(p,h,v)}),d=D.useMemo(()=>({setPositionReference:l}),[]),f=D.useMemo(()=>({reference:c||e.reference||null,floating:e.floating||null,domReference:e.reference}),[c,e.reference,e.floating]);return D.useMemo(()=>({dataRef:o,open:a,onOpenChange:u,elements:f,events:i,floatingId:r,refs:d}),[a,u,f,i,r,d])}function zs(n){n===void 0&&(n={});const{nodeId:a}=n,t=Gs({...n,elements:{reference:null,floating:null,...n.elements}}),e=n.rootContext||t,r=e.elements,[o,i]=D.useState(null),[s,c]=D.useState(null),u=(r==null?void 0:r.domReference)||o,d=D.useRef(null),f=$s();Bt(()=>{u&&(d.current=u)},[u]);const p=Ys({...n,elements:{...r,...s&&{reference:s}}}),h=D.useCallback(w=>{const b=oe(w)?{getBoundingClientRect:()=>w.getBoundingClientRect(),getClientRects:()=>w.getClientRects(),contextElement:w}:w;c(b),p.refs.setReference(b)},[p.refs]),v=D.useCallback(w=>{(oe(w)||w===null)&&(d.current=w,i(w)),(oe(p.refs.reference.current)||p.refs.reference.current===null||w!==null&&!oe(w))&&p.refs.setReference(w)},[p.refs]),g=D.useMemo(()=>({...p.refs,setReference:v,setPositionReference:h,domReference:d}),[p.refs,v,h]),y=D.useMemo(()=>({...p.elements,domReference:u}),[p.elements,u]),_=D.useMemo(()=>({...p,...e,refs:g,elements:y,nodeId:a}),[p,g,y,a,e]);return Bt(()=>{e.dataRef.current.floatingContext=_;const w=f==null?void 0:f.nodesRef.current.find(b=>b.id===a);w&&(w.context=_)}),D.useMemo(()=>({...p,context:_,refs:g,elements:y}),[p,g,y,_])}/*! +var ta=Object.defineProperty;var ra=(n,a,t)=>a in n?ta(n,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[a]=t;var M=(n,a,t)=>ra(n,typeof a!="symbol"?a+"":a,t);import{r as D,h as wn,b as na,j as T,R as m,c as re,i as aa,d as H,k as oa,l as Pr}from"./index-Dzr7PBfw.js";const ia=(n,a,t)=>{const[e,r]=D.useState(a||new Date(new Date().getFullYear(),0,1)),[o,i]=D.useState(t||new Date),s=D.useRef(n),c=D.useRef(!1);return D.useEffect(()=>{s.current=n},[n]),D.useEffect(()=>{if(!c.current){c.current=!0;return}const f=setTimeout(()=>{s.current&&e&&o&&s.current({startDate:e,endDate:o})},1e3);return()=>clearTimeout(f)},[e,o]),{startDate:e,endDate:o,handleStartDateChange:f=>{r(f),f&&o&&f>o&&i(f)},handleEndDateChange:f=>{i(f),f&&e&&f{const f=new Date(new Date().getFullYear(),0,1),p=new Date;r(f),i(p),s.current&&s.current({startDate:f,endDate:p})}}},Dn=6048e5,sa=864e5,Vt=6e4,qt=36e5,ca=1e3,Tr=Symbol.for("constructDateFrom");function U(n,a){return typeof n=="function"?n(a):n&&typeof n=="object"&&Tr in n?n[Tr](a):n instanceof Date?new n.constructor(a):new Date(a)}function E(n,a){return U(a||n,n)}function pe(n,a,t){const e=E(n,t==null?void 0:t.in);return isNaN(a)?U((t==null?void 0:t.in)||n,NaN):(a&&e.setDate(e.getDate()+a),e)}function he(n,a,t){const e=E(n,t==null?void 0:t.in);if(isNaN(a))return U(n,NaN);if(!a)return e;const r=e.getDate(),o=U(n,e.getTime());o.setMonth(e.getMonth()+a+1,0);const i=o.getDate();return r>=i?o:(e.setFullYear(o.getFullYear(),o.getMonth(),r),e)}function yn(n,a,t){return U(n,+E(n)+a)}function la(n,a,t){return yn(n,a*qt)}let ua={};function qe(){return ua}function Ee(n,a){var s,c,l,u;const t=qe(),e=(a==null?void 0:a.weekStartsOn)??((c=(s=a==null?void 0:a.locale)==null?void 0:s.options)==null?void 0:c.weekStartsOn)??t.weekStartsOn??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.weekStartsOn)??0,r=E(n,a==null?void 0:a.in),o=r.getDay(),i=(o=o.getTime()?e+1:t.getTime()>=s.getTime()?e:e-1}function Ot(n){const a=E(n),t=new Date(Date.UTC(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds()));return t.setUTCFullYear(a.getFullYear()),+n-+t}function Pe(n,...a){const t=U.bind(null,a.find(e=>typeof e=="object"));return a.map(t)}function Qe(n,a){const t=E(n,a==null?void 0:a.in);return t.setHours(0,0,0,0),t}function Xe(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Qe(e),i=Qe(r),s=+o-Ot(o),c=+i-Ot(i);return Math.round((s-c)/sa)}function da(n,a){const t=bn(n,a),e=U(n,0);return e.setFullYear(t,0,4),e.setHours(0,0,0,0),ze(e)}function cr(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setTime(e.getTime()+a*Vt),e}function mr(n,a,t){return he(n,a*3,t)}function fa(n,a,t){return yn(n,a*1e3)}function Rt(n,a,t){return pe(n,a*7,t)}function _e(n,a,t){return he(n,a*12,t)}function Or(n,a){let t,e=a==null?void 0:a.in;return n.forEach(r=>{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=E(r,e);(!t||t{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=E(r,e);(!t||t>o||isNaN(+o))&&(t=o)}),U(e,t||NaN)}function pa(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+Qe(e)==+Qe(r)}function xe(n){return n instanceof Date||typeof n=="object"&&Object.prototype.toString.call(n)==="[object Date]"}function Nt(n){return!(!xe(n)&&typeof n!="number"||isNaN(+E(n)))}function Yt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),i=e.getMonth()-r.getMonth();return o*12+i}function We(n,a){const t=E(n,a==null?void 0:a.in);return Math.trunc(t.getMonth()/3)+1}function Lt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),i=We(e)-We(r);return o*4+i}function Ft(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()-r.getFullYear()}function ha(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Nr(e,r),i=Math.abs(Xe(e,r));e.setDate(e.getDate()-o*i);const s=+(Nr(e,r)===-o),c=o*(i-s);return c===0?0:c}function Nr(n,a){const t=n.getFullYear()-a.getFullYear()||n.getMonth()-a.getMonth()||n.getDate()-a.getDate()||n.getHours()-a.getHours()||n.getMinutes()-a.getMinutes()||n.getSeconds()-a.getSeconds()||n.getMilliseconds()-a.getMilliseconds();return t<0?-1:t>0?1:t}function kn(n,a){const t=E(n,a==null?void 0:a.in);return t.setHours(23,59,59,999),t}function _n(n,a){const t=E(n,a==null?void 0:a.in),e=t.getMonth();return t.setFullYear(t.getFullYear(),e+1,0),t.setHours(23,59,59,999),t}function lr(n,a){const t=E(n,a==null?void 0:a.in),e=t.getMonth(),r=e-e%3;return t.setMonth(r,1),t.setHours(0,0,0,0),t}function xn(n,a){const t=E(n,a==null?void 0:a.in);return t.setDate(1),t.setHours(0,0,0,0),t}function Mn(n,a){const t=E(n,a==null?void 0:a.in),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function Kt(n,a){const t=E(n,a==null?void 0:a.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function ma(n,a){var s,c;const t=qe(),e=t.weekStartsOn??((c=(s=t.locale)==null?void 0:s.options)==null?void 0:c.weekStartsOn)??0,r=E(n,a==null?void 0:a.in),o=r.getDay(),i=(o{let e;const r=ga[n];return typeof r=="string"?e=r:a===1?e=r.one:e=r.other.replace("{{count}}",a.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+e:e+" ago":e};function Jt(n){return(a={})=>{const t=a.width?String(a.width):n.defaultWidth;return n.formats[t]||n.formats[n.defaultWidth]}}const wa={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Da={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},ya={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},ba={date:Jt({formats:wa,defaultWidth:"full"}),time:Jt({formats:Da,defaultWidth:"full"}),dateTime:Jt({formats:ya,defaultWidth:"full"})},ka={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},_a=(n,a,t,e)=>ka[n];function at(n){return(a,t)=>{const e=t!=null&&t.context?String(t.context):"standalone";let r;if(e==="formatting"&&n.formattingValues){const i=n.defaultFormattingWidth||n.defaultWidth,s=t!=null&&t.width?String(t.width):i;r=n.formattingValues[s]||n.formattingValues[i]}else{const i=n.defaultWidth,s=t!=null&&t.width?String(t.width):n.defaultWidth;r=n.values[s]||n.values[i]}const o=n.argumentCallback?n.argumentCallback(a):a;return r[o]}}const xa={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Ma={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Ca={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Sa={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Ea={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Pa={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Ta=(n,a)=>{const t=Number(n),e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},Oa={ordinalNumber:Ta,era:at({values:xa,defaultWidth:"wide"}),quarter:at({values:Ma,defaultWidth:"wide",argumentCallback:n=>n-1}),month:at({values:Ca,defaultWidth:"wide"}),day:at({values:Sa,defaultWidth:"wide"}),dayPeriod:at({values:Ea,defaultWidth:"wide",formattingValues:Pa,defaultFormattingWidth:"wide"})};function ot(n){return(a,t={})=>{const e=t.width,r=e&&n.matchPatterns[e]||n.matchPatterns[n.defaultMatchWidth],o=a.match(r);if(!o)return null;const i=o[0],s=e&&n.parsePatterns[e]||n.parsePatterns[n.defaultParseWidth],c=Array.isArray(s)?Na(s,d=>d.test(i)):Ra(s,d=>d.test(i));let l;l=n.valueCallback?n.valueCallback(c):c,l=t.valueCallback?t.valueCallback(l):l;const u=a.slice(i.length);return{value:l,rest:u}}}function Ra(n,a){for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&a(n[t]))return t}function Na(n,a){for(let t=0;t{const e=a.match(n.matchPattern);if(!e)return null;const r=e[0],o=a.match(n.parsePattern);if(!o)return null;let i=n.valueCallback?n.valueCallback(o[0]):o[0];i=t.valueCallback?t.valueCallback(i):i;const s=a.slice(r.length);return{value:i,rest:s}}}const La=/^(\d+)(th|st|nd|rd)?/i,Fa=/\d+/i,Ia={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Aa={any:[/^b/i,/^(a|c)/i]},Wa={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Ha={any:[/1/i,/2/i,/3/i,/4/i]},Ba={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Qa={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},ja={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Va={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},qa={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Ka={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Ua={ordinalNumber:Ya({matchPattern:La,parsePattern:Fa,valueCallback:n=>parseInt(n,10)}),era:ot({matchPatterns:Ia,defaultMatchWidth:"wide",parsePatterns:Aa,defaultParseWidth:"any"}),quarter:ot({matchPatterns:Wa,defaultMatchWidth:"wide",parsePatterns:Ha,defaultParseWidth:"any",valueCallback:n=>n+1}),month:ot({matchPatterns:Ba,defaultMatchWidth:"wide",parsePatterns:Qa,defaultParseWidth:"any"}),day:ot({matchPatterns:ja,defaultMatchWidth:"wide",parsePatterns:Va,defaultParseWidth:"any"}),dayPeriod:ot({matchPatterns:qa,defaultMatchWidth:"any",parsePatterns:Ka,defaultParseWidth:"any"})},Cn={code:"en-US",formatDistance:va,formatLong:ba,formatRelative:_a,localize:Oa,match:Ua,options:{weekStartsOn:0,firstWeekContainsDate:1}};function $a(n,a){const t=E(n,a==null?void 0:a.in);return Xe(t,Kt(t))+1}function gr(n,a){const t=E(n,a==null?void 0:a.in),e=+ze(t)-+da(t);return Math.round(e/Dn)+1}function vr(n,a){var u,d,f,p;const t=E(n,a==null?void 0:a.in),e=t.getFullYear(),r=qe(),o=(a==null?void 0:a.firstWeekContainsDate)??((d=(u=a==null?void 0:a.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??r.firstWeekContainsDate??((p=(f=r.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,i=U((a==null?void 0:a.in)||n,0);i.setFullYear(e+1,0,o),i.setHours(0,0,0,0);const s=Ee(i,a),c=U((a==null?void 0:a.in)||n,0);c.setFullYear(e,0,o),c.setHours(0,0,0,0);const l=Ee(c,a);return+t>=+s?e+1:+t>=+l?e:e-1}function Ga(n,a){var s,c,l,u;const t=qe(),e=(a==null?void 0:a.firstWeekContainsDate)??((c=(s=a==null?void 0:a.locale)==null?void 0:s.options)==null?void 0:c.firstWeekContainsDate)??t.firstWeekContainsDate??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.firstWeekContainsDate)??1,r=vr(n,a),o=U((a==null?void 0:a.in)||n,0);return o.setFullYear(r,0,e),o.setHours(0,0,0,0),Ee(o,a)}function Sn(n,a){const t=E(n,a==null?void 0:a.in),e=+Ee(t,a)-+Ga(t,a);return Math.round(e/Dn)+1}function K(n,a){const t=n<0?"-":"",e=Math.abs(n).toString().padStart(a,"0");return t+e}const Te={y(n,a){const t=n.getFullYear(),e=t>0?t:1-t;return K(a==="yy"?e%100:e,a.length)},M(n,a){const t=n.getMonth();return a==="M"?String(t+1):K(t+1,2)},d(n,a){return K(n.getDate(),a.length)},a(n,a){const t=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(n,a){return K(n.getHours()%12||12,a.length)},H(n,a){return K(n.getHours(),a.length)},m(n,a){return K(n.getMinutes(),a.length)},s(n,a){return K(n.getSeconds(),a.length)},S(n,a){const t=a.length,e=n.getMilliseconds(),r=Math.trunc(e*Math.pow(10,t-3));return K(r,a.length)}},Ke={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Yr={G:function(n,a,t){const e=n.getFullYear()>0?1:0;switch(a){case"G":case"GG":case"GGG":return t.era(e,{width:"abbreviated"});case"GGGGG":return t.era(e,{width:"narrow"});case"GGGG":default:return t.era(e,{width:"wide"})}},y:function(n,a,t){if(a==="yo"){const e=n.getFullYear(),r=e>0?e:1-e;return t.ordinalNumber(r,{unit:"year"})}return Te.y(n,a)},Y:function(n,a,t,e){const r=vr(n,e),o=r>0?r:1-r;if(a==="YY"){const i=o%100;return K(i,2)}return a==="Yo"?t.ordinalNumber(o,{unit:"year"}):K(o,a.length)},R:function(n,a){const t=bn(n);return K(t,a.length)},u:function(n,a){const t=n.getFullYear();return K(t,a.length)},Q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"Q":return String(e);case"QQ":return K(e,2);case"Qo":return t.ordinalNumber(e,{unit:"quarter"});case"QQQ":return t.quarter(e,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(e,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(e,{width:"wide",context:"formatting"})}},q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"q":return String(e);case"qq":return K(e,2);case"qo":return t.ordinalNumber(e,{unit:"quarter"});case"qqq":return t.quarter(e,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(e,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(e,{width:"wide",context:"standalone"})}},M:function(n,a,t){const e=n.getMonth();switch(a){case"M":case"MM":return Te.M(n,a);case"Mo":return t.ordinalNumber(e+1,{unit:"month"});case"MMM":return t.month(e,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(e,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(e,{width:"wide",context:"formatting"})}},L:function(n,a,t){const e=n.getMonth();switch(a){case"L":return String(e+1);case"LL":return K(e+1,2);case"Lo":return t.ordinalNumber(e+1,{unit:"month"});case"LLL":return t.month(e,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(e,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(e,{width:"wide",context:"standalone"})}},w:function(n,a,t,e){const r=Sn(n,e);return a==="wo"?t.ordinalNumber(r,{unit:"week"}):K(r,a.length)},I:function(n,a,t){const e=gr(n);return a==="Io"?t.ordinalNumber(e,{unit:"week"}):K(e,a.length)},d:function(n,a,t){return a==="do"?t.ordinalNumber(n.getDate(),{unit:"date"}):Te.d(n,a)},D:function(n,a,t){const e=$a(n);return a==="Do"?t.ordinalNumber(e,{unit:"dayOfYear"}):K(e,a.length)},E:function(n,a,t){const e=n.getDay();switch(a){case"E":case"EE":case"EEE":return t.day(e,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(e,{width:"short",context:"formatting"});case"EEEE":default:return t.day(e,{width:"wide",context:"formatting"})}},e:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"e":return String(o);case"ee":return K(o,2);case"eo":return t.ordinalNumber(o,{unit:"day"});case"eee":return t.day(r,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(r,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(r,{width:"short",context:"formatting"});case"eeee":default:return t.day(r,{width:"wide",context:"formatting"})}},c:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"c":return String(o);case"cc":return K(o,a.length);case"co":return t.ordinalNumber(o,{unit:"day"});case"ccc":return t.day(r,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(r,{width:"narrow",context:"standalone"});case"cccccc":return t.day(r,{width:"short",context:"standalone"});case"cccc":default:return t.day(r,{width:"wide",context:"standalone"})}},i:function(n,a,t){const e=n.getDay(),r=e===0?7:e;switch(a){case"i":return String(r);case"ii":return K(r,a.length);case"io":return t.ordinalNumber(r,{unit:"day"});case"iii":return t.day(e,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(e,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(e,{width:"short",context:"formatting"});case"iiii":default:return t.day(e,{width:"wide",context:"formatting"})}},a:function(n,a,t){const r=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(n,a,t){const e=n.getHours();let r;switch(e===12?r=Ke.noon:e===0?r=Ke.midnight:r=e/12>=1?"pm":"am",a){case"b":case"bb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(n,a,t){const e=n.getHours();let r;switch(e>=17?r=Ke.evening:e>=12?r=Ke.afternoon:e>=4?r=Ke.morning:r=Ke.night,a){case"B":case"BB":case"BBB":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(n,a,t){if(a==="ho"){let e=n.getHours()%12;return e===0&&(e=12),t.ordinalNumber(e,{unit:"hour"})}return Te.h(n,a)},H:function(n,a,t){return a==="Ho"?t.ordinalNumber(n.getHours(),{unit:"hour"}):Te.H(n,a)},K:function(n,a,t){const e=n.getHours()%12;return a==="Ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},k:function(n,a,t){let e=n.getHours();return e===0&&(e=24),a==="ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},m:function(n,a,t){return a==="mo"?t.ordinalNumber(n.getMinutes(),{unit:"minute"}):Te.m(n,a)},s:function(n,a,t){return a==="so"?t.ordinalNumber(n.getSeconds(),{unit:"second"}):Te.s(n,a)},S:function(n,a){return Te.S(n,a)},X:function(n,a,t){const e=n.getTimezoneOffset();if(e===0)return"Z";switch(a){case"X":return Fr(e);case"XXXX":case"XX":return Fe(e);case"XXXXX":case"XXX":default:return Fe(e,":")}},x:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"x":return Fr(e);case"xxxx":case"xx":return Fe(e);case"xxxxx":case"xxx":default:return Fe(e,":")}},O:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"O":case"OO":case"OOO":return"GMT"+Lr(e,":");case"OOOO":default:return"GMT"+Fe(e,":")}},z:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"z":case"zz":case"zzz":return"GMT"+Lr(e,":");case"zzzz":default:return"GMT"+Fe(e,":")}},t:function(n,a,t){const e=Math.trunc(+n/1e3);return K(e,a.length)},T:function(n,a,t){return K(+n,a.length)}};function Lr(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=Math.trunc(e/60),o=e%60;return o===0?t+String(r):t+String(r)+a+K(o,2)}function Fr(n,a){return n%60===0?(n>0?"-":"+")+K(Math.abs(n)/60,2):Fe(n,a)}function Fe(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=K(Math.trunc(e/60),2),o=K(e%60,2);return t+r+a+o}const Ir=(n,a)=>{switch(n){case"P":return a.date({width:"short"});case"PP":return a.date({width:"medium"});case"PPP":return a.date({width:"long"});case"PPPP":default:return a.date({width:"full"})}},En=(n,a)=>{switch(n){case"p":return a.time({width:"short"});case"pp":return a.time({width:"medium"});case"ppp":return a.time({width:"long"});case"pppp":default:return a.time({width:"full"})}},za=(n,a)=>{const t=n.match(/(P+)(p+)?/)||[],e=t[1],r=t[2];if(!r)return Ir(n,a);let o;switch(e){case"P":o=a.dateTime({width:"short"});break;case"PP":o=a.dateTime({width:"medium"});break;case"PPP":o=a.dateTime({width:"long"});break;case"PPPP":default:o=a.dateTime({width:"full"});break}return o.replace("{{date}}",Ir(e,a)).replace("{{time}}",En(r,a))},ur={p:En,P:za},Xa=/^D+$/,Za=/^Y+$/,Ja=["D","DD","YY","YYYY"];function eo(n){return Xa.test(n)}function to(n){return Za.test(n)}function ro(n,a,t){const e=no(n,a,t);if(console.warn(e),Ja.includes(n))throw new RangeError(e)}function no(n,a,t){const e=n[0]==="Y"?"years":"days of the month";return`Use \`${n.toLowerCase()}\` instead of \`${n}\` (in \`${a}\`) for formatting ${e} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const ao=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,oo=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,io=/^'([^]*?)'?$/,so=/''/g,co=/[a-zA-Z]/;function Ar(n,a,t){var u,d,f,p,h,v,g,y;const e=qe(),r=(t==null?void 0:t.locale)??e.locale??Cn,o=(t==null?void 0:t.firstWeekContainsDate)??((d=(u=t==null?void 0:t.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??e.firstWeekContainsDate??((p=(f=e.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,i=(t==null?void 0:t.weekStartsOn)??((v=(h=t==null?void 0:t.locale)==null?void 0:h.options)==null?void 0:v.weekStartsOn)??e.weekStartsOn??((y=(g=e.locale)==null?void 0:g.options)==null?void 0:y.weekStartsOn)??0,s=E(n,t==null?void 0:t.in);if(!Nt(s))throw new RangeError("Invalid time value");let c=a.match(oo).map(_=>{const w=_[0];if(w==="p"||w==="P"){const b=ur[w];return b(_,r.formatLong)}return _}).join("").match(ao).map(_=>{if(_==="''")return{isToken:!1,value:"'"};const w=_[0];if(w==="'")return{isToken:!1,value:lo(_)};if(Yr[w])return{isToken:!0,value:_};if(w.match(co))throw new RangeError("Format string contains an unescaped latin alphabet character `"+w+"`");return{isToken:!1,value:_}});r.localize.preprocessor&&(c=r.localize.preprocessor(s,c));const l={firstWeekContainsDate:o,weekStartsOn:i,locale:r};return c.map(_=>{if(!_.isToken)return _.value;const w=_.value;(!(t!=null&&t.useAdditionalWeekYearTokens)&&to(w)||!(t!=null&&t.useAdditionalDayOfYearTokens)&&eo(w))&&ro(w,a,String(n));const b=Yr[w[0]];return b(s,w,r.localize,l)}).join("")}function lo(n){const a=n.match(io);return a?a[1].replace(so,"'"):n}function Wr(n,a){return E(n,a==null?void 0:a.in).getDate()}function uo(n,a){return E(n,a==null?void 0:a.in).getDay()}function fo(n,a){const t=E(n,a==null?void 0:a.in),e=t.getFullYear(),r=t.getMonth(),o=U(t,0);return o.setFullYear(e,r+1,0),o.setHours(0,0,0,0),o.getDate()}function po(){return Object.assign({},qe())}function Me(n,a){return E(n,a==null?void 0:a.in).getHours()}function ho(n,a){const t=E(n,a==null?void 0:a.in).getDay();return t===0?7:t}function Ce(n,a){return E(n,a==null?void 0:a.in).getMinutes()}function ne(n,a){return E(n,a==null?void 0:a.in).getMonth()}function Re(n){return E(n).getSeconds()}function dr(n){return+E(n)}function L(n,a){return E(n,a==null?void 0:a.in).getFullYear()}function Ye(n,a){return+E(n)>+E(a)}function je(n,a){return+E(n)<+E(a)}function mo(n,a){return+E(n)==+E(a)}function go(n,a){const t=vo(a)?new a(0):U(a,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t.setHours(n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()),t}function vo(n){var a;return typeof n=="function"&&((a=n.prototype)==null?void 0:a.constructor)===n}const wo=10;class Pn{constructor(){M(this,"subPriority",0)}validate(a,t){return!0}}class Do extends Pn{constructor(a,t,e,r,o){super(),this.value=a,this.validateValue=t,this.setValue=e,this.priority=r,o&&(this.subPriority=o)}validate(a,t){return this.validateValue(a,this.value,t)}set(a,t,e){return this.setValue(a,t,this.value,e)}}class yo extends Pn{constructor(t,e){super();M(this,"priority",wo);M(this,"subPriority",-1);this.context=t||(r=>U(e,r))}set(t,e){return e.timestampIsSet?t:U(t,go(t,this.context))}}class B{run(a,t,e,r){const o=this.parse(a,t,e,r);return o?{setter:new Do(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(a,t,e){return!0}}class bo extends B{constructor(){super(...arguments);M(this,"priority",140);M(this,"incompatibleTokens",["R","u","t","T"])}parse(t,e,r){switch(e){case"G":case"GG":case"GGG":return r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"});case"GGGGG":return r.era(t,{width:"narrow"});case"GGGG":default:return r.era(t,{width:"wide"})||r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"})}}set(t,e,r){return e.era=r,t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}const Z={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},ve={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function J(n,a){return n&&{value:a(n.value),rest:n.rest}}function z(n,a){const t=a.match(n);return t?{value:parseInt(t[0],10),rest:a.slice(t[0].length)}:null}function we(n,a){const t=a.match(n);if(!t)return null;if(t[0]==="Z")return{value:0,rest:a.slice(1)};const e=t[1]==="+"?1:-1,r=t[2]?parseInt(t[2],10):0,o=t[3]?parseInt(t[3],10):0,i=t[5]?parseInt(t[5],10):0;return{value:e*(r*qt+o*Vt+i*ca),rest:a.slice(t[0].length)}}function Tn(n){return z(Z.anyDigitsSigned,n)}function X(n,a){switch(n){case 1:return z(Z.singleDigit,a);case 2:return z(Z.twoDigits,a);case 3:return z(Z.threeDigits,a);case 4:return z(Z.fourDigits,a);default:return z(new RegExp("^\\d{1,"+n+"}"),a)}}function It(n,a){switch(n){case 1:return z(Z.singleDigitSigned,a);case 2:return z(Z.twoDigitsSigned,a);case 3:return z(Z.threeDigitsSigned,a);case 4:return z(Z.fourDigitsSigned,a);default:return z(new RegExp("^-?\\d{1,"+n+"}"),a)}}function wr(n){switch(n){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function On(n,a){const t=a>0,e=t?a:1-a;let r;if(e<=50)r=n||100;else{const o=e+50,i=Math.trunc(o/100)*100,s=n>=o%100;r=n+i-(s?100:0)}return t?r:1-r}function Rn(n){return n%400===0||n%4===0&&n%100!==0}class ko extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(t,e,r){const o=i=>({year:i,isTwoDigitYear:e==="yy"});switch(e){case"y":return J(X(4,t),o);case"yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r){const o=t.getFullYear();if(r.isTwoDigitYear){const s=On(r.year,o);return t.setFullYear(s,0,1),t.setHours(0,0,0,0),t}const i=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(i,0,1),t.setHours(0,0,0,0),t}}class _o extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(t,e,r){const o=i=>({year:i,isTwoDigitYear:e==="YY"});switch(e){case"Y":return J(X(4,t),o);case"Yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r,o){const i=vr(t,o);if(r.isTwoDigitYear){const c=On(r.year,i);return t.setFullYear(c,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}const s=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(s,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}}class xo extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(t,e){return It(e==="R"?4:e.length,t)}set(t,e,r){const o=U(t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),ze(o)}}class Mo extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(t,e){return It(e==="u"?4:e.length,t)}set(t,e,r){return t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}class Co extends B{constructor(){super(...arguments);M(this,"priority",120);M(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"Q":case"QQ":return X(e.length,t);case"Qo":return r.ordinalNumber(t,{unit:"quarter"});case"QQQ":return r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQ":default:return r.quarter(t,{width:"wide",context:"formatting"})||r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class So extends B{constructor(){super(...arguments);M(this,"priority",120);M(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"q":case"qq":return X(e.length,t);case"qo":return r.ordinalNumber(t,{unit:"quarter"});case"qqq":return r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(t,{width:"narrow",context:"standalone"});case"qqqq":default:return r.quarter(t,{width:"wide",context:"standalone"})||r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class Eo extends B{constructor(){super(...arguments);M(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]);M(this,"priority",110)}parse(t,e,r){const o=i=>i-1;switch(e){case"M":return J(z(Z.month,t),o);case"MM":return J(X(2,t),o);case"Mo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"MMM":return r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(t,{width:"narrow",context:"formatting"});case"MMMM":default:return r.month(t,{width:"wide",context:"formatting"})||r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}class Po extends B{constructor(){super(...arguments);M(this,"priority",110);M(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(t,e,r){const o=i=>i-1;switch(e){case"L":return J(z(Z.month,t),o);case"LL":return J(X(2,t),o);case"Lo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"LLL":return r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(t,{width:"narrow",context:"standalone"});case"LLLL":default:return r.month(t,{width:"wide",context:"standalone"})||r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}function To(n,a,t){const e=E(n,t==null?void 0:t.in),r=Sn(e,t)-a;return e.setDate(e.getDate()-r*7),E(e,t==null?void 0:t.in)}class Oo extends B{constructor(){super(...arguments);M(this,"priority",100);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(t,e,r){switch(e){case"w":return z(Z.week,t);case"wo":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r,o){return Ee(To(t,r,o),o)}}function Ro(n,a,t){const e=E(n,t==null?void 0:t.in),r=gr(e,t)-a;return e.setDate(e.getDate()-r*7),e}class No extends B{constructor(){super(...arguments);M(this,"priority",100);M(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(t,e,r){switch(e){case"I":return z(Z.week,t);case"Io":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r){return ze(Ro(t,r))}}const Yo=[31,28,31,30,31,30,31,31,30,31,30,31],Lo=[31,29,31,30,31,30,31,31,30,31,30,31];class Fo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"subPriority",1);M(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"d":return z(Z.date,t);case"do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear(),o=Rn(r),i=t.getMonth();return o?e>=1&&e<=Lo[i]:e>=1&&e<=Yo[i]}set(t,e,r){return t.setDate(r),t.setHours(0,0,0,0),t}}class Io extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"subpriority",1);M(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(t,e,r){switch(e){case"D":case"DD":return z(Z.dayOfYear,t);case"Do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear();return Rn(r)?e>=1&&e<=366:e>=1&&e<=365}set(t,e,r){return t.setMonth(0,r),t.setHours(0,0,0,0),t}}function Dr(n,a,t){var d,f,p,h;const e=qe(),r=(t==null?void 0:t.weekStartsOn)??((f=(d=t==null?void 0:t.locale)==null?void 0:d.options)==null?void 0:f.weekStartsOn)??e.weekStartsOn??((h=(p=e.locale)==null?void 0:p.options)==null?void 0:h.weekStartsOn)??0,o=E(n,t==null?void 0:t.in),i=o.getDay(),c=(a%7+7)%7,l=7-r,u=a<0||a>6?a-(i+l)%7:(c+l)%7-(i+l)%7;return pe(o,u,t)}class Ao extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"E":case"EE":case"EEE":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEE":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Wo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(t,e,r,o){const i=s=>{const c=Math.floor((s-1)/7)*7;return(s+o.weekStartsOn+6)%7+c};switch(e){case"e":case"ee":return J(X(e.length,t),i);case"eo":return J(r.ordinalNumber(t,{unit:"day"}),i);case"eee":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeeee":return r.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeee":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Ho extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(t,e,r,o){const i=s=>{const c=Math.floor((s-1)/7)*7;return(s+o.weekStartsOn+6)%7+c};switch(e){case"c":case"cc":return J(X(e.length,t),i);case"co":return J(r.ordinalNumber(t,{unit:"day"}),i);case"ccc":return r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"ccccc":return r.day(t,{width:"narrow",context:"standalone"});case"cccccc":return r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"cccc":default:return r.day(t,{width:"wide",context:"standalone"})||r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}function Bo(n,a,t){const e=E(n,t==null?void 0:t.in),r=ho(e,t),o=a-r;return pe(e,o,t)}class Qo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(t,e,r){const o=i=>i===0?7:i;switch(e){case"i":case"ii":return X(e.length,t);case"io":return r.ordinalNumber(t,{unit:"day"});case"iii":return J(r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiii":return J(r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiiii":return J(r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiii":default:return J(r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o)}}validate(t,e){return e>=1&&e<=7}set(t,e,r){return t=Bo(t,r),t.setHours(0,0,0,0),t}}class jo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(t,e,r){switch(e){case"a":case"aa":case"aaa":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaaa":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaa":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Vo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(t,e,r){switch(e){case"b":case"bb":case"bbb":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbbb":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbb":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class qo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["a","b","t","T"])}parse(t,e,r){switch(e){case"B":case"BB":case"BBB":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBBB":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBB":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Ko extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["H","K","k","t","T"])}parse(t,e,r){switch(e){case"h":return z(Z.hour12h,t);case"ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=12}set(t,e,r){const o=t.getHours()>=12;return o&&r<12?t.setHours(r+12,0,0,0):!o&&r===12?t.setHours(0,0,0,0):t.setHours(r,0,0,0),t}}class Uo extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(t,e,r){switch(e){case"H":return z(Z.hour23h,t);case"Ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=23}set(t,e,r){return t.setHours(r,0,0,0),t}}class $o extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["h","H","k","t","T"])}parse(t,e,r){switch(e){case"K":return z(Z.hour11h,t);case"Ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.getHours()>=12&&r<12?t.setHours(r+12,0,0,0):t.setHours(r,0,0,0),t}}class Go extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(t,e,r){switch(e){case"k":return z(Z.hour24h,t);case"ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=24}set(t,e,r){const o=r<=24?r%24:r;return t.setHours(o,0,0,0),t}}class zo extends B{constructor(){super(...arguments);M(this,"priority",60);M(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"m":return z(Z.minute,t);case"mo":return r.ordinalNumber(t,{unit:"minute"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setMinutes(r,0,0),t}}class Xo extends B{constructor(){super(...arguments);M(this,"priority",50);M(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"s":return z(Z.second,t);case"so":return r.ordinalNumber(t,{unit:"second"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setSeconds(r,0),t}}class Zo extends B{constructor(){super(...arguments);M(this,"priority",30);M(this,"incompatibleTokens",["t","T"])}parse(t,e){const r=o=>Math.trunc(o*Math.pow(10,-e.length+3));return J(X(e.length,t),r)}set(t,e,r){return t.setMilliseconds(r),t}}class Jo extends B{constructor(){super(...arguments);M(this,"priority",10);M(this,"incompatibleTokens",["t","T","x"])}parse(t,e){switch(e){case"X":return we(ve.basicOptionalMinutes,t);case"XX":return we(ve.basic,t);case"XXXX":return we(ve.basicOptionalSeconds,t);case"XXXXX":return we(ve.extendedOptionalSeconds,t);case"XXX":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class ei extends B{constructor(){super(...arguments);M(this,"priority",10);M(this,"incompatibleTokens",["t","T","X"])}parse(t,e){switch(e){case"x":return we(ve.basicOptionalMinutes,t);case"xx":return we(ve.basic,t);case"xxxx":return we(ve.basicOptionalSeconds,t);case"xxxxx":return we(ve.extendedOptionalSeconds,t);case"xxx":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class ti extends B{constructor(){super(...arguments);M(this,"priority",40);M(this,"incompatibleTokens","*")}parse(t){return Tn(t)}set(t,e,r){return[U(t,r*1e3),{timestampIsSet:!0}]}}class ri extends B{constructor(){super(...arguments);M(this,"priority",20);M(this,"incompatibleTokens","*")}parse(t){return Tn(t)}set(t,e,r){return[U(t,r),{timestampIsSet:!0}]}}const ni={G:new bo,y:new ko,Y:new _o,R:new xo,u:new Mo,Q:new Co,q:new So,M:new Eo,L:new Po,w:new Oo,I:new No,d:new Fo,D:new Io,E:new Ao,e:new Wo,c:new Ho,i:new Qo,a:new jo,b:new Vo,B:new qo,h:new Ko,H:new Uo,K:new $o,k:new Go,m:new zo,s:new Xo,S:new Zo,X:new Jo,x:new ei,t:new ti,T:new ri},ai=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,oi=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,ii=/^'([^]*?)'?$/,si=/''/g,ci=/\S/,li=/[a-zA-Z]/;function ui(n,a,t,e){var g,y,_,w,b,P,O,C;const r=()=>U((e==null?void 0:e.in)||t,NaN),o=po(),i=(e==null?void 0:e.locale)??o.locale??Cn,s=(e==null?void 0:e.firstWeekContainsDate)??((y=(g=e==null?void 0:e.locale)==null?void 0:g.options)==null?void 0:y.firstWeekContainsDate)??o.firstWeekContainsDate??((w=(_=o.locale)==null?void 0:_.options)==null?void 0:w.firstWeekContainsDate)??1,c=(e==null?void 0:e.weekStartsOn)??((P=(b=e==null?void 0:e.locale)==null?void 0:b.options)==null?void 0:P.weekStartsOn)??o.weekStartsOn??((C=(O=o.locale)==null?void 0:O.options)==null?void 0:C.weekStartsOn)??0;if(!a)return n?r():E(t,e==null?void 0:e.in);const l={firstWeekContainsDate:s,weekStartsOn:c,locale:i},u=[new yo(e==null?void 0:e.in,t)],d=a.match(oi).map(k=>{const S=k[0];if(S in ur){const N=ur[S];return N(k,i.formatLong)}return k}).join("").match(ai),f=[];for(let k of d){const S=k[0],N=ni[S];if(N){const{incompatibleTokens:Q}=N;if(Array.isArray(Q)){const $=f.find(j=>Q.includes(j.token)||j.token===S);if($)throw new RangeError(`The format string mustn't contain \`${$.fullToken}\` and \`${k}\` at the same time`)}else if(N.incompatibleTokens==="*"&&f.length>0)throw new RangeError(`The format string mustn't contain \`${k}\` and any other token at the same time`);f.push({token:S,fullToken:k});const I=N.run(n,k,i.match,l);if(!I)return r();u.push(I.setter),n=I.rest}else{if(S.match(li))throw new RangeError("Format string contains an unescaped latin alphabet character `"+S+"`");if(k==="''"?k="'":S==="'"&&(k=di(k)),n.indexOf(k)===0)n=n.slice(k.length);else return r()}}if(n.length>0&&ci.test(n))return r();const p=u.map(k=>k.priority).sort((k,S)=>S-k).filter((k,S,N)=>N.indexOf(k)===S).map(k=>u.filter(S=>S.priority===k).sort((S,N)=>N.subPriority-S.subPriority)).map(k=>k[0]);let h=E(t,e==null?void 0:e.in);if(isNaN(+h))return r();const v={};for(const k of p){if(!k.validate(h,l))return r();const S=k.set(h,v,l);Array.isArray(S)?(h=S[0],Object.assign(v,S[1])):h=S}return h}function di(n){return n.match(ii)[1].replace(si,"'")}function fi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()&&e.getMonth()===r.getMonth()}function pi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+lr(e)==+lr(r)}function hi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()}function ut(n,a,t){const e=+E(n,t==null?void 0:t.in),[r,o]=[+E(a.start,t==null?void 0:t.in),+E(a.end,t==null?void 0:t.in)].sort((i,s)=>i-s);return e>=r&&e<=o}function mi(n,a,t){return pe(n,-1,t)}function gi(n,a){const t=()=>U(a==null?void 0:a.in,NaN),r=yi(n);let o;if(r.date){const l=bi(r.date,2);o=ki(l.restDateString,l.year)}if(!o||isNaN(+o))return t();const i=+o;let s=0,c;if(r.time&&(s=_i(r.time),isNaN(s)))return t();if(r.timezone){if(c=xi(r.timezone),isNaN(c))return t()}else{const l=new Date(i+s),u=E(0,a==null?void 0:a.in);return u.setFullYear(l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate()),u.setHours(l.getUTCHours(),l.getUTCMinutes(),l.getUTCSeconds(),l.getUTCMilliseconds()),u}return E(i+s+c,a==null?void 0:a.in)}const vt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},vi=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,wi=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Di=/^([+-])(\d{2})(?::?(\d{2}))?$/;function yi(n){const a={},t=n.split(vt.dateTimeDelimiter);let e;if(t.length>2)return a;if(/:/.test(t[0])?e=t[0]:(a.date=t[0],e=t[1],vt.timeZoneDelimiter.test(a.date)&&(a.date=n.split(vt.timeZoneDelimiter)[0],e=n.substr(a.date.length,n.length))),e){const r=vt.timezone.exec(e);r?(a.time=e.replace(r[1],""),a.timezone=r[1]):a.time=e}return a}function bi(n,a){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+a)+"})|(\\d{2}|[+-]\\d{"+(2+a)+"})$)"),e=n.match(t);if(!e)return{year:NaN,restDateString:""};const r=e[1]?parseInt(e[1]):null,o=e[2]?parseInt(e[2]):null;return{year:o===null?r:o*100,restDateString:n.slice((e[1]||e[2]).length)}}function ki(n,a){if(a===null)return new Date(NaN);const t=n.match(vi);if(!t)return new Date(NaN);const e=!!t[4],r=it(t[1]),o=it(t[2])-1,i=it(t[3]),s=it(t[4]),c=it(t[5])-1;if(e)return Pi(a,s,c)?Mi(a,s,c):new Date(NaN);{const l=new Date(0);return!Si(a,o,i)||!Ei(a,r)?new Date(NaN):(l.setUTCFullYear(a,o,Math.max(r,i)),l)}}function it(n){return n?parseInt(n):1}function _i(n){const a=n.match(wi);if(!a)return NaN;const t=er(a[1]),e=er(a[2]),r=er(a[3]);return Ti(t,e,r)?t*qt+e*Vt+r*1e3:NaN}function er(n){return n&&parseFloat(n.replace(",","."))||0}function xi(n){if(n==="Z")return 0;const a=n.match(Di);if(!a)return 0;const t=a[1]==="+"?-1:1,e=parseInt(a[2]),r=a[3]&&parseInt(a[3])||0;return Oi(e,r)?t*(e*qt+r*Vt):NaN}function Mi(n,a,t){const e=new Date(0);e.setUTCFullYear(n,0,4);const r=e.getUTCDay()||7,o=(a-1)*7+t+1-r;return e.setUTCDate(e.getUTCDate()+o),e}const Ci=[31,null,31,30,31,30,31,31,30,31,30,31];function Nn(n){return n%400===0||n%4===0&&n%100!==0}function Si(n,a,t){return a>=0&&a<=11&&t>=1&&t<=(Ci[a]||(Nn(n)?29:28))}function Ei(n,a){return a>=1&&a<=(Nn(n)?366:365)}function Pi(n,a,t){return a>=1&&a<=53&&t>=0&&t<=6}function Ti(n,a,t){return n===24?a===0&&t===0:t>=0&&t<60&&a>=0&&a<60&&n>=0&&n<25}function Oi(n,a){return a>=0&&a<=59}function ce(n,a,t){const e=E(n,t==null?void 0:t.in),r=e.getFullYear(),o=e.getDate(),i=U(n,0);i.setFullYear(r,a,15),i.setHours(0,0,0,0);const s=fo(i);return e.setMonth(a,Math.min(o,s)),e}function xt(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setHours(a),e}function Mt(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setMinutes(a),e}function Ue(n,a,t){const e=E(n,t==null?void 0:t.in),r=Math.trunc(e.getMonth()/3)+1,o=a-r;return ce(e,e.getMonth()+o*3)}function Ct(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setSeconds(a),e}function me(n,a,t){const e=E(n,t==null?void 0:t.in);return isNaN(+e)?U(n,NaN):(e.setFullYear(a),e)}function He(n,a,t){return he(n,-a,t)}function Yn(n,a,t){return mr(n,-1,t)}function Hr(n,a,t){return Rt(n,-1,t)}function Ze(n,a,t){return _e(n,-a,t)}function Ut(){return typeof window<"u"}function nt(n){return Ln(n)?(n.nodeName||"").toLowerCase():"#document"}function ie(n){var a;return(n==null||(a=n.ownerDocument)==null?void 0:a.defaultView)||window}function ke(n){var a;return(a=(Ln(n)?n.ownerDocument:n.document)||window.document)==null?void 0:a.documentElement}function Ln(n){return Ut()?n instanceof Node||n instanceof ie(n).Node:!1}function oe(n){return Ut()?n instanceof Element||n instanceof ie(n).Element:!1}function be(n){return Ut()?n instanceof HTMLElement||n instanceof ie(n).HTMLElement:!1}function Br(n){return!Ut()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof ie(n).ShadowRoot}const Ri=new Set(["inline","contents"]);function pt(n){const{overflow:a,overflowX:t,overflowY:e,display:r}=ue(n);return/auto|scroll|overlay|hidden|clip/.test(a+e+t)&&!Ri.has(r)}const Ni=new Set(["table","td","th"]);function Yi(n){return Ni.has(nt(n))}const Li=[":popover-open",":modal"];function $t(n){return Li.some(a=>{try{return n.matches(a)}catch{return!1}})}const Fi=["transform","translate","scale","rotate","perspective"],Ii=["transform","translate","scale","rotate","perspective","filter"],Ai=["paint","layout","strict","content"];function yr(n){const a=br(),t=oe(n)?ue(n):n;return Fi.some(e=>t[e]?t[e]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!a&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!a&&(t.filter?t.filter!=="none":!1)||Ii.some(e=>(t.willChange||"").includes(e))||Ai.some(e=>(t.contain||"").includes(e))}function Wi(n){let a=Le(n);for(;be(a)&&!Je(a);){if(yr(a))return a;if($t(a))return null;a=Le(a)}return null}function br(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Hi=new Set(["html","body","#document"]);function Je(n){return Hi.has(nt(n))}function ue(n){return ie(n).getComputedStyle(n)}function Gt(n){return oe(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function Le(n){if(nt(n)==="html")return n;const a=n.assignedSlot||n.parentNode||Br(n)&&n.host||ke(n);return Br(a)?a.host:a}function Fn(n){const a=Le(n);return Je(a)?n.ownerDocument?n.ownerDocument.body:n.body:be(a)&&pt(a)?a:Fn(a)}function dt(n,a,t){var e;a===void 0&&(a=[]),t===void 0&&(t=!0);const r=Fn(n),o=r===((e=n.ownerDocument)==null?void 0:e.body),i=ie(r);if(o){const s=fr(i);return a.concat(i,i.visualViewport||[],pt(r)?r:[],s&&t?dt(s):[])}return a.concat(r,dt(r,[],t))}function fr(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}const et=Math.min,Be=Math.max,At=Math.round,wt=Math.floor,ye=n=>({x:n,y:n}),Bi={left:"right",right:"left",bottom:"top",top:"bottom"},Qi={start:"end",end:"start"};function ji(n,a,t){return Be(n,et(a,t))}function zt(n,a){return typeof n=="function"?n(a):n}function tt(n){return n.split("-")[0]}function ht(n){return n.split("-")[1]}function Vi(n){return n==="x"?"y":"x"}function kr(n){return n==="y"?"height":"width"}const qi=new Set(["top","bottom"]);function Ie(n){return qi.has(tt(n))?"y":"x"}function _r(n){return Vi(Ie(n))}function Ki(n,a,t){t===void 0&&(t=!1);const e=ht(n),r=_r(n),o=kr(r);let i=r==="x"?e===(t?"end":"start")?"right":"left":e==="start"?"bottom":"top";return a.reference[o]>a.floating[o]&&(i=Wt(i)),[i,Wt(i)]}function Ui(n){const a=Wt(n);return[pr(n),a,pr(a)]}function pr(n){return n.replace(/start|end/g,a=>Qi[a])}const Qr=["left","right"],jr=["right","left"],$i=["top","bottom"],Gi=["bottom","top"];function zi(n,a,t){switch(n){case"top":case"bottom":return t?a?jr:Qr:a?Qr:jr;case"left":case"right":return a?$i:Gi;default:return[]}}function Xi(n,a,t,e){const r=ht(n);let o=zi(tt(n),t==="start",e);return r&&(o=o.map(i=>i+"-"+r),a&&(o=o.concat(o.map(pr)))),o}function Wt(n){return n.replace(/left|right|bottom|top/g,a=>Bi[a])}function Zi(n){return{top:0,right:0,bottom:0,left:0,...n}}function In(n){return typeof n!="number"?Zi(n):{top:n,right:n,bottom:n,left:n}}function Ht(n){const{x:a,y:t,width:e,height:r}=n;return{width:e,height:r,top:t,left:a,right:a+e,bottom:t+r,x:a,y:t}}var Ji=typeof document<"u",es=function(){},Bt=Ji?D.useLayoutEffect:es;const ts={...wn},rs=ts.useInsertionEffect,ns=rs||(n=>n());function as(n){const a=D.useRef(()=>{});return ns(()=>{a.current=n}),D.useCallback(function(){for(var t=arguments.length,e=new Array(t),r=0;r{const{placement:e="bottom",strategy:r="absolute",middleware:o=[],platform:i}=t,s=o.filter(Boolean),c=await(i.isRTL==null?void 0:i.isRTL(a));let l=await i.getElementRects({reference:n,floating:a,strategy:r}),{x:u,y:d}=Vr(l,e,c),f=e,p={},h=0;for(let v=0;v({name:"arrow",options:n,async fn(a){const{x:t,y:e,placement:r,rects:o,platform:i,elements:s,middlewareData:c}=a,{element:l,padding:u=0}=zt(n,a)||{};if(l==null)return{};const d=In(u),f={x:t,y:e},p=_r(r),h=kr(p),v=await i.getDimensions(l),g=p==="y",y=g?"top":"left",_=g?"bottom":"right",w=g?"clientHeight":"clientWidth",b=o.reference[h]+o.reference[p]-f[p]-o.floating[h],P=f[p]-o.reference[p],O=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l));let C=O?O[w]:0;(!C||!await(i.isElement==null?void 0:i.isElement(O)))&&(C=s.floating[w]||o.floating[h]);const k=b/2-P/2,S=C/2-v[h]/2-1,N=et(d[y],S),Q=et(d[_],S),I=N,$=C-v[h]-Q,j=C/2-v[h]/2+k,q=ji(I,j,$),R=!c.arrow&&ht(r)!=null&&j!==q&&o.reference[h]/2-(jj<=0)){var Q,I;const j=(((Q=o.flip)==null?void 0:Q.index)||0)+1,q=C[j];if(q&&(!(d==="alignment"?_!==Ie(q):!1)||N.every(Y=>Y.overflows[0]>0&&Ie(Y.placement)===_)))return{data:{index:j,overflows:N},reset:{placement:q}};let R=(I=N.filter(F=>F.overflows[0]<=0).sort((F,Y)=>F.overflows[1]-Y.overflows[1])[0])==null?void 0:I.placement;if(!R)switch(p){case"bestFit":{var $;const F=($=N.filter(Y=>{if(O){const ee=Ie(Y.placement);return ee===_||ee==="y"}return!0}).map(Y=>[Y.placement,Y.overflows.filter(ee=>ee>0).reduce((ee,de)=>ee+de,0)]).sort((Y,ee)=>Y[1]-ee[1])[0])==null?void 0:$[0];F&&(R=F);break}case"initialPlacement":R=s;break}if(r!==R)return{reset:{placement:R}}}return{}}}},ls=new Set(["left","top"]);async function us(n,a){const{placement:t,platform:e,elements:r}=n,o=await(e.isRTL==null?void 0:e.isRTL(r.floating)),i=tt(t),s=ht(t),c=Ie(t)==="y",l=ls.has(i)?-1:1,u=o&&c?-1:1,d=zt(a,n);let{mainAxis:f,crossAxis:p,alignmentAxis:h}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof h=="number"&&(p=s==="end"?h*-1:h),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}const ds=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(a){var t,e;const{x:r,y:o,placement:i,middlewareData:s}=a,c=await us(a,n);return i===((t=s.offset)==null?void 0:t.placement)&&(e=s.arrow)!=null&&e.alignmentOffset?{}:{x:r+c.x,y:o+c.y,data:{...c,placement:i}}}}};function An(n){const a=ue(n);let t=parseFloat(a.width)||0,e=parseFloat(a.height)||0;const r=be(n),o=r?n.offsetWidth:t,i=r?n.offsetHeight:e,s=At(t)!==o||At(e)!==i;return s&&(t=o,e=i),{width:t,height:e,$:s}}function xr(n){return oe(n)?n:n.contextElement}function $e(n){const a=xr(n);if(!be(a))return ye(1);const t=a.getBoundingClientRect(),{width:e,height:r,$:o}=An(a);let i=(o?At(t.width):t.width)/e,s=(o?At(t.height):t.height)/r;return(!i||!Number.isFinite(i))&&(i=1),(!s||!Number.isFinite(s))&&(s=1),{x:i,y:s}}const fs=ye(0);function Wn(n){const a=ie(n);return!br()||!a.visualViewport?fs:{x:a.visualViewport.offsetLeft,y:a.visualViewport.offsetTop}}function ps(n,a,t){return a===void 0&&(a=!1),!t||a&&t!==ie(n)?!1:a}function Ve(n,a,t,e){a===void 0&&(a=!1),t===void 0&&(t=!1);const r=n.getBoundingClientRect(),o=xr(n);let i=ye(1);a&&(e?oe(e)&&(i=$e(e)):i=$e(n));const s=ps(o,t,e)?Wn(o):ye(0);let c=(r.left+s.x)/i.x,l=(r.top+s.y)/i.y,u=r.width/i.x,d=r.height/i.y;if(o){const f=ie(o),p=e&&oe(e)?ie(e):e;let h=f,v=fr(h);for(;v&&e&&p!==h;){const g=$e(v),y=v.getBoundingClientRect(),_=ue(v),w=y.left+(v.clientLeft+parseFloat(_.paddingLeft))*g.x,b=y.top+(v.clientTop+parseFloat(_.paddingTop))*g.y;c*=g.x,l*=g.y,u*=g.x,d*=g.y,c+=w,l+=b,h=ie(v),v=fr(h)}}return Ht({width:u,height:d,x:c,y:l})}function Mr(n,a){const t=Gt(n).scrollLeft;return a?a.left+t:Ve(ke(n)).left+t}function Hn(n,a,t){t===void 0&&(t=!1);const e=n.getBoundingClientRect(),r=e.left+a.scrollLeft-(t?0:Mr(n,e)),o=e.top+a.scrollTop;return{x:r,y:o}}function hs(n){let{elements:a,rect:t,offsetParent:e,strategy:r}=n;const o=r==="fixed",i=ke(e),s=a?$t(a.floating):!1;if(e===i||s&&o)return t;let c={scrollLeft:0,scrollTop:0},l=ye(1);const u=ye(0),d=be(e);if((d||!d&&!o)&&((nt(e)!=="body"||pt(i))&&(c=Gt(e)),be(e))){const p=Ve(e);l=$e(e),u.x=p.x+e.clientLeft,u.y=p.y+e.clientTop}const f=i&&!d&&!o?Hn(i,c,!0):ye(0);return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:t.y*l.y-c.scrollTop*l.y+u.y+f.y}}function ms(n){return Array.from(n.getClientRects())}function gs(n){const a=ke(n),t=Gt(n),e=n.ownerDocument.body,r=Be(a.scrollWidth,a.clientWidth,e.scrollWidth,e.clientWidth),o=Be(a.scrollHeight,a.clientHeight,e.scrollHeight,e.clientHeight);let i=-t.scrollLeft+Mr(n);const s=-t.scrollTop;return ue(e).direction==="rtl"&&(i+=Be(a.clientWidth,e.clientWidth)-r),{width:r,height:o,x:i,y:s}}function vs(n,a){const t=ie(n),e=ke(n),r=t.visualViewport;let o=e.clientWidth,i=e.clientHeight,s=0,c=0;if(r){o=r.width,i=r.height;const l=br();(!l||l&&a==="fixed")&&(s=r.offsetLeft,c=r.offsetTop)}return{width:o,height:i,x:s,y:c}}const ws=new Set(["absolute","fixed"]);function Ds(n,a){const t=Ve(n,!0,a==="fixed"),e=t.top+n.clientTop,r=t.left+n.clientLeft,o=be(n)?$e(n):ye(1),i=n.clientWidth*o.x,s=n.clientHeight*o.y,c=r*o.x,l=e*o.y;return{width:i,height:s,x:c,y:l}}function qr(n,a,t){let e;if(a==="viewport")e=vs(n,t);else if(a==="document")e=gs(ke(n));else if(oe(a))e=Ds(a,t);else{const r=Wn(n);e={x:a.x-r.x,y:a.y-r.y,width:a.width,height:a.height}}return Ht(e)}function Bn(n,a){const t=Le(n);return t===a||!oe(t)||Je(t)?!1:ue(t).position==="fixed"||Bn(t,a)}function ys(n,a){const t=a.get(n);if(t)return t;let e=dt(n,[],!1).filter(s=>oe(s)&&nt(s)!=="body"),r=null;const o=ue(n).position==="fixed";let i=o?Le(n):n;for(;oe(i)&&!Je(i);){const s=ue(i),c=yr(i);!c&&s.position==="fixed"&&(r=null),(o?!c&&!r:!c&&s.position==="static"&&!!r&&ws.has(r.position)||pt(i)&&!c&&Bn(n,i))?e=e.filter(u=>u!==i):r=s,i=Le(i)}return a.set(n,e),e}function bs(n){let{element:a,boundary:t,rootBoundary:e,strategy:r}=n;const i=[...t==="clippingAncestors"?$t(a)?[]:ys(a,this._c):[].concat(t),e],s=i[0],c=i.reduce((l,u)=>{const d=qr(a,u,r);return l.top=Be(d.top,l.top),l.right=et(d.right,l.right),l.bottom=et(d.bottom,l.bottom),l.left=Be(d.left,l.left),l},qr(a,s,r));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function ks(n){const{width:a,height:t}=An(n);return{width:a,height:t}}function _s(n,a,t){const e=be(a),r=ke(a),o=t==="fixed",i=Ve(n,!0,o,a);let s={scrollLeft:0,scrollTop:0};const c=ye(0);function l(){c.x=Mr(r)}if(e||!e&&!o)if((nt(a)!=="body"||pt(r))&&(s=Gt(a)),e){const p=Ve(a,!0,o,a);c.x=p.x+a.clientLeft,c.y=p.y+a.clientTop}else r&&l();o&&!e&&r&&l();const u=r&&!e&&!o?Hn(r,s):ye(0),d=i.left+s.scrollLeft-c.x-u.x,f=i.top+s.scrollTop-c.y-u.y;return{x:d,y:f,width:i.width,height:i.height}}function tr(n){return ue(n).position==="static"}function Kr(n,a){if(!be(n)||ue(n).position==="fixed")return null;if(a)return a(n);let t=n.offsetParent;return ke(n)===t&&(t=t.ownerDocument.body),t}function Qn(n,a){const t=ie(n);if($t(n))return t;if(!be(n)){let r=Le(n);for(;r&&!Je(r);){if(oe(r)&&!tr(r))return r;r=Le(r)}return t}let e=Kr(n,a);for(;e&&Yi(e)&&tr(e);)e=Kr(e,a);return e&&Je(e)&&tr(e)&&!yr(e)?t:e||Wi(n)||t}const xs=async function(n){const a=this.getOffsetParent||Qn,t=this.getDimensions,e=await t(n.floating);return{reference:_s(n.reference,await a(n.floating),n.strategy),floating:{x:0,y:0,width:e.width,height:e.height}}};function Ms(n){return ue(n).direction==="rtl"}const Cs={convertOffsetParentRelativeRectToViewportRelativeRect:hs,getDocumentElement:ke,getClippingRect:bs,getOffsetParent:Qn,getElementRects:xs,getClientRects:ms,getDimensions:ks,getScale:$e,isElement:oe,isRTL:Ms};function jn(n,a){return n.x===a.x&&n.y===a.y&&n.width===a.width&&n.height===a.height}function Ss(n,a){let t=null,e;const r=ke(n);function o(){var s;clearTimeout(e),(s=t)==null||s.disconnect(),t=null}function i(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),o();const l=n.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(s||a(),!f||!p)return;const h=wt(d),v=wt(r.clientWidth-(u+f)),g=wt(r.clientHeight-(d+p)),y=wt(u),w={rootMargin:-h+"px "+-v+"px "+-g+"px "+-y+"px",threshold:Be(0,et(1,c))||1};let b=!0;function P(O){const C=O[0].intersectionRatio;if(C!==c){if(!b)return i();C?i(!1,C):e=setTimeout(()=>{i(!1,1e-7)},1e3)}C===1&&!jn(l,n.getBoundingClientRect())&&i(),b=!1}try{t=new IntersectionObserver(P,{...w,root:r.ownerDocument})}catch{t=new IntersectionObserver(P,w)}t.observe(n)}return i(!0),o}function Es(n,a,t,e){e===void 0&&(e={});const{ancestorScroll:r=!0,ancestorResize:o=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:c=!1}=e,l=xr(n),u=r||o?[...l?dt(l):[],...dt(a)]:[];u.forEach(y=>{r&&y.addEventListener("scroll",t,{passive:!0}),o&&y.addEventListener("resize",t)});const d=l&&s?Ss(l,t):null;let f=-1,p=null;i&&(p=new ResizeObserver(y=>{let[_]=y;_&&_.target===l&&p&&(p.unobserve(a),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var w;(w=p)==null||w.observe(a)})),t()}),l&&!c&&p.observe(l),p.observe(a));let h,v=c?Ve(n):null;c&&g();function g(){const y=Ve(n);v&&!jn(v,y)&&t(),v=y,h=requestAnimationFrame(g)}return t(),()=>{var y;u.forEach(_=>{r&&_.removeEventListener("scroll",t),o&&_.removeEventListener("resize",t)}),d==null||d(),(y=p)==null||y.disconnect(),p=null,c&&cancelAnimationFrame(h)}}const Ps=ds,Ts=cs,Ur=ss,Os=(n,a,t)=>{const e=new Map,r={platform:Cs,...t},o={...r.platform,_c:e};return os(n,a,{...r,platform:o})};var Rs=typeof document<"u",Ns=function(){},St=Rs?D.useLayoutEffect:Ns;function Qt(n,a){if(n===a)return!0;if(typeof n!=typeof a)return!1;if(typeof n=="function"&&n.toString()===a.toString())return!0;let t,e,r;if(n&&a&&typeof n=="object"){if(Array.isArray(n)){if(t=n.length,t!==a.length)return!1;for(e=t;e--!==0;)if(!Qt(n[e],a[e]))return!1;return!0}if(r=Object.keys(n),t=r.length,t!==Object.keys(a).length)return!1;for(e=t;e--!==0;)if(!{}.hasOwnProperty.call(a,r[e]))return!1;for(e=t;e--!==0;){const o=r[e];if(!(o==="_owner"&&n.$$typeof)&&!Qt(n[o],a[o]))return!1}return!0}return n!==n&&a!==a}function Vn(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function $r(n,a){const t=Vn(n);return Math.round(a*t)/t}function rr(n){const a=D.useRef(n);return St(()=>{a.current=n}),a}function Ys(n){n===void 0&&(n={});const{placement:a="bottom",strategy:t="absolute",middleware:e=[],platform:r,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:c,open:l}=n,[u,d]=D.useState({x:0,y:0,strategy:t,placement:a,middlewareData:{},isPositioned:!1}),[f,p]=D.useState(e);Qt(f,e)||p(e);const[h,v]=D.useState(null),[g,y]=D.useState(null),_=D.useCallback(Y=>{Y!==O.current&&(O.current=Y,v(Y))},[]),w=D.useCallback(Y=>{Y!==C.current&&(C.current=Y,y(Y))},[]),b=o||h,P=i||g,O=D.useRef(null),C=D.useRef(null),k=D.useRef(u),S=c!=null,N=rr(c),Q=rr(r),I=rr(l),$=D.useCallback(()=>{if(!O.current||!C.current)return;const Y={placement:a,strategy:t,middleware:f};Q.current&&(Y.platform=Q.current),Os(O.current,C.current,Y).then(ee=>{const de={...ee,isPositioned:I.current!==!1};j.current&&!Qt(k.current,de)&&(k.current=de,na.flushSync(()=>{d(de)}))})},[f,a,t,Q,I]);St(()=>{l===!1&&k.current.isPositioned&&(k.current.isPositioned=!1,d(Y=>({...Y,isPositioned:!1})))},[l]);const j=D.useRef(!1);St(()=>(j.current=!0,()=>{j.current=!1}),[]),St(()=>{if(b&&(O.current=b),P&&(C.current=P),b&&P){if(N.current)return N.current(b,P,$);$()}},[b,P,$,N,S]);const q=D.useMemo(()=>({reference:O,floating:C,setReference:_,setFloating:w}),[_,w]),R=D.useMemo(()=>({reference:b,floating:P}),[b,P]),F=D.useMemo(()=>{const Y={position:t,left:0,top:0};if(!R.floating)return Y;const ee=$r(R.floating,u.x),de=$r(R.floating,u.y);return s?{...Y,transform:"translate("+ee+"px, "+de+"px)",...Vn(R.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:ee,top:de}},[t,s,R.floating,u.x,u.y]);return D.useMemo(()=>({...u,update:$,refs:q,elements:R,floatingStyles:F}),[u,$,q,R,F])}const Ls=n=>{function a(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:n,fn(t){const{element:e,padding:r}=typeof n=="function"?n(t):n;return e&&a(e)?e.current!=null?Ur({element:e.current,padding:r}).fn(t):{}:e?Ur({element:e,padding:r}).fn(t):{}}}},Fs=(n,a)=>({...Ps(n),options:[n,a]}),Is=(n,a)=>({...Ts(n),options:[n,a]}),As=(n,a)=>({...Ls(n),options:[n,a]}),Ws={...wn};let Gr=!1,Hs=0;const zr=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Hs++;function Bs(){const[n,a]=D.useState(()=>Gr?zr():void 0);return Bt(()=>{n==null&&a(zr())},[]),D.useEffect(()=>{Gr=!0},[]),n}const Qs=Ws.useId,qn=Qs||Bs,js=D.forwardRef(function(a,t){const{context:{placement:e,elements:{floating:r},middlewareData:{arrow:o,shift:i}},width:s=14,height:c=7,tipRadius:l=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h,...v}={},...g}=a,y=qn(),[_,w]=D.useState(!1);if(Bt(()=>{if(!r)return;ue(r).direction==="rtl"&&w(!0)},[r]),!r)return null;const[b,P]=e.split("-"),O=b==="top"||b==="bottom";let C=d;(O&&i!=null&&i.x||!O&&i!=null&&i.y)&&(C=null);const k=u*2,S=k/2,N=s/2*(l/-8+1),Q=c/2*l/4,I=!!p,$=C&&P==="end"?"bottom":"top";let j=C&&P==="end"?"right":"left";C&&_&&(j=P==="end"?"left":"right");const q=(o==null?void 0:o.x)!=null?C||o.x:"",R=(o==null?void 0:o.y)!=null?C||o.y:"",F=p||"M0,0"+(" H"+s)+(" L"+(s-N)+","+(c-Q))+(" Q"+s/2+","+c+" "+N+","+(c-Q))+" Z",Y={top:I?"rotate(180deg)":"",left:I?"rotate(90deg)":"rotate(-90deg)",bottom:I?"":"rotate(180deg)",right:I?"rotate(-90deg)":"rotate(90deg)"}[b];return T.jsxs("svg",{...g,"aria-hidden":!0,ref:t,width:I?s:s+k,height:s,viewBox:"0 0 "+s+" "+(c>s?c:s),style:{position:"absolute",pointerEvents:"none",[j]:q,[$]:R,[b]:O||I?"100%":"calc(100% - "+k/2+"px)",transform:[Y,h].filter(ee=>!!ee).join(" "),...v},children:[k>0&&T.jsx("path",{clipPath:"url(#"+y+")",fill:"none",stroke:f,strokeWidth:k+(p?0:1),d:F}),T.jsx("path",{stroke:k&&!p?g.fill:"none",d:F}),T.jsx("clipPath",{id:y,children:T.jsx("rect",{x:-S,y:S*(I?-1:1),width:s+k,height:s})})]})});function Vs(){const n=new Map;return{emit(a,t){var e;(e=n.get(a))==null||e.forEach(r=>r(t))},on(a,t){n.has(a)||n.set(a,new Set),n.get(a).add(t)},off(a,t){var e;(e=n.get(a))==null||e.delete(t)}}}const qs=D.createContext(null),Ks=D.createContext(null),Us=()=>{var n;return((n=D.useContext(qs))==null?void 0:n.id)||null},$s=()=>D.useContext(Ks);function Gs(n){const{open:a=!1,onOpenChange:t,elements:e}=n,r=qn(),o=D.useRef({}),[i]=D.useState(()=>Vs()),s=Us()!=null,[c,l]=D.useState(e.reference),u=as((p,h,v)=>{o.current.openEvent=p?h:void 0,i.emit("openchange",{open:p,event:h,reason:v,nested:s}),t==null||t(p,h,v)}),d=D.useMemo(()=>({setPositionReference:l}),[]),f=D.useMemo(()=>({reference:c||e.reference||null,floating:e.floating||null,domReference:e.reference}),[c,e.reference,e.floating]);return D.useMemo(()=>({dataRef:o,open:a,onOpenChange:u,elements:f,events:i,floatingId:r,refs:d}),[a,u,f,i,r,d])}function zs(n){n===void 0&&(n={});const{nodeId:a}=n,t=Gs({...n,elements:{reference:null,floating:null,...n.elements}}),e=n.rootContext||t,r=e.elements,[o,i]=D.useState(null),[s,c]=D.useState(null),u=(r==null?void 0:r.domReference)||o,d=D.useRef(null),f=$s();Bt(()=>{u&&(d.current=u)},[u]);const p=Ys({...n,elements:{...r,...s&&{reference:s}}}),h=D.useCallback(w=>{const b=oe(w)?{getBoundingClientRect:()=>w.getBoundingClientRect(),getClientRects:()=>w.getClientRects(),contextElement:w}:w;c(b),p.refs.setReference(b)},[p.refs]),v=D.useCallback(w=>{(oe(w)||w===null)&&(d.current=w,i(w)),(oe(p.refs.reference.current)||p.refs.reference.current===null||w!==null&&!oe(w))&&p.refs.setReference(w)},[p.refs]),g=D.useMemo(()=>({...p.refs,setReference:v,setPositionReference:h,domReference:d}),[p.refs,v,h]),y=D.useMemo(()=>({...p.elements,domReference:u}),[p.elements,u]),_=D.useMemo(()=>({...p,...e,refs:g,elements:y,nodeId:a}),[p,g,y,a,e]);return Bt(()=>{e.dataRef.current.floatingContext=_;const w=f==null?void 0:f.nodesRef.current.find(b=>b.id===a);w&&(w.context=_)}),D.useMemo(()=>({...p,context:_,refs:g,elements:y}),[p,g,y,_])}/*! react-datepicker v8.4.0 https://github.com/Hacker0x01/react-datepicker Released under the MIT License. diff --git a/frontend/dist/assets/FormElements-5NQybTAT.js b/frontend/dist/assets/FormElements-RQ7qOmSO.js similarity index 98% rename from frontend/dist/assets/FormElements-5NQybTAT.js rename to frontend/dist/assets/FormElements-RQ7qOmSO.js index c2b978f2db..29248d6a0d 100644 --- a/frontend/dist/assets/FormElements-5NQybTAT.js +++ b/frontend/dist/assets/FormElements-RQ7qOmSO.js @@ -1,4 +1,4 @@ -import{j as n,d as e,r as u}from"./index-DJ39NcK9.js";const x=e.span` +import{j as n,d as e,r as u}from"./index-Dzr7PBfw.js";const x=e.span` padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem; diff --git a/frontend/dist/assets/IconButton-DIc-CK1Q.js b/frontend/dist/assets/IconButton-CsSKj4cW.js similarity index 82% rename from frontend/dist/assets/IconButton-DIc-CK1Q.js rename to frontend/dist/assets/IconButton-CsSKj4cW.js index 80b8290005..6fce0813f8 100644 --- a/frontend/dist/assets/IconButton-DIc-CK1Q.js +++ b/frontend/dist/assets/IconButton-CsSKj4cW.js @@ -1 +1 @@ -import{R as e,j as m,o as l,f as i}from"./index-DJ39NcK9.js";const u=e.forwardRef(({className:o,children:t,"aria-label":s,size:a="md",variant:n="ghost",...r},c)=>m.jsx(l,{className:i("btn-icon",a==="sm"&&"h-8 w-8",a==="md"&&"h-10 w-10",a==="lg"&&"h-12 w-12",o),ref:c,size:"icon",variant:n,"aria-label":s,...r,children:t}));u.displayName="IconButton";export{u as I}; +import{R as e,j as m,o as l,g as i}from"./index-Dzr7PBfw.js";const u=e.forwardRef(({className:o,children:t,"aria-label":s,size:a="md",variant:n="ghost",...r},c)=>m.jsx(l,{className:i("btn-icon",a==="sm"&&"h-8 w-8",a==="md"&&"h-10 w-10",a==="lg"&&"h-12 w-12",o),ref:c,size:"icon",variant:n,"aria-label":s,...r,children:t}));u.displayName="IconButton";export{u as I}; diff --git a/frontend/dist/assets/LandingPage-QWDx4awI.js b/frontend/dist/assets/LandingPage-Dc2ID8Hk.js similarity index 94% rename from frontend/dist/assets/LandingPage-QWDx4awI.js rename to frontend/dist/assets/LandingPage-Dc2ID8Hk.js index b3b9df3a86..f3bb30cffa 100644 --- a/frontend/dist/assets/LandingPage-QWDx4awI.js +++ b/frontend/dist/assets/LandingPage-Dc2ID8Hk.js @@ -1 +1 @@ -import{j as e,L as a}from"./index-DJ39NcK9.js";import"./IconButton-DIc-CK1Q.js";import"./TreeDetailLayout-CKxWzGm5.js";import"./ExportButton-Y3IlBTFt.js";import"./FormElements-5NQybTAT.js";import"./Table-BCdM5JW5.js";import"./ChartComponents-BrntlwBm.js";import"./MapSidebar-yNxbJbqT.js";import{N as i}from"./Navbar-DOE0P8dm.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-C5b08Ak3.js";import"./DarkModeToggle-sLchHfDj.js";const n=()=>e.jsxs("section",{className:"pt-20 bg-gradient-to-br from-green-500 to-green-700 dark:from-green-600 dark:to-green-800 min-h-screen flex items-center justify-center relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 opacity-30",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`}}),e.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24",children:e.jsxs("div",{className:"text-center",children:[e.jsxs("h1",{className:"text-4xl md:text-6xl font-bold text-white mb-6",children:["Discover, Monitor & Export",e.jsx("span",{className:"block text-green-200",children:"Real-Time Tree Insights"})]}),e.jsx("p",{className:"text-xl md:text-2xl text-green-100 mb-8 max-w-3xl mx-auto",children:"Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights."}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[e.jsx(a,{to:"/register",className:"bg-white dark:bg-gray-100 text-green-600 dark:text-green-700 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 dark:hover:bg-gray-200 transition-colors",children:"Start Your Free Trial"}),e.jsx("a",{href:"#features",className:"border-2 border-white text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-white hover:text-green-600 dark:hover:bg-gray-100 dark:hover:text-green-700 transition-colors",children:"Learn More"})]})]})})]}),l=({icon:r,title:t,description:s})=>e.jsxs("div",{className:"bg-white dark:bg-gray-900 p-8 rounded-xl shadow-lg dark:shadow-gray-900/50",children:[e.jsx("div",{className:"w-12 h-12 bg-green-100 dark:bg-green-900/30 rounded-lg flex items-center justify-center mb-6",children:r}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:t}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s})]}),o=()=>{const r=[{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Real-Time Analytics",description:"Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics."},{icon:e.jsxs("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),title:"Interactive Mapping",description:"Visualize forests and individual trees with marker clustering and detailed tree information."},{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),title:"Data Export",description:"Export filtered datasets to CSV or XLSX format for reporting and analysis."}];return e.jsx("section",{id:"features",className:"py-20 bg-gray-50 dark:bg-gray-800",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"text-center mb-16",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4",children:"Powerful Features for Tree Management"}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto",children:"Everything you need to monitor, analyze, and export tree data with precision and ease."})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-8",children:r.map((t,s)=>e.jsx(l,{icon:t.icon,title:t.title,description:t.description},s))})]})})},d=()=>{const r=[{value:"10K+",label:"Trees Monitored"},{value:"95%",label:"Survival Rate"},{value:"50+",label:"Forest Projects"},{value:"24/7",label:"Real-Time Data"}];return e.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 p-8 rounded-xl",children:e.jsx("div",{className:"grid grid-cols-2 gap-4",children:r.map((t,s)=>e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-green-600 dark:text-green-400 mb-2",children:t.value}),e.jsx("div",{className:"text-gray-600 dark:text-gray-300",children:t.label})]},s))})})},c=()=>e.jsx("section",{id:"about",className:"py-20 bg-white dark:bg-gray-900",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-6",children:"Empowering Sustainable Forestry"}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-6",children:"Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects."}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-8",children:"Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs."}),e.jsx(a,{to:"/register",className:"bg-green-600 dark:bg-green-500 text-white px-6 py-3 rounded-lg text-lg font-semibold hover:bg-green-700 dark:hover:bg-green-600 transition-colors inline-block",children:"Join Nanwa Today"})]}),e.jsx(d,{})]})})}),x=()=>e.jsx("footer",{className:"bg-gray-900 text-white py-12",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"grid md:grid-cols-4 gap-8",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-bold text-green-400 mb-4",children:"Nanwa"}),e.jsx("p",{className:"text-gray-400",children:"Empowering sustainable forestry through data-driven insights and real-time monitoring."})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Product"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#features",className:"hover:text-white transition-colors",children:"Features"})}),e.jsx("li",{children:e.jsx(a,{to:"/login",className:"hover:text-white transition-colors",children:"Login"})}),e.jsx("li",{children:e.jsx(a,{to:"/register",className:"hover:text-white transition-colors",children:"Register"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Company"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#about",className:"hover:text-white transition-colors",children:"About"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Contact"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Privacy"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Support"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Help Center"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Documentation"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"API"})})]})]})]}),e.jsx("div",{className:"border-t border-gray-800 mt-8 pt-8 text-center text-gray-400",children:e.jsx("p",{children:"© 2024 Nanwa. All rights reserved."})})]})}),k=()=>e.jsxs("div",{className:"min-h-screen bg-white dark:bg-gray-900",children:[e.jsx(i,{}),e.jsx(n,{}),e.jsx(o,{}),e.jsx(c,{}),e.jsx(x,{})]});export{k as LandingPage}; +import{j as e,L as a}from"./index-Dzr7PBfw.js";import"./IconButton-CsSKj4cW.js";import"./TreeDetailLayout-Cc_P7nbu.js";import"./ExportButton-BvRt6B34.js";import"./FormElements-RQ7qOmSO.js";import"./Table-CZfmBv9T.js";import"./ChartComponents-CUdy75Zt.js";import"./MapSidebar-DZT3HTLm.js";import{N as i}from"./Navbar-BJVIhaUA.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BRnXQ3uS.js";import"./DarkModeToggle-DNnaM-T2.js";const n=()=>e.jsxs("section",{className:"pt-20 bg-gradient-to-br from-green-500 to-green-700 dark:from-green-600 dark:to-green-800 min-h-screen flex items-center justify-center relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 opacity-30",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`}}),e.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24",children:e.jsxs("div",{className:"text-center",children:[e.jsxs("h1",{className:"text-4xl md:text-6xl font-bold text-white mb-6",children:["Discover, Monitor & Export",e.jsx("span",{className:"block text-green-200",children:"Real-Time Tree Insights"})]}),e.jsx("p",{className:"text-xl md:text-2xl text-green-100 mb-8 max-w-3xl mx-auto",children:"Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights."}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[e.jsx(a,{to:"/register",className:"bg-white dark:bg-gray-100 text-green-600 dark:text-green-700 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 dark:hover:bg-gray-200 transition-colors",children:"Start Your Free Trial"}),e.jsx("a",{href:"#features",className:"border-2 border-white text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-white hover:text-green-600 dark:hover:bg-gray-100 dark:hover:text-green-700 transition-colors",children:"Learn More"})]})]})})]}),l=({icon:r,title:t,description:s})=>e.jsxs("div",{className:"bg-white dark:bg-gray-900 p-8 rounded-xl shadow-lg dark:shadow-gray-900/50",children:[e.jsx("div",{className:"w-12 h-12 bg-green-100 dark:bg-green-900/30 rounded-lg flex items-center justify-center mb-6",children:r}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:t}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s})]}),o=()=>{const r=[{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Real-Time Analytics",description:"Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics."},{icon:e.jsxs("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),title:"Interactive Mapping",description:"Visualize forests and individual trees with marker clustering and detailed tree information."},{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),title:"Data Export",description:"Export filtered datasets to CSV or XLSX format for reporting and analysis."}];return e.jsx("section",{id:"features",className:"py-20 bg-gray-50 dark:bg-gray-800",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"text-center mb-16",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4",children:"Powerful Features for Tree Management"}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto",children:"Everything you need to monitor, analyze, and export tree data with precision and ease."})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-8",children:r.map((t,s)=>e.jsx(l,{icon:t.icon,title:t.title,description:t.description},s))})]})})},d=()=>{const r=[{value:"10K+",label:"Trees Monitored"},{value:"95%",label:"Survival Rate"},{value:"50+",label:"Forest Projects"},{value:"24/7",label:"Real-Time Data"}];return e.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 p-8 rounded-xl",children:e.jsx("div",{className:"grid grid-cols-2 gap-4",children:r.map((t,s)=>e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-green-600 dark:text-green-400 mb-2",children:t.value}),e.jsx("div",{className:"text-gray-600 dark:text-gray-300",children:t.label})]},s))})})},c=()=>e.jsx("section",{id:"about",className:"py-20 bg-white dark:bg-gray-900",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-6",children:"Empowering Sustainable Forestry"}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-6",children:"Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects."}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-8",children:"Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs."}),e.jsx(a,{to:"/register",className:"bg-green-600 dark:bg-green-500 text-white px-6 py-3 rounded-lg text-lg font-semibold hover:bg-green-700 dark:hover:bg-green-600 transition-colors inline-block",children:"Join Nanwa Today"})]}),e.jsx(d,{})]})})}),x=()=>e.jsx("footer",{className:"bg-gray-900 text-white py-12",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"grid md:grid-cols-4 gap-8",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-bold text-green-400 mb-4",children:"Nanwa"}),e.jsx("p",{className:"text-gray-400",children:"Empowering sustainable forestry through data-driven insights and real-time monitoring."})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Product"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#features",className:"hover:text-white transition-colors",children:"Features"})}),e.jsx("li",{children:e.jsx(a,{to:"/login",className:"hover:text-white transition-colors",children:"Login"})}),e.jsx("li",{children:e.jsx(a,{to:"/register",className:"hover:text-white transition-colors",children:"Register"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Company"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#about",className:"hover:text-white transition-colors",children:"About"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Contact"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Privacy"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Support"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Help Center"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Documentation"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"API"})})]})]})]}),e.jsx("div",{className:"border-t border-gray-800 mt-8 pt-8 text-center text-gray-400",children:e.jsx("p",{children:"© 2024 Nanwa. All rights reserved."})})]})}),k=()=>e.jsxs("div",{className:"min-h-screen bg-white dark:bg-gray-900",children:[e.jsx(i,{}),e.jsx(n,{}),e.jsx(o,{}),e.jsx(c,{}),e.jsx(x,{})]});export{k as LandingPage}; diff --git a/frontend/dist/assets/LoginPage-Ckb0MyS_.js b/frontend/dist/assets/LoginPage-LyjmzT4O.js similarity index 96% rename from frontend/dist/assets/LoginPage-Ckb0MyS_.js rename to frontend/dist/assets/LoginPage-LyjmzT4O.js index 3673c103fb..7402fb3ba4 100644 --- a/frontend/dist/assets/LoginPage-Ckb0MyS_.js +++ b/frontend/dist/assets/LoginPage-LyjmzT4O.js @@ -1 +1 @@ -import{r as o,j as e,L as f,u as j,a as k}from"./index-DJ39NcK9.js";import{N as w}from"./Navbar-DOE0P8dm.js";import{F as y,P as v}from"./PasswordInput-dcNbels6.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-C5b08Ak3.js";import"./DarkModeToggle-sLchHfDj.js";import"./IconButton-DIc-CK1Q.js";const C=({connectionState:r,onCancel:t,showCancel:l=!0})=>{const[n,i]=o.useState(0),[c,u]=o.useState(0),{isConnecting:s,isColdStart:a,retryAttempt:d,totalAttempts:h,estimatedWaitTime:p,message:g}=r;return o.useEffect(()=>{if(!s){i(0),u(0);return}const x=setInterval(()=>{if(u(m=>m+1),a){const b=Math.min(c/60*100,90);i(b)}else{const b=Math.min(c/10*100,90);i(b)}},1e3);return()=>clearInterval(x)},[s,a,c]),o.useEffect(()=>{!s&&n>0&&i(100)},[s,n]),s?e.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg p-8 max-w-md w-full mx-4 shadow-2xl",children:[e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("div",{className:"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsxs("svg",{className:"w-8 h-8 text-green-600 dark:text-green-400 animate-spin",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:a?"Server Starting Up":"Connecting"})]}),e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-2",children:g}),a&&e.jsxs("div",{className:"text-sm text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsx("p",{children:"The server needs to start up from sleep mode."}),e.jsx("p",{children:"This usually takes 30-60 seconds."})]})]}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex justify-between text-sm text-gray-500 dark:text-gray-400 mb-2",children:[e.jsx("span",{children:"Progress"}),e.jsxs("span",{children:[Math.round(n),"%"]})]}),e.jsx("div",{className:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2",children:e.jsx("div",{className:"bg-green-600 h-2 rounded-full transition-all duration-1000 ease-out",style:{width:`${n}%`}})})]}),d>0&&e.jsx("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg mb-4",children:e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"text-blue-600 dark:text-blue-400",children:["Attempt ",d," of ",h]}),e.jsxs("span",{className:"text-blue-500 dark:text-blue-300",children:[c,"s elapsed"]})]})}),p>0&&e.jsxs("div",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mb-4",children:["Estimated wait time: ",p," seconds"]}),l&&t&&e.jsx("div",{className:"text-center",children:e.jsx("button",{onClick:t,className:"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 text-sm underline",children:"Cancel and try again later"})})]})}):null},N=(r,t)=>{const[l,n]=o.useState(r),[i,c]=o.useState({}),[u,s]=o.useState({}),a=o.useCallback(g=>{const{name:x,value:m}=g.target;n(b=>({...b,[x]:m})),i[x]&&c(b=>({...b,[x]:""}))},[i]),d=o.useCallback(g=>{const{name:x}=g.target;s(m=>({...m,[x]:!0}))},[]),h=o.useCallback(()=>{const g=t(l);return c(g),Object.keys(g).length===0},[l,t]),p=o.useCallback(()=>{n(r),c({}),s({})},[r]);return{values:l,errors:i,touched:u,handleChange:a,handleBlur:d,validateForm:h,resetForm:p,setErrors:c}},S=r=>{const t={};return r.email?/\S+@\S+\.\S+/.test(r.email)||(t.email="Email is invalid"):t.email="Email is required",r.password?r.password.length<6&&(t.password="Password must be at least 6 characters"):t.password="Password is required",t},A=({onSubmit:r,isSubmitting:t,errors:l})=>{const{values:n,errors:i,handleChange:c,handleBlur:u,validateForm:s}=N({email:"",password:""},S),a={...i,...l},d=h=>{h.preventDefault(),s()&&r(n)};return e.jsxs("form",{onSubmit:d,className:"space-y-6",children:[a.general&&e.jsx("div",{className:"bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 text-red-700 dark:text-red-400 px-4 py-3 rounded-lg",children:a.general}),e.jsx(y,{label:"Email address",id:"email",error:a.email,required:!0,children:e.jsx("input",{type:"email",id:"email",name:"email",value:n.email,onChange:c,onBlur:u,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${a.email?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"}`,placeholder:"Enter your email",disabled:t})}),e.jsx(y,{label:"Password",id:"password",error:a.password,required:!0,children:e.jsx(v,{id:"password",name:"password",value:n.password,onChange:c,onBlur:u,error:a.password,placeholder:"Enter your password",disabled:t})}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(E,{disabled:t}),e.jsx(F,{})]}),e.jsx(P,{isSubmitting:t}),e.jsx(T,{})]})},E=({disabled:r})=>e.jsxs("div",{className:"flex items-center",children:[e.jsx("input",{id:"remember-me",name:"remember-me",type:"checkbox",className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700",disabled:r}),e.jsx("label",{htmlFor:"remember-me",className:"ml-2 block text-sm text-gray-900 dark:text-white",children:"Remember me"})]}),F=()=>e.jsx("div",{className:"text-sm",children:e.jsx("a",{href:"#",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Forgot your password?"})}),P=({isSubmitting:r})=>e.jsx("button",{type:"submit",disabled:r,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 dark:bg-green-500 hover:bg-green-700 dark:hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:r?e.jsxs("div",{className:"flex items-center",children:[e.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Signing in..."]}):"Sign in"}),T=()=>e.jsx("div",{className:"text-center",children:e.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["Don't have an account?"," ",e.jsx(f,{to:"/register",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Sign up"})]})}),L=()=>e.jsxs("div",{className:"mt-8 p-4 bg-gray-50 dark:bg-gray-700 rounded-lg",children:[e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 mb-2",children:"Demo credentials:"}),e.jsxs("div",{className:"text-xs text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Admin:"})," admin@nanwa.com / admin123"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"User:"})," user@nanwa.com / user123"]})]})]}),M=()=>{const[r,t]=o.useState({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null}),l=o.useCallback(s=>{const{attempt:a,totalAttempts:d,delay:h,error:p,isColdStart:g}=s;t(x=>({...x,isConnecting:!0,isColdStart:g,retryAttempt:a,totalAttempts:d,estimatedWaitTime:Math.ceil(h/1e3),message:W(a,d,g),error:null}))},[]),n=o.useCallback(()=>{t({isConnecting:!0,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:10,message:"Connecting to server...",error:null})},[]),i=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"Connected successfully!",error:null})},[]),c=o.useCallback(s=>{const a=s&&typeof s=="object"?s.message||String(s):String(s||"Connection failed");t(d=>({...d,isConnecting:!1,error:a,message:"Connection failed. Please try again."}))},[]),u=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null})},[]);return{connectionState:r,handleRetry:l,startConnection:n,connectionSuccess:i,connectionFailed:c,resetConnection:u}},W=(r,t,l)=>r===1&&l?"Server is starting up, this may take up to 60 seconds...":r===2&&l?"Still starting up, please wait...":r===3&&l?"Almost ready, just a few more seconds...":r>=4&&l?"Final attempt, server should be ready soon...":`Retrying connection (${r}/${t})...`,B=()=>{const[r,t]=o.useState({}),[l,n]=o.useState(!1),{login:i}=j();k();const{connectionState:c,handleRetry:u,startConnection:s,connectionSuccess:a,connectionFailed:d,resetConnection:h}=M();return{errors:r,isSubmitting:l,connectionState:c,handleLogin:async x=>{n(!0),t({}),s();try{const m=await i(x.email,x.password,u);m.success?a():(d(new Error(m.error)),t({general:m.error}))}catch(m){d(m),t({general:"Connection failed. Please check your internet connection and try again."})}finally{n(!1)}},handleCancelConnection:()=>{h(),n(!1)}}},V=()=>{const{errors:r,isSubmitting:t,connectionState:l,handleLogin:n,handleCancelConnection:i}=B();return e.jsxs(e.Fragment,{children:[e.jsx(w,{}),e.jsx(C,{connectionState:l,onCancel:i,showCancel:!0}),e.jsx("div",{className:"min-h-screen bg-gradient-to-br from-green-50 to-green-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center p-4",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-2xl p-8 w-full max-w-md",children:[e.jsx(R,{}),e.jsx(A,{onSubmit:n,isSubmitting:t,errors:r}),e.jsx(L,{})]})})]})},R=()=>e.jsxs("div",{className:"text-center mb-8",children:[e.jsx(f,{to:"/",className:"inline-block mb-6",children:e.jsx("h1",{className:"text-3xl font-bold text-green-600 dark:text-green-400",children:"Nanwa"})}),e.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome back"}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Sign in to your account to continue"})]});export{V as LoginPage}; +import{r as o,j as e,L as f,u as j,a as k}from"./index-Dzr7PBfw.js";import{N as w}from"./Navbar-BJVIhaUA.js";import{F as y,P as v}from"./PasswordInput-BcWvIN9N.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BRnXQ3uS.js";import"./DarkModeToggle-DNnaM-T2.js";import"./IconButton-CsSKj4cW.js";const C=({connectionState:r,onCancel:t,showCancel:l=!0})=>{const[n,i]=o.useState(0),[c,u]=o.useState(0),{isConnecting:s,isColdStart:a,retryAttempt:d,totalAttempts:h,estimatedWaitTime:p,message:g}=r;return o.useEffect(()=>{if(!s){i(0),u(0);return}const x=setInterval(()=>{if(u(m=>m+1),a){const b=Math.min(c/60*100,90);i(b)}else{const b=Math.min(c/10*100,90);i(b)}},1e3);return()=>clearInterval(x)},[s,a,c]),o.useEffect(()=>{!s&&n>0&&i(100)},[s,n]),s?e.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg p-8 max-w-md w-full mx-4 shadow-2xl",children:[e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("div",{className:"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsxs("svg",{className:"w-8 h-8 text-green-600 dark:text-green-400 animate-spin",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:a?"Server Starting Up":"Connecting"})]}),e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-2",children:g}),a&&e.jsxs("div",{className:"text-sm text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsx("p",{children:"The server needs to start up from sleep mode."}),e.jsx("p",{children:"This usually takes 30-60 seconds."})]})]}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex justify-between text-sm text-gray-500 dark:text-gray-400 mb-2",children:[e.jsx("span",{children:"Progress"}),e.jsxs("span",{children:[Math.round(n),"%"]})]}),e.jsx("div",{className:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2",children:e.jsx("div",{className:"bg-green-600 h-2 rounded-full transition-all duration-1000 ease-out",style:{width:`${n}%`}})})]}),d>0&&e.jsx("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg mb-4",children:e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"text-blue-600 dark:text-blue-400",children:["Attempt ",d," of ",h]}),e.jsxs("span",{className:"text-blue-500 dark:text-blue-300",children:[c,"s elapsed"]})]})}),p>0&&e.jsxs("div",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mb-4",children:["Estimated wait time: ",p," seconds"]}),l&&t&&e.jsx("div",{className:"text-center",children:e.jsx("button",{onClick:t,className:"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 text-sm underline",children:"Cancel and try again later"})})]})}):null},N=(r,t)=>{const[l,n]=o.useState(r),[i,c]=o.useState({}),[u,s]=o.useState({}),a=o.useCallback(g=>{const{name:x,value:m}=g.target;n(b=>({...b,[x]:m})),i[x]&&c(b=>({...b,[x]:""}))},[i]),d=o.useCallback(g=>{const{name:x}=g.target;s(m=>({...m,[x]:!0}))},[]),h=o.useCallback(()=>{const g=t(l);return c(g),Object.keys(g).length===0},[l,t]),p=o.useCallback(()=>{n(r),c({}),s({})},[r]);return{values:l,errors:i,touched:u,handleChange:a,handleBlur:d,validateForm:h,resetForm:p,setErrors:c}},S=r=>{const t={};return r.email?/\S+@\S+\.\S+/.test(r.email)||(t.email="Email is invalid"):t.email="Email is required",r.password?r.password.length<6&&(t.password="Password must be at least 6 characters"):t.password="Password is required",t},A=({onSubmit:r,isSubmitting:t,errors:l})=>{const{values:n,errors:i,handleChange:c,handleBlur:u,validateForm:s}=N({email:"",password:""},S),a={...i,...l},d=h=>{h.preventDefault(),s()&&r(n)};return e.jsxs("form",{onSubmit:d,className:"space-y-6",children:[a.general&&e.jsx("div",{className:"bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 text-red-700 dark:text-red-400 px-4 py-3 rounded-lg",children:a.general}),e.jsx(y,{label:"Email address",id:"email",error:a.email,required:!0,children:e.jsx("input",{type:"email",id:"email",name:"email",value:n.email,onChange:c,onBlur:u,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${a.email?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"}`,placeholder:"Enter your email",disabled:t})}),e.jsx(y,{label:"Password",id:"password",error:a.password,required:!0,children:e.jsx(v,{id:"password",name:"password",value:n.password,onChange:c,onBlur:u,error:a.password,placeholder:"Enter your password",disabled:t})}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(E,{disabled:t}),e.jsx(F,{})]}),e.jsx(P,{isSubmitting:t}),e.jsx(T,{})]})},E=({disabled:r})=>e.jsxs("div",{className:"flex items-center",children:[e.jsx("input",{id:"remember-me",name:"remember-me",type:"checkbox",className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700",disabled:r}),e.jsx("label",{htmlFor:"remember-me",className:"ml-2 block text-sm text-gray-900 dark:text-white",children:"Remember me"})]}),F=()=>e.jsx("div",{className:"text-sm",children:e.jsx("a",{href:"#",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Forgot your password?"})}),P=({isSubmitting:r})=>e.jsx("button",{type:"submit",disabled:r,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 dark:bg-green-500 hover:bg-green-700 dark:hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:r?e.jsxs("div",{className:"flex items-center",children:[e.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Signing in..."]}):"Sign in"}),T=()=>e.jsx("div",{className:"text-center",children:e.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["Don't have an account?"," ",e.jsx(f,{to:"/register",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Sign up"})]})}),L=()=>e.jsxs("div",{className:"mt-8 p-4 bg-gray-50 dark:bg-gray-700 rounded-lg",children:[e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 mb-2",children:"Demo credentials:"}),e.jsxs("div",{className:"text-xs text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Admin:"})," admin@nanwa.com / admin123"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"User:"})," user@nanwa.com / user123"]})]})]}),M=()=>{const[r,t]=o.useState({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null}),l=o.useCallback(s=>{const{attempt:a,totalAttempts:d,delay:h,error:p,isColdStart:g}=s;t(x=>({...x,isConnecting:!0,isColdStart:g,retryAttempt:a,totalAttempts:d,estimatedWaitTime:Math.ceil(h/1e3),message:W(a,d,g),error:null}))},[]),n=o.useCallback(()=>{t({isConnecting:!0,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:10,message:"Connecting to server...",error:null})},[]),i=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"Connected successfully!",error:null})},[]),c=o.useCallback(s=>{const a=s&&typeof s=="object"?s.message||String(s):String(s||"Connection failed");t(d=>({...d,isConnecting:!1,error:a,message:"Connection failed. Please try again."}))},[]),u=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null})},[]);return{connectionState:r,handleRetry:l,startConnection:n,connectionSuccess:i,connectionFailed:c,resetConnection:u}},W=(r,t,l)=>r===1&&l?"Server is starting up, this may take up to 60 seconds...":r===2&&l?"Still starting up, please wait...":r===3&&l?"Almost ready, just a few more seconds...":r>=4&&l?"Final attempt, server should be ready soon...":`Retrying connection (${r}/${t})...`,B=()=>{const[r,t]=o.useState({}),[l,n]=o.useState(!1),{login:i}=j();k();const{connectionState:c,handleRetry:u,startConnection:s,connectionSuccess:a,connectionFailed:d,resetConnection:h}=M();return{errors:r,isSubmitting:l,connectionState:c,handleLogin:async x=>{n(!0),t({}),s();try{const m=await i(x.email,x.password,u);m.success?a():(d(new Error(m.error)),t({general:m.error}))}catch(m){d(m),t({general:"Connection failed. Please check your internet connection and try again."})}finally{n(!1)}},handleCancelConnection:()=>{h(),n(!1)}}},V=()=>{const{errors:r,isSubmitting:t,connectionState:l,handleLogin:n,handleCancelConnection:i}=B();return e.jsxs(e.Fragment,{children:[e.jsx(w,{}),e.jsx(C,{connectionState:l,onCancel:i,showCancel:!0}),e.jsx("div",{className:"min-h-screen bg-gradient-to-br from-green-50 to-green-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center p-4",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-2xl p-8 w-full max-w-md",children:[e.jsx(R,{}),e.jsx(A,{onSubmit:n,isSubmitting:t,errors:r}),e.jsx(L,{})]})})]})},R=()=>e.jsxs("div",{className:"text-center mb-8",children:[e.jsx(f,{to:"/",className:"inline-block mb-6",children:e.jsx("h1",{className:"text-3xl font-bold text-green-600 dark:text-green-400",children:"Nanwa"})}),e.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome back"}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Sign in to your account to continue"})]});export{V as LoginPage}; diff --git a/frontend/dist/assets/MapPage-CWavP_xM.js b/frontend/dist/assets/MapPage-BV2c4X5p.js similarity index 99% rename from frontend/dist/assets/MapPage-CWavP_xM.js rename to frontend/dist/assets/MapPage-BV2c4X5p.js index 1d5ba0998a..d745ce1e1d 100644 --- a/frontend/dist/assets/MapPage-CWavP_xM.js +++ b/frontend/dist/assets/MapPage-BV2c4X5p.js @@ -1,4 +1,4 @@ -import{j as M,r as B,R as Mn,d as yt,g as ls}from"./index-DJ39NcK9.js";import{g as cs}from"./vendor-BtP0CW_r.js";import{G as ds}from"./FilterHeader-DzCm_NrU.js";import{M as fs,a as _s,T as ps}from"./MapSidebar-yNxbJbqT.js";import{E as ms}from"./ExportButton-Y3IlBTFt.js";import"./useKeyboardNavigation-C5b08Ak3.js";import"./Table-BCdM5JW5.js";const gs=({filters:x,onExportStart:w,onExportComplete:c,onExportError:b,mockTreeData:P})=>M.jsx("div",{className:"mb-8",children:M.jsxs("div",{className:"flex justify-between items-center mb-4",children:[M.jsxs("div",{children:[M.jsx("h2",{className:"text-3xl font-bold text-gray-900 mb-2",children:"Forest Map"}),M.jsx("p",{className:"text-gray-600",children:"Explore your forests and individual trees with interactive mapping."})]}),M.jsx("div",{className:"flex items-center space-x-4",children:M.jsx(ms,{data:P,fileName:"map_data",filters:x,onExportStart:w,onExportComplete:c,onExportError:b})})]})});function vs(x,w){const c=B.useRef(w);B.useEffect(function(){w!==c.current&&x.attributionControl!=null&&(c.current!=null&&x.attributionControl.removeAttribution(c.current),w!=null&&x.attributionControl.addAttribution(w)),c.current=w},[x,w])}const ys=1;function Ls(x){return Object.freeze({__version:ys,map:x})}const In=B.createContext(null),xs=In.Provider;function Bn(){const x=B.useContext(In);if(x==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of ");return x}function ws(x){function w(c,b){const{instance:P}=x(c).current;return B.useImperativeHandle(b,()=>P),null}return B.forwardRef(w)}function Ps(x,w){const c=B.useRef();B.useEffect(function(){return w!=null&&x.instance.on(w),c.current=w,function(){c.current!=null&&x.instance.off(c.current),c.current=null}},[x,w])}function An(x,w){const c=x.pane??w.pane;return c?{...x,pane:c}:x}var he={exports:{}};/* @preserve +import{j as M,r as B,R as Mn,d as yt,e as ls}from"./index-Dzr7PBfw.js";import{g as cs}from"./vendor-BtP0CW_r.js";import{G as ds}from"./FilterHeader-CBw4AnG_.js";import{M as fs,a as _s,T as ps}from"./MapSidebar-DZT3HTLm.js";import{E as ms}from"./ExportButton-BvRt6B34.js";import"./useKeyboardNavigation-BRnXQ3uS.js";import"./Table-CZfmBv9T.js";const gs=({filters:x,onExportStart:w,onExportComplete:c,onExportError:b,mockTreeData:P})=>M.jsx("div",{className:"mb-8",children:M.jsxs("div",{className:"flex justify-between items-center mb-4",children:[M.jsxs("div",{children:[M.jsx("h2",{className:"text-3xl font-bold text-gray-900 mb-2",children:"Forest Map"}),M.jsx("p",{className:"text-gray-600",children:"Explore your forests and individual trees with interactive mapping."})]}),M.jsx("div",{className:"flex items-center space-x-4",children:M.jsx(ms,{data:P,fileName:"map_data",filters:x,onExportStart:w,onExportComplete:c,onExportError:b})})]})});function vs(x,w){const c=B.useRef(w);B.useEffect(function(){w!==c.current&&x.attributionControl!=null&&(c.current!=null&&x.attributionControl.removeAttribution(c.current),w!=null&&x.attributionControl.addAttribution(w)),c.current=w},[x,w])}const ys=1;function Ls(x){return Object.freeze({__version:ys,map:x})}const In=B.createContext(null),xs=In.Provider;function Bn(){const x=B.useContext(In);if(x==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of ");return x}function ws(x){function w(c,b){const{instance:P}=x(c).current;return B.useImperativeHandle(b,()=>P),null}return B.forwardRef(w)}function Ps(x,w){const c=B.useRef();B.useEffect(function(){return w!=null&&x.instance.on(w),c.current=w,function(){c.current!=null&&x.instance.off(c.current),c.current=null}},[x,w])}function An(x,w){const c=x.pane??w.pane;return c?{...x,pane:c}:x}var he={exports:{}};/* @preserve * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade */var Cs=he.exports,Tn;function bs(){return Tn||(Tn=1,function(x,w){(function(c,b){b(w)})(Cs,function(c){var b="1.9.4";function P(t){var e,i,n,o;for(i=1,n=arguments.length;i"u"||!L||!L.Mixin)){t=V(t)?t:[t];for(var e=0;e0?Math.floor(t):Math.ceil(t)};Z.prototype={clone:function(){return new Z(this.x,this.y)},add:function(t){return this.clone()._add(z(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(z(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new Z(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new Z(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=_i(this.x),this.y=_i(this.y),this},distanceTo:function(t){t=z(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=z(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=z(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+v(this.x)+", "+v(this.y)+")"}};function z(t,e,i){return t instanceof Z?t:V(t)?new Z(t[0],t[1]):t==null?t:typeof t=="object"&&"x"in t&&"y"in t?new Z(t.x,t.y):new Z(t,e,i)}function q(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=ot(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>=e.x&&n.x<=i.x,u=o.y>=e.y&&n.y<=i.y;return r&&u},overlaps:function(t){t=ot(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>e.x&&n.xe.y&&n.y=e.lat&&o.lat<=i.lat&&n.lng>=e.lng&&o.lng<=i.lng},intersects:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>=e.lat&&n.lat<=i.lat,u=o.lng>=e.lng&&n.lng<=i.lng;return r&&u},overlaps:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>e.lat&&n.late.lng&&n.lng1,Jn=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",f,e),window.removeEventListener("testPassiveEventSupport",f,e)}catch{}return t}(),Qn=function(){return!!document.createElement("canvas").getContext}(),Ne=!!(document.createElementNS&&mi("svg").createSVGRect),to=!!Ne&&function(){var t=document.createElement("div");return t.innerHTML="",(t.firstChild&&t.firstChild.namespaceURI)==="http://www.w3.org/2000/svg"}(),eo=!Ne&&function(){try{var t=document.createElement("div");t.innerHTML='';var e=t.firstChild;return e.style.behavior="url(#default#VML)",e&&typeof e.adj=="object"}catch{return!1}}(),io=navigator.platform.indexOf("Mac")===0,no=navigator.platform.indexOf("Linux")===0;function pt(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var S={ie:ce,ielt9:Hn,edge:vi,webkit:Ie,android:yi,android23:Li,androidStock:jn,opera:Be,chrome:xi,gecko:wi,safari:Gn,phantom:Pi,opera12:Ci,win:Wn,ie3d:bi,webkit3d:Ae,gecko3d:Mi,any3d:Un,mobile:Yt,mobileWebkit:Vn,mobileWebkit3d:qn,msPointer:Ti,pointer:ki,touch:Kn,touchNative:Si,mobileOpera:Yn,mobileGecko:$n,retina:Xn,passiveEvents:Jn,canvas:Qn,svg:Ne,vml:eo,inlineSvg:to,mac:io,linux:no},Ei=S.msPointer?"MSPointerDown":"pointerdown",Oi=S.msPointer?"MSPointerMove":"pointermove",zi=S.msPointer?"MSPointerUp":"pointerup",Zi=S.msPointer?"MSPointerCancel":"pointercancel",Re={touchstart:Ei,touchmove:Oi,touchend:zi,touchcancel:Zi},Ii={touchstart:uo,touchmove:de,touchend:de,touchcancel:de},Rt={},Bi=!1;function oo(t,e,i){return e==="touchstart"&&ho(),Ii[e]?(i=Ii[e].bind(this,i),t.addEventListener(Re[e],i,!1),i):(console.warn("wrong event specified:",e),f)}function so(t,e,i){if(!Re[e]){console.warn("wrong event specified:",e);return}t.removeEventListener(Re[e],i,!1)}function ro(t){Rt[t.pointerId]=t}function ao(t){Rt[t.pointerId]&&(Rt[t.pointerId]=t)}function Ai(t){delete Rt[t.pointerId]}function ho(){Bi||(document.addEventListener(Ei,ro,!0),document.addEventListener(Oi,ao,!0),document.addEventListener(zi,Ai,!0),document.addEventListener(Zi,Ai,!0),Bi=!0)}function de(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){e.touches=[];for(var i in Rt)e.touches.push(Rt[i]);e.changedTouches=[e],t(e)}}function uo(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&et(e),de(t,e)}function lo(t){var e={},i,n;for(n in t)i=t[n],e[n]=i&&i.bind?i.bind(t):i;return t=e,e.type="dblclick",e.detail=2,e.isTrusted=!1,e._simulated=!0,e}var co=200;function fo(t,e){t.addEventListener("dblclick",e);var i=0,n;function o(r){if(r.detail!==1){n=r.detail;return}if(!(r.pointerType==="mouse"||r.sourceCapabilities&&!r.sourceCapabilities.firesTouchEvents)){var u=Fi(r);if(!(u.some(function(p){return p instanceof HTMLLabelElement&&p.attributes.for})&&!u.some(function(p){return p instanceof HTMLInputElement||p instanceof HTMLSelectElement}))){var d=Date.now();d-i<=co?(n++,n===2&&e(lo(r))):n=1,i=d}}}return t.addEventListener("click",o),{dblclick:e,simDblclick:o}}function _o(t,e){t.removeEventListener("dblclick",e.dblclick),t.removeEventListener("click",e.simDblclick)}var De=pe(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),$t=pe(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),Ni=$t==="webkitTransition"||$t==="OTransition"?$t+"End":"transitionend";function Ri(t){return typeof t=="string"?document.getElementById(t):t}function Xt(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];if((!i||i==="auto")&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);i=n?n[e]:null}return i==="auto"?null:i}function H(t,e,i){var n=document.createElement(t);return n.className=e||"",i&&i.appendChild(n),n}function K(t){var e=t.parentNode;e&&e.removeChild(t)}function fe(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function Dt(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function Ht(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function He(t,e){if(t.classList!==void 0)return t.classList.contains(e);var i=_e(t);return i.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(i)}function A(t,e){if(t.classList!==void 0)for(var i=k(e),n=0,o=i.length;n0?2*window.devicePixelRatio:1;function Gi(t){return S.edge?t.wheelDeltaY/2:t.deltaY&&t.deltaMode===0?-t.deltaY/go:t.deltaY&&t.deltaMode===1?-t.deltaY*20:t.deltaY&&t.deltaMode===2?-t.deltaY*60:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?-t.detail*20:t.detail?t.detail/-32765*60:0}function Je(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch{return!1}return i!==t}var vo={__proto__:null,on:I,off:U,stopPropagation:It,disableScrollPropagation:Xe,disableClickPropagation:ee,preventDefault:et,stop:Bt,getPropagationPath:Fi,getMousePosition:ji,getWheelDelta:Gi,isExternalTarget:Je,addListener:I,removeListener:U},Wi=qt.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Zt(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=nt(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=this._duration*1e3;ethis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),n=this._limitCenter(i,this._zoom,$(t));return i.equals(n)||this.panTo(n,e),this._enforcingBounds=!1,this},panInside:function(t,e){e=e||{};var i=z(e.paddingTopLeft||e.padding||[0,0]),n=z(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),r=this.project(t),u=this.getPixelBounds(),d=ot([u.min.add(i),u.max.subtract(n)]),p=d.getSize();if(!d.contains(r)){this._enforcingBounds=!0;var y=r.subtract(d.getCenter()),T=d.extend(r).getSize().subtract(p);o.x+=y.x<0?-T.x:T.x,o.y+=y.y<0?-T.y:T.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=P({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),o=i.divideBy(2).round(),r=n.subtract(o);return!r.x&&!r.y?this:(t.animate&&t.pan?this.panBy(r):(t.pan&&this._rawPanBy(r),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i}))},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=P({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){if(this._container._leaflet_id){var e=t.code,i=t.message||(e===1?"permission denied":e===2?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})}},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e=t.coords.latitude,i=t.coords.longitude,n=new W(e,i),o=n.toBounds(t.coords.accuracy*2),r=this._locateOptions;if(r.setView){var u=this.getBoundsZoom(o);this.setView(n,r.maxZoom?Math.min(u,r.maxZoom):u)}var d={latlng:n,bounds:o,timestamp:t.timestamp};for(var p in t.coords)typeof t.coords[p]=="number"&&(d[p]=t.coords[p]);this.fire("locationfound",d)}},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch{this._container._leaflet_id=void 0,this._containerId=void 0}this._locationWatchId!==void 0&&this.stopLocate(),this._stop(),K(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(ht(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)K(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){var i="leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),n=H("div",i,e||this._mapPane);return t&&(this._panes[t]=n),n},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new st(e,i)},getMinZoom:function(){return this.options.minZoom===void 0?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===void 0?this._layersMaxZoom===void 0?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=$(t),i=z(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),r=this.getMaxZoom(),u=t.getNorthWest(),d=t.getSouthEast(),p=this.getSize().subtract(i),y=ot(this.project(d,n),this.project(u,n)).getSize(),T=S.any3d?this.options.zoomSnap:1,E=p.x/y.x,N=p.y/y.y,it=e?Math.max(E,N):Math.min(E,N);return n=this.getScaleZoom(it,n),T&&(n=Math.round(n/(T/100))*(T/100),n=e?Math.ceil(n/T)*T:Math.floor(n/T)*T),Math.max(o,Math.min(r,n))},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new Z(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){var i=this._getTopLeftPoint(t,e);return new q(i,i.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(t===void 0?this.getZoom():t)},getPane:function(t){return typeof t=="string"?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=e===void 0?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs;e=e===void 0?this._zoom:e;var n=i.zoom(t*i.scale(e));return isNaN(n)?1/0:n},project:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.latLngToPoint(R(t),e)},unproject:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.pointToLatLng(z(t),e)},layerPointToLatLng:function(t){var e=z(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(R(t))._round();return e._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(R(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds($(t))},distance:function(t,e){return this.options.crs.distance(R(t),R(e))},containerPointToLayerPoint:function(t){return z(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return z(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(z(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(R(t)))},mouseEventToContainerPoint:function(t){return ji(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=Ri(t);if(e){if(e._leaflet_id)throw new Error("Map container is already initialized.")}else throw new Error("Map container not found.");I(e,"scroll",this._onScroll,this),this._containerId=l(e)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&S.any3d,A(t,"leaflet-container"+(S.touch?" leaflet-touch":"")+(S.retina?" leaflet-retina":"")+(S.ielt9?" leaflet-oldie":"")+(S.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var e=Xt(t,"position");e!=="absolute"&&e!=="relative"&&e!=="fixed"&&e!=="sticky"&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),X(this._mapPane,new Z(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(A(t.markerPane,"leaflet-zoom-hide"),A(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){X(this._mapPane,new Z(0,0));var n=!this._loaded;this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset");var o=this._zoom!==e;this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){e===void 0&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return ht(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){X(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[l(this._container)]=this;var e=t?U:I;e(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),S.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){ht(this._resizeRequest),this._resizeRequest=nt(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i=[],n,o=e==="mouseout"||e==="mouseover",r=t.target||t.srcElement,u=!1;r;){if(n=this._targets[l(r)],n&&(e==="click"||e==="preclick")&&this._draggableMoved(n)){u=!0;break}if(n&&n.listens(e,!0)&&(o&&!Je(r,t)||(i.push(n),o))||r===this._container)break;r=r.parentNode}return!i.length&&!u&&!o&&this.listens(e,!0)&&(i=[this]),i},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e=t.target||t.srcElement;if(!(!this._loaded||e._leaflet_disable_events||t.type==="click"&&this._isClickDisabled(e))){var i=t.type;i==="mousedown"&&Ve(e),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){if(t.type==="click"){var n=P({},t);n.type="preclick",this._fireDOMEvent(n,n.type,i)}var o=this._findEventTargets(t,e);if(i){for(var r=[],u=0;u0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),n=S.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){Y(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._trunc();return(e&&e.animate)!==!0&&!this.getSize().contains(i)?!1:(this.panBy(i,e),!0)},_createAnimProxy:function(){var t=this._proxy=H("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(e){var i=De,n=this._proxy.style[i];zt(this._proxy,this.project(e.center,e.zoom),this.getZoomScale(e.zoom,1)),n===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){K(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();zt(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n);return i.animate!==!0&&!this.getSize().contains(o)?!1:(nt(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this),!0)},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,A(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&Y(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function yo(t,e){return new D(t,e)}var ft=xt.extend({options:{position:"topright"},initialize:function(t){C(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return A(e,"leaflet-control"),i.indexOf("bottom")!==-1?n.insertBefore(e,n.firstChild):n.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(K(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),ie=function(t){return new ft(t)};D.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},e="leaflet-",i=this._controlContainer=H("div",e+"control-container",this._container);function n(o,r){var u=e+o+" "+e+r;t[o+r]=H("div",u,i)}n("top","left"),n("top","right"),n("bottom","left"),n("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)K(this._controlCorners[t]);K(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Ui=ft.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,n){return i1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=e&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(l(t.target)),i=e.overlay?t.type==="add"?"overlayadd":"overlayremove":t.type==="add"?"baselayerchange":null;i&&this._map.fire(i,e)},_createRadioElement:function(t,e){var i='",n=document.createElement("div");return n.innerHTML=i,n.firstChild},_addItem:function(t){var e=document.createElement("label"),i=this._map.hasLayer(t.layer),n;t.overlay?(n=document.createElement("input"),n.type="checkbox",n.className="leaflet-control-layers-selector",n.defaultChecked=i):n=this._createRadioElement("leaflet-base-layers_"+l(this),i),this._layerControlInputs.push(n),n.layerId=l(t.layer),I(n,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var r=document.createElement("span");e.appendChild(r),r.appendChild(n),r.appendChild(o);var u=t.overlay?this._overlaysList:this._baseLayersList;return u.appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){if(!this._preventClick){var t=this._layerControlInputs,e,i,n=[],o=[];this._handlingClick=!0;for(var r=t.length-1;r>=0;r--)e=t[r],i=this._getLayer(e.layerId).layer,e.checked?n.push(i):e.checked||o.push(i);for(r=0;r=0;o--)e=t[o],i=this._getLayer(e.layerId).layer,e.disabled=i.options.minZoom!==void 0&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section;this._preventClick=!0,I(t,"click",et),this.expand();var e=this;setTimeout(function(){U(t,"click",et),e._preventClick=!1})}}),Lo=function(t,e,i){return new Ui(t,e,i)},Qe=ft.extend({options:{position:"topleft",zoomInText:'',zoomInTitle:"Zoom in",zoomOutText:'',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=H("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){var r=H("a",i,n);return r.innerHTML=t,r.href="#",r.title=e,r.setAttribute("role","button"),r.setAttribute("aria-label",e),ee(r),I(r,"click",Bt),I(r,"click",o,this),I(r,"click",this._refocusOnMap,this),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";Y(this._zoomInButton,e),Y(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),(this._disabled||t._zoom===t.getMinZoom())&&(A(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),(this._disabled||t._zoom===t.getMaxZoom())&&(A(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}});D.mergeOptions({zoomControl:!0}),D.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new Qe,this.addControl(this.zoomControl))});var xo=function(t){return new Qe(t)},Vi=ft.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=H("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=H("div",e,i)),t.imperial&&(this._iScale=H("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,i=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(i)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t),i=e<1e3?e+" m":e/1e3+" km";this._updateScale(this._mScale,i,e/t)},_updateImperial:function(t){var e=t*3.2808399,i,n,o;e>5280?(i=e/5280,n=this._getRoundNum(i),this._updateScale(this._iScale,n+" mi",n/i)):(o=this._getRoundNum(e),this._updateScale(this._iScale,o+" ft",o/e))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),wo=function(t){return new Vi(t)},Po='',ti=ft.extend({options:{position:"bottomright",prefix:''+(S.inlineSvg?Po+" ":"")+"Leaflet"},initialize:function(t){C(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=H("div","leaflet-control-attribution"),ee(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(' ')}}});D.mergeOptions({attributionControl:!0}),D.addInitHook(function(){this.options.attributionControl&&new ti().addTo(this)});var Co=function(t){return new ti(t)};ft.Layers=Ui,ft.Zoom=Qe,ft.Scale=Vi,ft.Attribution=ti,ie.layers=Lo,ie.zoom=xo,ie.scale=wo,ie.attribution=Co;var gt=xt.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});gt.addTo=function(t,e){return t.addHandler(e,this),this};var bo={Events:at},qi=S.touch?"touchstart mousedown":"mousedown",St=qt.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){C(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(I(this._dragStartTarget,qi,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(St._dragging===this&&this.finishDrag(!0),U(this._dragStartTarget,qi,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(this._enabled&&(this._moved=!1,!He(this._element,"leaflet-zoom-anim"))){if(t.touches&&t.touches.length!==1){St._dragging===this&&this.finishDrag();return}if(!(St._dragging||t.shiftKey||t.which!==1&&t.button!==1&&!t.touches)&&(St._dragging=this,this._preventOutline&&Ve(this._element),Ge(),Jt(),!this._moving)){this.fire("down");var e=t.touches?t.touches[0]:t,i=Di(this._element);this._startPoint=new Z(e.clientX,e.clientY),this._startPos=Zt(this._element),this._parentScale=qe(i);var n=t.type==="mousedown";I(document,n?"mousemove":"touchmove",this._onMove,this),I(document,n?"mouseup":"touchend touchcancel",this._onUp,this)}}},_onMove:function(t){if(this._enabled){if(t.touches&&t.touches.length>1){this._moved=!0;return}var e=t.touches&&t.touches.length===1?t.touches[0]:t,i=new Z(e.clientX,e.clientY)._subtract(this._startPoint);!i.x&&!i.y||Math.abs(i.x)+Math.abs(i.y)r&&(u=d,r=p);r>i&&(e[u]=1,ii(t,e,i,n,u),ii(t,e,i,u,o))}function So(t,e){for(var i=[t[0]],n=1,o=0,r=t.length;ne&&(i.push(t[n]),o=n);return oe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function Eo(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function ne(t,e,i,n){var o=e.x,r=e.y,u=i.x-o,d=i.y-r,p=u*u+d*d,y;return p>0&&(y=((t.x-o)*u+(t.y-r)*d)/p,y>1?(o=i.x,r=i.y):y>0&&(o+=u*y,r+=d*y)),u=t.x-o,d=t.y-r,n?u*u+d*d:new Z(o,r)}function lt(t){return!V(t[0])||typeof t[0][0]!="object"&&typeof t[0][0]<"u"}function tn(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),lt(t)}function en(t,e){var i,n,o,r,u,d,p,y;if(!t||t.length===0)throw new Error("latlngs not passed");lt(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);var T=R([0,0]),E=$(t),N=E.getNorthWest().distanceTo(E.getSouthWest())*E.getNorthEast().distanceTo(E.getNorthWest());N<1700&&(T=ei(t));var it=t.length,Q=[];for(i=0;in){p=(r-n)/o,y=[d.x-p*(d.x-u.x),d.y-p*(d.y-u.y)];break}var rt=e.unproject(z(y));return R([rt.lat+T.lat,rt.lng+T.lng])}var Oo={__proto__:null,simplify:$i,pointToSegmentDistance:Xi,closestPointOnSegment:To,clipSegment:Qi,_getEdgeIntersection:ve,_getBitCode:At,_sqClosestPointOnSegment:ne,isFlat:lt,_flat:tn,polylineCenter:en},ni={project:function(t){return new Z(t.lng,t.lat)},unproject:function(t){return new W(t.y,t.x)},bounds:new q([-180,-90],[180,90])},oi={R:6378137,R_MINOR:6356752314245179e-9,bounds:new q([-2003750834279e-5,-1549657073972e-5],[2003750834279e-5,1876465623138e-5]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,o=this.R_MINOR/i,r=Math.sqrt(1-o*o),u=r*Math.sin(n),d=Math.tan(Math.PI/4-n/2)/Math.pow((1-u)/(1+u),r/2);return n=-i*Math.log(Math.max(d,1e-10)),new Z(t.lng*e*i,n)},unproject:function(t){for(var e=180/Math.PI,i=this.R,n=this.R_MINOR/i,o=Math.sqrt(1-n*n),r=Math.exp(-t.y/i),u=Math.PI/2-2*Math.atan(r),d=0,p=.1,y;d<15&&Math.abs(p)>1e-7;d++)y=o*Math.sin(u),y=Math.pow((1-y)/(1+y),o/2),p=Math.PI/2-2*Math.atan(r*y)-u,u+=p;return new W(u*e,t.x*e/i)}},zo={__proto__:null,LonLat:ni,Mercator:oi,SphericalMercator:Ee},Zo=P({},kt,{code:"EPSG:3395",projection:oi,transformation:function(){var t=.5/(Math.PI*oi.R);return Kt(t,.5,-t,.5)}()}),nn=P({},kt,{code:"EPSG:4326",projection:ni,transformation:Kt(1/180,1,-1/180,.5)}),Io=P({},wt,{projection:ni,transformation:Kt(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,n=e.lat-t.lat;return Math.sqrt(i*i+n*n)},infinite:!0});wt.Earth=kt,wt.EPSG3395=Zo,wt.EPSG3857=ze,wt.EPSG900913=Dn,wt.EPSG4326=nn,wt.Simple=Io;var _t=qt.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[l(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[l(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e=t.target;if(e.hasLayer(this)){if(this._map=e,this._zoomAnimated=e._zoomAnimated,this.getEvents){var i=this.getEvents();e.on(i,this),this.once("remove",function(){e.off(i,this)},this)}this.onAdd(e),this.fire("add"),e.fire("layeradd",{layer:this})}}});D.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var e=l(t);return this._layers[e]?this:(this._layers[e]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var e=l(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return l(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){t=t?V(t)?t:[t]:[];for(var e=0,i=t.length;ethis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),this.options.minZoom===void 0&&this._layersMinZoom&&this.getZoom()=2&&e[0]instanceof W&&e[0].equals(e[i-1])&&e.pop(),e},_setLatLngs:function(t){Ct.prototype._setLatLngs.call(this,t),lt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return lt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,i=new Z(e,e);if(t=new q(t.min.subtract(i),t.max.add(i)),this._parts=[],!(!this._pxBounds||!this._pxBounds.intersects(t))){if(this.options.noClip){this._parts=this._rings;return}for(var n=0,o=this._rings.length,r;nt.y!=o.y>t.y&&t.x<(o.x-n.x)*(t.y-n.y)/(o.y-n.y)+n.x&&(e=!e);return e||Ct.prototype._containsPoint.call(this,t,!0)}});function jo(t,e){return new Gt(t,e)}var bt=Pt.extend({initialize:function(t,e){C(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e=V(t)?t:t.features,i,n,o;if(e){for(i=0,n=e.length;i0&&o.push(o[0].slice()),o}function Wt(t,e){return t.feature?P({},t.feature,{geometry:e}):Ce(e)}function Ce(t){return t.type==="Feature"||t.type==="FeatureCollection"?t:{type:"Feature",properties:{},geometry:t}}var hi={toGeoJSON:function(t){return Wt(this,{type:"Point",coordinates:ai(this.getLatLng(),t)})}};ye.include(hi),si.include(hi),Le.include(hi),Ct.include({toGeoJSON:function(t){var e=!lt(this._latlngs),i=Pe(this._latlngs,e?1:0,!1,t);return Wt(this,{type:(e?"Multi":"")+"LineString",coordinates:i})}}),Gt.include({toGeoJSON:function(t){var e=!lt(this._latlngs),i=e&&!lt(this._latlngs[0]),n=Pe(this._latlngs,i?2:e?1:0,!0,t);return e||(n=[n]),Wt(this,{type:(i?"Multi":"")+"Polygon",coordinates:n})}}),Ft.include({toMultiPoint:function(t){var e=[];return this.eachLayer(function(i){e.push(i.toGeoJSON(t).geometry.coordinates)}),Wt(this,{type:"MultiPoint",coordinates:e})},toGeoJSON:function(t){var e=this.feature&&this.feature.geometry&&this.feature.geometry.type;if(e==="MultiPoint")return this.toMultiPoint(t);var i=e==="GeometryCollection",n=[];return this.eachLayer(function(o){if(o.toGeoJSON){var r=o.toGeoJSON(t);if(i)n.push(r.geometry);else{var u=Ce(r);u.type==="FeatureCollection"?n.push.apply(n,u.features):n.push(u)}}}),i?Wt(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}});function rn(t,e){return new bt(t,e)}var Go=rn,be=_t.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,e,i){this._url=t,this._bounds=$(e),C(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(A(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){K(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&Dt(this._image),this},bringToBack:function(){return this._map&&Ht(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=$(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=this._url.tagName==="IMG",e=this._image=t?this._url:H("img");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=f,e.onmousemove=f,e.onload=a(this.fire,this,"load"),e.onerror=a(this._overlayOnError,this,"error"),(this.options.crossOrigin||this.options.crossOrigin==="")&&(e.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t){this._url=e.src;return}e.src=this._url,e.alt=this.options.alt},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),i=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;zt(this._image,i,e)},_reset:function(){var t=this._image,e=new q(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();X(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){ut(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&this.options.zIndex!==void 0&&this.options.zIndex!==null&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),Wo=function(t,e,i){return new be(t,e,i)},an=be.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t=this._url.tagName==="VIDEO",e=this._image=t?this._url:H("video");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=f,e.onmousemove=f,e.onloadeddata=a(this.fire,this,"load"),t){for(var i=e.getElementsByTagName("source"),n=[],o=0;o0?n:[e.src];return}V(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var r=0;ro?(e.height=o+"px",A(t,r)):Y(t,r),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),i=this._getAnchor();X(this._container,e.add(i))},_adjustPan:function(){if(this.options.autoPan){if(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning){this._autopanning=!1;return}var t=this._map,e=parseInt(Xt(this._container,"marginBottom"),10)||0,i=this._container.offsetHeight+e,n=this._containerWidth,o=new Z(this._containerLeft,-i-this._containerBottom);o._add(Zt(this._container));var r=t.layerPointToContainerPoint(o),u=z(this.options.autoPanPadding),d=z(this.options.autoPanPaddingTopLeft||u),p=z(this.options.autoPanPaddingBottomRight||u),y=t.getSize(),T=0,E=0;r.x+n+p.x>y.x&&(T=r.x+n-y.x+p.x),r.x-T-d.x<0&&(T=r.x-d.x),r.y+i+p.y>y.y&&(E=r.y+i-y.y+p.y),r.y-E-d.y<0&&(E=r.y-d.y),(T||E)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([T,E]))}},_getAnchor:function(){return z(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),qo=function(t,e){return new Me(t,e)};D.mergeOptions({closePopupOnClick:!0}),D.include({openPopup:function(t,e,i){return this._initOverlay(Me,t,e,i).openOn(this),this},closePopup:function(t){return t=arguments.length?t:this._popup,t&&t.close(),this}}),_t.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Me,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof Pt||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return this._popup?this._popup.isOpen():!1},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){if(!(!this._popup||!this._map)){Bt(t);var e=t.layer||t.target;if(this._popup._source===e&&!(e instanceof Et)){this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng);return}this._popup._source=e,this.openPopup(t.latlng)}},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){t.originalEvent.keyCode===13&&this._openPopup(t)}});var Te=vt.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){vt.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){vt.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=vt.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip",e=t+" "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=H("div",e),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+l(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i,n=this._map,o=this._container,r=n.latLngToContainerPoint(n.getCenter()),u=n.layerPointToContainerPoint(t),d=this.options.direction,p=o.offsetWidth,y=o.offsetHeight,T=z(this.options.offset),E=this._getAnchor();d==="top"?(e=p/2,i=y):d==="bottom"?(e=p/2,i=0):d==="center"?(e=p/2,i=y/2):d==="right"?(e=0,i=y/2):d==="left"?(e=p,i=y/2):u.xthis.options.maxZoom||in?this._retainParent(o,r,u,n):!1)},_retainChildren:function(t,e,i,n){for(var o=2*t;o<2*t+2;o++)for(var r=2*e;r<2*e+2;r++){var u=new Z(o,r);u.z=i+1;var d=this._tileCoordsToKey(u),p=this._tiles[d];if(p&&p.active){p.retain=!0;continue}else p&&p.loaded&&(p.retain=!0);i+1this.options.maxZoom||this.options.minZoom!==void 0&&o1){this._setView(t,i);return}for(var E=o.min.y;E<=o.max.y;E++)for(var N=o.min.x;N<=o.max.x;N++){var it=new Z(N,E);if(it.z=this._tileZoom,!!this._isValidTile(it)){var Q=this._tiles[this._tileCoordsToKey(it)];Q?Q.current=!0:u.push(it)}}if(u.sort(function(rt,Vt){return rt.distanceTo(r)-Vt.distanceTo(r)}),u.length!==0){this._loading||(this._loading=!0,this.fire("loading"));var ct=document.createDocumentFragment();for(N=0;Ni.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return $(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),o=n.add(i),r=e.unproject(n,t.z),u=e.unproject(o,t.z);return[r,u]},_tileCoordsToBounds:function(t){var e=this._tileCoordsToNwSe(t),i=new st(e[0],e[1]);return this.options.noWrap||(i=this._map.wrapLatLngBounds(i)),i},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var e=t.split(":"),i=new Z(+e[0],+e[1]);return i.z=+e[2],i},_removeTile:function(t){var e=this._tiles[t];e&&(K(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){A(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=f,t.onmousemove=f,S.ielt9&&this.options.opacity<1&&ut(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&nt(a(this._tileReady,this,t,null,o)),X(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);i=this._tiles[n],i&&(i.loaded=+new Date,this._map._fadeAnimated?(ut(i.el,0),ht(this._fadeFrame),this._fadeFrame=nt(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(A(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),S.ielt9||!this._map._fadeAnimated?nt(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new Z(this._wrapX?g(t.x,this._wrapX):t.x,this._wrapY?g(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new q(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function $o(t){return new se(t)}var Ut=se.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,e=C(this,e),e.detectRetina&&S.retina&&e.maxZoom>0?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),typeof e.subdomains=="string"&&(e.subdomains=e.subdomains.split("")),this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&e===void 0&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement("img");return I(i,"load",a(this._tileOnLoad,this,e,i)),I(i,"error",a(this._tileOnError,this,e,i)),(this.options.crossOrigin||this.options.crossOrigin==="")&&(i.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),typeof this.options.referrerPolicy=="string"&&(i.referrerPolicy=this.options.referrerPolicy),i.alt="",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:S.retina?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var i=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=i),e["-y"]=i}return j(this._url,P(e,this.options))},_tileOnLoad:function(t,e){S.ielt9?setTimeout(a(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&e.getAttribute("src")!==n&&(e.src=n),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom,i=this.options.zoomReverse,n=this.options.zoomOffset;return i&&(t=e-t),t+n},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_abortLoading:function(){var t,e;for(t in this._tiles)if(this._tiles[t].coords.z!==this._tileZoom&&(e=this._tiles[t].el,e.onload=f,e.onerror=f,!e.complete)){e.src=G;var i=this._tiles[t].coords;K(e),delete this._tiles[t],this.fire("tileabort",{tile:e,coords:i})}},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute("src",G),se.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(!(!this._map||i&&i.getAttribute("src")===G))return se.prototype._tileReady.call(this,t,e,i)}});function ln(t,e){return new Ut(t,e)}var cn=Ut.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i=P({},this.defaultWmsParams);for(var n in e)n in this.options||(i[n]=e[n]);e=C(this,e);var o=e.detectRetina&&S.retina?2:1,r=this.getTileSize();i.width=r.x*o,i.height=r.y*o,this.wmsParams=i},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,Ut.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,n=ot(i.project(e[0]),i.project(e[1])),o=n.min,r=n.max,u=(this._wmsVersion>=1.3&&this._crs===nn?[o.y,o.x,r.y,r.x]:[o.x,o.y,r.x,r.y]).join(","),d=Ut.prototype.getTileUrl.call(this,t);return d+F(this.wmsParams,d,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+u},setParams:function(t,e){return P(this.wmsParams,t),e||this.redraw(),this}});function Xo(t,e){return new cn(t,e)}Ut.WMS=cn,ln.wms=Xo;var Mt=_t.extend({options:{padding:.1},initialize:function(t){C(this,t),l(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),A(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),r=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t,e));S.any3d?zt(this._container,r,i):X(this._container,r)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new q(i,i.add(e.multiplyBy(1+t*2)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),dn=Mt.extend({options:{tolerance:0},getEvents:function(){var t=Mt.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Mt.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");I(t,"mousemove",this._onMouseMove,this),I(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),I(t,"mouseout",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext("2d")},_destroyContainer:function(){ht(this._redrawRequest),delete this._ctx,K(this._container),U(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){var t;this._redrawBounds=null;for(var e in this._layers)t=this._layers[e],t._update();this._redraw()}},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Mt.prototype._update.call(this);var t=this._bounds,e=this._container,i=t.getSize(),n=S.retina?2:1;X(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",S.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){Mt.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[l(t)]=t;var e=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=e),this._drawLast=e,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,n=e.prev;i?i.prev=n:this._drawLast=n,n?n.next=i:this._drawFirst=i,delete t._order,delete this._layers[l(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(typeof t.options.dashArray=="string"){var e=t.options.dashArray.split(/[, ]+/),i=[],n,o;for(o=0;o')}}catch{}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),Jo={_initContainer:function(){this._container=H("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Mt.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=re("shape");A(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=re("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;K(e),t.removeInteractiveTarget(e),delete this._layers[l(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e||(e=t._stroke=re("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=V(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i||(i=t._fill=re("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,"+65535*360)},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){Dt(t._container)},_bringToBack:function(t){Ht(t._container)}},ke=S.vml?re:mi,ae=Mt.extend({_initContainer:function(){this._container=ke("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=ke("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){K(this._container),U(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Mt.prototype._update.call(this);var t=this._bounds,e=t.getSize(),i=this._container;(!this._svgSize||!this._svgSize.equals(e))&&(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),X(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update")}},_initPath:function(t){var e=t._path=ke("path");t.options.className&&A(e,t.options.className),t.options.interactive&&A(e,"leaflet-interactive"),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){K(t._path),t.removeInteractiveTarget(t._path),delete this._layers[l(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,i=t.options;e&&(i.stroke?(e.setAttribute("stroke",i.color),e.setAttribute("stroke-opacity",i.opacity),e.setAttribute("stroke-width",i.weight),e.setAttribute("stroke-linecap",i.lineCap),e.setAttribute("stroke-linejoin",i.lineJoin),i.dashArray?e.setAttribute("stroke-dasharray",i.dashArray):e.removeAttribute("stroke-dasharray"),i.dashOffset?e.setAttribute("stroke-dashoffset",i.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),i.fill?(e.setAttribute("fill",i.fillColor||i.color),e.setAttribute("fill-opacity",i.fillOpacity),e.setAttribute("fill-rule",i.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,gi(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n=Math.max(Math.round(t._radiusY),1)||i,o="a"+i+","+n+" 0 1,0 ",r=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+o+i*2+",0 "+o+-i*2+",0 ";this._setPath(t,r)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){Dt(t._path)},_bringToBack:function(t){Ht(t._path)}});S.vml&&ae.include(Jo);function _n(t){return S.svg||S.vml?new ae(t):null}D.include({getRenderer:function(t){var e=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return e||(e=this._renderer=this._createRenderer()),this.hasLayer(e)||this.addLayer(e),e},_getPaneRenderer:function(t){if(t==="overlayPane"||t===void 0)return!1;var e=this._paneRenderers[t];return e===void 0&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e},_createRenderer:function(t){return this.options.preferCanvas&&fn(t)||_n(t)}});var pn=Gt.extend({initialize:function(t,e){Gt.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=$(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function Qo(t,e){return new pn(t,e)}ae.create=ke,ae.pointsToPath=gi,bt.geometryToLayer=xe,bt.coordsToLatLng=ri,bt.coordsToLatLngs=we,bt.latLngToCoords=ai,bt.latLngsToCoords=Pe,bt.getFeature=Wt,bt.asFeature=Ce,D.mergeOptions({boxZoom:!0});var mn=gt.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){I(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){U(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){K(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){this._resetStateTimeout!==0&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||t.which!==1&&t.button!==1)return!1;this._clearDeferredResetState(),this._resetState(),Jt(),Ge(),this._startPoint=this._map.mouseEventToContainerPoint(t),I(document,{contextmenu:Bt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=H("div","leaflet-zoom-box",this._container),A(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var e=new q(this._point,this._startPoint),i=e.getSize();X(this._box,e.min),this._box.style.width=i.x+"px",this._box.style.height=i.y+"px"},_finish:function(){this._moved&&(K(this._box),Y(this._container,"leaflet-crosshair")),Qt(),We(),U(document,{contextmenu:Bt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if(!(t.which!==1&&t.button!==1)&&(this._finish(),!!this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0);var e=new st(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(e).fire("boxzoomend",{boxZoomBounds:e})}},_onKeyDown:function(t){t.keyCode===27&&(this._finish(),this._clearDeferredResetState(),this._resetState())}});D.addInitHook("addHandler","boxZoom",mn),D.mergeOptions({doubleClickZoom:!0});var gn=gt.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,o=t.originalEvent.shiftKey?i-n:i+n;e.options.doubleClickZoom==="center"?e.setZoom(o):e.setZoomAround(t.containerPoint,o)}});D.addInitHook("addHandler","doubleClickZoom",gn),D.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var vn=gt.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new St(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}A(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){Y(this._map._container,"leaflet-grab"),Y(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var e=$(this._map.options.maxBounds);this._offsetLimit=ot(this._map.latLngToContainerPoint(e.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(e.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(i),this._times.push(e),this._prunePositions(e)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){if(!(!this._viscosity||!this._offsetLimit)){var t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit;t.xe.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,r=(n+e+i)%t-e-i,u=Math.abs(o+i)0?r:-r))-e;this._delta=0,this._startTime=null,u&&(t.options.scrollWheelZoom==="center"?t.setZoom(e+u):t.setZoomAround(this._lastMousePos,e+u))}});D.addInitHook("addHandler","scrollWheelZoom",Ln);var ts=600;D.mergeOptions({tapHold:S.touchNative&&S.safari&&S.mobile,tapTolerance:15});var xn=gt.extend({addHooks:function(){I(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){U(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(clearTimeout(this._holdTimeout),t.touches.length===1){var e=t.touches[0];this._startPos=this._newPos=new Z(e.clientX,e.clientY),this._holdTimeout=setTimeout(a(function(){this._cancel(),this._isTapValid()&&(I(document,"touchend",et),I(document,"touchend touchcancel",this._cancelClickPrevent),this._simulateEvent("contextmenu",e))},this),ts),I(document,"touchend touchcancel contextmenu",this._cancel,this),I(document,"touchmove",this._onMove,this)}},_cancelClickPrevent:function t(){U(document,"touchend",et),U(document,"touchend touchcancel",t)},_cancel:function(){clearTimeout(this._holdTimeout),U(document,"touchend touchcancel contextmenu",this._cancel,this),U(document,"touchmove",this._onMove,this)},_onMove:function(t){var e=t.touches[0];this._newPos=new Z(e.clientX,e.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){var i=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});i._simulated=!0,e.target.dispatchEvent(i)}});D.addInitHook("addHandler","tapHold",xn),D.mergeOptions({touchZoom:S.touch,bounceAtZoomLimits:!0});var wn=gt.extend({addHooks:function(){A(this._map._container,"leaflet-touch-zoom"),I(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){Y(this._map._container,"leaflet-touch-zoom"),U(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e=this._map;if(!(!t.touches||t.touches.length!==2||e._animatingZoom||this._zooming)){var i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=e.getSize()._divideBy(2),this._startLatLng=e.containerPointToLatLng(this._centerPoint),e.options.touchZoom!=="center"&&(this._pinchStartLatLng=e.containerPointToLatLng(i.add(n)._divideBy(2))),this._startDist=i.distanceTo(n),this._startZoom=e.getZoom(),this._moved=!1,this._zooming=!0,e._stop(),I(document,"touchmove",this._onTouchMove,this),I(document,"touchend touchcancel",this._onTouchEnd,this),et(t)}},_onTouchMove:function(t){if(!(!t.touches||t.touches.length!==2||!this._zooming)){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),o=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&o>1)&&(this._zoom=e._limitZoom(this._zoom)),e.options.touchZoom==="center"){if(this._center=this._startLatLng,o===1)return}else{var r=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(o===1&&r.x===0&&r.y===0)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),ht(this._animRequest);var u=a(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=nt(u,this,!0),et(t)}},_onTouchEnd:function(){if(!this._moved||!this._zooming){this._zooming=!1;return}this._zooming=!1,ht(this._animRequest),U(document,"touchmove",this._onTouchMove,this),U(document,"touchend touchcancel",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))}});D.addInitHook("addHandler","touchZoom",wn),D.BoxZoom=mn,D.DoubleClickZoom=gn,D.Drag=vn,D.Keyboard=yn,D.ScrollWheelZoom=Ln,D.TapHold=xn,D.TouchZoom=wn,c.Bounds=q,c.Browser=S,c.CRS=wt,c.Canvas=dn,c.Circle=si,c.CircleMarker=Le,c.Class=xt,c.Control=ft,c.DivIcon=un,c.DivOverlay=vt,c.DomEvent=vo,c.DomUtil=mo,c.Draggable=St,c.Evented=qt,c.FeatureGroup=Pt,c.GeoJSON=bt,c.GridLayer=se,c.Handler=gt,c.Icon=jt,c.ImageOverlay=be,c.LatLng=W,c.LatLngBounds=st,c.Layer=_t,c.LayerGroup=Ft,c.LineUtil=Oo,c.Map=D,c.Marker=ye,c.Mixin=bo,c.Path=Et,c.Point=Z,c.PolyUtil=Mo,c.Polygon=Gt,c.Polyline=Ct,c.Popup=Me,c.PosAnimation=Wi,c.Projection=zo,c.Rectangle=pn,c.Renderer=Mt,c.SVG=ae,c.SVGOverlay=hn,c.TileLayer=Ut,c.Tooltip=Te,c.Transformation=Oe,c.Util=Nn,c.VideoOverlay=an,c.bind=a,c.bounds=ot,c.canvas=fn,c.circle=Ho,c.circleMarker=Do,c.control=ie,c.divIcon=Yo,c.extend=P,c.featureGroup=Ao,c.geoJSON=rn,c.geoJson=Go,c.gridLayer=$o,c.icon=No,c.imageOverlay=Wo,c.latLng=R,c.latLngBounds=$,c.layerGroup=Bo,c.map=yo,c.marker=Ro,c.point=z,c.polygon=jo,c.polyline=Fo,c.popup=qo,c.rectangle=Qo,c.setOptions=C,c.stamp=l,c.svg=_n,c.svgOverlay=Vo,c.tileLayer=ln,c.tooltip=Ko,c.transformation=Kt,c.version=b,c.videoOverlay=Uo;var es=window.L;c.noConflict=function(){return window.L=es,this},window.L=c})}(he,he.exports)),he.exports}var di=bs();const Tt=cs(di);function Ms(x,w,c){return Object.freeze({instance:x,context:w,container:c})}function Ts(x,w){return w==null?function(b,P){const s=B.useRef();return s.current||(s.current=x(b,P)),s}:function(b,P){const s=B.useRef();s.current||(s.current=x(b,P));const a=B.useRef(b),{instance:h}=s.current;return B.useEffect(function(){a.current!==b&&(w(h,b,a.current),a.current=b)},[h,b,P]),s}}function ks(x,w){B.useEffect(function(){return(w.layerContainer??w.map).addLayer(x.instance),function(){var s;(s=w.layerContainer)==null||s.removeLayer(x.instance),w.map.removeLayer(x.instance)}},[w,x])}function Ss(x){return function(c){const b=Bn(),P=x(An(c,b),b);return vs(b.map,c.attribution),Ps(P.current,c.eventHandlers),ks(P.current,b),P}}function Es(x,w){const c=Ts(x,w),b=Ss(c);return ws(b)}function Os(x,w,c){const{opacity:b,zIndex:P}=w;b!=null&&b!==c.opacity&&x.setOpacity(b),P!=null&&P!==c.zIndex&&x.setZIndex(P)}function fi(){return Bn().map}function li(){return li=Object.assign||function(x){for(var w=1;w(m==null?void 0:m.map)??null,[m]);const C=B.useCallback(O=>{if(O!==null&&m===null){const j=new di.Map(O,g);c!=null&&_!=null?j.setView(c,_):x!=null&&j.fitBounds(x,w),l!=null&&j.whenReady(l),k(Ls(j))}},[]);B.useEffect(()=>()=>{m==null||m.map.remove()},[m]);const F=m?Mn.createElement(xs,{value:m},b):a??null;return Mn.createElement("div",li({},v,{ref:C}),F)}const Zs=B.forwardRef(zs),Is=Es(function({url:w,...c},b){const P=new di.TileLayer(w,An(c,b));return Ms(P,b)},function(w,c,b){Os(w,c,b);const{url:P}=c;P!=null&&P!==b.url&&w.setUrl(P)});var ue={exports:{}},Bs=ue.exports,kn;function As(){return kn||(kn=1,function(x,w){(function(c,b){b(w)})(Bs,function(c){var b=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnEveryZoom:!1,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyShapePositions:null,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(s){L.Util.setOptions(this,s),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var a=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,a?this._withAnimation:this._noAnimation),this._markerCluster=a?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(s){if(s instanceof L.LayerGroup)return this.addLayers([s]);if(!s.getLatLng)return this._nonPointGroup.addLayer(s),this.fire("layeradd",{layer:s}),this;if(!this._map)return this._needsClustering.push(s),this.fire("layeradd",{layer:s}),this;if(this.hasLayer(s))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(s,this._maxZoom),this.fire("layeradd",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var a=s,h=this._zoom;if(s.__parent)for(;a.__parent._zoom>=h;)a=a.__parent;return this._currentShownBounds.contains(a.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(s,a):this._animationAddLayerNonAnimated(s,a)),this},removeLayer:function(s){return s instanceof L.LayerGroup?this.removeLayers([s]):s.getLatLng?this._map?s.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(s)),this._removeLayer(s,!0),this.fire("layerremove",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),s.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(s)&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,s)&&this.hasLayer(s)&&this._needsRemoving.push({layer:s,latlng:s._latlng}),this.fire("layerremove",{layer:s}),this):(this._nonPointGroup.removeLayer(s),this.fire("layerremove",{layer:s}),this)},addLayers:function(s,a){if(!L.Util.isArray(s))return this.addLayer(s);var h=this._featureGroup,l=this._nonPointGroup,_=this.options.chunkedLoading,g=this.options.chunkInterval,f=this.options.chunkProgress,v=s.length,m=0,k=!0,C;if(this._map){var F=new Date().getTime(),O=L.bind(function(){var V=new Date().getTime();for(this._map&&this._unspiderfy&&this._unspiderfy();mg)break}if(C=s[m],C instanceof L.LayerGroup){k&&(s=s.slice(),k=!1),this._extractNonGroupLayers(C,s),v=s.length;continue}if(!C.getLatLng){l.addLayer(C),a||this.fire("layeradd",{layer:C});continue}if(!this.hasLayer(C)&&(this._addLayer(C,this._maxZoom),a||this.fire("layeradd",{layer:C}),C.__parent&&C.__parent.getChildCount()===2)){var G=C.__parent.getAllChildMarkers(),tt=G[0]===C?G[1]:G[0];h.removeLayer(tt)}}f&&f(m,v,new Date().getTime()-F),m===v?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(O,this.options.chunkDelay)},this);O()}else for(var j=this._needsClustering;m=0;a--)s.extend(this._needsClustering[a].getLatLng());return s.extend(this._nonPointGroup.getBounds()),s},eachLayer:function(s,a){var h=this._needsClustering.slice(),l=this._needsRemoving,_,g,f;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(h),g=h.length-1;g>=0;g--){for(_=!0,f=l.length-1;f>=0;f--)if(l[f].layer===h[g]){_=!1;break}_&&s.call(a,h[g])}this._nonPointGroup.eachLayer(s,a)},getLayers:function(){var s=[];return this.eachLayer(function(a){s.push(a)}),s},getLayer:function(s){var a=null;return s=parseInt(s,10),this.eachLayer(function(h){L.stamp(h)===s&&(a=h)}),a},hasLayer:function(s){if(!s)return!1;var a,h=this._needsClustering;for(a=h.length-1;a>=0;a--)if(h[a]===s)return!0;for(h=this._needsRemoving,a=h.length-1;a>=0;a--)if(h[a].layer===s)return!1;return!!(s.__parent&&s.__parent._group===this)||this._nonPointGroup.hasLayer(s)},zoomToShowLayer:function(s,a){var h=this._map;typeof a!="function"&&(a=function(){});var l=function(){(h.hasLayer(s)||h.hasLayer(s.__parent))&&!this._inZoomAnimation&&(this._map.off("moveend",l,this),this.off("animationend",l,this),h.hasLayer(s)?a():s.__parent._icon&&(this.once("spiderfied",a,this),s.__parent.spiderfy()))};s._icon&&this._map.getBounds().contains(s.getLatLng())?a():s.__parent._zoom=0;h--)if(s[h]===a)return s.splice(h,1),!0},_removeFromGridUnclustered:function(s,a){for(var h=this._map,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom());a>=_&&l[a].removeObject(s,h.project(s.getLatLng(),a));a--);},_childMarkerDragStart:function(s){s.target.__dragStart=s.target._latlng},_childMarkerMoved:function(s){if(!this._ignoreMove&&!s.target.__dragStart){var a=s.target._popup&&s.target._popup.isOpen();this._moveChild(s.target,s.oldLatLng,s.latlng),a&&s.target.openPopup()}},_moveChild:function(s,a,h){s._latlng=a,this.removeLayer(s),s._latlng=h,this.addLayer(s)},_childMarkerDragEnd:function(s){var a=s.target.__dragStart;delete s.target.__dragStart,a&&this._moveChild(s.target,a,s.target._latlng)},_removeLayer:function(s,a,h){var l=this._gridClusters,_=this._gridUnclustered,g=this._featureGroup,f=this._map,v=Math.floor(this._map.getMinZoom());a&&this._removeFromGridUnclustered(s,this._maxZoom);var m=s.__parent,k=m._markers,C;for(this._arraySplice(k,s);m&&(m._childCount--,m._boundsNeedUpdate=!0,!(m._zoom"+a+"",className:"marker-cluster"+h,iconSize:new L.Point(40,40)})},_bindEvents:function(){var s=this._map,a=this.options.spiderfyOnMaxZoom,h=this.options.showCoverageOnHover,l=this.options.zoomToBoundsOnClick,_=this.options.spiderfyOnEveryZoom;(a||l||_)&&this.on("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),h&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),s.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(s){var a=s.layer,h=a;if(!(s.type==="clusterkeypress"&&s.originalEvent&&s.originalEvent.keyCode!==13)){for(;h._childClusters.length===1;)h=h._childClusters[0];h._zoom===this._maxZoom&&h._childCount===a._childCount&&this.options.spiderfyOnMaxZoom?a.spiderfy():this.options.zoomToBoundsOnClick&&a.zoomToBounds(),this.options.spiderfyOnEveryZoom&&a.spiderfy(),s.originalEvent&&s.originalEvent.keyCode===13&&this._map._container.focus()}},_showCoverage:function(s){var a=this._map;this._inZoomAnimation||(this._shownPolygon&&a.removeLayer(this._shownPolygon),s.layer.getChildCount()>2&&s.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(s.layer.getConvexHull(),this.options.polygonOptions),a.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var s=this.options.spiderfyOnMaxZoom,a=this.options.showCoverageOnHover,h=this.options.zoomToBoundsOnClick,l=this.options.spiderfyOnEveryZoom,_=this._map;(s||h||l)&&this.off("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),a&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),_.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var s=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,s),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),s),this._currentShownBounds=s}},_generateInitialClusters:function(){var s=Math.ceil(this._map.getMaxZoom()),a=Math.floor(this._map.getMinZoom()),h=this.options.maxClusterRadius,l=h;typeof h!="function"&&(l=function(){return h}),this.options.disableClusteringAtZoom!==null&&(s=this.options.disableClusteringAtZoom-1),this._maxZoom=s,this._gridClusters={},this._gridUnclustered={};for(var _=s;_>=a;_--)this._gridClusters[_]=new L.DistanceGrid(l(_)),this._gridUnclustered[_]=new L.DistanceGrid(l(_));this._topClusterLevel=new this._markerCluster(this,a-1)},_addLayer:function(s,a){var h=this._gridClusters,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom()),g,f;for(this.options.singleMarkerMode&&this._overrideMarkerIcon(s),s.on(this._childMarkerEventHandlers,this);a>=_;a--){g=this._map.project(s.getLatLng(),a);var v=h[a].getNearObject(g);if(v){v._addChild(s),s.__parent=v;return}if(v=l[a].getNearObject(g),v){var m=v.__parent;m&&this._removeLayer(v,!1);var k=new this._markerCluster(this,a,v,s);h[a].addObject(k,this._map.project(k._cLatLng,a)),v.__parent=k,s.__parent=k;var C=k;for(f=a-1;f>m._zoom;f--)C=new this._markerCluster(this,f,C),h[f].addObject(C,this._map.project(v.getLatLng(),f));m._addChild(C),this._removeFromGridUnclustered(v,a);return}l[a].addObject(s,g)}this._topClusterLevel._addChild(s),s.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(s){s instanceof L.MarkerCluster&&s._iconNeedsUpdate&&s._updateIcon()})},_enqueue:function(s){this._queue.push(s),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var s=0;ss?(this._animationStart(),this._animationZoomOut(this._zoom,s)):this._moveEnd()},_getExpandedVisibleBounds:function(){if(this.options.removeOutsideVisibleBounds){if(L.Browser.mobile)return this._checkBoundsMaxLat(this._map.getBounds())}else return this._mapBoundsInfinite;return this._checkBoundsMaxLat(this._map.getBounds().pad(1))},_checkBoundsMaxLat:function(s){var a=this._maxLat;return a!==void 0&&(s.getNorth()>=a&&(s._northEast.lat=1/0),s.getSouth()<=-a&&(s._southWest.lat=-1/0)),s},_animationAddLayerNonAnimated:function(s,a){if(a===s)this._featureGroup.addLayer(s);else if(a._childCount===2){a._addToMap();var h=a.getAllChildMarkers();this._featureGroup.removeLayer(h[0]),this._featureGroup.removeLayer(h[1])}else a._updateIcon()},_extractNonGroupLayers:function(s,a){var h=s.getLayers(),l=0,_;for(a=a||[];l=0;g--)k=m[g],h.contains(k._latlng)||l.removeLayer(k)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(h,a),l.eachLayer(function(f){!(f instanceof L.MarkerCluster)&&f._icon&&f.clusterShow()}),this._topClusterLevel._recursively(h,s,a,function(f){f._recursivelyRestoreChildPositions(a)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(h,s,_,function(f){l.removeLayer(f),f.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(s,a){this._animationZoomOutSingle(this._topClusterLevel,s-1,a),this._topClusterLevel._recursivelyAddChildrenToMap(null,a,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),s,this._getExpandedVisibleBounds())},_animationAddLayer:function(s,a){var h=this,l=this._featureGroup;l.addLayer(s),a!==s&&(a._childCount>2?(a._updateIcon(),this._forceLayout(),this._animationStart(),s._setPos(this._map.latLngToLayerPoint(a.getLatLng())),s.clusterHide(),this._enqueue(function(){l.removeLayer(s),s.clusterShow(),h._animationEnd()})):(this._forceLayout(),h._animationStart(),h._animationZoomOutSingle(a,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(s,a,h){var l=this._getExpandedVisibleBounds(),_=Math.floor(this._map.getMinZoom());s._recursivelyAnimateChildrenInAndAddSelfToMap(l,_,a+1,h);var g=this;this._forceLayout(),s._recursivelyBecomeVisible(l,h),this._enqueue(function(){if(s._childCount===1){var f=s._markers[0];this._ignoreMove=!0,f.setLatLng(f.getLatLng()),this._ignoreMove=!1,f.clusterShow&&f.clusterShow()}else s._recursively(l,h,_,function(v){v._recursivelyRemoveChildrenFromMap(l,_,a+1)});g._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroup=function(s){return new L.MarkerClusterGroup(s)};var P=L.MarkerCluster=L.Marker.extend({options:L.Icon.prototype.options,initialize:function(s,a,h,l){L.Marker.prototype.initialize.call(this,h?h._cLatLng||h.getLatLng():new L.LatLng(0,0),{icon:this,pane:s.options.clusterPane}),this._group=s,this._zoom=a,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,h&&this._addChild(h),l&&this._addChild(l)},getAllChildMarkers:function(s,a){s=s||[];for(var h=this._childClusters.length-1;h>=0;h--)this._childClusters[h].getAllChildMarkers(s,a);for(var l=this._markers.length-1;l>=0;l--)a&&this._markers[l].__dragStart||s.push(this._markers[l]);return s},getChildCount:function(){return this._childCount},zoomToBounds:function(s){for(var a=this._childClusters.slice(),h=this._group._map,l=h.getBoundsZoom(this._bounds),_=this._zoom+1,g=h.getZoom(),f;a.length>0&&l>_;){_++;var v=[];for(f=0;f_?this._group._map.setView(this._latlng,_):l<=g?this._group._map.setView(this._latlng,g+1):this._group._map.fitBounds(this._bounds,s)},getBounds:function(){var s=new L.LatLngBounds;return s.extend(this._bounds),s},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(s,a){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(s),s instanceof L.MarkerCluster?(a||(this._childClusters.push(s),s.__parent=this),this._childCount+=s._childCount):(a||this._markers.push(s),this._childCount++),this.__parent&&this.__parent._addChild(s,!0)},_setClusterCenter:function(s){this._cLatLng||(this._cLatLng=s._cLatLng||s._latlng)},_resetBounds:function(){var s=this._bounds;s._southWest&&(s._southWest.lat=1/0,s._southWest.lng=1/0),s._northEast&&(s._northEast.lat=-1/0,s._northEast.lng=-1/0)},_recalculateBounds:function(){var s=this._markers,a=this._childClusters,h=0,l=0,_=this._childCount,g,f,v,m;if(_!==0){for(this._resetBounds(),g=0;g=0;g--)f=_[g],f._icon&&(f._setPos(a),f.clusterHide())},function(l){var _=l._childClusters,g,f;for(g=_.length-1;g>=0;g--)f=_[g],f._icon&&(f._setPos(a),f.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(s,a,h,l){this._recursively(s,l,a,function(_){_._recursivelyAnimateChildrenIn(s,_._group._map.latLngToLayerPoint(_.getLatLng()).round(),h),_._isSingleParent()&&h-1===l?(_.clusterShow(),_._recursivelyRemoveChildrenFromMap(s,a,h)):_.clusterHide(),_._addToMap()})},_recursivelyBecomeVisible:function(s,a){this._recursively(s,this._group._map.getMinZoom(),a,null,function(h){h.clusterShow()})},_recursivelyAddChildrenToMap:function(s,a,h){this._recursively(h,this._group._map.getMinZoom()-1,a,function(l){if(a!==l._zoom)for(var _=l._markers.length-1;_>=0;_--){var g=l._markers[_];h.contains(g._latlng)&&(s&&(g._backupLatlng=g.getLatLng(),g.setLatLng(s),g.clusterHide&&g.clusterHide()),l._group._featureGroup.addLayer(g))}},function(l){l._addToMap(s)})},_recursivelyRestoreChildPositions:function(s){for(var a=this._markers.length-1;a>=0;a--){var h=this._markers[a];h._backupLatlng&&(h.setLatLng(h._backupLatlng),delete h._backupLatlng)}if(s-1===this._zoom)for(var l=this._childClusters.length-1;l>=0;l--)this._childClusters[l]._restorePosition();else for(var _=this._childClusters.length-1;_>=0;_--)this._childClusters[_]._recursivelyRestoreChildPositions(s)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(s,a,h,l){var _,g;this._recursively(s,a-1,h-1,function(f){for(g=f._markers.length-1;g>=0;g--)_=f._markers[g],(!l||!l.contains(_._latlng))&&(f._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())},function(f){for(g=f._childClusters.length-1;g>=0;g--)_=f._childClusters[g],(!l||!l.contains(_._latlng))&&(f._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())})},_recursively:function(s,a,h,l,_){var g=this._childClusters,f=this._zoom,v,m;if(a<=f&&(l&&l(this),_&&f===h&&_(this)),f=0;v--)m=g[v],m._boundsNeedUpdate&&m._recalculateBounds(),s.intersects(m._bounds)&&m._recursively(s,a,h,l,_)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}});L.Marker.include({clusterHide:function(){var s=this.options.opacity;return this.setOpacity(0),this.options.opacity=s,this},clusterShow:function(){return this.setOpacity(this.options.opacity)}}),L.DistanceGrid=function(s){this._cellSize=s,this._sqCellSize=s*s,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},f=g[h]=g[h]||[],v=L.Util.stamp(s);this._objectPoint[v]=a,f.push(s)},updateObject:function(s,a){this.removeObject(s),this.addObject(s,a)},removeObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},f=g[h]=g[h]||[],v,m;for(delete this._objectPoint[L.Util.stamp(s)],v=0,m=f.length;v=0;g--){if(f=a[g],v=this.getDistant(f,s),v>0)_.push(f);else continue;v>h&&(h=v,l=f)}return{maxPoint:l,newPoints:_}},buildConvexHull:function(s,a){var h=[],l=this.findMostDistantPointFromBaseLine(s,a);return l.maxPoint?(h=h.concat(this.buildConvexHull([s[0],l.maxPoint],l.newPoints)),h=h.concat(this.buildConvexHull([l.maxPoint,s[1]],l.newPoints)),h):[s[0]]},getConvexHull:function(s){var a=!1,h=!1,l=!1,_=!1,g=null,f=null,v=null,m=null,k=null,C=null,F;for(F=s.length-1;F>=0;F--){var O=s[F];(a===!1||O.lat>a)&&(g=O,a=O.lat),(h===!1||O.latl)&&(v=O,l=O.lng),(_===!1||O.lng<_)&&(m=O,_=O.lng)}h!==a?(C=f,k=g):(C=m,k=v);var j=[].concat(this.buildConvexHull([C,k],s),this.buildConvexHull([k,C],s));return j}}}(),L.MarkerCluster.include({getConvexHull:function(){var s=this.getAllChildMarkers(),a=[],h,l;for(l=s.length-1;l>=0;l--)h=s[l].getLatLng(),a.push(h);return L.QuickHull.getConvexHull(a)}}),L.MarkerCluster.include({_2PI:Math.PI*2,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(!(this._group._spiderfied===this||this._group._inZoomAnimation)){var s=this.getAllChildMarkers(null,!0),a=this._group,h=a._map,l=h.latLngToLayerPoint(this._latlng),_;this._group._unspiderfy(),this._group._spiderfied=this,this._group.options.spiderfyShapePositions?_=this._group.options.spiderfyShapePositions(s.length,l):s.length>=this._circleSpiralSwitchover?_=this._generatePointsSpiral(s.length,l):(l.y+=10,_=this._generatePointsCircle(s.length,l)),this._animationSpiderfy(s,_)}},unspiderfy:function(s){this._group._inZoomAnimation||(this._animationUnspiderfy(s),this._group._spiderfied=null)},_generatePointsCircle:function(s,a){var h=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+s),l=h/this._2PI,_=this._2PI/s,g=[],f,v;for(l=Math.max(l,35),g.length=s,f=0;f=0;m--)m=0;g--)_=l[g],h.removeLayer(_),_._preSpiderfyLatlng&&(_.setLatLng(_._preSpiderfyLatlng),delete _._preSpiderfyLatlng),_.setZIndexOffset&&_.setZIndexOffset(0),_._spiderLeg&&(a.removeLayer(_._spiderLeg),delete _._spiderLeg);s.fire("unspiderfied",{cluster:this,markers:l}),s._ignoreMove=!1,s._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(s,a){var h=this._group,l=h._map,_=h._featureGroup,g=this._group.options.spiderLegPolylineOptions,f,v,m,k;for(h._ignoreMove=!0,f=0;f=0;F--)G=_.layerPointToLatLng(a[F]),O=s[F],O._preSpiderfyLatlng=O._latlng,O.setLatLng(G),O.clusterShow&&O.clusterShow(),m&&(j=O._spiderLeg,V=j._path,V.style.strokeDashoffset=0,j.setStyle({opacity:C}));this.setOpacity(.3),l._ignoreMove=!1,setTimeout(function(){l._animationEnd(),l.fire("spiderfied",{cluster:h,markers:s})},200)},_animationUnspiderfy:function(s){var a=this,h=this._group,l=h._map,_=h._featureGroup,g=s?l._latLngToNewLayerPoint(this._latlng,s.zoom,s.center):l.latLngToLayerPoint(this._latlng),f=this.getAllChildMarkers(null,!0),v=L.Path.SVG,m,k,C,F,O,j;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),k=f.length-1;k>=0;k--)m=f[k],m._preSpiderfyLatlng&&(m.closePopup(),m.setLatLng(m._preSpiderfyLatlng),delete m._preSpiderfyLatlng,j=!0,m._setPos&&(m._setPos(g),j=!1),m.clusterHide&&(m.clusterHide(),j=!1),j&&_.removeLayer(m),v&&(C=m._spiderLeg,F=C._path,O=F.getTotalLength()+.1,F.style.strokeDashoffset=O,C.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var V=0;for(k=f.length-1;k>=0;k--)m=f[k],m._spiderLeg&&V++;for(k=f.length-1;k>=0;k--)m=f[k],m._spiderLeg&&(m.clusterShow&&m.clusterShow(),m.setZIndexOffset&&m.setZIndexOffset(0),V>1&&_.removeLayer(m),l.removeLayer(m._spiderLeg),delete m._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:f})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(s){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(s))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(s){this._spiderfied&&this._spiderfied.unspiderfy(s)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(s){s._spiderLeg&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow(),s.setZIndexOffset&&s.setZIndexOffset(0),this._map.removeLayer(s._spiderLeg),delete s._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(s){return s?s instanceof L.MarkerClusterGroup?s=s._topClusterLevel.getAllChildMarkers():s instanceof L.LayerGroup?s=s._layers:s instanceof L.MarkerCluster?s=s.getAllChildMarkers():s instanceof L.Marker&&(s=[s]):s=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(s),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(s),this},_flagParentsIconsNeedUpdate:function(s){var a,h;for(a in s)for(h=s[a].__parent;h;)h._iconNeedsUpdate=!0,h=h.__parent},_refreshSingleMarkerModeMarkers:function(s){var a,h;for(a in s)h=s[a],this.hasLayer(h)&&h.setIcon(this._overrideMarkerIcon(h))}}),L.Marker.include({refreshIconOptions:function(s,a){var h=this.options.icon;return L.setOptions(h,s),this.setIcon(h),a&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),c.MarkerClusterGroup=b,c.MarkerCluster=P,Object.defineProperty(c,"__esModule",{value:!0})})}(ue,ue.exports)),ue.exports}As();const Sn={healthy:"#10b981",warning:"#f59e0b",critical:"#ef4444"},En={healthy:"background: #d1fae5; color: #065f46;",warning:"background: #fef3c7; color: #92400e;",critical:"background: #fee2e2; color: #991b1b;"},ci={small:{dimension:"30px",fontSize:"12px",threshold:0},medium:{dimension:"40px",fontSize:"14px",threshold:10},large:{dimension:"50px",fontSize:"16px",threshold:50}},Ns={size:20,emoji:"🌳",className:"custom-tree-marker"},Rs={backgroundColor:"#10b981",className:"custom-cluster-icon",iconSize:[30,30]},On=(x="healthy")=>{const w=Sn[x]||Sn.healthy,{size:c,emoji:b,className:P}=Ns;return Tt.divIcon({className:P,html:Ds(w,c,b),iconSize:[c,c],iconAnchor:[c/2,c/2]})},Ds=(x,w,c)=>` diff --git a/frontend/dist/assets/MapSidebar-yNxbJbqT.js b/frontend/dist/assets/MapSidebar-DZT3HTLm.js similarity index 98% rename from frontend/dist/assets/MapSidebar-yNxbJbqT.js rename to frontend/dist/assets/MapSidebar-DZT3HTLm.js index 16e37da8d5..e84c16e054 100644 --- a/frontend/dist/assets/MapSidebar-yNxbJbqT.js +++ b/frontend/dist/assets/MapSidebar-DZT3HTLm.js @@ -1,4 +1,4 @@ -import{r as x,j as e,d as t,p as f,L as j,u}from"./index-DJ39NcK9.js";import{u as k}from"./useKeyboardNavigation-C5b08Ak3.js";import{b as g,c as i,d as l,T as v}from"./Table-BCdM5JW5.js";const w=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],y=(r,n)=>{const[o,s]=x.useState([]);return x.useEffect(()=>{r&&n&&s(w)},[r,n]),o},L=r=>x.useCallback(()=>{r&&(navigator.share?navigator.share({title:`Tree Details - ${r.name}`,text:`Check out this tree: ${r.name} (${r.species})`,url:window.location.href}):(navigator.clipboard.writeText(window.location.href),alert("Tree URL copied to clipboard!")))},[r]),M=t.div` +import{r as x,j as e,d as t,p as f,L as j,u}from"./index-Dzr7PBfw.js";import{u as k}from"./useKeyboardNavigation-BRnXQ3uS.js";import{b as g,c as i,d as l,T as v}from"./Table-CZfmBv9T.js";const w=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],y=(r,n)=>{const[o,s]=x.useState([]);return x.useEffect(()=>{r&&n&&s(w)},[r,n]),o},L=r=>x.useCallback(()=>{r&&(navigator.share?navigator.share({title:`Tree Details - ${r.name}`,text:`Check out this tree: ${r.name} (${r.species})`,url:window.location.href}):(navigator.clipboard.writeText(window.location.href),alert("Tree URL copied to clipboard!")))},[r]),M=t.div` position: fixed; top: 0; left: 0; diff --git a/frontend/dist/assets/Navbar-DOE0P8dm.js b/frontend/dist/assets/Navbar-BJVIhaUA.js similarity index 90% rename from frontend/dist/assets/Navbar-DOE0P8dm.js rename to frontend/dist/assets/Navbar-BJVIhaUA.js index 8bf51f697c..a859c4d12d 100644 --- a/frontend/dist/assets/Navbar-DOE0P8dm.js +++ b/frontend/dist/assets/Navbar-BJVIhaUA.js @@ -1 +1 @@ -import{j as e,L as o,r as n}from"./index-DJ39NcK9.js";import{u as g}from"./useKeyboardNavigation-C5b08Ak3.js";import{D as l}from"./DarkModeToggle-sLchHfDj.js";import{I as m}from"./IconButton-DIc-CK1Q.js";const h=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})}),f=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),p=({className:r=""})=>e.jsx(o,{to:"/",className:`text-2xl font-extrabold text-green-600 dark:text-green-400 tracking-tight ${r}`,children:"Nanwa"}),c=()=>{const r="text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 transition-colors px-4 py-2 text-base font-medium";return e.jsxs(e.Fragment,{children:[e.jsx("a",{href:"#features",className:r,children:"Features"}),e.jsx("a",{href:"#about",className:r,children:"About"}),e.jsx(o,{to:"/login",className:r,children:"Login"}),e.jsx(o,{to:"/register",className:"ml-2 bg-green-600 dark:bg-green-500 text-white px-4 py-2 rounded-lg hover:bg-green-700 dark:hover:bg-green-600 transition-colors text-base font-medium",children:"Get Started"})]})},j=({isOpen:r})=>r?e.jsx("div",{className:"md:hidden border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-4 pb-4 space-y-1",children:e.jsx(c,{})}):null,N=()=>{const[r,t]=n.useState(!1),a=n.useRef(null),{containerRef:x,focusFirst:i}=g({onEscape:()=>t(!1),trapFocus:r,autoFocus:!1}),d=()=>{t(!r)};n.useEffect(()=>{setTimeout(r?()=>{i()}:()=>{var s;(s=a.current)==null||s.focus()},100)},[r,i]);const u=s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d())};return e.jsxs("nav",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm border-b border-gray-200 dark:border-gray-700",children:[e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center h-16",children:[e.jsx(p,{}),e.jsxs("div",{className:"hidden md:flex items-center gap-4",children:[e.jsx(c,{}),e.jsx(l,{size:"sm"})]}),e.jsxs("div",{className:"md:hidden flex items-center gap-2",children:[e.jsx(l,{size:"sm"}),e.jsx(m,{ref:a,"aria-label":"Toggle menu",className:"text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400",onClick:d,onKeyDown:u,children:r?e.jsx(f,{className:"h-6 w-6"}):e.jsx(h,{className:"h-6 w-6"})})]})]})}),e.jsx("div",{ref:x,children:e.jsx(j,{isOpen:r})})]})};export{N}; +import{j as e,L as o,r as n}from"./index-Dzr7PBfw.js";import{u as g}from"./useKeyboardNavigation-BRnXQ3uS.js";import{D as l}from"./DarkModeToggle-DNnaM-T2.js";import{I as m}from"./IconButton-CsSKj4cW.js";const h=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})}),f=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),p=({className:r=""})=>e.jsx(o,{to:"/",className:`text-2xl font-extrabold text-green-600 dark:text-green-400 tracking-tight ${r}`,children:"Nanwa"}),c=()=>{const r="text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 transition-colors px-4 py-2 text-base font-medium";return e.jsxs(e.Fragment,{children:[e.jsx("a",{href:"#features",className:r,children:"Features"}),e.jsx("a",{href:"#about",className:r,children:"About"}),e.jsx(o,{to:"/login",className:r,children:"Login"}),e.jsx(o,{to:"/register",className:"ml-2 bg-green-600 dark:bg-green-500 text-white px-4 py-2 rounded-lg hover:bg-green-700 dark:hover:bg-green-600 transition-colors text-base font-medium",children:"Get Started"})]})},j=({isOpen:r})=>r?e.jsx("div",{className:"md:hidden border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-4 pb-4 space-y-1",children:e.jsx(c,{})}):null,N=()=>{const[r,t]=n.useState(!1),a=n.useRef(null),{containerRef:x,focusFirst:i}=g({onEscape:()=>t(!1),trapFocus:r,autoFocus:!1}),d=()=>{t(!r)};n.useEffect(()=>{setTimeout(r?()=>{i()}:()=>{var s;(s=a.current)==null||s.focus()},100)},[r,i]);const u=s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d())};return e.jsxs("nav",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm border-b border-gray-200 dark:border-gray-700",children:[e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center h-16",children:[e.jsx(p,{}),e.jsxs("div",{className:"hidden md:flex items-center gap-4",children:[e.jsx(c,{}),e.jsx(l,{size:"sm"})]}),e.jsxs("div",{className:"md:hidden flex items-center gap-2",children:[e.jsx(l,{size:"sm"}),e.jsx(m,{ref:a,"aria-label":"Toggle menu",className:"text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400",onClick:d,onKeyDown:u,children:r?e.jsx(f,{className:"h-6 w-6"}):e.jsx(h,{className:"h-6 w-6"})})]})]})}),e.jsx("div",{ref:x,children:e.jsx(j,{isOpen:r})})]})};export{N}; diff --git a/frontend/dist/assets/PasswordInput-dcNbels6.js b/frontend/dist/assets/PasswordInput-BcWvIN9N.js similarity index 97% rename from frontend/dist/assets/PasswordInput-dcNbels6.js rename to frontend/dist/assets/PasswordInput-BcWvIN9N.js index 7c95a5de35..3b514e3ce9 100644 --- a/frontend/dist/assets/PasswordInput-dcNbels6.js +++ b/frontend/dist/assets/PasswordInput-BcWvIN9N.js @@ -1 +1 @@ -import{j as e,r as u}from"./index-DJ39NcK9.js";const j=({label:r,id:s,error:t,required:a=!1,children:n,className:d=""})=>e.jsxs("div",{className:d,children:[e.jsxs("label",{htmlFor:s,className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[r,a&&e.jsx("span",{className:"text-red-500 ml-1",children:"*"})]}),n,t&&e.jsx("p",{id:`${s}-error`,className:"mt-1 text-sm text-red-600 dark:text-red-400",children:t})]}),y=({id:r,name:s,value:t,onChange:a,onBlur:n,className:d="",placeholder:c="",disabled:i=!1,error:l="",...x})=>{const[o,p]=u.useState(!1),h=()=>{p(!o)};return e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:o?"text":"password",id:r,name:s,value:t,onChange:a,onBlur:n,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${l?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"} ${d}`,placeholder:c,disabled:i,"aria-describedby":l?`${r}-error`:void 0,...x}),e.jsx("button",{type:"button",onClick:h,className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:i,"aria-label":o?"Hide password":"Show password",children:o?e.jsx(g,{className:"h-5 w-5 text-gray-400"}):e.jsx(m,{className:"h-5 w-5 text-gray-400"})})]})},m=({className:r})=>e.jsxs("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]}),g=({className:r})=>e.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})});export{j as F,y as P}; +import{j as e,r as u}from"./index-Dzr7PBfw.js";const j=({label:r,id:s,error:t,required:a=!1,children:n,className:d=""})=>e.jsxs("div",{className:d,children:[e.jsxs("label",{htmlFor:s,className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[r,a&&e.jsx("span",{className:"text-red-500 ml-1",children:"*"})]}),n,t&&e.jsx("p",{id:`${s}-error`,className:"mt-1 text-sm text-red-600 dark:text-red-400",children:t})]}),y=({id:r,name:s,value:t,onChange:a,onBlur:n,className:d="",placeholder:c="",disabled:i=!1,error:l="",...x})=>{const[o,p]=u.useState(!1),h=()=>{p(!o)};return e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:o?"text":"password",id:r,name:s,value:t,onChange:a,onBlur:n,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${l?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"} ${d}`,placeholder:c,disabled:i,"aria-describedby":l?`${r}-error`:void 0,...x}),e.jsx("button",{type:"button",onClick:h,className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:i,"aria-label":o?"Hide password":"Show password",children:o?e.jsx(g,{className:"h-5 w-5 text-gray-400"}):e.jsx(m,{className:"h-5 w-5 text-gray-400"})})]})},m=({className:r})=>e.jsxs("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]}),g=({className:r})=>e.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})});export{j as F,y as P}; diff --git a/frontend/dist/assets/RegisterPage-C1DYj1NC.js b/frontend/dist/assets/RegisterPage-D_5fYFtm.js similarity index 97% rename from frontend/dist/assets/RegisterPage-C1DYj1NC.js rename to frontend/dist/assets/RegisterPage-D_5fYFtm.js index b674402ee2..fd5a7109ad 100644 --- a/frontend/dist/assets/RegisterPage-C1DYj1NC.js +++ b/frontend/dist/assets/RegisterPage-D_5fYFtm.js @@ -1,4 +1,4 @@ -import{j as r,d as c,r as l,u as b,L as x}from"./index-DJ39NcK9.js";import{F as u,P as h}from"./PasswordInput-dcNbels6.js";import"./vendor-BtP0CW_r.js";const j=c.div` +import{j as r,d as c,r as l,u as b,L as x}from"./index-Dzr7PBfw.js";import{F as u,P as h}from"./PasswordInput-BcWvIN9N.js";import"./vendor-BtP0CW_r.js";const j=c.div` width: 100%; height: 4px; background-color: #e5e7eb; diff --git a/frontend/dist/assets/Table-BCdM5JW5.js b/frontend/dist/assets/Table-CZfmBv9T.js similarity index 97% rename from frontend/dist/assets/Table-BCdM5JW5.js rename to frontend/dist/assets/Table-CZfmBv9T.js index a07b6c4a96..40bfcae1b9 100644 --- a/frontend/dist/assets/Table-BCdM5JW5.js +++ b/frontend/dist/assets/Table-CZfmBv9T.js @@ -1,4 +1,4 @@ -import{d as r}from"./index-DJ39NcK9.js";const e=()=>{const o=document.documentElement.classList.contains("dark");return{containerBg:o?"#1f2937":"#ffffff",containerBorder:o?"#374151":"#e5e7eb",containerShadow:o?"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)":"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",headerBg:o?"#374151":"#f9fafb",headerBorder:o?"#4b5563":"#e5e7eb",headerText:o?"#f9fafb":"#111827",cellText:o?"#e5e7eb":"#111827",cellBorder:o?"#4b5563":"#f3f4f6",cellHover:o?"#374151":"#f9fafb",cellHeaderText:o?"#d1d5db":"#374151",cellHeaderHover:o?"#4b5563":"#f3f4f6",mutedText:o?"#9ca3af":"#6b7280",sortIcon:o?"#6b7280":"#9ca3af"}},t=r.div` +import{d as r}from"./index-Dzr7PBfw.js";const e=()=>{const o=document.documentElement.classList.contains("dark");return{containerBg:o?"#1f2937":"#ffffff",containerBorder:o?"#374151":"#e5e7eb",containerShadow:o?"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)":"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",headerBg:o?"#374151":"#f9fafb",headerBorder:o?"#4b5563":"#e5e7eb",headerText:o?"#f9fafb":"#111827",cellText:o?"#e5e7eb":"#111827",cellBorder:o?"#4b5563":"#f3f4f6",cellHover:o?"#374151":"#f9fafb",cellHeaderText:o?"#d1d5db":"#374151",cellHeaderHover:o?"#4b5563":"#f3f4f6",mutedText:o?"#9ca3af":"#6b7280",sortIcon:o?"#6b7280":"#9ca3af"}},t=r.div` background: ${()=>e().containerBg}; border-radius: 0.75rem; box-shadow: ${()=>e().containerShadow}; diff --git a/frontend/dist/assets/TreeDetailLayout-CKxWzGm5.js b/frontend/dist/assets/TreeDetailLayout-Cc_P7nbu.js similarity index 98% rename from frontend/dist/assets/TreeDetailLayout-CKxWzGm5.js rename to frontend/dist/assets/TreeDetailLayout-Cc_P7nbu.js index d1a942e605..9eced7a8cf 100644 --- a/frontend/dist/assets/TreeDetailLayout-CKxWzGm5.js +++ b/frontend/dist/assets/TreeDetailLayout-Cc_P7nbu.js @@ -1,4 +1,4 @@ -import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-DJ39NcK9.js";import{H as k}from"./MapSidebar-yNxbJbqT.js";const I=w.forwardRef(({loading:n,loadingText:o="Loading...",children:i,...m},g)=>e.jsx(v,{ref:g,loading:n,...m,children:n?o:i}));I.displayName="LoadingButton";const T=({className:n="",...o})=>e.jsx("svg",{className:n,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 12H5M12 19l-7-7 7-7"})}),y=r.header` +import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-Dzr7PBfw.js";import{H as k}from"./MapSidebar-DZT3HTLm.js";const I=w.forwardRef(({loading:n,loadingText:o="Loading...",children:i,...m},g)=>e.jsx(v,{ref:g,loading:n,...m,children:n?o:i}));I.displayName="LoadingButton";const T=({className:n="",...o})=>e.jsx("svg",{className:n,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 12H5M12 19l-7-7 7-7"})}),y=r.header` background: white; border-bottom: 1px solid #e5e7eb; padding: 1rem 0; diff --git a/frontend/dist/assets/TreeDetailPage-D6Enxj1V.js b/frontend/dist/assets/TreeDetailPage-De7lDWqg.js similarity index 87% rename from frontend/dist/assets/TreeDetailPage-D6Enxj1V.js rename to frontend/dist/assets/TreeDetailPage-De7lDWqg.js index 5d63a09b41..f5ff6aff2b 100644 --- a/frontend/dist/assets/TreeDetailPage-D6Enxj1V.js +++ b/frontend/dist/assets/TreeDetailPage-De7lDWqg.js @@ -1,4 +1,4 @@ -import{r as n,a as f,m as j,u as P,j as e,g as S,d as v}from"./index-DJ39NcK9.js";import"./IconButton-DIc-CK1Q.js";import{P as g,T as x,M as T,a as y,b as N,c as b,C as A,d as D,e as M,f as k,g as w}from"./TreeDetailLayout-CKxWzGm5.js";import"./ExportButton-Y3IlBTFt.js";import"./FormElements-5NQybTAT.js";import"./Table-BCdM5JW5.js";import"./ChartComponents-BrntlwBm.js";import{u as C}from"./MapSidebar-yNxbJbqT.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-C5b08Ak3.js";const p=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],E=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],I=s=>{const[r,t]=n.useState(null),[a,h]=n.useState([]),[i,c]=n.useState(!0),[u,l]=n.useState(null);return n.useEffect(()=>{s&&(async()=>{try{c(!0),l(null),await new Promise(d=>setTimeout(d,500));const o=p.find(d=>d.id===parseInt(s));if(!o){l("Tree not found");return}t(o),h(E)}catch{l("Failed to load tree data")}finally{c(!1)}})()},[s]),{tree:r,measurements:a,loading:i,error:u,trees:p}},B=(s,r)=>{const t=f(),a=n.useMemo(()=>r.findIndex(l=>l.id===parseInt(s)),[r,s]),h=a>0,i=a{h&&t(`/tree/${r[a-1].id}`)},[t,r,a,h]),u=n.useCallback(()=>{i&&t(`/tree/${r[a+1].id}`)},[t,r,a,i]);return{hasPrevious:h,hasNext:i,handlePreviousTree:c,handleNextTree:u,currentIndex:a}},H=v.div` +import{r as n,a as f,m as j,u as P,j as e,e as S,d as v}from"./index-Dzr7PBfw.js";import"./IconButton-CsSKj4cW.js";import{P as g,T as x,M as T,a as y,b as N,c as b,C as A,d as D,e as M,f as k,g as w}from"./TreeDetailLayout-Cc_P7nbu.js";import"./ExportButton-BvRt6B34.js";import"./FormElements-RQ7qOmSO.js";import"./Table-CZfmBv9T.js";import"./ChartComponents-CUdy75Zt.js";import{u as C}from"./MapSidebar-DZT3HTLm.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BRnXQ3uS.js";const p=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],E=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],I=s=>{const[r,t]=n.useState(null),[a,h]=n.useState([]),[i,c]=n.useState(!0),[u,l]=n.useState(null);return n.useEffect(()=>{s&&(async()=>{try{c(!0),l(null),await new Promise(d=>setTimeout(d,500));const o=p.find(d=>d.id===parseInt(s));if(!o){l("Tree not found");return}t(o),h(E)}catch{l("Failed to load tree data")}finally{c(!1)}})()},[s]),{tree:r,measurements:a,loading:i,error:u,trees:p}},B=(s,r)=>{const t=f(),a=n.useMemo(()=>r.findIndex(l=>l.id===parseInt(s)),[r,s]),h=a>0,i=a{h&&t(`/tree/${r[a-1].id}`)},[t,r,a,h]),u=n.useCallback(()=>{i&&t(`/tree/${r[a+1].id}`)},[t,r,a,i]);return{hasPrevious:h,hasNext:i,handlePreviousTree:c,handleNextTree:u,currentIndex:a}},H=v.div` background: #fee2e2; color: #991b1b; padding: 1rem; diff --git a/frontend/dist/assets/index-BDpfdlnl.css b/frontend/dist/assets/index-BDpfdlnl.css deleted file mode 100644 index 0e257a6243..0000000000 --- a/frontend/dist/assets/index-BDpfdlnl.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}.dark{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}body{font-feature-settings:"rlig" 1,"calt" 1;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}body:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}*{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.\!container{width:100%!important}.container{width:100%}@media (min-width: 320px){.\!container{max-width:320px!important}.container{max-width:320px}}@media (min-width: 640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width: 768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width: 1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width: 1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width: 1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn:disabled{pointer-events:none;opacity:.5}.btn-primary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-secondary:disabled{pointer-events:none;opacity:.5}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(77 124 15 / var(--tw-bg-opacity, 1))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-outline:disabled{pointer-events:none;opacity:.5}.btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.btn-outline:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.btn-outline:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.btn-outline:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-700{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-20{padding-top:5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.skip-link{position:absolute;left:0;top:0;z-index:50;--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));padding:.5rem 1rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.skip-link:focus{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-offset-2:focus{outline-offset:2px}.focus\:outline-blue-500:focus{outline-color:#3b82f6}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-red-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-gray-100:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-green-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:from-gray-900:is(.dark *){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-600:is(.dark *){--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-green-800:is(.dark *){--tw-gradient-to: #166534 var(--tw-gradient-to-position)}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-green-700:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-gray-900\/50:is(.dark *){--tw-shadow-color: rgb(17 24 39 / .5);--tw-shadow: var(--tw-shadow-colored)}.dark\:hover\:bg-gray-100:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-200:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/30:hover:is(.dark *){background-color:#14532d4d}.dark\:hover\:bg-red-900\/30:hover:is(.dark *){background-color:#7f1d1d4d}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-700:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 768px){.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:sticky{position:sticky}.lg\:z-10{z-index:10}.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:hidden{display:none}.lg\:w-64{width:16rem}.lg\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:p-8{padding:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>svg\]\:opacity-70>svg{opacity:.7}@media (min-width: 768px){.md\:\[\&\>svg\]\:h-20>svg{height:5rem}.md\:\[\&\>svg\]\:w-20>svg{width:5rem}} diff --git a/frontend/dist/assets/index-CnE9ecPt.css b/frontend/dist/assets/index-CnE9ecPt.css new file mode 100644 index 0000000000..e481187698 --- /dev/null +++ b/frontend/dist/assets/index-CnE9ecPt.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}.dark{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}body{font-feature-settings:"rlig" 1,"calt" 1;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}body:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}*{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.\!container{width:100%!important}.container{width:100%}@media (min-width: 320px){.\!container{max-width:320px!important}.container{max-width:320px}}@media (min-width: 640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width: 768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width: 1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width: 1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width: 1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn:disabled{pointer-events:none;opacity:.5}.btn-primary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-secondary:disabled{pointer-events:none;opacity:.5}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(77 124 15 / var(--tw-bg-opacity, 1))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-outline:disabled{pointer-events:none;opacity:.5}.btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.btn-outline:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.btn-outline:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.btn-outline:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-72{height:18rem}.h-8{height:2rem}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-700{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-20{padding-top:5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.skip-link{position:absolute;left:0;top:0;z-index:50;--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));padding:.5rem 1rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.skip-link:focus{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-offset-2:focus{outline-offset:2px}.focus\:outline-blue-500:focus{outline-color:#3b82f6}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-red-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-gray-100:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-green-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:from-gray-900:is(.dark *){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-600:is(.dark *){--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-green-800:is(.dark *){--tw-gradient-to: #166534 var(--tw-gradient-to-position)}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-green-700:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-gray-900\/50:is(.dark *){--tw-shadow-color: rgb(17 24 39 / .5);--tw-shadow: var(--tw-shadow-colored)}.dark\:hover\:bg-gray-100:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-200:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/30:hover:is(.dark *){background-color:#14532d4d}.dark\:hover\:bg-red-900\/30:hover:is(.dark *){background-color:#7f1d1d4d}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-700:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 768px){.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:sticky{position:sticky}.lg\:z-10{z-index:10}.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:hidden{display:none}.lg\:w-64{width:16rem}.lg\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:p-8{padding:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>svg\]\:opacity-70>svg{opacity:.7}@media (min-width: 768px){.md\:\[\&\>svg\]\:h-20>svg{height:5rem}.md\:\[\&\>svg\]\:w-20>svg{width:5rem}} diff --git a/frontend/dist/assets/index-DJ39NcK9.js b/frontend/dist/assets/index-Dzr7PBfw.js similarity index 97% rename from frontend/dist/assets/index-DJ39NcK9.js rename to frontend/dist/assets/index-Dzr7PBfw.js index e7604d1c0a..0167b90fb5 100644 --- a/frontend/dist/assets/index-DJ39NcK9.js +++ b/frontend/dist/assets/index-Dzr7PBfw.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-QWDx4awI.js","assets/IconButton-DIc-CK1Q.js","assets/TreeDetailLayout-CKxWzGm5.js","assets/MapSidebar-yNxbJbqT.js","assets/useKeyboardNavigation-C5b08Ak3.js","assets/Table-BCdM5JW5.js","assets/ExportButton-Y3IlBTFt.js","assets/vendor-BtP0CW_r.js","assets/FormElements-5NQybTAT.js","assets/ChartComponents-BrntlwBm.js","assets/Navbar-DOE0P8dm.js","assets/DarkModeToggle-sLchHfDj.js","assets/LoginPage-Ckb0MyS_.js","assets/PasswordInput-dcNbels6.js","assets/RegisterPage-C1DYj1NC.js","assets/DashboardPage-BnZglKQh.js","assets/FilterHeader-DzCm_NrU.js","assets/FilterHeader-DdjxYr1F.css","assets/MapPage-CWavP_xM.js","assets/MapPage-25t4MxmA.css","assets/TreeDetailPage-D6Enxj1V.js","assets/AdminPage-Bc5ol_Rn.js","assets/ErrorPages-D4z_BlyV.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-Dc2ID8Hk.js","assets/IconButton-CsSKj4cW.js","assets/TreeDetailLayout-Cc_P7nbu.js","assets/MapSidebar-DZT3HTLm.js","assets/useKeyboardNavigation-BRnXQ3uS.js","assets/Table-CZfmBv9T.js","assets/ExportButton-BvRt6B34.js","assets/vendor-BtP0CW_r.js","assets/FormElements-RQ7qOmSO.js","assets/ChartComponents-CUdy75Zt.js","assets/Navbar-BJVIhaUA.js","assets/DarkModeToggle-DNnaM-T2.js","assets/LoginPage-LyjmzT4O.js","assets/PasswordInput-BcWvIN9N.js","assets/RegisterPage-D_5fYFtm.js","assets/DashboardPage-BXlBG99y.js","assets/FilterHeader-CBw4AnG_.js","assets/FilterHeader-DdjxYr1F.css","assets/MapPage-BV2c4X5p.js","assets/MapPage-25t4MxmA.css","assets/TreeDetailPage-De7lDWqg.js","assets/AdminPage-DQw11YmQ.js","assets/ErrorPages-pitdcj5q.js"])))=>i.map(i=>d[i]); var fn=Object.defineProperty;var dn=(e,t,r)=>t in e?fn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var Oe=(e,t,r)=>dn(e,typeof t!="symbol"?t+"":t,r);import{r as dr,g as Ct,a as hr}from"./vendor-BtP0CW_r.js";function hn(e,t){for(var r=0;rn[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const a of o)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(o){const a={};return o.integrity&&(a.integrity=o.integrity),o.referrerPolicy&&(a.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?a.credentials="include":o.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(o){if(o.ep)return;o.ep=!0;const a=r(o);fetch(o.href,a)}})();var at={exports:{}},xe={};/** * @license React * react-jsx-runtime.production.min.js @@ -186,4 +186,4 @@ var fn=Object.defineProperty;var dn=(e,t,r)=>t in e?fn(e,t,{enumerable:!0,config border-radius: 0 0 8px 8px; width: ${({$progress:e})=>e}%; transition: width 0.1s linear; -`,us=({toast:e,onRemove:t})=>{const[r,n]=d.useState(!1),o=ts(e.duration),a=()=>{n(!0),setTimeout(()=>t(e.id),300)};return p.jsx(as,{$isExiting:r,children:p.jsxs(ss,{$type:e.type,role:"alert","aria-live":"polite","aria-atomic":"true",children:[p.jsx(es,{type:e.type}),p.jsxs(is,{children:[p.jsx("h4",{children:e.title||Ja(e.type)}),p.jsx("p",{children:e.message})]}),p.jsx(cs,{onClick:a,"aria-label":"Close notification",type:"button",children:p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}),e.duration>0&&p.jsx(ls,{$type:e.type,$progress:o})]})})},fs=()=>{const{toasts:e,removeToast:t}=qa();return p.jsx(os,{"aria-live":"polite","aria-label":"Notifications",children:e.map(r=>p.jsx(us,{toast:r,onRemove:t},r.id))})};function tn(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;tp.jsx("div",{className:ne("bg-white rounded-lg p-8 max-w-2xl w-full shadow-lg text-center",e),...r,children:t}),ps=({className:e,children:t,...r})=>p.jsx("h1",{className:ne("text-red-600 text-3xl mb-4 font-semibold",e),...r,children:t}),ms=({className:e,children:t,...r})=>p.jsx("p",{className:ne("text-gray-600 text-lg leading-relaxed mb-8",e),...r,children:t}),gs=({className:e,error:t,errorInfo:r,...n})=>p.jsxs("details",{className:ne("mb-8 text-left",e),...n,children:[p.jsx("summary",{className:"cursor-pointer text-blue-600 font-medium mb-2 hover:text-blue-800",children:"Show technical details"}),p.jsxs("pre",{className:"bg-gray-50 p-4 rounded overflow-x-auto text-sm text-gray-700 whitespace-pre-wrap break-words",children:[t==null?void 0:t.toString(),r==null?void 0:r.componentStack]})]}),vs={primary:"btn-primary",secondary:"btn-secondary",outline:"btn-outline",ghost:"btn-ghost",link:"btn-link",destructive:"btn-destructive",success:"btn-success"},ys={sm:"h-8 px-3 text-xs",md:"h-10 px-4 py-2",lg:"h-12 px-8",xl:"h-14 px-10 text-lg",icon:"h-10 w-10"},Ue=N.forwardRef(({className:e,variant:t="primary",size:r="md",disabled:n=!1,loading:o=!1,children:a,...s},c)=>p.jsxs("button",{className:ne("btn",vs[t],ys[r],n&&"btn-disabled",o&&"btn-loading",e),ref:c,disabled:n||o,...s,children:[o&&p.jsx("span",{className:"btn-spinner","aria-hidden":"true",children:p.jsxs("svg",{className:"animate-spin h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[p.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),p.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),a]}));Ue.displayName="Button";const rn=N.forwardRef(({className:e,orientation:t="horizontal",size:r="md",variant:n="outline",children:o,...a},s)=>{const c=N.Children.map(o,i=>N.isValidElement(i)?N.cloneElement(i,{size:i.props.size||r,variant:i.props.variant||n}):i);return p.jsx("div",{className:ne("btn-group",t==="horizontal"&&"btn-group-horizontal",t==="vertical"&&"btn-group-vertical",e),ref:s,...a,children:c})});rn.displayName="ButtonGroup";const xs=({onRetry:e,onReload:t,onReportError:r})=>p.jsxs(rn,{className:"flex gap-4 justify-center flex-wrap",children:[p.jsx(Ue,{onClick:e,variant:"primary",children:"Try Again"}),p.jsx(Ue,{onClick:t,variant:"secondary",children:"Refresh Page"}),p.jsx(Ue,{onClick:r,variant:"secondary",children:"Report Error"})]}),tt=e=>{if(!e)return null;const t=new Date(e);return isNaN(t.getTime())?null:t},qs=e=>{const t=tt(e);return t?t.toLocaleString():"Invalid date"},Gs=e=>{const t=tt(e);return t?t.toLocaleDateString():"Invalid date"},Vs=e=>{const t=tt(e);return t?t.toISOString().split("T")[0]:""},bs=e=>{const t=tt(e);return t?t.toISOString():null},ws=({children:e,className:t,...r})=>p.jsx("div",{className:ne("min-h-screen flex items-center justify-center p-8 bg-gray-50",t),role:"alert","aria-live":"assertive",...r,children:e});class Ss extends N.Component{constructor(r){super(r);Oe(this,"handleRetry",()=>{this.setState({hasError:!1,error:null,errorInfo:null})});Oe(this,"handleReload",()=>{window.location.reload()});Oe(this,"handleReportError",()=>{this.errorReporting.reportError(this.state.error,this.state.errorInfo)});this.state={hasError:!1,error:null,errorInfo:null},this.errorReporting={reportError:(n,o)=>{const a={error:n==null?void 0:n.toString(),stack:n==null?void 0:n.stack,componentStack:o==null?void 0:o.componentStack,userAgent:navigator.userAgent,timestamp:bs(new Date),url:window.location.href};navigator.clipboard.writeText(JSON.stringify(a,null,2)).then(()=>{alert("Error details copied to clipboard. Please send this to support.")}).catch(()=>{alert("Failed to copy error details. Please try again.")})},logError:(n,o)=>{console.error("Error caught by boundary:",n,o)}}}static getDerivedStateFromError(r){return{hasError:!0}}componentDidCatch(r,n){this.setState({error:r,errorInfo:n}),this.errorReporting.logError(r,n)}render(){return this.state.hasError?p.jsx(ws,{children:p.jsxs(hs,{children:[p.jsx(ps,{children:"Oops! Something went wrong"}),p.jsx(ms,{children:"We're sorry, but something unexpected happened. You can try refreshing the page or contact support if the problem persists."}),this.state.error&&p.jsx(gs,{error:this.state.error,errorInfo:this.state.errorInfo}),p.jsx(xs,{onRetry:this.handleRetry,onReload:this.handleReload,onReportError:this.handleReportError})]})}):this.props.children}}const Es=({children:e})=>e,Cs=d.lazy(()=>K(()=>import("./LandingPage-QWDx4awI.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(e=>({default:e.LandingPage}))),Rs=d.lazy(()=>K(()=>import("./LoginPage-Ckb0MyS_.js"),__vite__mapDeps([12,10,4,11,1,13,7])).then(e=>({default:e.LoginPage}))),Ps=d.lazy(()=>K(()=>import("./RegisterPage-C1DYj1NC.js"),__vite__mapDeps([14,13,7])).then(e=>({default:e.RegisterPage}))),js=d.lazy(()=>K(()=>import("./DashboardPage-BnZglKQh.js"),__vite__mapDeps([15,9,7,16,17,6,11,1])).then(e=>({default:e.DashboardPage}))),_s=d.lazy(()=>K(()=>import("./MapPage-CWavP_xM.js"),__vite__mapDeps([18,7,16,17,3,4,5,6,19])).then(e=>({default:e.MapPage}))),As=d.lazy(()=>K(()=>import("./TreeDetailPage-D6Enxj1V.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.TreeDetailPage}))),Ts=d.lazy(()=>K(()=>import("./AdminPage-Bc5ol_Rn.js"),__vite__mapDeps([21,5,8,7])).then(e=>({default:e.AdminPage}))),Is=d.lazy(()=>K(()=>import("./ErrorPages-D4z_BlyV.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.NotFoundPage}))),Os=()=>p.jsx(Ss,{children:p.jsx(Eo,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:p.jsx(Ga,{children:p.jsx(Wa,{children:p.jsx(Lo,{children:p.jsxs(Es,{children:[p.jsx(d.Suspense,{fallback:p.jsx(Zr,{fullscreen:!0,text:"Loading page..."}),children:p.jsxs(mo,{children:[p.jsx(M,{path:"/",element:p.jsx(Cs,{})}),p.jsx(M,{path:"/login",element:p.jsx(Rs,{})}),p.jsx(M,{path:"/register",element:p.jsx(Ps,{})}),p.jsx(M,{path:"/dashboard",element:p.jsx($e,{children:p.jsx(js,{})})}),p.jsx(M,{path:"/map",element:p.jsx($e,{children:p.jsx(_s,{})})}),p.jsx(M,{path:"/tree/:id",element:p.jsx($e,{children:p.jsx(As,{})})}),p.jsx(M,{path:"/admin",element:p.jsx($e,{children:p.jsx(Ts,{})})}),p.jsx(M,{path:"*",element:p.jsx(Is,{})})]})}),p.jsx(fs,{})]})})})})})}),ks=(e="root")=>{const t=document.getElementById(e);if(!t)throw new Error(`Root element with id '${e}' not found in the document`);return t},Ns=e=>xn.createRoot(e),Ls=e=>{e.render(p.jsx(N.StrictMode,{children:p.jsx(Os,{})}))},$s=()=>{try{const e=ks(),t=Ns(e);Ls(t)}catch(e){throw console.error("Failed to initialize application:",e),e}};$s();export{rn as B,Fs as L,ho as N,N as R,Ye as a,Sn as b,ds as c,$ as d,Ws as e,ne as f,Zr as g,gn as h,Bs as i,p as j,Us as k,Vs as l,Ms as m,qs as n,Ue as o,Gs as p,d as r,No as u}; +`,us=({toast:e,onRemove:t})=>{const[r,n]=d.useState(!1),o=ts(e.duration),a=()=>{n(!0),setTimeout(()=>t(e.id),300)};return p.jsx(as,{$isExiting:r,children:p.jsxs(ss,{$type:e.type,role:"alert","aria-live":"polite","aria-atomic":"true",children:[p.jsx(es,{type:e.type}),p.jsxs(is,{children:[p.jsx("h4",{children:e.title||Ja(e.type)}),p.jsx("p",{children:e.message})]}),p.jsx(cs,{onClick:a,"aria-label":"Close notification",type:"button",children:p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}),e.duration>0&&p.jsx(ls,{$type:e.type,$progress:o})]})})},fs=()=>{const{toasts:e,removeToast:t}=qa();return p.jsx(os,{"aria-live":"polite","aria-label":"Notifications",children:e.map(r=>p.jsx(us,{toast:r,onRemove:t},r.id))})};function tn(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;tp.jsx("div",{className:ne("bg-white rounded-lg p-8 max-w-2xl w-full shadow-lg text-center",e),...r,children:t}),ps=({className:e,children:t,...r})=>p.jsx("h1",{className:ne("text-red-600 text-3xl mb-4 font-semibold",e),...r,children:t}),ms=({className:e,children:t,...r})=>p.jsx("p",{className:ne("text-gray-600 text-lg leading-relaxed mb-8",e),...r,children:t}),gs=({className:e,error:t,errorInfo:r,...n})=>p.jsxs("details",{className:ne("mb-8 text-left",e),...n,children:[p.jsx("summary",{className:"cursor-pointer text-blue-600 font-medium mb-2 hover:text-blue-800",children:"Show technical details"}),p.jsxs("pre",{className:"bg-gray-50 p-4 rounded overflow-x-auto text-sm text-gray-700 whitespace-pre-wrap break-words",children:[t==null?void 0:t.toString(),r==null?void 0:r.componentStack]})]}),vs={primary:"btn-primary",secondary:"btn-secondary",outline:"btn-outline",ghost:"btn-ghost",link:"btn-link",destructive:"btn-destructive",success:"btn-success"},ys={sm:"h-8 px-3 text-xs",md:"h-10 px-4 py-2",lg:"h-12 px-8",xl:"h-14 px-10 text-lg",icon:"h-10 w-10"},Ue=N.forwardRef(({className:e,variant:t="primary",size:r="md",disabled:n=!1,loading:o=!1,children:a,...s},c)=>p.jsxs("button",{className:ne("btn",vs[t],ys[r],n&&"btn-disabled",o&&"btn-loading",e),ref:c,disabled:n||o,...s,children:[o&&p.jsx("span",{className:"btn-spinner","aria-hidden":"true",children:p.jsxs("svg",{className:"animate-spin h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[p.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),p.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),a]}));Ue.displayName="Button";const rn=N.forwardRef(({className:e,orientation:t="horizontal",size:r="md",variant:n="outline",children:o,...a},s)=>{const c=N.Children.map(o,i=>N.isValidElement(i)?N.cloneElement(i,{size:i.props.size||r,variant:i.props.variant||n}):i);return p.jsx("div",{className:ne("btn-group",t==="horizontal"&&"btn-group-horizontal",t==="vertical"&&"btn-group-vertical",e),ref:s,...a,children:c})});rn.displayName="ButtonGroup";const xs=({onRetry:e,onReload:t,onReportError:r})=>p.jsxs(rn,{className:"flex gap-4 justify-center flex-wrap",children:[p.jsx(Ue,{onClick:e,variant:"primary",children:"Try Again"}),p.jsx(Ue,{onClick:t,variant:"secondary",children:"Refresh Page"}),p.jsx(Ue,{onClick:r,variant:"secondary",children:"Report Error"})]}),tt=e=>{if(!e)return null;const t=new Date(e);return isNaN(t.getTime())?null:t},qs=e=>{const t=tt(e);return t?t.toLocaleString():"Invalid date"},Gs=e=>{const t=tt(e);return t?t.toLocaleDateString():"Invalid date"},Vs=e=>{const t=tt(e);return t?t.toISOString().split("T")[0]:""},bs=e=>{const t=tt(e);return t?t.toISOString():null},ws=({children:e,className:t,...r})=>p.jsx("div",{className:ne("min-h-screen flex items-center justify-center p-8 bg-gray-50",t),role:"alert","aria-live":"assertive",...r,children:e});class Ss extends N.Component{constructor(r){super(r);Oe(this,"handleRetry",()=>{this.setState({hasError:!1,error:null,errorInfo:null})});Oe(this,"handleReload",()=>{window.location.reload()});Oe(this,"handleReportError",()=>{this.errorReporting.reportError(this.state.error,this.state.errorInfo)});this.state={hasError:!1,error:null,errorInfo:null},this.errorReporting={reportError:(n,o)=>{const a={error:n==null?void 0:n.toString(),stack:n==null?void 0:n.stack,componentStack:o==null?void 0:o.componentStack,userAgent:navigator.userAgent,timestamp:bs(new Date),url:window.location.href};navigator.clipboard.writeText(JSON.stringify(a,null,2)).then(()=>{alert("Error details copied to clipboard. Please send this to support.")}).catch(()=>{alert("Failed to copy error details. Please try again.")})},logError:(n,o)=>{console.error("Error caught by boundary:",n,o)}}}static getDerivedStateFromError(r){return{hasError:!0}}componentDidCatch(r,n){this.setState({error:r,errorInfo:n}),this.errorReporting.logError(r,n)}render(){return this.state.hasError?p.jsx(ws,{children:p.jsxs(hs,{children:[p.jsx(ps,{children:"Oops! Something went wrong"}),p.jsx(ms,{children:"We're sorry, but something unexpected happened. You can try refreshing the page or contact support if the problem persists."}),this.state.error&&p.jsx(gs,{error:this.state.error,errorInfo:this.state.errorInfo}),p.jsx(xs,{onRetry:this.handleRetry,onReload:this.handleReload,onReportError:this.handleReportError})]})}):this.props.children}}const Es=({children:e})=>e,Cs=d.lazy(()=>K(()=>import("./LandingPage-Dc2ID8Hk.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(e=>({default:e.LandingPage}))),Rs=d.lazy(()=>K(()=>import("./LoginPage-LyjmzT4O.js"),__vite__mapDeps([12,10,4,11,1,13,7])).then(e=>({default:e.LoginPage}))),Ps=d.lazy(()=>K(()=>import("./RegisterPage-D_5fYFtm.js"),__vite__mapDeps([14,13,7])).then(e=>({default:e.RegisterPage}))),js=d.lazy(()=>K(()=>import("./DashboardPage-BXlBG99y.js"),__vite__mapDeps([15,9,7,16,17,6,11,1])).then(e=>({default:e.DashboardPage}))),_s=d.lazy(()=>K(()=>import("./MapPage-BV2c4X5p.js"),__vite__mapDeps([18,7,16,17,3,4,5,6,19])).then(e=>({default:e.MapPage}))),As=d.lazy(()=>K(()=>import("./TreeDetailPage-De7lDWqg.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.TreeDetailPage}))),Ts=d.lazy(()=>K(()=>import("./AdminPage-DQw11YmQ.js"),__vite__mapDeps([21,5,8,7])).then(e=>({default:e.AdminPage}))),Is=d.lazy(()=>K(()=>import("./ErrorPages-pitdcj5q.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.NotFoundPage}))),Os=()=>p.jsx(Ss,{children:p.jsx(Eo,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:p.jsx(Ga,{children:p.jsx(Wa,{children:p.jsx(Lo,{children:p.jsxs(Es,{children:[p.jsx(d.Suspense,{fallback:p.jsx(Zr,{fullscreen:!0,text:"Loading page..."}),children:p.jsxs(mo,{children:[p.jsx(M,{path:"/",element:p.jsx(Cs,{})}),p.jsx(M,{path:"/login",element:p.jsx(Rs,{})}),p.jsx(M,{path:"/register",element:p.jsx(Ps,{})}),p.jsx(M,{path:"/dashboard",element:p.jsx($e,{children:p.jsx(js,{})})}),p.jsx(M,{path:"/map",element:p.jsx($e,{children:p.jsx(_s,{})})}),p.jsx(M,{path:"/tree/:id",element:p.jsx($e,{children:p.jsx(As,{})})}),p.jsx(M,{path:"/admin",element:p.jsx($e,{children:p.jsx(Ts,{})})}),p.jsx(M,{path:"*",element:p.jsx(Is,{})})]})}),p.jsx(fs,{})]})})})})})}),ks=(e="root")=>{const t=document.getElementById(e);if(!t)throw new Error(`Root element with id '${e}' not found in the document`);return t},Ns=e=>xn.createRoot(e),Ls=e=>{e.render(p.jsx(N.StrictMode,{children:p.jsx(Os,{})}))},$s=()=>{try{const e=ks(),t=Ns(e);Ls(t)}catch(e){throw console.error("Failed to initialize application:",e),e}};$s();export{ko as A,rn as B,Fs as L,ho as N,N as R,Ye as a,Sn as b,ds as c,$ as d,Zr as e,Ws as f,ne as g,gn as h,Bs as i,p as j,Us as k,Vs as l,Ms as m,qs as n,Ue as o,Gs as p,d as r,No as u}; diff --git a/frontend/dist/assets/useKeyboardNavigation-C5b08Ak3.js b/frontend/dist/assets/useKeyboardNavigation-BRnXQ3uS.js similarity index 97% rename from frontend/dist/assets/useKeyboardNavigation-C5b08Ak3.js rename to frontend/dist/assets/useKeyboardNavigation-BRnXQ3uS.js index 529e3a0b8b..537cdf7996 100644 --- a/frontend/dist/assets/useKeyboardNavigation-C5b08Ak3.js +++ b/frontend/dist/assets/useKeyboardNavigation-BRnXQ3uS.js @@ -1 +1 @@ -import{r as s}from"./index-DJ39NcK9.js";const T=(A={})=>{const{onEscape:f,onEnter:d,onSpace:b,onArrowUp:m,onArrowDown:p,onArrowLeft:k,onArrowRight:E,onTab:w,trapFocus:h=!1,autoFocus:g=!1,disabled:D=!1}=A,l=s.useRef(null),a=s.useRef([]),x=s.useCallback(()=>{if(!l.current)return[];const e=["button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","a[href]:not([disabled])",'[tabindex]:not([tabindex="-1"]):not([disabled])',"summary:not([disabled])"];return Array.from(l.current.querySelectorAll(e.join(","))).filter(t=>{const r=window.getComputedStyle(t);return r.display!=="none"&&r.visibility!=="hidden"})},[]),n=s.useCallback(()=>{a.current=x()},[x]),u=s.useCallback(e=>{if(D)return;const{key:t,shiftKey:r,ctrlKey:c,altKey:o,metaKey:i}=e;if(!((c||o||i)&&t!=="Tab"))switch(t){case"Escape":f&&(e.preventDefault(),f(e));break;case"Enter":d&&(e.preventDefault(),d(e));break;case" ":b&&(e.preventDefault(),b(e));break;case"ArrowUp":m&&(e.preventDefault(),m(e));break;case"ArrowDown":p&&(e.preventDefault(),p(e));break;case"ArrowLeft":k&&(e.preventDefault(),k(e));break;case"ArrowRight":E&&(e.preventDefault(),E(e));break;case"Tab":h&&a.current.length>0&&(e.preventDefault(),C(r)),w&&w(e);break}},[D,f,d,b,m,p,k,E,w,h]),C=s.useCallback(e=>{var i;n();const t=a.current;if(t.length===0)return;const r=document.activeElement,c=t.indexOf(r);let o;e?o=c<=0?t.length-1:c-1:o=c>=t.length-1?0:c+1,(i=t[o])==null||i.focus()},[n]),y=s.useCallback(()=>{var t;n(),(t=a.current[0])==null||t.focus()},[n]),v=s.useCallback(()=>{var t;n();const e=a.current;(t=e[e.length-1])==null||t.focus()},[n]),I=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r>=e.length-1?0:r+1;(o=e[c])==null||o.focus()},[n]),K=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r<=0?e.length-1:r-1;(o=e[c])==null||o.focus()},[n]);return s.useEffect(()=>{const e=l.current;if(e){if(e.addEventListener("keydown",u),g){const t=setTimeout(()=>{y()},100);return()=>{clearTimeout(t),e.removeEventListener("keydown",u)}}return()=>{e.removeEventListener("keydown",u)}}},[u,g,y]),s.useEffect(()=>{n()},[n]),{containerRef:l,focusFirst:y,focusLast:v,focusNext:I,focusPrevious:K,updateFocusableElements:n,getFocusableElements:x}};export{T as u}; +import{r as s}from"./index-Dzr7PBfw.js";const T=(A={})=>{const{onEscape:f,onEnter:d,onSpace:b,onArrowUp:m,onArrowDown:p,onArrowLeft:k,onArrowRight:E,onTab:w,trapFocus:h=!1,autoFocus:g=!1,disabled:D=!1}=A,l=s.useRef(null),a=s.useRef([]),x=s.useCallback(()=>{if(!l.current)return[];const e=["button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","a[href]:not([disabled])",'[tabindex]:not([tabindex="-1"]):not([disabled])',"summary:not([disabled])"];return Array.from(l.current.querySelectorAll(e.join(","))).filter(t=>{const r=window.getComputedStyle(t);return r.display!=="none"&&r.visibility!=="hidden"})},[]),n=s.useCallback(()=>{a.current=x()},[x]),u=s.useCallback(e=>{if(D)return;const{key:t,shiftKey:r,ctrlKey:c,altKey:o,metaKey:i}=e;if(!((c||o||i)&&t!=="Tab"))switch(t){case"Escape":f&&(e.preventDefault(),f(e));break;case"Enter":d&&(e.preventDefault(),d(e));break;case" ":b&&(e.preventDefault(),b(e));break;case"ArrowUp":m&&(e.preventDefault(),m(e));break;case"ArrowDown":p&&(e.preventDefault(),p(e));break;case"ArrowLeft":k&&(e.preventDefault(),k(e));break;case"ArrowRight":E&&(e.preventDefault(),E(e));break;case"Tab":h&&a.current.length>0&&(e.preventDefault(),C(r)),w&&w(e);break}},[D,f,d,b,m,p,k,E,w,h]),C=s.useCallback(e=>{var i;n();const t=a.current;if(t.length===0)return;const r=document.activeElement,c=t.indexOf(r);let o;e?o=c<=0?t.length-1:c-1:o=c>=t.length-1?0:c+1,(i=t[o])==null||i.focus()},[n]),y=s.useCallback(()=>{var t;n(),(t=a.current[0])==null||t.focus()},[n]),v=s.useCallback(()=>{var t;n();const e=a.current;(t=e[e.length-1])==null||t.focus()},[n]),I=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r>=e.length-1?0:r+1;(o=e[c])==null||o.focus()},[n]),K=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r<=0?e.length-1:r-1;(o=e[c])==null||o.focus()},[n]);return s.useEffect(()=>{const e=l.current;if(e){if(e.addEventListener("keydown",u),g){const t=setTimeout(()=>{y()},100);return()=>{clearTimeout(t),e.removeEventListener("keydown",u)}}return()=>{e.removeEventListener("keydown",u)}}},[u,g,y]),s.useEffect(()=>{n()},[n]),{containerRef:l,focusFirst:y,focusLast:v,focusNext:I,focusPrevious:K,updateFocusableElements:n,getFocusableElements:x}};export{T as u}; diff --git a/frontend/dist/index.html b/frontend/dist/index.html index f08f16c4db..843fd67547 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -5,9 +5,9 @@ ENTity app - + - +
diff --git a/frontend/src/components/charts/AverageHeightChart.jsx b/frontend/src/components/charts/AverageHeightChart.jsx index 7c7cd7b6a1..679f0920fc 100644 --- a/frontend/src/components/charts/AverageHeightChart.jsx +++ b/frontend/src/components/charts/AverageHeightChart.jsx @@ -1,25 +1,48 @@ import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts'; import { ChartContainer, ChartHeader, ChartTitle, ChartTooltip } from '../ui/ChartComponents'; +import LoadingSpinner from '../ui/LoadingSpinner'; import { useChartConfig } from '../../hooks/useChartConfig'; +import { useHeightGrowthData } from '../../hooks/useChartData'; -const DEFAULT_DATA = [ - { month: 'Jan', height: 1.2 }, - { month: 'Feb', height: 1.4 }, - { month: 'Mar', height: 1.6 }, - { month: 'Apr', height: 1.8 }, - { month: 'May', height: 2.0 }, - { month: 'Jun', height: 2.2 }, - { month: 'Jul', height: 2.4 }, - { month: 'Aug', height: 2.6 }, - { month: 'Sep', height: 2.8 }, - { month: 'Oct', height: 3.0 }, - { month: 'Nov', height: 3.2 }, - { month: 'Dec', height: 3.4 } -]; - -export const AverageHeightChart = ({ data = DEFAULT_DATA }) => { +export const AverageHeightChart = ({ filters = {} }) => { + const { data: apiData, loading, error } = useHeightGrowthData(filters); + + // Transform API data to chart format + const data = apiData?.chartData?.map(item => ({ + period: item.period, + height: item.species?.reduce((acc, species) => acc + species.avgHeight, 0) / (item.species?.length || 1) || 0 + })) || []; const chartConfig = useChartConfig('line'); + if (loading) { + return ( + + + Average Tree Height Over Time + +
+ +
+
+ ); + } + + if (error) { + return ( + + + Average Tree Height Over Time + +
+
+

Error loading chart data

+

{error}

+
+
+
+ ); + } + return ( @@ -30,14 +53,14 @@ export const AverageHeightChart = ({ data = DEFAULT_DATA }) => { - `Average Height: ${value}m`} />} /> + `Average Height: ${value.toFixed(1)}m`} />} /> { +export const CO2AbsorptionChart = ({ filters = {} }) => { + const { data: apiData, loading, error } = useCO2AbsorptionData(filters); + + // Transform API data to chart format + const data = apiData?.chartData?.map(item => ({ + period: item.period, + co2: item.totalCO2 || 0 + })) || []; const chartConfig = useChartConfig('bar'); + if (loading) { + return ( + + + CO₂ Absorption Over Time + +
+ +
+
+ ); + } + + if (error) { + return ( + + + CO₂ Absorption Over Time + +
+
+

Error loading chart data

+

{error}

+
+
+
+ ); + } + return ( @@ -30,14 +53,14 @@ export const CO2AbsorptionChart = ({ data = DEFAULT_DATA }) => { - `CO₂ Absorption: ${value} tons`} />} /> + `CO₂ Absorption: ${value.toFixed(1)} tons`} />} /> { +export const SurvivalRateChart = ({ filters = {} }) => { + const { data: apiData, loading, error } = useSurvivalRateData(filters); + + // Calculate survival rate from API data or use default + const survivalRate = apiData?.chartData?.length > 0 + ? apiData.chartData[apiData.chartData.length - 1]?.survivalRate || 0 + : 0; + + const data = { + survived: survivalRate, + lost: 100 - survivalRate + }; const chartConfig = useChartConfig('pie'); const chartData = [ { name: 'Survived', value: data.survived, color: '#10b981' }, { name: 'Lost', value: data.lost, color: '#ef4444' } ]; + if (loading) { + return ( + + + Tree Survival Rate + +
+ +
+
+ ); + } + + if (error) { + return ( + + + Tree Survival Rate + +
+
+

Error loading chart data

+

{error}

+
+
+
+ ); + } + return ( @@ -33,7 +75,7 @@ export const SurvivalRateChart = ({ data = { survived: 95.2, lost: 4.8 } }) => { ))} - `${value}%`} />} /> + `${value.toFixed(1)}%`} />} /> diff --git a/frontend/src/components/ui/ExportButton.jsx b/frontend/src/components/ui/ExportButton.jsx index f6965926bb..f93ed70635 100644 --- a/frontend/src/components/ui/ExportButton.jsx +++ b/frontend/src/components/ui/ExportButton.jsx @@ -136,7 +136,7 @@ export const ExportButtonComponent = ({ const [isExporting, setIsExporting] = useState(false); const [statusMessage, setStatusMessage] = useState(null); - const filteredData = data.filter(item => { + const filteredData = Array.isArray(data) ? data.filter(item => { // Apply filters here - for now using basic filtering if (filters.selectedForests && filters.selectedForests.length > 0) { const mockForestId = item.id <= 4 ? 1 : 2; @@ -153,7 +153,7 @@ export const ExportButtonComponent = ({ } return true; - }); + }) : []; const showStatus = (message, type) => { setStatusMessage({ message, type }); @@ -273,7 +273,7 @@ export const ExportButtonComponent = ({ return ( - + {isExporting ? ( <> diff --git a/frontend/src/lib/services/dashboardService.js b/frontend/src/lib/services/dashboardService.js index 239b48d724..5b770bd083 100644 --- a/frontend/src/lib/services/dashboardService.js +++ b/frontend/src/lib/services/dashboardService.js @@ -4,12 +4,12 @@ const apiClient = new ApiClient(); // Dashboard API methods export const dashboardAPI = { - getStats: () => apiClient.get('/dashboard/stats'), + getStats: (params = {}) => apiClient.get('/dashboard/stats', params), }; // Chart API methods export const chartAPI = { - getSurvivalRate: () => apiClient.get('/charts/survival-rate'), - getHeightGrowth: () => apiClient.get('/charts/height-growth'), - getCO2Absorption: () => apiClient.get('/charts/co2-absorption'), + getSurvivalRate: (params = {}) => apiClient.get('/charts/survival-rate', params), + getHeightGrowth: (params = {}) => apiClient.get('/charts/height-growth', params), + getCO2Absorption: (params = {}) => apiClient.get('/charts/co2-absorption', params), }; \ No newline at end of file diff --git a/frontend/src/pages/DashboardPage.jsx b/frontend/src/pages/DashboardPage.jsx index ad5365313c..6edf64d776 100644 --- a/frontend/src/pages/DashboardPage.jsx +++ b/frontend/src/pages/DashboardPage.jsx @@ -6,31 +6,47 @@ import { DashboardHeader } from '../components/ui/DashboardHeader'; import { DashboardSidebar } from '../components/ui/DashboardSidebar'; import { DashboardStatCard } from '../components/ui/DashboardStatCard'; import { ForestOverviewSection } from '../components/ui/ForestOverviewSection'; +import LoadingSpinner from '../components/ui/LoadingSpinner'; import { useSidebarState } from '../hooks/useSidebarState'; +import { useDashboardStats } from '../hooks/useDashboardStats'; +import { useTreeData } from '../hooks/useTreeData'; -// Mock data for export -const mockTreeData = [ - { id: 1, name: 'Tree A-001', species: 'Pine', height: 2.4, health: 'healthy', lat: 59.3293, lng: 18.0686 }, - { id: 2, name: 'Tree A-002', species: 'Oak', height: 2.1, health: 'healthy', lat: 59.3300, lng: 18.0690 }, - { id: 3, name: 'Tree A-003', species: 'Birch', height: 1.8, health: 'warning', lat: 59.3285, lng: 18.0675 }, - { id: 4, name: 'Tree A-004', species: 'Spruce', height: 1.5, health: 'critical', lat: 59.3310, lng: 18.0700 }, - { id: 5, name: 'Tree A-005', species: 'Pine', height: 2.7, health: 'healthy', lat: 59.3275, lng: 18.0660 }, - { id: 6, name: 'Tree A-006', species: 'Oak', height: 2.3, health: 'healthy', lat: 59.3320, lng: 18.0710 }, - { id: 7, name: 'Tree A-007', species: 'Birch', height: 1.9, health: 'warning', lat: 59.3265, lng: 18.0650 }, - { id: 8, name: 'Tree A-008', species: 'Spruce', height: 2.5, health: 'healthy', lat: 59.3330, lng: 18.0720 }, -]; export const DashboardPage = () => { const { sidebarOpen, toggleSidebar, closeSidebar } = useSidebarState(); - // TODO: Consider moving filters state to Zustand store for better global state management const [filters, setFilters] = useState({}); + + // Fetch dashboard statistics with current filters + const { stats, loading: statsLoading, error: statsError, refresh } = useDashboardStats(filters); + + // Fetch tree data for export functionality + const { trees: treeData, loading: treesLoading } = useTreeData(filters); const handleFiltersChange = useCallback((newFilters) => { setFilters(newFilters); - // TODO: Update charts and data based on filters - console.log('Filters changed:', newFilters); }, []); + // Helper functions for formatting data + const formatNumber = (num) => { + if (!num) return '0'; + return num.toLocaleString(); + }; + + const formatPercentage = (num) => { + if (!num) return '0%'; + return `${num.toFixed(1)}%`; + }; + + const formatHeight = (num) => { + if (!num) return '0m'; + return `${num.toFixed(1)}m`; + }; + + const formatCO2 = (num) => { + if (!num) return '0t'; + return `${num.toFixed(1)}t`; + }; + const handleExportStart = () => { console.log('Export started'); }; @@ -65,9 +81,10 @@ export const DashboardPage = () => {
{ {/* Stats Cards */} -
- - - - } - title="Total Trees" - value="10,247" - color="green" - /> - - - - } - title="Survival Rate" - value="95.2%" - color="blue" - /> - - - - } - title="Avg Height" - value="2.4m" - color="yellow" - /> - - - - } - title="CO₂ Absorbed" - value="1.2t" - color="purple" - /> -
+ {statsLoading ? ( +
+ +
+ ) : statsError ? ( +
+

Error loading dashboard statistics: {statsError}

+ +
+ ) : ( +
+ + + + } + title="Total Trees" + value={formatNumber(stats?.overview?.totalTrees)} + color="green" + /> + + + + } + title="Survival Rate" + value={formatPercentage(stats?.overview?.survivalRate)} + color="blue" + /> + + + + } + title="Avg Height" + value={formatHeight(stats?.height?.average)} + color="yellow" + /> + + + + } + title="CO₂ Absorbed" + value={formatCO2(stats?.co2?.totalAbsorption)} + color="purple" + /> +
+ )} {/* Charts Grid */}
- +
- +
- +
From 389c0db43b2b74f76a9356b81b788548132f2f89 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 21:57:09 +0200 Subject: [PATCH 043/111] Trying to fix login auth --- frontend/src/lib/core/ApiClient.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/lib/core/ApiClient.js b/frontend/src/lib/core/ApiClient.js index 2ee01e9c68..e3625e0537 100644 --- a/frontend/src/lib/core/ApiClient.js +++ b/frontend/src/lib/core/ApiClient.js @@ -30,6 +30,7 @@ export class ApiClient { const response = await fetch(url, { ...config, signal: controller.signal, + credentials: 'include', // Required for CORS with authentication }); clearTimeout(timeoutId); From ac6eb5205937ed2a312175141d2c049543f86cdf Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 22:49:05 +0200 Subject: [PATCH 044/111] debugging CORS-issues --- backend/server.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backend/server.js b/backend/server.js index 0ef85afb89..273f631535 100644 --- a/backend/server.js +++ b/backend/server.js @@ -120,10 +120,12 @@ io.on('connection', (socket) => { global.io = io; global.realtimeController = realtimeController; -// CORS configuration for production +// CORS configuration - simplified for debugging app.use(cors({ - origin: allowedOrigins, - credentials: true + origin: true, // Allow all origins temporarily + credentials: true, + methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], + allowedHeaders: ['Content-Type', 'Authorization'] })); app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); From bf05594a27e0d0bc97946582aca01f62e46300e9 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Thu, 17 Jul 2025 22:56:23 +0200 Subject: [PATCH 045/111] Login should be fixed again. --- frontend/src/lib/core/ApiClient.js | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/lib/core/ApiClient.js b/frontend/src/lib/core/ApiClient.js index e3625e0537..2ee01e9c68 100644 --- a/frontend/src/lib/core/ApiClient.js +++ b/frontend/src/lib/core/ApiClient.js @@ -30,7 +30,6 @@ export class ApiClient { const response = await fetch(url, { ...config, signal: controller.signal, - credentials: 'include', // Required for CORS with authentication }); clearTimeout(timeoutId); From e9df2da06196200d07f06ed8adf57db123fcc6d8 Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Wed, 6 Aug 2025 11:45:04 +0200 Subject: [PATCH 046/111] Fixed functionality for the map and export --- backend/config/swagger/schemas/newSchemas.js | 416 +++++++++++++++++++ backend/routes/auth.js | 8 +- backend/routes/bulk.js | 6 +- backend/routes/charts.js | 6 +- backend/routes/dashboard.js | 6 +- backend/routes/realtime.js | 8 +- backend/routes/uploads.js | 4 +- backend/routes/users.js | 10 +- 8 files changed, 440 insertions(+), 24 deletions(-) create mode 100644 backend/config/swagger/schemas/newSchemas.js diff --git a/backend/config/swagger/schemas/newSchemas.js b/backend/config/swagger/schemas/newSchemas.js new file mode 100644 index 0000000000..8ce2dafc07 --- /dev/null +++ b/backend/config/swagger/schemas/newSchemas.js @@ -0,0 +1,416 @@ +// Potential schemas to add to the model in the future. + +// 1. FOREST ENHANCEMENTS +const forestSchemaAdditions = { + isPlantation: { + type: Boolean, + required: true, + default: false // false = farmer forest, true = plantation + }, + + // Financial tracking + financials: { + acquisitionCost: Number, + acquisitionDate: Date, + currentValue: Number, + lastValuationDate: Date, + maintenanceBudget: { + annual: Number, + allocated: Number, + spent: Number + } + }, + + // Environmental monitoring + environmental: { + waterSources: [{ + type: { + type: String, + enum: ['river', 'stream', 'pond', 'lake', 'wetland'] + }, + name: String, + coordinates: { + type: 'Point', + coordinates: [Number] + }, + quality: { + type: String, + enum: ['excellent', 'good', 'fair', 'poor'] + } + }], + fireRisk: { + current: { + type: String, + enum: ['low', 'moderate', 'high', 'extreme'] + }, + lastAssessment: Date + }, + pestInfestation: [{ + pestType: String, + severity: { + type: String, + enum: ['none', 'minor', 'moderate', 'severe'] + }, + affectedArea: Number, // in hectares + discoveredDate: Date, + treatmentApplied: String, + status: { + type: String, + enum: ['active', 'treated', 'resolved'] + } + }] + }, + + // Carbon tracking + carbonMetrics: { + totalCarbonStored: Number, // tons + annualSequestration: Number, // tons/year + carbonCredits: { + issued: Number, + sold: Number, + available: Number, + pricePerCredit: Number + }, + lastCalculation: Date + }, + + // Access and infrastructure + infrastructure: { + roads: [{ + name: String, + type: { + type: String, + enum: ['paved', 'gravel', 'dirt', 'trail'] + }, + length: Number, // km + condition: { + type: String, + enum: ['excellent', 'good', 'fair', 'poor'] + }, + lastMaintenance: Date + }], + facilities: [{ + type: { + type: String, + enum: ['office', 'storage', 'equipment_shed', 'observation_tower', 'rest_area'] + }, + name: String, + coordinates: { + type: 'Point', + coordinates: [Number] + }, + condition: String, + builtDate: Date + }], + closestPort: { + name: String, + distance: Number, // km + coordinates: { + type: 'Point', + coordinates: [Number] + }, + accessType: { + type: String, + enum: ['road', 'rail', 'water', 'mixed'] + } + } + }, + + // Harvesting plans + harvestPlan: { + zones: [{ + name: String, + area: Number, + plannedHarvestYear: Number, + sustainabilityRating: String, + estimatedYield: { + volume: Number, // cubic meters + value: Number // estimated monetary value + } + }], + certifications: [{ + type: { + type: String, + enum: ['FSC', 'PEFC', 'ISO14001', 'Other'] + }, + certificationNumber: String, + issuedDate: Date, + expiryDate: Date, + status: { + type: String, + enum: ['active', 'expired', 'pending_renewal'] + } + }] + } +}; + +// 2. TREE ENHANCEMENTS +const treeSchemaAdditions = { + // Genetic/source tracking + genetics: { + seedSource: String, + cultivar: String, + parentTreeId: String, + geneticDiversity: { + type: String, + enum: ['native', 'improved', 'hybrid', 'exotic'] + } + }, + + // Growth predictions + growthModel: { + expectedHeightAt15Years: Number, + expectedDiameterAt15Years: Number, + growthRate: { + type: String, + enum: ['slow', 'moderate', 'fast'] + }, + siteIndex: Number // productivity measure + }, + + // Maintenance history + maintenance: { + fertilization: [{ + date: Date, + type: String, + amount: Number, + appliedBy: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User' + } + }], + pestControl: [{ + date: Date, + pestType: String, + treatment: String, + effectiveness: { + type: String, + enum: ['successful', 'partial', 'unsuccessful'] + } + }], + damageReports: [{ + date: Date, + type: { + type: String, + enum: ['wind', 'snow', 'animal', 'disease', 'human', 'fire'] + }, + severity: { + type: String, + enum: ['minor', 'moderate', 'severe'] + }, + description: String, + photoUrls: [String] + }] + }, + + // Economic value + economicValue: { + currentTimberValue: Number, + carbonCreditValue: Number, + lastValuation: Date + } +}; + +// 3. OWNER ENHANCEMENTS +const ownerSchemaAdditions = { + // Organization details + organizationType: { + type: String, + enum: ['government', 'private_company', 'ngo', 'individual', 'cooperative'] + }, + + // Certifications and compliance + certifications: [{ + type: String, + issuedDate: Date, + expiryDate: Date, + issuingBody: String + }], + + // Financial information + financials: { + annualRevenue: Number, + totalForestValue: Number, + insurancePolicies: [{ + provider: String, + policyNumber: String, + coverage: String, + annualPremium: Number, + expiryDate: Date + }] + }, + + // Sustainability goals + sustainabilityGoals: { + carbonNeutralTarget: Date, + biodiversityTargets: [{ + metric: String, + target: Number, + deadline: Date + }], + communityEngagement: { + localEmployees: Number, + educationPrograms: Number, + publicAccessAreas: Number + } + } +}; + +// 4. NEW MODEL: ACTIVITY LOG +const activityLogSchema = new mongoose.Schema({ + forestId: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Forest', + required: true + }, + activityType: { + type: String, + enum: ['planting', 'harvesting', 'maintenance', 'inspection', 'treatment', 'incident', 'certification'], + required: true + }, + description: { + type: String, + required: true + }, + performedBy: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + required: true + }, + date: { + type: Date, + default: Date.now + }, + affectedTrees: [{ + type: mongoose.Schema.Types.ObjectId, + ref: 'Tree' + }], + costs: { + labor: Number, + materials: Number, + equipment: Number, + total: Number + }, + results: String, + photos: [String], + weatherConditions: { + temperature: Number, + precipitation: String, + windSpeed: Number + }, + metadata: { + type: Map, + of: mongoose.Schema.Types.Mixed + } +}, { + timestamps: true +}); + +// 5. NEW MODEL: WEATHER STATION +const weatherStationSchema = new mongoose.Schema({ + forestId: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Forest', + required: true + }, + stationId: { + type: String, + unique: true, + required: true + }, + location: { + type: { + type: String, + enum: ['Point'], + default: 'Point' + }, + coordinates: { + type: [Number], + required: true + } + }, + readings: [{ + timestamp: Date, + temperature: Number, + humidity: Number, + rainfall: Number, + windSpeed: Number, + windDirection: Number, + soilMoisture: Number, + solarRadiation: Number + }], + alerts: [{ + type: { + type: String, + enum: ['fire_risk', 'frost', 'drought', 'storm', 'pest_conditions'] + }, + severity: { + type: String, + enum: ['low', 'medium', 'high', 'critical'] + }, + message: String, + timestamp: Date, + active: Boolean + }] +}, { + timestamps: true +}); + +// 6. NEW MODEL: INVENTORY REPORT +const inventoryReportSchema = new mongoose.Schema({ + forestId: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Forest', + required: true + }, + reportDate: { + type: Date, + required: true + }, + conductedBy: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + required: true + }, + summary: { + totalTrees: Number, + healthyTrees: Number, + damagedTrees: Number, + deadTrees: Number, + averageHeight: Number, + averageDiameter: Number, + estimatedVolume: Number, // cubic meters + estimatedValue: Number + }, + speciesBreakdown: [{ + species: String, + count: Number, + percentage: Number, + averageHeight: Number, + averageDiameter: Number, + healthDistribution: { + excellent: Number, + good: Number, + fair: Number, + poor: Number + } + }], + recommendations: [{ + priority: { + type: String, + enum: ['low', 'medium', 'high', 'urgent'] + }, + category: String, + description: String, + estimatedCost: Number, + deadline: Date + }], + comparisonWithLastReport: { + growthRate: Number, // percentage + mortalityRate: Number, + healthImprovement: Number, + valueChange: Number + } +}, { + timestamps: true +}); \ No newline at end of file diff --git a/backend/routes/auth.js b/backend/routes/auth.js index 14537c5505..57b5841cf0 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -14,7 +14,7 @@ import { validateProfileUpdate } from '../middleware/validation.js'; import { authenticateToken } from '../middleware/auth.js'; -// import { authLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT +import { authLimiter } from '../middleware/rateLimiter.js'; const router = express.Router(); @@ -86,7 +86,7 @@ const router = express.Router(); * 429: * description: Too many requests */ -router.post('/register', /* authLimiter, */ validateRegister, register); // Rate limiting temporarily disabled +router.post('/register', authLimiter, validateRegister, register); /** * @swagger @@ -135,7 +135,7 @@ router.post('/register', /* authLimiter, */ validateRegister, register); // Rate * 429: * description: Too many requests */ -router.post('/login', /* authLimiter, */ validateLogin, login); // Rate limiting temporarily disabled +router.post('/login', authLimiter, validateLogin, login); /** @@ -203,7 +203,7 @@ router.post('/logout', logout); * 401: * description: Invalid refresh token */ -router.post('/refresh', /* authLimiter, */ refreshToken); // Rate limiting temporarily disabled +router.post('/refresh', authLimiter, refreshToken); /** * @swagger diff --git a/backend/routes/bulk.js b/backend/routes/bulk.js index e96f136ccc..594425dc97 100644 --- a/backend/routes/bulk.js +++ b/backend/routes/bulk.js @@ -7,7 +7,7 @@ import { getBulkOperationStatus } from '../controllers/bulkController.js'; import { authenticateToken, requireAdmin } from '../middleware/auth.js'; -// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT +import { dataLimiter } from '../middleware/rateLimiter.js'; import { emitUserActivity } from '../middleware/realtimeEvents.js'; const router = express.Router(); @@ -15,8 +15,8 @@ const router = express.Router(); // All bulk routes require authentication router.use(authenticateToken); -// Apply rate limiting - TEMPORARILY DISABLED FOR DEVELOPMENT -// router.use(dataLimiter); +// Apply rate limiting +router.use(dataLimiter); // Apply user activity tracking router.use(emitUserActivity); diff --git a/backend/routes/charts.js b/backend/routes/charts.js index 5ad6ac1c57..704a7e7594 100644 --- a/backend/routes/charts.js +++ b/backend/routes/charts.js @@ -7,15 +7,15 @@ import { getCombinedChartData } from '../controllers/chartController.js'; import { authenticateToken } from '../middleware/auth.js'; -// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT +import { dataLimiter } from '../middleware/rateLimiter.js'; const router = express.Router(); // All chart routes require authentication router.use(authenticateToken); -// Apply data rate limiting - TEMPORARILY DISABLED FOR DEVELOPMENT -// router.use(dataLimiter); +// Apply data rate limiting +router.use(dataLimiter); /** * @swagger diff --git a/backend/routes/dashboard.js b/backend/routes/dashboard.js index 21cd5aaf7e..f74cc5b681 100644 --- a/backend/routes/dashboard.js +++ b/backend/routes/dashboard.js @@ -5,15 +5,15 @@ import { getForestComparison } from '../controllers/dashboardController.js'; import { authenticateToken } from '../middleware/auth.js'; -// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT +import { dataLimiter } from '../middleware/rateLimiter.js'; const router = express.Router(); // All dashboard routes require authentication router.use(authenticateToken); -// Apply data rate limiting to prevent abuse - TEMPORARILY DISABLED FOR DEVELOPMENT -// router.use(dataLimiter); +// Apply data rate limiting to prevent abuse +router.use(dataLimiter); /** * @swagger diff --git a/backend/routes/realtime.js b/backend/routes/realtime.js index 6de44f3301..9416fdf457 100644 --- a/backend/routes/realtime.js +++ b/backend/routes/realtime.js @@ -1,7 +1,7 @@ import express from 'express'; import { authenticateToken } from '../middleware/auth.js'; import { setupSSE } from '../middleware/realtimeEvents.js'; -// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT +import { dataLimiter } from '../middleware/rateLimiter.js'; const router = express.Router(); @@ -49,7 +49,7 @@ router.use(authenticateToken); * rooms: * type: integer */ -router.get('/connection-stats', /* dataLimiter, */ (req, res) => { +router.get('/connection-stats', dataLimiter, (req, res) => { try { if (!global.realtimeController) { return res.status(503).json({ @@ -118,7 +118,7 @@ router.get('/connection-stats', /* dataLimiter, */ (req, res) => { * 403: * description: Admin privileges required */ -router.post('/broadcast', /* dataLimiter, */ (req, res) => { +router.post('/broadcast', dataLimiter, (req, res) => { try { // Only admin users can broadcast system notifications if (req.user.role !== 'admin') { @@ -306,7 +306,7 @@ router.get('/events', setupSSE, (req, res) => { * 200: * description: Test event sent successfully */ -router.post('/test-event', /* dataLimiter, */ (req, res) => { +router.post('/test-event', dataLimiter, (req, res) => { try { if (req.user.role !== 'admin') { return res.status(403).json({ diff --git a/backend/routes/uploads.js b/backend/routes/uploads.js index 30a205d6fc..bcbd55e2f5 100644 --- a/backend/routes/uploads.js +++ b/backend/routes/uploads.js @@ -10,7 +10,7 @@ import { } from '../controllers/uploadController.js'; import { authenticateToken } from '../middleware/auth.js'; import { upload, handleUploadError } from '../middleware/upload.js'; -// import { dataLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT +import { dataLimiter } from '../middleware/rateLimiter.js'; import { emitImageUpload, emitUserActivity } from '../middleware/realtimeEvents.js'; const router = express.Router(); @@ -19,7 +19,7 @@ const router = express.Router(); router.use(authenticateToken); // Apply rate limiting -// router.use(dataLimiter); // TEMPORARILY DISABLED FOR DEVELOPMENT +router.use(dataLimiter); /** * @swagger diff --git a/backend/routes/users.js b/backend/routes/users.js index 24cff38d33..224ee563ea 100644 --- a/backend/routes/users.js +++ b/backend/routes/users.js @@ -13,7 +13,7 @@ import { validateUserUpdate } from '../middleware/validation.js'; import { authenticateToken, requireAdmin } from '../middleware/auth.js'; -// import { adminLimiter } from '../middleware/rateLimiter.js'; // TEMPORARILY DISABLED FOR DEVELOPMENT +import { adminLimiter } from '../middleware/rateLimiter.js'; const router = express.Router(); @@ -26,11 +26,11 @@ router.get('/statistics', getUserStatistics); // User CRUD operations router.get('/', getAllUsers); router.get('/:id', getUserById); -router.post('/', /* adminLimiter, */ validateUserCreate, createUser); -router.put('/:id', /* adminLimiter, */ validateUserUpdate, updateUser); -router.delete('/:id', /* adminLimiter, */ deleteUser); +router.post('/', adminLimiter, validateUserCreate, createUser); +router.put('/:id', adminLimiter, validateUserUpdate, updateUser); +router.delete('/:id', adminLimiter, deleteUser); // User token management -router.post('/:id/revoke-tokens', /* adminLimiter, */ revokeUserTokens); +router.post('/:id/revoke-tokens', adminLimiter, revokeUserTokens); export default router; \ No newline at end of file From b7ab9df6f756c2e31baa2e183ee2928b9321cfbc Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Wed, 6 Aug 2025 12:00:50 +0200 Subject: [PATCH 047/111] Fixed the map view, got it working again --- ...Page-DQw11YmQ.js => AdminPage-BfI5jmjy.js} | 2 +- ...Udy75Zt.js => ChartComponents-DOzzJtP4.js} | 2 +- ...DNnaM-T2.js => DarkModeToggle-Cu0JyOh5.js} | 2 +- .../dist/assets/DashboardPage-BXlBG99y.js | 69 ----- .../dist/assets/DashboardPage-DOe_EIif.js | 66 +++++ frontend/dist/assets/ErrorPages-CFbRbfCl.js | 1 + frontend/dist/assets/ErrorPages-pitdcj5q.js | 1 - frontend/dist/assets/ExportButton-BryKwkQ4.js | 107 +++++++ frontend/dist/assets/ExportButton-BvRt6B34.js | 215 -------------- frontend/dist/assets/FilterHeader-CBw4AnG_.js | 276 ----------------- ...s-RQ7qOmSO.js => FormElements-BsiOcVAQ.js} | 2 +- ...ton-CsSKj4cW.js => IconButton-vDjz_WRZ.js} | 2 +- frontend/dist/assets/LandingPage-BfmN78ZN.js | 1 + frontend/dist/assets/LandingPage-Dc2ID8Hk.js | 1 - ...Page-LyjmzT4O.js => LoginPage-b5sbaCb6.js} | 2 +- frontend/dist/assets/MapPage-BV2c4X5p.js | 119 -------- frontend/dist/assets/MapPage-DVu2-W4J.js | 113 +++++++ frontend/dist/assets/MapSidebar-DZT3HTLm.js | 194 ------------ ...out-Cc_P7nbu.js => MapSidebar-jstr5dKK.js} | 50 +++- ...{Navbar-BJVIhaUA.js => Navbar-BSLKvp05.js} | 2 +- ...-BcWvIN9N.js => PasswordInput-Bff6SLQJ.js} | 2 +- ...e-D_5fYFtm.js => RegisterPage-Cf4V_AZ4.js} | 2 +- .../{Table-CZfmBv9T.js => Table-CfKObwuM.js} | 2 +- .../dist/assets/TreeDetailModal-DPmuOlrX.js | 180 +++++++++++ .../dist/assets/TreeDetailPage-BIoNlDES.js | 8 + .../dist/assets/TreeDetailPage-De7lDWqg.js | 8 - frontend/dist/assets/index-3rMZFSc5.css | 1 + frontend/dist/assets/index-CGkKx7Xv.js | 189 ++++++++++++ frontend/dist/assets/index-CnE9ecPt.css | 1 - frontend/dist/assets/index-Dzr7PBfw.js | 189 ------------ ...S.js => useKeyboardNavigation-Bh0nMcUg.js} | 2 +- .../dist/assets/useSidebarState-Ctkpd6zX.js | 279 ++++++++++++++++++ ...xYr1F.css => useSidebarState-DdjxYr1F.css} | 0 frontend/dist/index.html | 20 +- frontend/index.html | 16 + frontend/src/components/map/ForestMap.jsx | 43 +-- frontend/src/components/ui/ExportButton.jsx | 108 +++---- frontend/src/components/ui/MapPageHeader.jsx | 14 +- .../components/ui/MapPageHeaderSection.jsx | 4 +- frontend/src/components/ui/MapSidebar.jsx | 16 +- frontend/src/contexts/DarkModeContext.jsx | 54 +++- frontend/src/lib/core/ApiClient.js | 38 +++ frontend/src/lib/services/dataService.js | 7 +- frontend/src/pages/DashboardPage.jsx | 3 - frontend/src/pages/MapPage.jsx | 191 +++++++----- 45 files changed, 1308 insertions(+), 1296 deletions(-) rename frontend/dist/assets/{AdminPage-DQw11YmQ.js => AdminPage-BfI5jmjy.js} (98%) rename frontend/dist/assets/{ChartComponents-CUdy75Zt.js => ChartComponents-DOzzJtP4.js} (96%) rename frontend/dist/assets/{DarkModeToggle-DNnaM-T2.js => DarkModeToggle-Cu0JyOh5.js} (85%) delete mode 100644 frontend/dist/assets/DashboardPage-BXlBG99y.js create mode 100644 frontend/dist/assets/DashboardPage-DOe_EIif.js create mode 100644 frontend/dist/assets/ErrorPages-CFbRbfCl.js delete mode 100644 frontend/dist/assets/ErrorPages-pitdcj5q.js create mode 100644 frontend/dist/assets/ExportButton-BryKwkQ4.js delete mode 100644 frontend/dist/assets/ExportButton-BvRt6B34.js delete mode 100644 frontend/dist/assets/FilterHeader-CBw4AnG_.js rename frontend/dist/assets/{FormElements-RQ7qOmSO.js => FormElements-BsiOcVAQ.js} (98%) rename frontend/dist/assets/{IconButton-CsSKj4cW.js => IconButton-vDjz_WRZ.js} (65%) create mode 100644 frontend/dist/assets/LandingPage-BfmN78ZN.js delete mode 100644 frontend/dist/assets/LandingPage-Dc2ID8Hk.js rename frontend/dist/assets/{LoginPage-LyjmzT4O.js => LoginPage-b5sbaCb6.js} (96%) delete mode 100644 frontend/dist/assets/MapPage-BV2c4X5p.js create mode 100644 frontend/dist/assets/MapPage-DVu2-W4J.js delete mode 100644 frontend/dist/assets/MapSidebar-DZT3HTLm.js rename frontend/dist/assets/{TreeDetailLayout-Cc_P7nbu.js => MapSidebar-jstr5dKK.js} (68%) rename frontend/dist/assets/{Navbar-BJVIhaUA.js => Navbar-BSLKvp05.js} (90%) rename frontend/dist/assets/{PasswordInput-BcWvIN9N.js => PasswordInput-Bff6SLQJ.js} (97%) rename frontend/dist/assets/{RegisterPage-D_5fYFtm.js => RegisterPage-Cf4V_AZ4.js} (97%) rename frontend/dist/assets/{Table-CZfmBv9T.js => Table-CfKObwuM.js} (97%) create mode 100644 frontend/dist/assets/TreeDetailModal-DPmuOlrX.js create mode 100644 frontend/dist/assets/TreeDetailPage-BIoNlDES.js delete mode 100644 frontend/dist/assets/TreeDetailPage-De7lDWqg.js create mode 100644 frontend/dist/assets/index-3rMZFSc5.css create mode 100644 frontend/dist/assets/index-CGkKx7Xv.js delete mode 100644 frontend/dist/assets/index-CnE9ecPt.css delete mode 100644 frontend/dist/assets/index-Dzr7PBfw.js rename frontend/dist/assets/{useKeyboardNavigation-BRnXQ3uS.js => useKeyboardNavigation-Bh0nMcUg.js} (97%) create mode 100644 frontend/dist/assets/useSidebarState-Ctkpd6zX.js rename frontend/dist/assets/{FilterHeader-DdjxYr1F.css => useSidebarState-DdjxYr1F.css} (100%) diff --git a/frontend/dist/assets/AdminPage-DQw11YmQ.js b/frontend/dist/assets/AdminPage-BfI5jmjy.js similarity index 98% rename from frontend/dist/assets/AdminPage-DQw11YmQ.js rename to frontend/dist/assets/AdminPage-BfI5jmjy.js index 8bd37be2b9..ebb36d1d6c 100644 --- a/frontend/dist/assets/AdminPage-DQw11YmQ.js +++ b/frontend/dist/assets/AdminPage-BfI5jmjy.js @@ -1,4 +1,4 @@ -import{j as e,n as k,r as d,e as I,u as v,d as a,N as E}from"./index-Dzr7PBfw.js";import{E as y,T as M,a as N,b as S,c as T,d as m,S as O,e as P,f as D,g as U}from"./Table-CZfmBv9T.js";import{F as _,S as W,a as z,A as H,P as B}from"./FormElements-RQ7qOmSO.js";import"./vendor-BtP0CW_r.js";const p={CREATE:"CREATE",UPDATE:"UPDATE",DELETE:"DELETE",LOGIN:"LOGIN",LOGOUT:"LOGOUT"},F=[{value:"",label:"All Actions"},{value:p.CREATE,label:"Create"},{value:p.UPDATE,label:"Update"},{value:p.DELETE,label:"Delete"},{value:p.LOGIN,label:"Login"},{value:p.LOGOUT,label:"Logout"}],w=10,R=({searchTerm:t,setSearchTerm:s,actionFilter:r,setActionFilter:o})=>e.jsxs(_,{children:[e.jsx(W,{type:"text",placeholder:"Search by user, action, or details...",value:t,onChange:n=>s(n.target.value)}),e.jsx(z,{value:r,onChange:n=>o(n.target.value),children:F.map(n=>e.jsx("option",{value:n.value,children:n.label},n.value))})]}),G={ASC:"asc"},f={NONE:"⇅",ASC:"↑",DESC:"↓"},Z=(t,s,r)=>s!==t?f.NONE:r===G.ASC?f.ASC:f.DESC,A=({field:t,sortField:s,sortDirection:r,onSort:o,children:n})=>e.jsxs(T,{onClick:()=>o(t),children:[n," ",e.jsx(O,{children:Z(t,s,r)})]}),K=({sortField:t,sortDirection:s,onSort:r})=>e.jsx(N,{children:e.jsxs(S,{children:[e.jsx(A,{field:"timestamp",sortField:t,sortDirection:s,onSort:r,children:"Timestamp"}),e.jsx(A,{field:"user",sortField:t,sortDirection:s,onSort:r,children:"User"}),e.jsx(A,{field:"action",sortField:t,sortDirection:s,onSort:r,children:"Action"}),e.jsx(A,{field:"resource",sortField:t,sortDirection:s,onSort:r,children:"Resource"}),e.jsx(T,{children:"Details"}),e.jsx(T,{children:"IP Address"})]})}),V=({log:t})=>e.jsxs(S,{children:[e.jsx(m,{children:k(t.timestamp)}),e.jsx(m,{children:t.user}),e.jsx(m,{children:e.jsx(H,{action:t.action,children:t.action})}),e.jsx(m,{children:t.resource}),e.jsx(m,{children:t.details}),e.jsx(m,{children:t.ipAddress})]},t.id),X=({logs:t,sortField:s,sortDirection:r,onSort:o})=>t.length===0?e.jsx(y,{children:e.jsx("p",{children:"No audit logs found matching your criteria."})}):e.jsxs(M,{children:[e.jsx(K,{sortField:s,sortDirection:r,onSort:o}),e.jsx("tbody",{children:t.map(n=>e.jsx(V,{log:n},n.id))})]}),$=[{id:1,timestamp:"2024-01-15T10:30:00Z",user:"admin@nanwa.com",action:"CREATE",resource:"Tree",resourceId:"tree_001",details:"Created new tree record for Forest A",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:2,timestamp:"2024-01-15T10:25:00Z",user:"user@nanwa.com",action:"UPDATE",resource:"Tree",resourceId:"tree_002",details:"Updated height measurement from 2.3m to 2.4m",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:3,timestamp:"2024-01-15T10:20:00Z",user:"admin@nanwa.com",action:"DELETE",resource:"Forest",resourceId:"forest_003",details:"Deleted forest record due to data cleanup",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:4,timestamp:"2024-01-15T10:15:00Z",user:"user@nanwa.com",action:"LOGIN",resource:"Authentication",resourceId:"auth_session_001",details:"User logged in successfully",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:5,timestamp:"2024-01-15T10:10:00Z",user:"admin@nanwa.com",action:"UPDATE",resource:"User",resourceId:"user_001",details:"Updated user permissions to admin level",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:6,timestamp:"2024-01-15T10:05:00Z",user:"system",action:"CREATE",resource:"Measurement",resourceId:"measurement_001",details:"Automated measurement recorded for tree batch",ipAddress:"127.0.0.1",userAgent:"System/1.0"},{id:7,timestamp:"2024-01-15T10:00:00Z",user:"user@nanwa.com",action:"LOGOUT",resource:"Authentication",resourceId:"auth_session_002",details:"User logged out",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}],q=()=>{const[t,s]=d.useState([]),[r,o]=d.useState(!1),n=async()=>{o(!0);try{await new Promise(i=>setTimeout(i,500)),s($)}catch(i){console.error("Failed to fetch audit logs:",i)}finally{o(!1)}};return d.useEffect(()=>{n()},[]),{auditLogs:t,loading:r,refetchAuditLogs:n}},J=t=>{const[s,r]=d.useState(""),[o,n]=d.useState(""),[i,h]=d.useState("timestamp"),[l,g]=d.useState("desc"),b=d.useMemo(()=>t.filter(c=>{const x=s===""||c.user.toLowerCase().includes(s.toLowerCase())||c.details.toLowerCase().includes(s.toLowerCase())||c.resource.toLowerCase().includes(s.toLowerCase()),u=o===""||c.action===o;return x&&u}).sort((c,x)=>{const u=c[i],j=x[i];return l==="asc"?u>j?1:-1:u{i===c?g(l==="asc"?"desc":"asc"):(h(c),g("desc"))}}},Q=(t,s=w)=>{const[r,o]=d.useState(1),n=Math.ceil(t.length/s),i=(r-1)*s,h=t.slice(i,i+s);return d.useEffect(()=>{o(1)},[t.length]),{currentPage:r,setCurrentPage:o,totalPages:n,startIndex:i,paginatedData:h,pageSize:s}},Y=()=>{const{auditLogs:t,loading:s}=q(),{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i,sortField:h,sortDirection:l,filteredAndSortedLogs:g,handleSort:b}=J(t),{currentPage:L,setCurrentPage:c,totalPages:x,startIndex:u,paginatedData:j,pageSize:C}=Q(g,w);return e.jsxs(P,{children:[e.jsxs(D,{children:[e.jsx(U,{children:"Audit Log"}),e.jsx(R,{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i})]}),s?e.jsx(I,{text:"Loading audit logs..."}):e.jsx(X,{logs:j,sortField:h,sortDirection:l,onSort:b}),e.jsx(B,{currentPage:L,totalPages:x,startIndex:u,pageSize:C,totalItems:g.length,onPageChange:c})]})},ee=a.header` +import{j as e,n as k,r as d,e as I,u as v,d as a,N as E}from"./index-CGkKx7Xv.js";import{E as y,T as M,a as N,b as S,c as T,d as m,S as O,e as P,f as D,g as U}from"./Table-CfKObwuM.js";import{F as _,S as W,a as z,A as H,P as B}from"./FormElements-BsiOcVAQ.js";import"./vendor-BtP0CW_r.js";const p={CREATE:"CREATE",UPDATE:"UPDATE",DELETE:"DELETE",LOGIN:"LOGIN",LOGOUT:"LOGOUT"},F=[{value:"",label:"All Actions"},{value:p.CREATE,label:"Create"},{value:p.UPDATE,label:"Update"},{value:p.DELETE,label:"Delete"},{value:p.LOGIN,label:"Login"},{value:p.LOGOUT,label:"Logout"}],w=10,R=({searchTerm:t,setSearchTerm:s,actionFilter:r,setActionFilter:o})=>e.jsxs(_,{children:[e.jsx(W,{type:"text",placeholder:"Search by user, action, or details...",value:t,onChange:n=>s(n.target.value)}),e.jsx(z,{value:r,onChange:n=>o(n.target.value),children:F.map(n=>e.jsx("option",{value:n.value,children:n.label},n.value))})]}),G={ASC:"asc"},f={NONE:"⇅",ASC:"↑",DESC:"↓"},Z=(t,s,r)=>s!==t?f.NONE:r===G.ASC?f.ASC:f.DESC,A=({field:t,sortField:s,sortDirection:r,onSort:o,children:n})=>e.jsxs(T,{onClick:()=>o(t),children:[n," ",e.jsx(O,{children:Z(t,s,r)})]}),K=({sortField:t,sortDirection:s,onSort:r})=>e.jsx(N,{children:e.jsxs(S,{children:[e.jsx(A,{field:"timestamp",sortField:t,sortDirection:s,onSort:r,children:"Timestamp"}),e.jsx(A,{field:"user",sortField:t,sortDirection:s,onSort:r,children:"User"}),e.jsx(A,{field:"action",sortField:t,sortDirection:s,onSort:r,children:"Action"}),e.jsx(A,{field:"resource",sortField:t,sortDirection:s,onSort:r,children:"Resource"}),e.jsx(T,{children:"Details"}),e.jsx(T,{children:"IP Address"})]})}),V=({log:t})=>e.jsxs(S,{children:[e.jsx(m,{children:k(t.timestamp)}),e.jsx(m,{children:t.user}),e.jsx(m,{children:e.jsx(H,{action:t.action,children:t.action})}),e.jsx(m,{children:t.resource}),e.jsx(m,{children:t.details}),e.jsx(m,{children:t.ipAddress})]},t.id),X=({logs:t,sortField:s,sortDirection:r,onSort:o})=>t.length===0?e.jsx(y,{children:e.jsx("p",{children:"No audit logs found matching your criteria."})}):e.jsxs(M,{children:[e.jsx(K,{sortField:s,sortDirection:r,onSort:o}),e.jsx("tbody",{children:t.map(n=>e.jsx(V,{log:n},n.id))})]}),$=[{id:1,timestamp:"2024-01-15T10:30:00Z",user:"admin@nanwa.com",action:"CREATE",resource:"Tree",resourceId:"tree_001",details:"Created new tree record for Forest A",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:2,timestamp:"2024-01-15T10:25:00Z",user:"user@nanwa.com",action:"UPDATE",resource:"Tree",resourceId:"tree_002",details:"Updated height measurement from 2.3m to 2.4m",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:3,timestamp:"2024-01-15T10:20:00Z",user:"admin@nanwa.com",action:"DELETE",resource:"Forest",resourceId:"forest_003",details:"Deleted forest record due to data cleanup",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:4,timestamp:"2024-01-15T10:15:00Z",user:"user@nanwa.com",action:"LOGIN",resource:"Authentication",resourceId:"auth_session_001",details:"User logged in successfully",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:5,timestamp:"2024-01-15T10:10:00Z",user:"admin@nanwa.com",action:"UPDATE",resource:"User",resourceId:"user_001",details:"Updated user permissions to admin level",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:6,timestamp:"2024-01-15T10:05:00Z",user:"system",action:"CREATE",resource:"Measurement",resourceId:"measurement_001",details:"Automated measurement recorded for tree batch",ipAddress:"127.0.0.1",userAgent:"System/1.0"},{id:7,timestamp:"2024-01-15T10:00:00Z",user:"user@nanwa.com",action:"LOGOUT",resource:"Authentication",resourceId:"auth_session_002",details:"User logged out",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}],q=()=>{const[t,s]=d.useState([]),[r,o]=d.useState(!1),n=async()=>{o(!0);try{await new Promise(i=>setTimeout(i,500)),s($)}catch(i){console.error("Failed to fetch audit logs:",i)}finally{o(!1)}};return d.useEffect(()=>{n()},[]),{auditLogs:t,loading:r,refetchAuditLogs:n}},J=t=>{const[s,r]=d.useState(""),[o,n]=d.useState(""),[i,h]=d.useState("timestamp"),[l,g]=d.useState("desc"),b=d.useMemo(()=>t.filter(c=>{const x=s===""||c.user.toLowerCase().includes(s.toLowerCase())||c.details.toLowerCase().includes(s.toLowerCase())||c.resource.toLowerCase().includes(s.toLowerCase()),u=o===""||c.action===o;return x&&u}).sort((c,x)=>{const u=c[i],j=x[i];return l==="asc"?u>j?1:-1:u{i===c?g(l==="asc"?"desc":"asc"):(h(c),g("desc"))}}},Q=(t,s=w)=>{const[r,o]=d.useState(1),n=Math.ceil(t.length/s),i=(r-1)*s,h=t.slice(i,i+s);return d.useEffect(()=>{o(1)},[t.length]),{currentPage:r,setCurrentPage:o,totalPages:n,startIndex:i,paginatedData:h,pageSize:s}},Y=()=>{const{auditLogs:t,loading:s}=q(),{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i,sortField:h,sortDirection:l,filteredAndSortedLogs:g,handleSort:b}=J(t),{currentPage:L,setCurrentPage:c,totalPages:x,startIndex:u,paginatedData:j,pageSize:C}=Q(g,w);return e.jsxs(P,{children:[e.jsxs(D,{children:[e.jsx(U,{children:"Audit Log"}),e.jsx(R,{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i})]}),s?e.jsx(I,{text:"Loading audit logs..."}):e.jsx(X,{logs:j,sortField:h,sortDirection:l,onSort:b}),e.jsx(B,{currentPage:L,totalPages:x,startIndex:u,pageSize:C,totalItems:g.length,onPageChange:c})]})},ee=a.header` background: white; border-bottom: 1px solid #e5e7eb; padding: 1rem 0; diff --git a/frontend/dist/assets/ChartComponents-CUdy75Zt.js b/frontend/dist/assets/ChartComponents-DOzzJtP4.js similarity index 96% rename from frontend/dist/assets/ChartComponents-CUdy75Zt.js rename to frontend/dist/assets/ChartComponents-DOzzJtP4.js index 0543f7dcdd..5f8db1f620 100644 --- a/frontend/dist/assets/ChartComponents-CUdy75Zt.js +++ b/frontend/dist/assets/ChartComponents-DOzzJtP4.js @@ -1,4 +1,4 @@ -import{j as n,d as r}from"./index-Dzr7PBfw.js";const j=r.div` +import{j as n,d as r}from"./index-CGkKx7Xv.js";const j=r.div` background: white; border-radius: 0.75rem; padding: 1.5rem; diff --git a/frontend/dist/assets/DarkModeToggle-DNnaM-T2.js b/frontend/dist/assets/DarkModeToggle-Cu0JyOh5.js similarity index 85% rename from frontend/dist/assets/DarkModeToggle-DNnaM-T2.js rename to frontend/dist/assets/DarkModeToggle-Cu0JyOh5.js index 92fef8eb9f..5c66c75ff1 100644 --- a/frontend/dist/assets/DarkModeToggle-DNnaM-T2.js +++ b/frontend/dist/assets/DarkModeToggle-Cu0JyOh5.js @@ -1 +1 @@ -import{j as r,f as i,g as a}from"./index-Dzr7PBfw.js";import{I as l}from"./IconButton-CsSKj4cW.js";const d=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),c=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})}),m=({className:t="",size:o="md"})=>{const{isDarkMode:e,toggleDarkMode:s}=i(),n={sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6"};return r.jsxs(l,{onClick:s,className:a("relative bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300",t),size:o,"aria-label":e?"Switch to light mode":"Switch to dark mode",title:e?"Switch to light mode":"Switch to dark mode",children:[r.jsx(d,{className:a(n[o],"transition-all duration-200",e?"rotate-90 scale-0":"rotate-0 scale-100")}),r.jsx(c,{className:a(n[o],"absolute transition-all duration-200",e?"rotate-0 scale-100":"-rotate-90 scale-0")})]})};export{m as D}; +import{j as r,k as i,l as a}from"./index-CGkKx7Xv.js";import{I as l}from"./IconButton-vDjz_WRZ.js";const d=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),c=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})}),k=({className:t="",size:o="md"})=>{const{isDarkMode:e,toggleDarkMode:s}=i(),n={sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6"};return r.jsxs(l,{onClick:s,className:a("relative bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300",t),size:o,"aria-label":e?"Switch to light mode":"Switch to dark mode",title:e?"Switch to light mode":"Switch to dark mode",children:[r.jsx(d,{className:a(n[o],"transition-all duration-200",e?"rotate-90 scale-0":"rotate-0 scale-100")}),r.jsx(c,{className:a(n[o],"absolute transition-all duration-200",e?"rotate-0 scale-100":"-rotate-90 scale-0")})]})};export{k as D}; diff --git a/frontend/dist/assets/DashboardPage-BXlBG99y.js b/frontend/dist/assets/DashboardPage-BXlBG99y.js deleted file mode 100644 index c8b140b9d0..0000000000 --- a/frontend/dist/assets/DashboardPage-BXlBG99y.js +++ /dev/null @@ -1,69 +0,0 @@ -var _y=Object.defineProperty;var My=(e,t,r)=>t in e?_y(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ca=(e,t,r)=>My(e,typeof t!="symbol"?t+"":t,r);import{A as Hh,u as Yh,j as S,r as m,c as H,b as Dy,e as Ei}from"./index-Dzr7PBfw.js";import{C as xt,a as wt,b as Pt,c as Iy,d as qu,e as Ny}from"./ChartComponents-CUdy75Zt.js";import{g as kt,r as zu}from"./vendor-BtP0CW_r.js";import{G as $y}from"./FilterHeader-CBw4AnG_.js";import{E as Ry}from"./ExportButton-BvRt6B34.js";import{D as Ly}from"./DarkModeToggle-DNnaM-T2.js";import"./IconButton-CsSKj4cW.js";const pt=new Hh,By={getAll:(e={})=>pt.get("/trees",e),getById:e=>pt.get(`/trees/${e}`),getMeasurements:e=>pt.get(`/trees/${e}/measurements`),getByForest:e=>pt.get(`/trees/forest/${e}`),create:e=>pt.post("/trees",e),update:(e,t)=>pt.put(`/trees/${e}`,t),delete:e=>pt.delete(`/trees/${e}`),addMeasurement:(e,t)=>pt.post(`/trees/${e}/measurements`,t),markDead:e=>pt.patch(`/trees/${e}/mark-dead`)},Wn=new Hh,Ky={getStats:(e={})=>Wn.get("/dashboard/stats",e)},Fu={getSurvivalRate:(e={})=>Wn.get("/charts/survival-rate",e),getHeightGrowth:(e={})=>Wn.get("/charts/height-growth",e),getCO2Absorption:(e={})=>Wn.get("/charts/co2-absorption",e)},qy=({onToggleSidebar:e})=>{const{user:t,logout:r,isAdmin:n}=Yh(),i=async()=>{await r()};return S.jsx("header",{className:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4 sticky top-0 z-50",children:S.jsxs("div",{className:"flex items-center justify-between",children:[S.jsxs("div",{className:"flex items-center gap-4",children:[S.jsx("button",{onClick:e,"aria-label":"Toggle menu",className:"lg:hidden flex items-center justify-center w-10 h-10 bg-none border-none cursor-pointer rounded-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-500 focus:outline-offset-2",children:S.jsx("svg",{className:"w-6 h-6 text-gray-700 dark:text-gray-300",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})}),S.jsx("h1",{className:"text-2xl font-bold text-green-600 dark:text-green-400 m-0",children:"Nanwa Dashboard"})]}),S.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[S.jsxs("span",{className:"text-gray-700 dark:text-gray-300",children:["Welcome, ",S.jsx("strong",{children:(t==null?void 0:t.firstName)||(t==null?void 0:t.name)}),n()&&S.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 text-xs rounded-full font-bold",children:"Admin"})]}),S.jsx(Ly,{size:"sm"}),S.jsxs("button",{onClick:i,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-red-600 dark:hover:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/30 rounded-lg transition-colors",title:"Logout",children:[S.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),"Logout"]})]})]})})},zy=({isOpen:e,onClose:t})=>{const{isAdmin:r}=Yh();return S.jsxs(S.Fragment,{children:[S.jsx("div",{className:`lg:hidden fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${e?"opacity-100 visible":"opacity-0 invisible"}`,onClick:t}),S.jsx("aside",{className:` - bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 w-full lg:w-64 fixed lg:sticky top-0 h-screen overflow-y-auto z-50 lg:z-10 transform transition-transform duration-300 ease-in-out - ${e?"translate-x-0":"-translate-x-full lg:translate-x-0"} - `,children:S.jsx("div",{className:"p-6",children:S.jsxs("nav",{className:"space-y-2",children:[S.jsxs("a",{href:"#dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30 rounded-lg",children:[S.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),S.jsxs("a",{href:"/map",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[S.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),S.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[S.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),r()&&S.jsxs("a",{href:"/admin",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[S.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})})]})},kn=({icon:e,title:t,value:r,color:n="green"})=>{const i={green:"bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400",blue:"bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400",yellow:"bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400",purple:"bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400"};return S.jsx("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:S.jsxs("div",{className:"flex items-center",children:[S.jsx("div",{className:`p-2 rounded-lg ${i[n]}`,children:e}),S.jsxs("div",{className:"ml-4",children:[S.jsx("p",{className:"text-sm font-medium text-gray-600 dark:text-gray-300",children:t}),S.jsx("p",{className:"text-2xl font-bold text-gray-900 dark:text-white",children:r})]})]})})},Fy=()=>S.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:[S.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:"Forest Overview"}),S.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-4",children:"Your forests are performing excellently with strong growth indicators and high survival rates."}),S.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[S.jsxs("div",{children:[S.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Recent Activity"}),S.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full mr-3"}),"New measurements recorded for Forest A"]}),S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-blue-500 rounded-full mr-3"}),"Survival rate improved by 2.3%"]}),S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-purple-500 rounded-full mr-3"}),"CO₂ absorption increased by 15%"]})]})]}),S.jsxs("div",{children:[S.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Next Actions"}),S.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-yellow-500 rounded-full mr-3"}),"Schedule maintenance for Forest B"]}),S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-orange-500 rounded-full mr-3"}),"Review growth data for Q4 report"]}),S.jsxs("li",{className:"flex items-center",children:[S.jsx("div",{className:"w-2 h-2 bg-red-500 rounded-full mr-3"}),"Address low-performing areas in Forest C"]})]})]})]})]});var fa={},da={},Yl;function Wy(){return Yl||(Yl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==="__proto__"}e.isUnsafeProperty=t}(da)),da}var ha={},Gl;function Gh(){return Gl||(Gl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){switch(typeof r){case"number":case"symbol":return!1;case"string":return r.includes(".")||r.includes("[")||r.includes("]")}}e.isDeepKey=t}(ha)),ha}var va={},Vl;function Vh(){return Vl||(Vl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var n;return typeof r=="string"||typeof r=="symbol"?r:Object.is((n=r==null?void 0:r.valueOf)==null?void 0:n.call(r),-0)?"-0":String(r)}e.toKey=t}(va)),va}var pa={},Xl;function Wu(){return Xl||(Xl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){const n=[],i=r.length;if(i===0)return n;let a=0,o="",u="",l=!1;for(r.charCodeAt(0)===46&&(n.push(""),a++);ae===0?0:e>0?1:-1,We=e=>typeof e=="number"&&e!=+e,tr=e=>typeof e=="string"&&e.indexOf("%")===e.length-1,D=e=>(typeof e=="number"||e instanceof Number)&&!We(e),dt=e=>D(e)||typeof e=="string",Xy=0,cr=e=>{var t=++Xy;return"".concat(e||"").concat(t)},ke=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!D(t)&&typeof t!="string")return n;var a;if(tr(t)){if(r==null)return n;var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return We(a)&&(a=n),i&&r!=null&&a>r&&(a=r),a},Xh=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nD(e)&&D(t)?r=>e+r*(t-e):()=>t;function Zh(e,t,r){if(!(!e||!e.length))return e.find(n=>n&&(typeof t=="function"?t(n):qt(n,t))===r)}var J=e=>e===null||typeof e>"u",pn=e=>J(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1)),Zy=["viewBox","children"],Jy=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],tc=["points","pathLength"],ya={svg:Zy,polygon:tc,polyline:tc},Hu=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],Yu=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(m.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{Hu.includes(i)&&(n[i]=a=>r[i](r,a))}),n},Qy=(e,t,r)=>n=>(e(t,r,n),null),ji=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var a=e[i];Hu.includes(i)&&typeof a=="function"&&(n||(n={}),n[i]=Qy(a,t,r))}),n},rc=e=>typeof e=="string"?e:e?e.displayName||e.name||"Component":"",nc=null,ba=null,Jh=e=>{if(e===nc&&Array.isArray(ba))return ba;var t=[];return m.Children.forEach(e,r=>{J(r)||(Vy.isFragment(r)?t=t.concat(Jh(r.props.children)):t.push(r))}),ba=t,nc=e,t};function mn(e,t){var r=[],n=[];return Array.isArray(t)?n=t.map(i=>rc(i)):n=[rc(t)],Jh(e).forEach(i=>{var a=qt(i,"type.displayName")||qt(i,"type.name");n.indexOf(a)!==-1&&r.push(i)}),r}var Qh=e=>e&&typeof e=="object"&&"clipDot"in e?!!e.clipDot:!0,e0=(e,t,r,n)=>{var i,a=(i=n&&(ya==null?void 0:ya[n]))!==null&&i!==void 0?i:[];return t.startsWith("data-")||typeof e!="function"&&(n&&a.includes(t)||Jy.includes(t))||r&&Hu.includes(t)},z=(e,t,r)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var n=e;if(m.isValidElement(e)&&(n=e.props),typeof n!="object"&&typeof n!="function")return null;var i={};return Object.keys(n).forEach(a=>{var o;e0((o=n)===null||o===void 0?void 0:o[a],a,t,r)&&(i[a]=n[a])}),i},t0=["children","width","height","viewBox","className","style","title","desc"];function Yo(){return Yo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,width:n,height:i,viewBox:a,className:o,style:u,title:l,desc:c}=e,s=r0(e,t0),f=a||{width:n,height:i,x:0,y:0},d=H("recharts-surface",o);return m.createElement("svg",Yo({},z(s,!0,"svg"),{className:d,width:n,height:i,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height),ref:t}),m.createElement("title",null,l),m.createElement("desc",null,c),r)}),i0=["children","className"];function Go(){return Go=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,className:n}=e,i=a0(e,i0),a=H("recharts-layer",n);return m.createElement("g",Go({className:a},z(i,!0),{ref:t}),r)}),u0=m.createContext(null);function ee(e){return function(){return e}}const tv=Math.cos,Hn=Math.sin,lt=Math.sqrt,Yn=Math.PI,Ti=2*Yn,Vo=Math.PI,Xo=2*Vo,Jt=1e-6,s0=Xo-Jt;function rv(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return rv;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;iJt)if(!(Math.abs(f*l-c*s)>Jt)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let h=n-o,v=i-u,p=l*l+c*c,g=h*h+v*v,y=Math.sqrt(p),b=Math.sqrt(d),x=a*Math.tan((Vo-Math.acos((p+d-g)/(2*y*b)))/2),P=x/b,w=x/y;Math.abs(P-1)>Jt&&this._append`L${t+P*s},${r+P*f}`,this._append`A${a},${a},0,0,${+(f*h>s*v)},${this._x1=t+w*l},${this._y1=r+w*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),l=n*Math.sin(i),c=t+u,s=r+l,f=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${c},${s}`:(Math.abs(this._x1-c)>Jt||Math.abs(this._y1-s)>Jt)&&this._append`L${c},${s}`,n&&(d<0&&(d=d%Xo+Xo),d>s0?this._append`A${n},${n},0,1,${f},${t-u},${r-l}A${n},${n},0,1,${f},${this._x1=c},${this._y1=s}`:d>Jt&&this._append`A${n},${n},0,${+(d>=Vo)},${f},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Gu(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new c0(t)}function Vu(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function nv(e){this._context=e}nv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function ki(e){return new nv(e)}function iv(e){return e[0]}function av(e){return e[1]}function ov(e,t){var r=ee(!0),n=null,i=ki,a=null,o=Gu(u);e=typeof e=="function"?e:e===void 0?iv:ee(e),t=typeof t=="function"?t:t===void 0?av:ee(t);function u(l){var c,s=(l=Vu(l)).length,f,d=!1,h;for(n==null&&(a=i(h=o())),c=0;c<=s;++c)!(c=h;--v)u.point(x[v],P[v]);u.lineEnd(),u.areaEnd()}y&&(x[d]=+e(g,d,f),P[d]=+t(g,d,f),u.point(n?+n(g,d,f):x[d],r?+r(g,d,f):P[d]))}if(b)return u=null,b+""||null}function s(){return ov().defined(i).curve(o).context(a)}return c.x=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),n=null,c):e},c.x0=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),c):e},c.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:ee(+f),c):n},c.y=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),r=null,c):t},c.y0=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),c):t},c.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:ee(+f),c):r},c.lineX0=c.lineY0=function(){return s().x(e).y(t)},c.lineY1=function(){return s().x(e).y(r)},c.lineX1=function(){return s().x(n).y(t)},c.defined=function(f){return arguments.length?(i=typeof f=="function"?f:ee(!!f),c):i},c.curve=function(f){return arguments.length?(o=f,a!=null&&(u=o(a)),c):o},c.context=function(f){return arguments.length?(f==null?a=u=null:u=o(a=f),c):a},c}class uv{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function f0(e){return new uv(e,!0)}function d0(e){return new uv(e,!1)}const Xu={draw(e,t){const r=lt(t/Yn);e.moveTo(r,0),e.arc(0,0,r,0,Ti)}},h0={draw(e,t){const r=lt(t/5)/2;e.moveTo(-3*r,-r),e.lineTo(-r,-r),e.lineTo(-r,-3*r),e.lineTo(r,-3*r),e.lineTo(r,-r),e.lineTo(3*r,-r),e.lineTo(3*r,r),e.lineTo(r,r),e.lineTo(r,3*r),e.lineTo(-r,3*r),e.lineTo(-r,r),e.lineTo(-3*r,r),e.closePath()}},sv=lt(1/3),v0=sv*2,p0={draw(e,t){const r=lt(t/v0),n=r*sv;e.moveTo(0,-r),e.lineTo(n,0),e.lineTo(0,r),e.lineTo(-n,0),e.closePath()}},m0={draw(e,t){const r=lt(t),n=-r/2;e.rect(n,n,r,r)}},g0=.8908130915292852,lv=Hn(Yn/10)/Hn(7*Yn/10),y0=Hn(Ti/10)*lv,b0=-tv(Ti/10)*lv,x0={draw(e,t){const r=lt(t*g0),n=y0*r,i=b0*r;e.moveTo(0,-r),e.lineTo(n,i);for(let a=1;a<5;++a){const o=Ti*a/5,u=tv(o),l=Hn(o);e.lineTo(l*r,-u*r),e.lineTo(u*n-l*i,l*n+u*i)}e.closePath()}},xa=lt(3),w0={draw(e,t){const r=-lt(t/(xa*3));e.moveTo(0,r*2),e.lineTo(-xa*r,-r),e.lineTo(xa*r,-r),e.closePath()}},Xe=-.5,Ze=lt(3)/2,Zo=1/lt(12),P0=(Zo/2+1)*3,O0={draw(e,t){const r=lt(t/P0),n=r/2,i=r*Zo,a=n,o=r*Zo+r,u=-a,l=o;e.moveTo(n,i),e.lineTo(a,o),e.lineTo(u,l),e.lineTo(Xe*n-Ze*i,Ze*n+Xe*i),e.lineTo(Xe*a-Ze*o,Ze*a+Xe*o),e.lineTo(Xe*u-Ze*l,Ze*u+Xe*l),e.lineTo(Xe*n+Ze*i,Xe*i-Ze*n),e.lineTo(Xe*a+Ze*o,Xe*o-Ze*a),e.lineTo(Xe*u+Ze*l,Xe*l-Ze*u),e.closePath()}};function A0(e,t){let r=null,n=Gu(i);e=typeof e=="function"?e:ee(e||Xu),t=typeof t=="function"?t:ee(t===void 0?64:+t);function i(){let a;if(r||(r=a=n()),e.apply(this,arguments).draw(r,+t.apply(this,arguments)),a)return r=null,a+""||null}return i.type=function(a){return arguments.length?(e=typeof a=="function"?a:ee(a),i):e},i.size=function(a){return arguments.length?(t=typeof a=="function"?a:ee(+a),i):t},i.context=function(a){return arguments.length?(r=a??null,i):r},i}function Gn(){}function Vn(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function cv(e){this._context=e}cv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Vn(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Vn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function S0(e){return new cv(e)}function fv(e){this._context=e}fv.prototype={areaStart:Gn,areaEnd:Gn,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Vn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function E0(e){return new fv(e)}function dv(e){this._context=e}dv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Vn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function j0(e){return new dv(e)}function hv(e){this._context=e}hv.prototype={areaStart:Gn,areaEnd:Gn,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function T0(e){return new hv(e)}function ic(e){return e<0?-1:1}function ac(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(ic(a)+ic(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function oc(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function wa(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function Xn(e){this._context=e}Xn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:wa(this,this._t0,oc(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,wa(this,oc(this,r=ac(this,e,t)),r);break;default:wa(this,this._t0,r=ac(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function vv(e){this._context=new pv(e)}(vv.prototype=Object.create(Xn.prototype)).point=function(e,t){Xn.prototype.point.call(this,t,e)};function pv(e){this._context=e}pv.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function k0(e){return new Xn(e)}function C0(e){return new vv(e)}function mv(e){this._context=e}mv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=uc(e),i=uc(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function M0(e){return new Ci(e,.5)}function D0(e){return new Ci(e,0)}function I0(e){return new Ci(e,1)}function jr(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function N0(e,t){return e[t]}function $0(e){const t=[];return t.key=e,t}function R0(){var e=ee([]),t=Jo,r=jr,n=N0;function i(a){var o=Array.from(e.apply(this,arguments),$0),u,l=o.length,c=-1,s;for(const f of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n{var t="symbol".concat(pn(e));return gv[t]||Xu},V0=(e,t,r)=>{if(t==="area")return e;switch(r){case"cross":return 5*e*e/9;case"diamond":return .5*e*e/Math.sqrt(3);case"square":return e*e;case"star":{var n=18*Y0;return 1.25*e*e*(Math.tan(n)-Math.tan(n*2)*Math.tan(n)**2)}case"triangle":return Math.sqrt(3)*e*e/4;case"wye":return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}},X0=(e,t)=>{gv["symbol".concat(pn(e))]=t},yv=e=>{var{type:t="circle",size:r=64,sizeType:n="area"}=e,i=U0(e,q0),a=lc(lc({},i),{},{type:t,size:r,sizeType:n}),o=()=>{var f=G0(t),d=A0().type(f).size(V0(r,n,t));return d()},{className:u,cx:l,cy:c}=a,s=z(a,!0);return l===+l&&c===+c&&r===+r?m.createElement("path",Qo({},s,{className:H("recharts-symbols",u),transform:"translate(".concat(l,", ").concat(c,")"),d:o()})):null};yv.registerSymbol=X0;var Pa={},Oa={},cc;function Z0(){return cc||(cc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){const i=new Map;for(let a=0;a=0}e.isLength=t}(ja)),ja}var hc;function Zu(){return hc||(hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=J0();function r(n){return n!=null&&typeof n!="function"&&t.isLength(n.length)}e.isArrayLike=r}(Ea)),Ea}var Ta={},vc;function Q0(){return vc||(vc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="object"&&r!==null}e.isObjectLike=t}(Ta)),Ta}var pc;function eb(){return pc||(pc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Zu(),r=Q0();function n(i){return r.isObjectLike(i)&&t.isArrayLike(i)}e.isArrayLikeObject=n}(Sa)),Sa}var ka={},Ca={},mc;function tb(){return mc||(mc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Uu();function r(n){return function(i){return t.get(i,n)}}e.property=r}(Ca)),Ca}var _a={},Ma={},Da={},Ia={},gc;function xv(){return gc||(gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r!==null&&(typeof r=="object"||typeof r=="function")}e.isObject=t}(Ia)),Ia}var Na={},yc;function wv(){return yc||(yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null||typeof r!="object"&&typeof r!="function"}e.isPrimitive=t}(Na)),Na}var $a={},bc;function Ju(){return bc||(bc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){return r===n||Number.isNaN(r)&&Number.isNaN(n)}e.eq=t}($a)),$a}var xc;function rb(){return xc||(xc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Qu(),r=xv(),n=wv(),i=Ju();function a(f,d,h){return typeof h!="function"?t.isMatch(f,d):o(f,d,function v(p,g,y,b,x,P){const w=h(p,g,y,b,x,P);return w!==void 0?!!w:o(p,g,v,P)},new Map)}function o(f,d,h,v){if(d===f)return!0;switch(typeof d){case"object":return u(f,d,h,v);case"function":return Object.keys(d).length>0?o(f,{...d},h,v):i.eq(f,d);default:return r.isObject(f)?typeof d=="string"?d==="":!0:i.eq(f,d)}}function u(f,d,h,v){if(d==null)return!0;if(Array.isArray(d))return c(f,d,h,v);if(d instanceof Map)return l(f,d,h,v);if(d instanceof Set)return s(f,d,h,v);const p=Object.keys(d);if(f==null)return p.length===0;if(p.length===0)return!0;if(v&&v.has(d))return v.get(d)===f;v&&v.set(d,f);try{for(let g=0;g{})}e.isMatch=r}(Ma)),Ma}var Ra={},La={},Ba={},Pc;function Pv(){return Pc||(Pc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Object.getOwnPropertySymbols(r).filter(n=>Object.prototype.propertyIsEnumerable.call(r,n))}e.getSymbols=t}(Ba)),Ba}var Ka={},Oc;function es(){return Oc||(Oc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null?r===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(r)}e.getTag=t}(Ka)),Ka}var qa={},Ac;function ts(){return Ac||(Ac=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t="[object RegExp]",r="[object String]",n="[object Number]",i="[object Boolean]",a="[object Arguments]",o="[object Symbol]",u="[object Date]",l="[object Map]",c="[object Set]",s="[object Array]",f="[object Function]",d="[object ArrayBuffer]",h="[object Object]",v="[object Error]",p="[object DataView]",g="[object Uint8Array]",y="[object Uint8ClampedArray]",b="[object Uint16Array]",x="[object Uint32Array]",P="[object BigUint64Array]",w="[object Int8Array]",O="[object Int16Array]",A="[object Int32Array]",j="[object BigInt64Array]",T="[object Float32Array]",I="[object Float64Array]";e.argumentsTag=a,e.arrayBufferTag=d,e.arrayTag=s,e.bigInt64ArrayTag=j,e.bigUint64ArrayTag=P,e.booleanTag=i,e.dataViewTag=p,e.dateTag=u,e.errorTag=v,e.float32ArrayTag=T,e.float64ArrayTag=I,e.functionTag=f,e.int16ArrayTag=O,e.int32ArrayTag=A,e.int8ArrayTag=w,e.mapTag=l,e.numberTag=n,e.objectTag=h,e.regexpTag=t,e.setTag=c,e.stringTag=r,e.symbolTag=o,e.uint16ArrayTag=b,e.uint32ArrayTag=x,e.uint8ArrayTag=g,e.uint8ClampedArrayTag=y}(qa)),qa}var za={},Sc;function nb(){return Sc||(Sc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return ArrayBuffer.isView(r)&&!(r instanceof DataView)}e.isTypedArray=t}(za)),za}var Ec;function Ov(){return Ec||(Ec=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Pv(),r=es(),n=ts(),i=wv(),a=nb();function o(s,f){return u(s,void 0,s,new Map,f)}function u(s,f,d,h=new Map,v=void 0){const p=v==null?void 0:v(s,f,d,h);if(p!=null)return p;if(i.isPrimitive(s))return s;if(h.has(s))return h.get(s);if(Array.isArray(s)){const g=new Array(s.length);h.set(s,g);for(let y=0;yt.isMatch(a,i)}e.matches=n}(_a)),_a}var Fa={},Wa={},Ua={},kc;function ob(){return kc||(kc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ov(),r=ts();function n(i,a){return t.cloneDeepWith(i,(o,u,l,c)=>{const s=a==null?void 0:a(o,u,l,c);if(s!=null)return s;if(typeof i=="object")switch(Object.prototype.toString.call(i)){case r.numberTag:case r.stringTag:case r.booleanTag:{const f=new i.constructor(i==null?void 0:i.valueOf());return t.copyProperties(f,i),f}case r.argumentsTag:{const f={};return t.copyProperties(f,i),f.length=i.length,f[Symbol.iterator]=i[Symbol.iterator],f}default:return}})}e.cloneDeepWith=n}(Ua)),Ua}var Cc;function ub(){return Cc||(Cc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=ob();function r(n){return t.cloneDeepWith(n)}e.cloneDeep=r}(Wa)),Wa}var Ha={},Ya={},_c;function Av(){return _c||(_c=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=/^(?:0|[1-9]\d*)$/;function r(n,i=Number.MAX_SAFE_INTEGER){switch(typeof n){case"number":return Number.isInteger(n)&&n>=0&&n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?c:u;return Qa.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:s,Qa}var Kc;function gb(){return Kc||(Kc=1,Ja.exports=mb()),Ja.exports}/** - * @license React - * use-sync-external-store-shim/with-selector.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var qc;function yb(){if(qc)return Za;qc=1;var e=zu(),t=gb();function r(c,s){return c===s&&(c!==0||1/c===1/s)||c!==c&&s!==s}var n=typeof Object.is=="function"?Object.is:r,i=t.useSyncExternalStore,a=e.useRef,o=e.useEffect,u=e.useMemo,l=e.useDebugValue;return Za.useSyncExternalStoreWithSelector=function(c,s,f,d,h){var v=a(null);if(v.current===null){var p={hasValue:!1,value:null};v.current=p}else p=v.current;v=u(function(){function y(O){if(!b){if(b=!0,x=O,O=d(O),h!==void 0&&p.hasValue){var A=p.value;if(h(A,O))return P=A}return P=O}if(A=P,n(x,O))return A;var j=d(O);return h!==void 0&&h(A,j)?(x=O,A):(x=O,P=j)}var b=!1,x,P,w=f===void 0?null:f;return[function(){return y(s())},w===null?void 0:function(){return y(w())}]},[s,f,d,h]);var g=i(c,v[0],v[1]);return o(function(){p.hasValue=!0,p.value=g},[g]),l(g),g},Za}var zc;function bb(){return zc||(zc=1,Xa.exports=yb()),Xa.exports}var xb=bb(),rs=m.createContext(null),wb=e=>e,ae=()=>{var e=m.useContext(rs);return e?e.store.dispatch:wb},Un=()=>{},Pb=()=>Un,Ob=(e,t)=>e===t;function $(e){var t=m.useContext(rs);return xb.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:Pb,t?t.store.getState:Un,t?t.store.getState:Un,t?e:Un,Ob)}function Ab(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function Sb(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!="object")throw new TypeError(t)}function Eb(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var Fc=e=>Array.isArray(e)?e:[e];function jb(e){const t=Array.isArray(e[0])?e[0]:e;return Eb(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function Tb(e,t){const r=[],{length:n}=e;for(let i=0;i{r=_n(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function Mb(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let a=0,o=0,u,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),Ab(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const s={...r,...l},{memoize:f,memoizeOptions:d=[],argsMemoize:h=Sv,argsMemoizeOptions:v=[]}=s,p=Fc(d),g=Fc(v),y=jb(i),b=f(function(){return a++,c.apply(null,arguments)},...p),x=h(function(){o++;const w=Tb(y,arguments);return u=b.apply(null,w),u},...g);return Object.assign(x,{resultFunc:c,memoizedResultFunc:b,dependencies:y,dependencyRecomputations:()=>o,resetDependencyRecomputations:()=>{o=0},lastResult:()=>u,recomputations:()=>a,resetRecomputations:()=>{a=0},memoize:f,argsMemoize:h})};return Object.assign(n,{withTypes:()=>n}),n}var E=Mb(Sv),Db=Object.assign((e,t=E)=>{Sb(e,`createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof e}`);const r=Object.keys(e),n=r.map(a=>e[a]);return t(n,(...a)=>a.reduce((o,u,l)=>(o[r[l]]=u,o),{}))},{withTypes:()=>Db}),eo={},to={},ro={},Uc;function Ib(){return Uc||(Uc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(n){return typeof n=="symbol"?1:n===null?2:n===void 0?3:n!==n?4:0}const r=(n,i,a)=>{if(n!==i){const o=t(n),u=t(i);if(o===u&&o===0){if(ni)return a==="desc"?-1:1}return a==="desc"?u-o:o-u}return 0};e.compareValues=r}(ro)),ro}var no={},io={},Hc;function Ev(){return Hc||(Hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="symbol"||r instanceof Symbol}e.isSymbol=t}(io)),io}var Yc;function Nb(){return Yc||(Yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ev(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function i(a,o){return Array.isArray(a)?!1:typeof a=="number"||typeof a=="boolean"||a==null||t.isSymbol(a)?!0:typeof a=="string"&&(n.test(a)||!r.test(a))||o!=null&&Object.hasOwn(o,a)}e.isKey=i}(no)),no}var Gc;function $b(){return Gc||(Gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ib(),r=Nb(),n=Wu();function i(a,o,u,l){if(a==null)return[];u=l?void 0:u,Array.isArray(a)||(a=Object.values(a)),Array.isArray(o)||(o=o==null?[null]:[o]),o.length===0&&(o=[null]),Array.isArray(u)||(u=u==null?[]:[u]),u=u.map(h=>String(h));const c=(h,v)=>{let p=h;for(let g=0;gv==null||h==null?v:typeof h=="object"&&"key"in h?Object.hasOwn(v,h.key)?v[h.key]:c(v,h.path):typeof h=="function"?h(v):Array.isArray(h)?c(v,h):typeof v=="object"?v[h]:v,f=o.map(h=>(Array.isArray(h)&&h.length===1&&(h=h[0]),h==null||typeof h=="function"||Array.isArray(h)||r.isKey(h)?h:{key:h,path:n.toPath(h)}));return a.map(h=>({original:h,criteria:f.map(v=>s(v,h))})).slice().sort((h,v)=>{for(let p=0;ph.original)}e.orderBy=i}(to)),to}var ao={},Vc;function Rb(){return Vc||(Vc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=1){const i=[],a=Math.floor(n),o=(u,l)=>{for(let c=0;c1&&n.isIterateeCall(a,o[0],o[1])?o=[]:u>2&&n.isIterateeCall(o[0],o[1],o[2])&&(o=[o[0]]),t.orderBy(a,r.flatten(o),["asc"])}e.sortBy=i}(eo)),eo}var uo,Jc;function Bb(){return Jc||(Jc=1,uo=Lb().sortBy),uo}var Kb=Bb();const _i=kt(Kb);var Tv=e=>e.legend.settings,qb=e=>e.legend.size,zb=e=>e.legend.payload;E([zb,Tv],(e,t)=>{var{itemSorter:r}=t,n=e.flat(1);return r?_i(n,r):n});var Mn=1;function Fb(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],[t,r]=m.useState({height:0,left:0,top:0,width:0}),n=m.useCallback(i=>{if(i!=null){var a=i.getBoundingClientRect(),o={height:a.height,left:a.left,top:a.top,width:a.width};(Math.abs(o.height-t.height)>Mn||Math.abs(o.left-t.left)>Mn||Math.abs(o.top-t.top)>Mn||Math.abs(o.width-t.width)>Mn)&&r({height:o.height,left:o.left,top:o.top,width:o.width})}},[t.width,t.height,t.top,t.left,...e]);return[t,n]}function Pe(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Wb=typeof Symbol=="function"&&Symbol.observable||"@@observable",Qc=Wb,so=()=>Math.random().toString(36).substring(7).split("").join("."),Ub={INIT:`@@redux/INIT${so()}`,REPLACE:`@@redux/REPLACE${so()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${so()}`},Zn=Ub;function ns(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function kv(e,t,r){if(typeof e!="function")throw new Error(Pe(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(Pe(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Pe(1));return r(kv)(e,t)}let n=e,i=t,a=new Map,o=a,u=0,l=!1;function c(){o===a&&(o=new Map,a.forEach((g,y)=>{o.set(y,g)}))}function s(){if(l)throw new Error(Pe(3));return i}function f(g){if(typeof g!="function")throw new Error(Pe(4));if(l)throw new Error(Pe(5));let y=!0;c();const b=u++;return o.set(b,g),function(){if(y){if(l)throw new Error(Pe(6));y=!1,c(),o.delete(b),a=null}}}function d(g){if(!ns(g))throw new Error(Pe(7));if(typeof g.type>"u")throw new Error(Pe(8));if(typeof g.type!="string")throw new Error(Pe(17));if(l)throw new Error(Pe(9));try{l=!0,i=n(i,g)}finally{l=!1}return(a=o).forEach(b=>{b()}),g}function h(g){if(typeof g!="function")throw new Error(Pe(10));n=g,d({type:Zn.REPLACE})}function v(){const g=f;return{subscribe(y){if(typeof y!="object"||y===null)throw new Error(Pe(11));function b(){const P=y;P.next&&P.next(s())}return b(),{unsubscribe:g(b)}},[Qc](){return this}}}return d({type:Zn.INIT}),{dispatch:d,subscribe:f,getState:s,replaceReducer:h,[Qc]:v}}function Hb(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:Zn.INIT})>"u")throw new Error(Pe(12));if(typeof r(void 0,{type:Zn.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Pe(13))})}function Cv(e){const t=Object.keys(e),r={};for(let a=0;a"u")throw u&&u.type,new Error(Pe(14));c[f]=v,l=l||v!==h}return l=l||n.length!==Object.keys(o).length,l?c:o}}function Jn(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function Yb(...e){return t=>(r,n)=>{const i=t(r,n);let a=()=>{throw new Error(Pe(15))};const o={getState:i.getState,dispatch:(l,...c)=>a(l,...c)},u=e.map(l=>l(o));return a=Jn(...u)(i.dispatch),{...i,dispatch:a}}}function _v(e){return ns(e)&&"type"in e&&typeof e.type=="string"}var Mv=Symbol.for("immer-nothing"),ef=Symbol.for("immer-draftable"),Ue=Symbol.for("immer-state");function ut(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Tr=Object.getPrototypeOf;function fr(e){return!!e&&!!e[Ue]}function St(e){var t;return e?Dv(e)||Array.isArray(e)||!!e[ef]||!!((t=e.constructor)!=null&&t[ef])||Di(e)||Ii(e):!1}var Gb=Object.prototype.constructor.toString();function Dv(e){if(!e||typeof e!="object")return!1;const t=Tr(e);if(t===null)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object?!0:typeof r=="function"&&Function.toString.call(r)===Gb}function Qn(e,t){Mi(e)===0?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function Mi(e){const t=e[Ue];return t?t.type_:Array.isArray(e)?1:Di(e)?2:Ii(e)?3:0}function eu(e,t){return Mi(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Iv(e,t,r){const n=Mi(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function Vb(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function Di(e){return e instanceof Map}function Ii(e){return e instanceof Set}function Qt(e){return e.copy_||e.base_}function tu(e,t){if(Di(e))return new Map(e);if(Ii(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=Dv(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[Ue];let i=Reflect.ownKeys(n);for(let a=0;a1&&(e.set=e.add=e.clear=e.delete=Xb),Object.freeze(e),t&&Object.entries(e).forEach(([r,n])=>is(n,!0))),e}function Xb(){ut(2)}function Ni(e){return Object.isFrozen(e)}var Zb={};function dr(e){const t=Zb[e];return t||ut(0,e),t}var rn;function Nv(){return rn}function Jb(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function tf(e,t){t&&(dr("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function ru(e){nu(e),e.drafts_.forEach(Qb),e.drafts_=null}function nu(e){e===rn&&(rn=e.parent_)}function rf(e){return rn=Jb(rn,e)}function Qb(e){const t=e[Ue];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function nf(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[Ue].modified_&&(ru(t),ut(4)),St(e)&&(e=ei(t,e),t.parent_||ti(t,e)),t.patches_&&dr("Patches").generateReplacementPatches_(r[Ue].base_,e,t.patches_,t.inversePatches_)):e=ei(t,r,[]),ru(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==Mv?e:void 0}function ei(e,t,r){if(Ni(t))return t;const n=t[Ue];if(!n)return Qn(t,(i,a)=>af(e,n,t,i,a,r)),t;if(n.scope_!==e)return t;if(!n.modified_)return ti(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const i=n.copy_;let a=i,o=!1;n.type_===3&&(a=new Set(i),i.clear(),o=!0),Qn(a,(u,l)=>af(e,n,i,u,l,r,o)),ti(e,i,!1),r&&e.patches_&&dr("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function af(e,t,r,n,i,a,o){if(fr(i)){const u=a&&t&&t.type_!==3&&!eu(t.assigned_,n)?a.concat(n):void 0,l=ei(e,i,u);if(Iv(r,n,l),fr(l))e.canAutoFreeze_=!1;else return}else o&&r.add(i);if(St(i)&&!Ni(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;ei(e,i),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&Object.prototype.propertyIsEnumerable.call(r,n)&&ti(e,i)}}function ti(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&is(t,r)}function ex(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:Nv(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,a=as;r&&(i=[n],a=nn);const{revoke:o,proxy:u}=Proxy.revocable(i,a);return n.draft_=u,n.revoke_=o,u}var as={get(e,t){if(t===Ue)return e;const r=Qt(e);if(!eu(r,t))return tx(e,r,t);const n=r[t];return e.finalized_||!St(n)?n:n===lo(e.base_,t)?(co(e),e.copy_[t]=au(n,e)):n},has(e,t){return t in Qt(e)},ownKeys(e){return Reflect.ownKeys(Qt(e))},set(e,t,r){const n=$v(Qt(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=lo(Qt(e),t),a=i==null?void 0:i[Ue];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(Vb(r,i)&&(r!==void 0||eu(e.base_,t)))return!0;co(e),iu(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return lo(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,co(e),iu(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Qt(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){ut(11)},getPrototypeOf(e){return Tr(e.base_)},setPrototypeOf(){ut(12)}},nn={};Qn(as,(e,t)=>{nn[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});nn.deleteProperty=function(e,t){return nn.set.call(this,e,t,void 0)};nn.set=function(e,t,r){return as.set.call(this,e[0],t,r,e[0])};function lo(e,t){const r=e[Ue];return(r?Qt(r):e)[t]}function tx(e,t,r){var i;const n=$v(t,r);return n?"value"in n?n.value:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function $v(e,t){if(!(t in e))return;let r=Tr(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Tr(r)}}function iu(e){e.modified_||(e.modified_=!0,e.parent_&&iu(e.parent_))}function co(e){e.copy_||(e.copy_=tu(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var rx=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const a=r;r=t;const o=this;return function(l=a,...c){return o.produce(l,s=>r.call(this,s,...c))}}typeof r!="function"&&ut(6),n!==void 0&&typeof n!="function"&&ut(7);let i;if(St(t)){const a=rf(this),o=au(t,void 0);let u=!0;try{i=r(o),u=!1}finally{u?ru(a):nu(a)}return tf(a,n),nf(i,a)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===Mv&&(i=void 0),this.autoFreeze_&&is(i,!0),n){const a=[],o=[];dr("Patches").generateReplacementPatches_(t,i,a,o),n(a,o)}return i}else ut(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(o,...u)=>this.produceWithPatches(o,l=>t(l,...u));let n,i;return[this.produce(t,r,(o,u)=>{n=o,i=u}),n,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){St(e)||ut(8),fr(e)&&(e=Ot(e));const t=rf(this),r=au(e,void 0);return r[Ue].isManual_=!0,nu(t),r}finishDraft(e,t){const r=e&&e[Ue];(!r||!r.isManual_)&&ut(9);const{scope_:n}=r;return tf(n,t),nf(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const i=t[r];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}r>-1&&(t=t.slice(r+1));const n=dr("Patches").applyPatches_;return fr(e)?n(e,t):this.produce(e,i=>n(i,t))}};function au(e,t){const r=Di(e)?dr("MapSet").proxyMap_(e,t):Ii(e)?dr("MapSet").proxySet_(e,t):ex(e,t);return(t?t.scope_:Nv()).drafts_.push(r),r}function Ot(e){return fr(e)||ut(10,e),Rv(e)}function Rv(e){if(!St(e)||Ni(e))return e;const t=e[Ue];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=tu(e,t.scope_.immer_.useStrictShallowCopy_)}else r=tu(e,!0);return Qn(r,(n,i)=>{Iv(r,n,Rv(i))}),t&&(t.finalized_=!1),r}var He=new rx,Lv=He.produce;He.produceWithPatches.bind(He);He.setAutoFreeze.bind(He);He.setUseStrictShallowCopy.bind(He);He.applyPatches.bind(He);He.createDraft.bind(He);He.finishDraft.bind(He);function Bv(e){return({dispatch:r,getState:n})=>i=>a=>typeof a=="function"?a(r,n,e):i(a)}var nx=Bv(),ix=Bv,ax=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Jn:Jn.apply(null,arguments)};function tt(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(Fe(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>_v(n)&&n.type===e,r}var Kv=class Jr extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,Jr.prototype)}static get[Symbol.species](){return Jr}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new Jr(...t[0].concat(this)):new Jr(...t.concat(this))}};function of(e){return St(e)?Lv(e,()=>{}):e}function Dn(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function ox(e){return typeof e=="boolean"}var ux=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:a=!0}=t??{};let o=new Kv;return r&&(ox(r)?o.push(nx):o.push(ix(r.extraArgument))),o},sx="RTK_autoBatch",uf=e=>t=>{setTimeout(t,e)},lx=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,a=!1,o=!1;const u=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:uf(10):e.type==="callback"?e.queueNotification:uf(e.timeout),c=()=>{o=!1,a&&(a=!1,u.forEach(s=>s()))};return Object.assign({},n,{subscribe(s){const f=()=>i&&s(),d=n.subscribe(f);return u.add(s),()=>{d(),u.delete(s)}},dispatch(s){var f;try{return i=!((f=s==null?void 0:s.meta)!=null&&f[sx]),a=!i,a&&(o||(o=!0,l(c))),n.dispatch(s)}finally{i=!0}}})},cx=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new Kv(e);return n&&i.push(lx(typeof n=="object"?n:void 0)),i};function fx(e){const t=ux(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:a=void 0,enhancers:o=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(ns(r))u=Cv(r);else throw new Error(Fe(1));let l;typeof n=="function"?l=n(t):l=t();let c=Jn;i&&(c=ax({trace:!1,...typeof i=="object"&&i}));const s=Yb(...l),f=cx(s);let d=typeof o=="function"?o(f):f();const h=c(...d);return kv(u,a,h)}function qv(e){const t={},r=[];let n;const i={addCase(a,o){const u=typeof a=="string"?a:a.type;if(!u)throw new Error(Fe(28));if(u in t)throw new Error(Fe(29));return t[u]=o,i},addMatcher(a,o){return r.push({matcher:a,reducer:o}),i},addDefaultCase(a){return n=a,i}};return e(i),[t,r,n]}function dx(e){return typeof e=="function"}function hx(e,t){let[r,n,i]=qv(t),a;if(dx(e))a=()=>of(e());else{const u=of(e);a=()=>u}function o(u=a(),l){let c=[r[l.type],...n.filter(({matcher:s})=>s(l)).map(({reducer:s})=>s)];return c.filter(s=>!!s).length===0&&(c=[i]),c.reduce((s,f)=>{if(f)if(fr(s)){const h=f(s,l);return h===void 0?s:h}else{if(St(s))return Lv(s,d=>f(d,l));{const d=f(s,l);if(d===void 0){if(s===null)return s;throw Error("A case reducer on a non-draftable value must not return undefined")}return d}}return s},u)}return o.getInitialState=a,o}var vx="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",px=(e=21)=>{let t="",r=e;for(;r--;)t+=vx[Math.random()*64|0];return t},mx=Symbol.for("rtk-slice-createasyncthunk");function gx(e,t){return`${e}/${t}`}function yx({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[mx];return function(i){const{name:a,reducerPath:o=a}=i;if(!a)throw new Error(Fe(11));const u=(typeof i.reducers=="function"?i.reducers(xx()):i.reducers)||{},l=Object.keys(u),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(P,w){const O=typeof P=="string"?P:P.type;if(!O)throw new Error(Fe(12));if(O in c.sliceCaseReducersByType)throw new Error(Fe(13));return c.sliceCaseReducersByType[O]=w,s},addMatcher(P,w){return c.sliceMatchers.push({matcher:P,reducer:w}),s},exposeAction(P,w){return c.actionCreators[P]=w,s},exposeCaseReducer(P,w){return c.sliceCaseReducersByName[P]=w,s}};l.forEach(P=>{const w=u[P],O={reducerName:P,type:gx(a,P),createNotation:typeof i.reducers=="function"};Px(w)?Ax(O,w,s,t):wx(O,w,s)});function f(){const[P={},w=[],O=void 0]=typeof i.extraReducers=="function"?qv(i.extraReducers):[i.extraReducers],A={...P,...c.sliceCaseReducersByType};return hx(i.initialState,j=>{for(let T in A)j.addCase(T,A[T]);for(let T of c.sliceMatchers)j.addMatcher(T.matcher,T.reducer);for(let T of w)j.addMatcher(T.matcher,T.reducer);O&&j.addDefaultCase(O)})}const d=P=>P,h=new Map,v=new WeakMap;let p;function g(P,w){return p||(p=f()),p(P,w)}function y(){return p||(p=f()),p.getInitialState()}function b(P,w=!1){function O(j){let T=j[P];return typeof T>"u"&&w&&(T=Dn(v,O,y)),T}function A(j=d){const T=Dn(h,w,()=>new WeakMap);return Dn(T,j,()=>{const I={};for(const[C,_]of Object.entries(i.selectors??{}))I[C]=bx(_,j,()=>Dn(v,j,y),w);return I})}return{reducerPath:P,getSelectors:A,get selectors(){return A(O)},selectSlice:O}}const x={name:a,reducer:g,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:y,...b(o),injectInto(P,{reducerPath:w,...O}={}){const A=w??o;return P.inject({reducerPath:A,reducer:g},O),{...x,...b(A,!0)}}};return x}}function bx(e,t,r,n){function i(a,...o){let u=t(a);return typeof u>"u"&&n&&(u=r()),e(u,...o)}return i.unwrapped=e,i}var nt=yx();function xx(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function wx({type:e,reducerName:t,createNotation:r},n,i){let a,o;if("reducer"in n){if(r&&!Ox(n))throw new Error(Fe(17));a=n.reducer,o=n.prepare}else a=n;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?tt(e,o):tt(e))}function Px(e){return e._reducerDefinitionType==="asyncThunk"}function Ox(e){return e._reducerDefinitionType==="reducerWithPrepare"}function Ax({type:e,reducerName:t},r,n,i){if(!i)throw new Error(Fe(18));const{payloadCreator:a,fulfilled:o,pending:u,rejected:l,settled:c,options:s}=r,f=i(e,a,s);n.exposeAction(t,f),o&&n.addCase(f.fulfilled,o),u&&n.addCase(f.pending,u),l&&n.addCase(f.rejected,l),c&&n.addMatcher(f.settled,c),n.exposeCaseReducer(t,{fulfilled:o||In,pending:u||In,rejected:l||In,settled:c||In})}function In(){}var Sx="task",zv="listener",Fv="completed",os="cancelled",Ex=`task-${os}`,jx=`task-${Fv}`,ou=`${zv}-${os}`,Tx=`${zv}-${Fv}`,$i=class{constructor(e){ca(this,"name","TaskAbortError");ca(this,"message");this.code=e,this.message=`${Sx} ${os} (reason: ${e})`}},us=(e,t)=>{if(typeof e!="function")throw new TypeError(Fe(32))},ri=()=>{},Wv=(e,t=ri)=>(e.catch(t),e),Uv=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),or=(e,t)=>{const r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},ur=e=>{if(e.aborted){const{reason:t}=e;throw new $i(t)}};function Hv(e,t){let r=ri;return new Promise((n,i)=>{const a=()=>i(new $i(e.reason));if(e.aborted){a();return}r=Uv(e,a),t.finally(()=>r()).then(n,i)}).finally(()=>{r=ri})}var kx=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof $i?"cancelled":"rejected",error:r}}finally{t==null||t()}},ni=e=>t=>Wv(Hv(e,t).then(r=>(ur(e),r))),Yv=e=>{const t=ni(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:Sr}=Object,sf={},Ri="listenerMiddleware",Cx=(e,t)=>{const r=n=>Uv(e,()=>or(n,e.reason));return(n,i)=>{us(n);const a=new AbortController;r(a);const o=kx(async()=>{ur(e),ur(a.signal);const u=await n({pause:ni(a.signal),delay:Yv(a.signal),signal:a.signal});return ur(a.signal),u},()=>or(a,jx));return i!=null&&i.autoJoin&&t.push(o.catch(ri)),{result:ni(e)(o),cancel(){or(a,Ex)}}}},_x=(e,t)=>{const r=async(n,i)=>{ur(t);let a=()=>{};const u=[new Promise((l,c)=>{let s=e({predicate:n,effect:(f,d)=>{d.unsubscribe(),l([f,d.getState(),d.getOriginalState()])}});a=()=>{s(),c()}})];i!=null&&u.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await Hv(t,Promise.race(u));return ur(t),l}finally{a()}};return(n,i)=>Wv(r(n,i))},Gv=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:a}=e;if(t)i=tt(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(Fe(21));return us(a),{predicate:i,type:t,effect:a}},Vv=Sr(e=>{const{type:t,predicate:r,effect:n}=Gv(e);return{id:px(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(Fe(22))}}},{withTypes:()=>Vv}),lf=(e,t)=>{const{type:r,effect:n,predicate:i}=Gv(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===i)&&a.effect===n)},uu=e=>{e.pending.forEach(t=>{or(t,ou)})},Mx=e=>()=>{e.forEach(uu),e.clear()},cf=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Xv=Sr(tt(`${Ri}/add`),{withTypes:()=>Xv}),Dx=tt(`${Ri}/removeAll`),Zv=Sr(tt(`${Ri}/remove`),{withTypes:()=>Zv}),Ix=(...e)=>{console.error(`${Ri}/error`,...e)},gn=(e={})=>{const t=new Map,{extra:r,onError:n=Ix}=e;us(n);const i=s=>(s.unsubscribe=()=>t.delete(s.id),t.set(s.id,s),f=>{s.unsubscribe(),f!=null&&f.cancelActive&&uu(s)}),a=s=>{const f=lf(t,s)??Vv(s);return i(f)};Sr(a,{withTypes:()=>a});const o=s=>{const f=lf(t,s);return f&&(f.unsubscribe(),s.cancelActive&&uu(f)),!!f};Sr(o,{withTypes:()=>o});const u=async(s,f,d,h)=>{const v=new AbortController,p=_x(a,v.signal),g=[];try{s.pending.add(v),await Promise.resolve(s.effect(f,Sr({},d,{getOriginalState:h,condition:(y,b)=>p(y,b).then(Boolean),take:p,delay:Yv(v.signal),pause:ni(v.signal),extra:r,signal:v.signal,fork:Cx(v.signal,g),unsubscribe:s.unsubscribe,subscribe:()=>{t.set(s.id,s)},cancelActiveListeners:()=>{s.pending.forEach((y,b,x)=>{y!==v&&(or(y,ou),x.delete(y))})},cancel:()=>{or(v,ou),s.pending.delete(v)},throwIfCancelled:()=>{ur(v.signal)}})))}catch(y){y instanceof $i||cf(n,y,{raisedBy:"effect"})}finally{await Promise.all(g),or(v,Tx),s.pending.delete(v)}},l=Mx(t);return{middleware:s=>f=>d=>{if(!_v(d))return f(d);if(Xv.match(d))return a(d.payload);if(Dx.match(d)){l();return}if(Zv.match(d))return o(d.payload);let h=s.getState();const v=()=>{if(h===sf)throw new Error(Fe(23));return h};let p;try{if(p=f(d),t.size>0){const g=s.getState(),y=Array.from(t.values());for(const b of y){let x=!1;try{x=b.predicate(d,g,h)}catch(P){x=!1,cf(n,P,{raisedBy:"predicate"})}x&&u(b,d,s,v)}}}finally{h=sf}return p},startListening:a,stopListening:o,clearListeners:l}};function Fe(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Nx={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},Jv=nt({name:"chartLayout",initialState:Nx,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top,e.margin.right=t.payload.right,e.margin.bottom=t.payload.bottom,e.margin.left=t.payload.left},setScale(e,t){e.scale=t.payload}}}),{setMargin:$x,setLayout:Rx,setChartSize:Lx,setScale:Bx}=Jv.actions,Kx=Jv.reducer;function ff(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function df(e){for(var t=1;te*180/Math.PI,ce=(e,t,r,n)=>({x:e+Math.cos(-ii*n)*r,y:t+Math.sin(-ii*n)*r}),Qv=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},Ux=(e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return Math.sqrt((r-i)**2+(n-a)**2)},Hx=(e,t)=>{var{x:r,y:n}=e,{cx:i,cy:a}=t,o=Ux({x:r,y:n},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var u=(r-i)/o,l=Math.acos(u);return n>a&&(l=2*Math.PI-l),{radius:o,angle:Wx(l),angleInRadian:l}},Yx=e=>{var{startAngle:t,endAngle:r}=e,n=Math.floor(t/360),i=Math.floor(r/360),a=Math.min(n,i);return{startAngle:t-a*360,endAngle:r-a*360}},Gx=(e,t)=>{var{startAngle:r,endAngle:n}=t,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return e+o*360},Vx=(e,t)=>{var{x:r,y:n}=e,{radius:i,angle:a}=Hx({x:r,y:n},t),{innerRadius:o,outerRadius:u}=t;if(iu||i===0)return null;var{startAngle:l,endAngle:c}=Yx(t),s=a,f;if(l<=c){for(;s>c;)s-=360;for(;s=l&&s<=c}else{for(;s>l;)s-=360;for(;s=c&&s<=l}return f?df(df({},t),{},{radius:i,angle:Gx(s,t)}):null};function hf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Qe(e){for(var t=1;t{var a,o=-1,u=(a=t==null?void 0:t.length)!==null&&a!==void 0?a:0;if(u<=1||e==null)return 0;if(n==="angleAxis"&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var l=0;l0?r[l-1].coordinate:r[u-1].coordinate,s=r[l].coordinate,f=l>=u-1?r[0].coordinate:r[l+1].coordinate,d=void 0;if(ge(s-c)!==ge(f-s)){var h=[];if(ge(f-s)===ge(i[1]-i[0])){d=f;var v=s+i[1]-i[0];h[0]=Math.min(v,(v+c)/2),h[1]=Math.max(v,(v+c)/2)}else{d=c;var p=f+i[1]-i[0];h[0]=Math.min(s,(p+s)/2),h[1]=Math.max(s,(p+s)/2)}var g=[Math.min(s,(d+s)/2),Math.max(s,(d+s)/2)];if(e>g[0]&&e<=g[1]||e>=h[0]&&e<=h[1]){({index:o}=r[l]);break}}else{var y=Math.min(c,f),b=Math.max(c,f);if(e>(y+s)/2&&e<=(b+s)/2){({index:o}=r[l]);break}}}else if(t){for(var x=0;x0&&x(t[x].coordinate+t[x-1].coordinate)/2&&e<=(t[x].coordinate+t[x+1].coordinate)/2||x===u-1&&e>(t[x].coordinate+t[x-1].coordinate)/2){({index:o}=t[x]);break}}return o},ew=(e,t,r)=>{if(t&&r){var{width:n,height:i}=r,{align:a,verticalAlign:o,layout:u}=t;if((u==="vertical"||u==="horizontal"&&o==="middle")&&a!=="center"&&D(e[a]))return Qe(Qe({},e),{},{[a]:e[a]+(n||0)});if((u==="horizontal"||u==="vertical"&&a==="center")&&o!=="middle"&&D(e[o]))return Qe(Qe({},e),{},{[o]:e[o]+(i||0)})}return e},Ut=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",ep=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,a,o=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(a=!0),u.coordinate));return i||o.push(t),a||o.push(r),o},tp=(e,t,r)=>{if(!e)return null;var{duplicateDomain:n,type:i,range:a,scale:o,realScaleType:u,isCategorical:l,categoricalDomain:c,tickCount:s,ticks:f,niceTicks:d,axisType:h}=e;if(!o)return null;var v=u==="scaleBand"&&o.bandwidth?o.bandwidth()/2:2,p=i==="category"&&o.bandwidth?o.bandwidth()/v:0;if(p=h==="angleAxis"&&a&&a.length>=2?ge(a[0]-a[1])*2*p:p,f||d){var g=(f||d||[]).map((y,b)=>{var x=n?n.indexOf(y):y;return{coordinate:o(x)+p,value:y,offset:p,index:b}});return g.filter(y=>!We(y.coordinate))}return l&&c?c.map((y,b)=>({coordinate:o(y)+p,value:y,index:b,offset:p})):o.ticks&&s!=null?o.ticks(s).map((y,b)=>({coordinate:o(y)+p,value:y,offset:p,index:b})):o.domain().map((y,b)=>({coordinate:o(y)+p,value:n?n[y]:y,index:b,offset:p}))},vf=1e-4,tw=e=>{var t=e.domain();if(!(!t||t.length<=2)){var r=t.length,n=e.range(),i=Math.min(n[0],n[1])-vf,a=Math.max(n[0],n[1])+vf,o=e(t[0]),u=e(t[r-1]);(oa||ua)&&e.domain([t[0],t[r-1]])}},rw=(e,t)=>{if(!t||t.length!==2||!D(t[0])||!D(t[1]))return e;var r=Math.min(t[0],t[1]),n=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!D(e[0])||e[0]n)&&(i[1]=n),i[0]>n&&(i[0]=n),i[1]{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[o][r][0]=i,e[o][r][1]=i+u,i=e[o][r][1]):(e[o][r][0]=a,e[o][r][1]=a+u,a=e[o][r][1])}},iw=e=>{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[a][r][0]=i,e[a][r][1]=i+o,i=e[a][r][1]):(e[a][r][0]=0,e[a][r][1]=0)}},aw={sign:nw,expand:L0,none:jr,silhouette:B0,wiggle:K0,positive:iw},ow=(e,t,r)=>{var n=aw[r],i=R0().keys(t).value((a,o)=>+re(a,o,0)).order(Jo).offset(n);return i(e)};function rp(e){return e==null?void 0:String(e)}function pf(e){var{axis:t,ticks:r,bandSize:n,entry:i,index:a,dataKey:o}=e;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!J(i[t.dataKey])){var u=Zh(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r[a]?r[a].coordinate+n/2:null}var l=re(i,J(o)?t.dataKey:o);return J(l)?null:t.scale(l)}var mf=e=>{var{axis:t,ticks:r,offset:n,bandSize:i,entry:a,index:o}=e;if(t.type==="category")return r[o]?r[o].coordinate+n:null;var u=re(a,t.dataKey,t.scale.domain()[o]);return J(u)?null:t.scale(u)-i/2+n},uw=e=>{var{numericAxis:t}=e,r=t.scale.domain();if(t.type==="number"){var n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return n<=0&&i>=0?0:i<0?i:n}return r[0]},sw=e=>{var t=e.flat(2).filter(D);return[Math.min(...t),Math.max(...t)]},lw=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],cw=(e,t,r)=>{if(e!=null)return lw(Object.keys(e).reduce((n,i)=>{var a=e[i],{stackedData:o}=a,u=o.reduce((l,c)=>{var s=sw(c.slice(t,r+1));return[Math.min(l[0],s[0]),Math.max(l[1],s[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},gf=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,yf=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,an=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=_i(t,s=>s.coordinate),a=1/0,o=1,u=i.length;o=i.left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height;return a?{x:e,y:t}:null}return n?Vx({x:e,y:t},n):null}var dw=(e,t,r,n)=>{var i=t.find(c=>c&&c.index===r);if(i){if(e==="horizontal")return{x:i.coordinate,y:n.y};if(e==="vertical")return{x:n.x,y:i.coordinate};if(e==="centric"){var a=i.coordinate,{radius:o}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,o,a)),{},{angle:a,radius:o})}var u=i.coordinate,{angle:l}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,u,l)),{},{angle:l,radius:u})}return{x:0,y:0}},hw=(e,t)=>t==="horizontal"?e.x:t==="vertical"?e.y:t==="centric"?e.angle:e.radius,Ct=e=>e.layout.width,_t=e=>e.layout.height,vw=e=>e.layout.scale,np=e=>e.layout.margin,ss=E(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),ls=E(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),ip="data-recharts-item-index",ap="data-recharts-item-data-key",Li=60;function xf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Nt(e){for(var t=1;te.brush.height,ve=E([Ct,_t,np,yw,ss,ls,Tv,qb],(e,t,r,n,i,a,o,u)=>{var l=a.reduce((v,p)=>{var{orientation:g}=p;if(!p.mirror&&!p.hide){var y=typeof p.width=="number"?p.width:Li;return Nt(Nt({},v),{},{[g]:v[g]+y})}return v},{left:r.left||0,right:r.right||0}),c=i.reduce((v,p)=>{var{orientation:g}=p;return!p.mirror&&!p.hide?Nt(Nt({},v),{},{[g]:qt(v,"".concat(g))+p.height}):v},{top:r.top||0,bottom:r.bottom||0}),s=Nt(Nt({},c),l),f=s.bottom;s.bottom+=n,s=ew(s,o,u);var d=e-s.left-s.right,h=t-s.top-s.bottom;return Nt(Nt({brushBottom:f},s),{},{width:Math.max(d,0),height:Math.max(h,0)})}),bw=E(ve,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),op=E(Ct,_t,(e,t)=>({x:0,y:0,width:e,height:t})),xw=m.createContext(null),Ce=()=>m.useContext(xw)!=null,Bi=e=>e.brush,Ki=E([Bi,ve,np],(e,t,r)=>({height:e.height,x:D(e.x)?e.x:t.left,y:D(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:D(e.width)?e.width:t.width})),cs=()=>{var e,t=Ce(),r=$(bw),n=$(Ki),i=(e=$(Bi))===null||e===void 0?void 0:e.padding;return!t||!n||!i?r:{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}},ww={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},up=()=>{var e;return(e=$(ve))!==null&&e!==void 0?e:ww},sp=()=>$(Ct),lp=()=>$(_t),Y=e=>e.layout.layoutType,qi=()=>$(Y),Pw={settings:{layout:"horizontal",align:"center",verticalAlign:"middle",itemSorter:"value"},size:{width:0,height:0},payload:[]},cp=nt({name:"legend",initialState:Pw,reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload(e,t){e.payload.push(t.payload)},removeLegendPayload(e,t){var r=Ot(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)}}}),{setLegendSize:W2,setLegendSettings:U2,addLegendPayload:fp,removeLegendPayload:dp}=cp.actions,Ow=cp.reducer;function su(){return su=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{separator:t=" : ",contentStyle:r={},itemStyle:n={},labelStyle:i={},payload:a,formatter:o,itemSorter:u,wrapperClassName:l,labelClassName:c,label:s,labelFormatter:f,accessibilityLayer:d=!1}=e,h=()=>{if(a&&a.length){var w={padding:0,margin:0},O=(u?_i(a,u):a).map((A,j)=>{if(A.type==="none")return null;var T=A.formatter||o||jw,{value:I,name:C}=A,_=I,R=C;if(T){var B=T(I,C,A,j,a);if(Array.isArray(B))[_,R]=B;else if(B!=null)_=B;else return null}var F=fo({display:"block",paddingTop:4,paddingBottom:4,color:A.color||"#000"},n);return m.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(j),style:F},dt(R)?m.createElement("span",{className:"recharts-tooltip-item-name"},R):null,dt(R)?m.createElement("span",{className:"recharts-tooltip-item-separator"},t):null,m.createElement("span",{className:"recharts-tooltip-item-value"},_),m.createElement("span",{className:"recharts-tooltip-item-unit"},A.unit||""))});return m.createElement("ul",{className:"recharts-tooltip-item-list",style:w},O)}return null},v=fo({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},r),p=fo({margin:0},i),g=!J(s),y=g?s:"",b=H("recharts-default-tooltip",l),x=H("recharts-tooltip-label",c);g&&f&&a!==void 0&&a!==null&&(y=f(s,a));var P=d?{role:"status","aria-live":"assertive"}:{};return m.createElement("div",su({className:b,style:v},P),m.createElement("p",{className:x,style:p},m.isValidElement(y)?y:"".concat(y)),h())},Wr="recharts-tooltip-wrapper",kw={visibility:"hidden"};function Cw(e){var{coordinate:t,translateX:r,translateY:n}=e;return H(Wr,{["".concat(Wr,"-right")]:D(r)&&t&&D(t.x)&&r>=t.x,["".concat(Wr,"-left")]:D(r)&&t&&D(t.x)&&r=t.y,["".concat(Wr,"-top")]:D(n)&&t&&D(t.y)&&n0?i:0),f=r[n]+i;if(t[n])return o[n]?s:f;var d=l[n];if(d==null)return 0;if(o[n]){var h=s,v=d;return hg?Math.max(s,d):Math.max(f,d)}function _w(e){var{translateX:t,translateY:r,useTranslate3d:n}=e;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function Mw(e){var{allowEscapeViewBox:t,coordinate:r,offsetTopLeft:n,position:i,reverseDirection:a,tooltipBox:o,useTranslate3d:u,viewBox:l}=e,c,s,f;return o.height>0&&o.width>0&&r?(s=Pf({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:l,viewBoxDimension:l.width}),f=Pf({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:l,viewBoxDimension:l.height}),c=_w({translateX:s,translateY:f,useTranslate3d:u})):c=kw,{cssProperties:c,cssClasses:Cw({translateX:s,translateY:f,coordinate:r})}}function Of(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Nn(e){for(var t=1;t{if(t.key==="Escape"){var r,n,i,a;this.setState({dismissed:!0,dismissedAtCoordinate:{x:(r=(n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==null&&r!==void 0?r:0,y:(i=(a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==null&&i!==void 0?i:0}})}})}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown)}componentDidUpdate(){var t,r;this.state.dismissed&&(((t=this.props.coordinate)===null||t===void 0?void 0:t.x)!==this.state.dismissedAtCoordinate.x||((r=this.props.coordinate)===null||r===void 0?void 0:r.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}render(){var{active:t,allowEscapeViewBox:r,animationDuration:n,animationEasing:i,children:a,coordinate:o,hasPayload:u,isAnimationActive:l,offset:c,position:s,reverseDirection:f,useTranslate3d:d,viewBox:h,wrapperStyle:v,lastBoundingBox:p,innerRef:g,hasPortalFromProps:y}=this.props,{cssClasses:b,cssProperties:x}=Mw({allowEscapeViewBox:r,coordinate:o,offsetTopLeft:c,position:s,reverseDirection:f,tooltipBox:{height:p.height,width:p.width},useTranslate3d:d,viewBox:h}),P=y?{}:Nn(Nn({transition:l&&t?"transform ".concat(n,"ms ").concat(i):void 0},x),{},{pointerEvents:"none",visibility:!this.state.dismissed&&t&&u?"visible":"hidden",position:"absolute",top:0,left:0}),w=Nn(Nn({},P),{},{visibility:!this.state.dismissed&&t&&u?"visible":"hidden"},v);return m.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:b,style:w,ref:g},a)}}var $w=()=>!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout),pr={isSsr:$w()},hp=()=>$(e=>e.rootProps.accessibilityLayer);function Ye(e){return Number.isFinite(e)}function kr(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function cu(){return cu=Object.assign?Object.assign.bind():function(e){for(var t=1;tYe(e.x)&&Ye(e.y),Ur=e=>e.x,Hr=e=>e.y,Kw=(e,t)=>{if(typeof e=="function")return e;var r="curve".concat(pn(e));return(r==="curveMonotone"||r==="curveBump")&&t?Ef["".concat(r).concat(t==="vertical"?"Y":"X")]:Ef[r]||ki},qw=e=>{var{type:t="linear",points:r=[],baseLine:n,layout:i,connectNulls:a=!1}=e,o=Kw(t,i),u=a?r.filter($n):r,l;if(Array.isArray(n)){var c=a?n.filter(f=>$n(f)):n,s=u.map((f,d)=>Sf(Sf({},f),{},{base:c[d]}));return i==="vertical"?l=Cn().y(Hr).x1(Ur).x0(f=>f.base.x):l=Cn().x(Ur).y1(Hr).y0(f=>f.base.y),l.defined($n).curve(o),l(s)}return i==="vertical"&&D(n)?l=Cn().y(Hr).x1(Ur).x0(n):D(n)?l=Cn().x(Ur).y1(Hr).y0(n):l=ov().x(Ur).y(Hr),l.defined($n).curve(o),l(u)},fs=e=>{var{className:t,points:r,path:n,pathRef:i}=e;if((!r||!r.length)&&!n)return null;var a=r&&r.length?qw(e):n;return m.createElement("path",cu({},z(e,!1),Yu(e),{className:H("recharts-curve",t),d:a===null?void 0:a,ref:i}))},zw=["x","y","top","left","width","height","className"];function fu(){return fu=Object.assign?Object.assign.bind():function(e){for(var t=1;t"M".concat(e,",").concat(i,"v").concat(n,"M").concat(a,",").concat(t,"h").concat(r),Xw=e=>{var{x:t=0,y:r=0,top:n=0,left:i=0,width:a=0,height:o=0,className:u}=e,l=Yw(e,zw),c=Fw({x:t,y:r,top:n,left:i,width:a,height:o},l);return!D(t)||!D(r)||!D(a)||!D(o)||!D(n)||!D(i)?null:m.createElement("path",fu({},z(c,!0),{className:H("recharts-cross",u),d:Vw(t,r,a,o,n,i)}))};function Zw(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-i:r.left+.5,y:e==="horizontal"?r.top+.5:t.y-i,width:e==="horizontal"?n:r.width-1,height:e==="horizontal"?r.height-1:n}}function Tf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Jw(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}var ho={},vo={},po={},kf;function r1(){return kf||(kf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){if(!r||typeof r!="object")return!1;const n=Object.getPrototypeOf(r);return n===null||n===Object.prototype||Object.getPrototypeOf(n)===null?Object.prototype.toString.call(r)==="[object Object]":!1}e.isPlainObject=t}(po)),po}var Cf;function n1(){return Cf||(Cf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=r1(),r=Pv(),n=es(),i=ts(),a=Ju();function o(c,s,f){return u(c,s,void 0,void 0,void 0,void 0,f)}function u(c,s,f,d,h,v,p){const g=p(c,s,f,d,h,v);if(g!==void 0)return g;if(typeof c==typeof s)switch(typeof c){case"bigint":case"string":case"boolean":case"symbol":case"undefined":return c===s;case"number":return c===s||Object.is(c,s);case"function":return c===s;case"object":return l(c,s,v,p)}return l(c,s,v,p)}function l(c,s,f,d){if(Object.is(c,s))return!0;let h=n.getTag(c),v=n.getTag(s);if(h===i.argumentsTag&&(h=i.objectTag),v===i.argumentsTag&&(v=i.objectTag),h!==v)return!1;switch(h){case i.stringTag:return c.toString()===s.toString();case i.numberTag:{const y=c.valueOf(),b=s.valueOf();return a.eq(y,b)}case i.booleanTag:case i.dateTag:case i.symbolTag:return Object.is(c.valueOf(),s.valueOf());case i.regexpTag:return c.source===s.source&&c.flags===s.flags;case i.functionTag:return c===s}f=f??new Map;const p=f.get(c),g=f.get(s);if(p!=null&&g!=null)return p===s;f.set(c,s),f.set(s,c);try{switch(h){case i.mapTag:{if(c.size!==s.size)return!1;for(const[y,b]of c.entries())if(!s.has(y)||!u(b,s.get(y),y,c,s,f,d))return!1;return!0}case i.setTag:{if(c.size!==s.size)return!1;const y=Array.from(c.values()),b=Array.from(s.values());for(let x=0;xu(P,O,void 0,c,s,f,d));if(w===-1)return!1;b.splice(w,1)}return!0}case i.arrayTag:case i.uint8ArrayTag:case i.uint8ClampedArrayTag:case i.uint16ArrayTag:case i.uint32ArrayTag:case i.bigUint64ArrayTag:case i.int8ArrayTag:case i.int16ArrayTag:case i.int32ArrayTag:case i.bigInt64ArrayTag:case i.float32ArrayTag:case i.float64ArrayTag:{if(typeof Buffer<"u"&&Buffer.isBuffer(c)!==Buffer.isBuffer(s)||c.length!==s.length)return!1;for(let y=0;ynull,n=!1,i=null,a=o=>{if(!n){if(Array.isArray(o)){if(!o.length)return;var u=o,[l,...c]=u;if(typeof l=="number"){i=e.setTimeout(a.bind(null,c),l);return}a(l),i=e.setTimeout(a.bind(null,c));return}typeof o=="object"&&(t=o,r(t)),typeof o=="function"&&o()}};return{stop:()=>{n=!0},start:o=>{n=!1,i&&(i(),i=null),a(o)},subscribe:o=>(r=o,()=>{r=()=>null}),getTimeoutController:()=>e}}var ai=1e-4,vp=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],pp=(e,t)=>e.map((r,n)=>r*t**n).reduce((r,n)=>r+n),If=(e,t)=>r=>{var n=vp(e,t);return pp(n,r)},c1=(e,t)=>r=>{var n=vp(e,t),i=[...n.map((a,o)=>a*o).slice(1),0];return pp(i,r)},Nf=function(){for(var t,r,n,i,a=arguments.length,o=new Array(a),u=0;uparseFloat(v)))}}else o.length===4&&([t,n,r,i]=o);var c=If(t,r),s=If(n,i),f=c1(t,r),d=v=>v>1?1:v<0?0:v,h=v=>{for(var p=v>1?1:v,g=p,y=0;y<8;++y){var b=c(g)-p,x=f(g);if(Math.abs(b-p)0&&arguments[0]!==void 0?arguments[0]:{},{stiff:r=100,damping:n=8,dt:i=17}=t,a=(o,u,l)=>{var c=-(o-u)*r,s=l*n,f=l+(c-s)*i/1e3,d=l*i/1e3+o;return Math.abs(d-u){if(typeof e=="string")switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return Nf(e);case"spring":return f1();default:if(e.split("(")[0]==="cubic-bezier")return Nf(e)}return typeof e=="function"?e:null};function $f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Rf(e){for(var t=1;te.replace(/([A-Z])/g,t=>"-".concat(t.toLowerCase())),g1=(e,t,r)=>e.map(n=>"".concat(m1(n)," ").concat(t,"ms ").concat(r)).join(","),y1=(e,t)=>[Object.keys(e),Object.keys(t)].reduce((r,n)=>r.filter(i=>n.includes(i))),on=(e,t)=>Object.keys(t).reduce((r,n)=>Rf(Rf({},r),{},{[n]:e(n,t[n])}),{});function Lf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Oe(e){for(var t=1;te+(t-e)*r,du=e=>{var{from:t,to:r}=e;return t!==r},mp=(e,t,r)=>{var n=on((i,a)=>{if(du(a)){var[o,u]=e(a.from,a.to,a.velocity);return Oe(Oe({},a),{},{from:o,velocity:u})}return a},t);return r<1?on((i,a)=>du(a)?Oe(Oe({},a),{},{velocity:oi(a.velocity,n[i].velocity,r),from:oi(a.from,n[i].from,r)}):a,t):mp(e,n,r-1)};function P1(e,t,r,n,i,a){var o,u=n.reduce((d,h)=>Oe(Oe({},d),{},{[h]:{from:e[h],velocity:0,to:t[h]}}),{}),l=()=>on((d,h)=>h.from,u),c=()=>!Object.values(u).filter(du).length,s=null,f=d=>{o||(o=d);var h=d-o,v=h/r.dt;u=mp(r,u,v),i(Oe(Oe(Oe({},e),t),l())),o=d,c()||(s=a.setTimeout(f))};return()=>(s=a.setTimeout(f),()=>{s()})}function O1(e,t,r,n,i,a,o){var u=null,l=i.reduce((f,d)=>Oe(Oe({},f),{},{[d]:[e[d],t[d]]}),{}),c,s=f=>{c||(c=f);var d=(f-c)/n,h=on((p,g)=>oi(...g,r(d)),l);if(a(Oe(Oe(Oe({},e),t),h)),d<1)u=o.setTimeout(s);else{var v=on((p,g)=>oi(...g,r(1)),l);a(Oe(Oe(Oe({},e),t),v))}};return()=>(u=o.setTimeout(s),()=>{u()})}const A1=(e,t,r,n,i,a)=>{var o=y1(e,t);return r.isStepper===!0?P1(e,t,r,o,i,a):O1(e,t,r,n,o,i,a)};class S1{setTimeout(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),i=null,a=o=>{o-n>=r?t(o):typeof requestAnimationFrame=="function"&&(i=requestAnimationFrame(a))};return i=requestAnimationFrame(a),()=>{cancelAnimationFrame(i)}}}var E1=["children","begin","duration","attributeName","easing","isActive","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart","animationManager"];function hu(){return hu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{this.stopJSAnimation=c()};this.manager.start([l,o,s,i,u])}runAnimation(t){var{begin:r,duration:n,attributeName:i,to:a,easing:o,onAnimationStart:u,onAnimationEnd:l,children:c}=t;if(this.unSubscribe=this.manager.subscribe(this.handleStyleChange),typeof o=="function"||typeof c=="function"||o==="spring"){this.runJSAnimation(t);return}var s=i?{[i]:a}:a,f=g1(Object.keys(s),n,o);this.manager.start([u,r,$t($t({},s),{},{transition:f}),n,l])}render(){var t=this.props,{children:r,begin:n,duration:i,attributeName:a,easing:o,isActive:u,from:l,to:c,canBegin:s,onAnimationEnd:f,shouldReAnimate:d,onAnimationReStart:h,animationManager:v}=t,p=j1(t,E1),g=m.Children.count(r),y=this.state.style;if(typeof r=="function")return r(y);if(!u||g===0||i<=0)return r;var b=x=>{var{style:P={},className:w}=x.props,O=m.cloneElement(x,$t($t({},p),{},{style:$t($t({},P),y),className:w}));return O};return g===1?b(m.Children.only(r)):m.createElement("div",null,m.Children.map(r,x=>b(x)))}}rr(ds,"displayName","Animate");rr(ds,"defaultProps",{begin:0,duration:1e3,attributeName:"",easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}});var M1=m.createContext(null);function zt(e){var t,r,n=m.useContext(M1);return m.createElement(ds,hu({},e,{animationManager:(t=(r=e.animationManager)!==null&&r!==void 0?r:n)!==null&&t!==void 0?t:_1()}))}function ui(){return ui=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=Math.min(Math.abs(r)/2,Math.abs(n)/2),o=n>=0?1:-1,u=r>=0?1:-1,l=n>=0&&r>=0||n<0&&r<0?1:0,c;if(a>0&&i instanceof Array){for(var s=[0,0,0,0],f=0,d=4;fa?a:i[f];c="M".concat(e,",").concat(t+o*s[0]),s[0]>0&&(c+="A ".concat(s[0],",").concat(s[0],",0,0,").concat(l,",").concat(e+u*s[0],",").concat(t)),c+="L ".concat(e+r-u*s[1],",").concat(t),s[1]>0&&(c+="A ".concat(s[1],",").concat(s[1],",0,0,").concat(l,`, - `).concat(e+r,",").concat(t+o*s[1])),c+="L ".concat(e+r,",").concat(t+n-o*s[2]),s[2]>0&&(c+="A ".concat(s[2],",").concat(s[2],",0,0,").concat(l,`, - `).concat(e+r-u*s[2],",").concat(t+n)),c+="L ".concat(e+u*s[3],",").concat(t+n),s[3]>0&&(c+="A ".concat(s[3],",").concat(s[3],",0,0,").concat(l,`, - `).concat(e,",").concat(t+n-o*s[3])),c+="Z"}else if(a>0&&i===+i&&i>0){var h=Math.min(a,i);c="M ".concat(e,",").concat(t+o*h,` - A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+u*h,",").concat(t,` - L `).concat(e+r-u*h,",").concat(t,` - A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r,",").concat(t+o*h,` - L `).concat(e+r,",").concat(t+n-o*h,` - A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r-u*h,",").concat(t+n,` - L `).concat(e+u*h,",").concat(t+n,` - A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e,",").concat(t+n-o*h," Z")}else c="M ".concat(e,",").concat(t," h ").concat(r," v ").concat(n," h ").concat(-r," Z");return c},D1={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},gp=e=>{var t=it(e,D1),r=m.useRef(null),[n,i]=m.useState(-1);m.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var y=r.current.getTotalLength();y&&i(y)}catch{}},[]);var{x:a,y:o,width:u,height:l,radius:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isAnimationActive:v,isUpdateAnimationActive:p}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||u===0||l===0)return null;var g=H("recharts-rectangle",s);return p?m.createElement(zt,{canBegin:n>0,from:{width:u,height:l,x:a,y:o},to:{width:u,height:l,x:a,y:o},duration:d,animationEasing:f,isActive:p},y=>{var{width:b,height:x,x:P,y:w}=y;return m.createElement(zt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,isActive:v,easing:f},m.createElement("path",ui({},z(t,!0),{className:g,d:Kf(P,w,b,x,c),ref:r})))}):m.createElement("path",ui({},z(t,!0),{className:g,d:Kf(a,o,u,l,c)}))};function yp(e){var{cx:t,cy:r,radius:n,startAngle:i,endAngle:a}=e,o=ce(t,r,n,i),u=ce(t,r,n,a);return{points:[o,u],cx:t,cy:r,radius:n,startAngle:i,endAngle:a}}function vu(){return vu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=ge(t-e),n=Math.min(Math.abs(t-e),359.999);return r*n},Rn=e=>{var{cx:t,cy:r,radius:n,angle:i,sign:a,isExternal:o,cornerRadius:u,cornerIsExternal:l}=e,c=u*(o?1:-1)+n,s=Math.asin(u/c)/ii,f=l?i:i+a*s,d=ce(t,r,c,f),h=ce(t,r,n,f),v=l?i-a*s:i,p=ce(t,r,c*Math.cos(s*ii),v);return{center:d,circleTangency:h,lineTangency:p,theta:s}},bp=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:a,endAngle:o}=e,u=I1(a,o),l=a+u,c=ce(t,r,i,a),s=ce(t,r,i,l),f="M ".concat(c.x,",").concat(c.y,` - A `).concat(i,",").concat(i,`,0, - `).concat(+(Math.abs(u)>180),",").concat(+(a>l),`, - `).concat(s.x,",").concat(s.y,` - `);if(n>0){var d=ce(t,r,n,a),h=ce(t,r,n,l);f+="L ".concat(h.x,",").concat(h.y,` - A `).concat(n,",").concat(n,`,0, - `).concat(+(Math.abs(u)>180),",").concat(+(a<=l),`, - `).concat(d.x,",").concat(d.y," Z")}else f+="L ".concat(t,",").concat(r," Z");return f},N1=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,cornerRadius:a,forceCornerRadius:o,cornerIsExternal:u,startAngle:l,endAngle:c}=e,s=ge(c-l),{circleTangency:f,lineTangency:d,theta:h}=Rn({cx:t,cy:r,radius:i,angle:l,sign:s,cornerRadius:a,cornerIsExternal:u}),{circleTangency:v,lineTangency:p,theta:g}=Rn({cx:t,cy:r,radius:i,angle:c,sign:-s,cornerRadius:a,cornerIsExternal:u}),y=u?Math.abs(l-c):Math.abs(l-c)-h-g;if(y<0)return o?"M ".concat(d.x,",").concat(d.y,` - a`).concat(a,",").concat(a,",0,0,1,").concat(a*2,`,0 - a`).concat(a,",").concat(a,",0,0,1,").concat(-a*2,`,0 - `):bp({cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:l,endAngle:c});var b="M ".concat(d.x,",").concat(d.y,` - A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(f.x,",").concat(f.y,` - A`).concat(i,",").concat(i,",0,").concat(+(y>180),",").concat(+(s<0),",").concat(v.x,",").concat(v.y,` - A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(p.x,",").concat(p.y,` - `);if(n>0){var{circleTangency:x,lineTangency:P,theta:w}=Rn({cx:t,cy:r,radius:n,angle:l,sign:s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),{circleTangency:O,lineTangency:A,theta:j}=Rn({cx:t,cy:r,radius:n,angle:c,sign:-s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),T=u?Math.abs(l-c):Math.abs(l-c)-w-j;if(T<0&&a===0)return"".concat(b,"L").concat(t,",").concat(r,"Z");b+="L".concat(A.x,",").concat(A.y,` - A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(O.x,",").concat(O.y,` - A`).concat(n,",").concat(n,",0,").concat(+(T>180),",").concat(+(s>0),",").concat(x.x,",").concat(x.y,` - A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(P.x,",").concat(P.y,"Z")}else b+="L".concat(t,",").concat(r,"Z");return b},$1={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},xp=e=>{var t=it(e,$1),{cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:o,forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s,className:f}=t;if(a0&&Math.abs(c-s)<360?p=N1({cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:Math.min(v,h/2),forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s}):p=bp({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:c,endAngle:s}),m.createElement("path",vu({},z(t,!0),{className:d,d:p}))};function R1(e,t,r){var n,i,a,o;if(e==="horizontal")n=t.x,a=n,i=r.top,o=r.top+r.height;else if(e==="vertical")i=t.y,o=i,n=r.left,a=r.left+r.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var{cx:u,cy:l,innerRadius:c,outerRadius:s,angle:f}=t,d=ce(u,l,c,f),h=ce(u,l,s,f);n=d.x,i=d.y,a=h.x,o=h.y}else return yp(t);return[{x:n,y:i},{x:a,y:o}]}var yo={},bo={},xo={},qf;function L1(){return qf||(qf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ev();function r(n){return t.isSymbol(n)?NaN:Number(n)}e.toNumber=r}(xo)),xo}var zf;function B1(){return zf||(zf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=L1();function r(n){return n?(n=t.toNumber(n),n===1/0||n===-1/0?(n<0?-1:1)*Number.MAX_VALUE:n===n?n:0):n===0?n:0}e.toFinite=r}(bo)),bo}var Ff;function K1(){return Ff||(Ff=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=jv(),r=B1();function n(i,a,o){o&&typeof o!="number"&&t.isIterateeCall(i,a,o)&&(a=o=void 0),i=r.toFinite(i),a===void 0?(a=i,i=0):a=r.toFinite(a),o=o===void 0?it?1:e>=t?0:NaN}function F1(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function hs(e){let t,r,n;e.length!==2?(t=Bt,r=(u,l)=>Bt(e(u),l),n=(u,l)=>e(u)-l):(t=e===Bt||e===F1?e:W1,r=e,n=e);function i(u,l,c=0,s=u.length){if(c>>1;r(u[f],l)<0?c=f+1:s=f}while(c>>1;r(u[f],l)<=0?c=f+1:s=f}while(cc&&n(u[f-1],l)>-n(u[f],l)?f-1:f}return{left:i,center:o,right:a}}function W1(){return 0}function Pp(e){return e===null?NaN:+e}function*U1(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const H1=hs(Bt),yn=H1.right;hs(Pp).center;class Uf extends Map{constructor(t,r=V1){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(Hf(this,t))}has(t){return super.has(Hf(this,t))}set(t,r){return super.set(Y1(this,t),r)}delete(t){return super.delete(G1(this,t))}}function Hf({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function Y1({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function G1({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function V1(e){return e!==null&&typeof e=="object"?e.valueOf():e}function X1(e=Bt){if(e===Bt)return Op;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function Op(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const Z1=Math.sqrt(50),J1=Math.sqrt(10),Q1=Math.sqrt(2);function si(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=Z1?10:a>=J1?5:a>=Q1?2:1;let u,l,c;return i<0?(c=Math.pow(10,-i)/o,u=Math.round(e*c),l=Math.round(t*c),u/ct&&--l,c=-c):(c=Math.pow(10,i)*o,u=Math.round(e/c),l=Math.round(t/c),u*ct&&--l),l0))return[];if(e===t)return[e];const n=t=i))return[];const u=a-i+1,l=new Array(u);if(n)if(o<0)for(let c=0;c=n)&&(r=n);return r}function Gf(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function Ap(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?Op:X1(i);n>r;){if(n-r>600){const l=n-r+1,c=t-r+1,s=Math.log(l),f=.5*Math.exp(2*s/3),d=.5*Math.sqrt(s*f*(l-f)/l)*(c-l/2<0?-1:1),h=Math.max(r,Math.floor(t-c*f/l+d)),v=Math.min(n,Math.floor(t+(l-c)*f/l+d));Ap(e,t,h,v,i)}const a=e[t];let o=r,u=n;for(Yr(e,r,t),i(e[n],a)>0&&Yr(e,r,n);o0;)--u}i(e[r],a)===0?Yr(e,r,u):(++u,Yr(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function Yr(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function eP(e,t,r){if(e=Float64Array.from(U1(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Gf(e);if(t>=1)return Yf(e);var n,i=(n-1)*t,a=Math.floor(i),o=Yf(Ap(e,a).subarray(0,a+1)),u=Gf(e.subarray(a+1));return o+(u-o)*(i-a)}}function tP(e,t,r=Pp){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return o+(u-o)*(i-a)}}function rP(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Ln(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Ln(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=aP.exec(e))?new De(t[1],t[2],t[3],1):(t=oP.exec(e))?new De(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=uP.exec(e))?Ln(t[1],t[2],t[3],t[4]):(t=sP.exec(e))?Ln(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=lP.exec(e))?td(t[1],t[2]/100,t[3]/100,1):(t=cP.exec(e))?td(t[1],t[2]/100,t[3]/100,t[4]):Vf.hasOwnProperty(e)?Jf(Vf[e]):e==="transparent"?new De(NaN,NaN,NaN,0):null}function Jf(e){return new De(e>>16&255,e>>8&255,e&255,1)}function Ln(e,t,r,n){return n<=0&&(e=t=r=NaN),new De(e,t,r,n)}function hP(e){return e instanceof bn||(e=ln(e)),e?(e=e.rgb(),new De(e.r,e.g,e.b,e.opacity)):new De}function bu(e,t,r,n){return arguments.length===1?hP(e):new De(e,t,r,n??1)}function De(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}ms(De,bu,Ep(bn,{brighter(e){return e=e==null?li:Math.pow(li,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?un:Math.pow(un,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new De(sr(this.r),sr(this.g),sr(this.b),ci(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Qf,formatHex:Qf,formatHex8:vP,formatRgb:ed,toString:ed}));function Qf(){return`#${nr(this.r)}${nr(this.g)}${nr(this.b)}`}function vP(){return`#${nr(this.r)}${nr(this.g)}${nr(this.b)}${nr((isNaN(this.opacity)?1:this.opacity)*255)}`}function ed(){const e=ci(this.opacity);return`${e===1?"rgb(":"rgba("}${sr(this.r)}, ${sr(this.g)}, ${sr(this.b)}${e===1?")":`, ${e})`}`}function ci(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function sr(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function nr(e){return e=sr(e),(e<16?"0":"")+e.toString(16)}function td(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new st(e,t,r,n)}function jp(e){if(e instanceof st)return new st(e.h,e.s,e.l,e.opacity);if(e instanceof bn||(e=ln(e)),!e)return new st;if(e instanceof st)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,u=a-i,l=(a+i)/2;return u?(t===a?o=(r-n)/u+(r0&&l<1?0:o,new st(o,u,l,e.opacity)}function pP(e,t,r,n){return arguments.length===1?jp(e):new st(e,t,r,n??1)}function st(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}ms(st,pP,Ep(bn,{brighter(e){return e=e==null?li:Math.pow(li,e),new st(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?un:Math.pow(un,e),new st(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new De(Po(e>=240?e-240:e+120,i,n),Po(e,i,n),Po(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new st(rd(this.h),Bn(this.s),Bn(this.l),ci(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=ci(this.opacity);return`${e===1?"hsl(":"hsla("}${rd(this.h)}, ${Bn(this.s)*100}%, ${Bn(this.l)*100}%${e===1?")":`, ${e})`}`}}));function rd(e){return e=(e||0)%360,e<0?e+360:e}function Bn(e){return Math.max(0,Math.min(1,e||0))}function Po(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const gs=e=>()=>e;function mP(e,t){return function(r){return e+r*t}}function gP(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function yP(e){return(e=+e)==1?Tp:function(t,r){return r-t?gP(t,r,e):gs(isNaN(t)?r:t)}}function Tp(e,t){var r=t-e;return r?mP(e,r):gs(isNaN(e)?t:e)}const nd=function e(t){var r=yP(t);function n(i,a){var o=r((i=bu(i)).r,(a=bu(a)).r),u=r(i.g,a.g),l=r(i.b,a.b),c=Tp(i.opacity,a.opacity);return function(s){return i.r=o(s),i.g=u(s),i.b=l(s),i.opacity=c(s),i+""}}return n.gamma=e,n}(1);function bP(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),u[o]?u[o]+=a:u[++o]=a),(n=n[0])===(i=i[0])?u[o]?u[o]+=i:u[++o]=i:(u[++o]=null,l.push({i:o,x:fi(n,i)})),r=Oo.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function CP(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?_P:CP,l=c=null,f}function f(d){return d==null||isNaN(d=+d)?a:(l||(l=u(e.map(n),t,r)))(n(o(d)))}return f.invert=function(d){return o(i((c||(c=u(t,e.map(n),fi)))(d)))},f.domain=function(d){return arguments.length?(e=Array.from(d,di),s()):e.slice()},f.range=function(d){return arguments.length?(t=Array.from(d),s()):t.slice()},f.rangeRound=function(d){return t=Array.from(d),r=ys,s()},f.clamp=function(d){return arguments.length?(o=d?!0:Te,s()):o!==Te},f.interpolate=function(d){return arguments.length?(r=d,s()):r},f.unknown=function(d){return arguments.length?(a=d,f):a},function(d,h){return n=d,i=h,s()}}function bs(){return zi()(Te,Te)}function MP(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function hi(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Cr(e){return e=hi(Math.abs(e)),e?e[1]:NaN}function DP(e,t){return function(r,n){for(var i=r.length,a=[],o=0,u=e[0],l=0;i>0&&u>0&&(l+u+1>n&&(u=Math.max(1,n-l)),a.push(r.substring(i-=u,i+u)),!((l+=u+1)>n));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}function IP(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var NP=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function cn(e){if(!(t=NP.exec(e)))throw new Error("invalid format: "+e);var t;return new xs({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}cn.prototype=xs.prototype;function xs(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}xs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function $P(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var kp;function RP(e,t){var r=hi(e,t);if(!r)return e+"";var n=r[0],i=r[1],a=i-(kp=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+hi(e,Math.max(0,t+a-1))[0]}function ad(e,t){var r=hi(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const od={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:MP,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>ad(e*100,t),r:ad,s:RP,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function ud(e){return e}var sd=Array.prototype.map,ld=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function LP(e){var t=e.grouping===void 0||e.thousands===void 0?ud:DP(sd.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?ud:IP(sd.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function c(f){f=cn(f);var d=f.fill,h=f.align,v=f.sign,p=f.symbol,g=f.zero,y=f.width,b=f.comma,x=f.precision,P=f.trim,w=f.type;w==="n"?(b=!0,w="g"):od[w]||(x===void 0&&(x=12),P=!0,w="g"),(g||d==="0"&&h==="=")&&(g=!0,d="0",h="=");var O=p==="$"?r:p==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",A=p==="$"?n:/[%p]/.test(w)?o:"",j=od[w],T=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function I(C){var _=O,R=A,B,F,V;if(w==="c")R=j(C)+R,C="";else{C=+C;var K=C<0||1/C<0;if(C=isNaN(C)?l:j(Math.abs(C),x),P&&(C=$P(C)),K&&+C==0&&v!=="+"&&(K=!1),_=(K?v==="("?v:u:v==="-"||v==="("?"":v)+_,R=(w==="s"?ld[8+kp/3]:"")+R+(K&&v==="("?")":""),T){for(B=-1,F=C.length;++BV||V>57){R=(V===46?i+C.slice(B+1):C.slice(B))+R,C=C.slice(0,B);break}}}b&&!g&&(C=t(C,1/0));var de=_.length+C.length+R.length,oe=de>1)+_+C+R+oe.slice(de);break;default:C=oe+_+C+R;break}return a(C)}return I.toString=function(){return f+""},I}function s(f,d){var h=c((f=cn(f),f.type="f",f)),v=Math.max(-8,Math.min(8,Math.floor(Cr(d)/3)))*3,p=Math.pow(10,-v),g=ld[8+v/3];return function(y){return h(p*y)+g}}return{format:c,formatPrefix:s}}var Kn,ws,Cp;BP({thousands:",",grouping:[3],currency:["$",""]});function BP(e){return Kn=LP(e),ws=Kn.format,Cp=Kn.formatPrefix,Kn}function KP(e){return Math.max(0,-Cr(Math.abs(e)))}function qP(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Cr(t)/3)))*3-Cr(Math.abs(e)))}function zP(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Cr(t)-Cr(e))+1}function _p(e,t,r,n){var i=gu(e,t,r),a;switch(n=cn(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=qP(i,o))&&(n.precision=a),Cp(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=zP(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=KP(i))&&(n.precision=a-(n.type==="%")*2);break}}return ws(n)}function Ht(e){var t=e.domain;return e.ticks=function(r){var n=t();return pu(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return _p(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],u=n[a],l,c,s=10;for(u0;){if(c=mu(o,u,r),c===l)return n[i]=o,n[a]=u,t(n);if(c>0)o=Math.floor(o/c)*c,u=Math.ceil(u/c)*c;else if(c<0)o=Math.ceil(o*c)/c,u=Math.floor(u*c)/c;else break;l=c}return e},e}function Mp(){var e=bs();return e.copy=function(){return xn(e,Mp())},at.apply(e,arguments),Ht(e)}function Dp(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,di),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return Dp(e).unknown(t)},e=arguments.length?Array.from(e,di):[0,1],Ht(r)}function Ip(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function YP(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function dd(e){return(t,r)=>-e(-t,r)}function Ps(e){const t=e(cd,fd),r=t.domain;let n=10,i,a;function o(){return i=YP(n),a=HP(n),r()[0]<0?(i=dd(i),a=dd(a),e(FP,WP)):e(cd,fd),t}return t.base=function(u){return arguments.length?(n=+u,o()):n},t.domain=function(u){return arguments.length?(r(u),o()):r()},t.ticks=u=>{const l=r();let c=l[0],s=l[l.length-1];const f=s0){for(;d<=h;++d)for(v=1;vs)break;y.push(p)}}else for(;d<=h;++d)for(v=n-1;v>=1;--v)if(p=d>0?v/a(-d):v*a(d),!(ps)break;y.push(p)}y.length*2{if(u==null&&(u=10),l==null&&(l=n===10?"s":","),typeof l!="function"&&(!(n%1)&&(l=cn(l)).precision==null&&(l.trim=!0),l=ws(l)),u===1/0)return l;const c=Math.max(1,n*u/t.ticks().length);return s=>{let f=s/a(Math.round(i(s)));return f*nr(Ip(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function Np(){const e=Ps(zi()).domain([1,10]);return e.copy=()=>xn(e,Np()).base(e.base()),at.apply(e,arguments),e}function hd(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function vd(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Os(e){var t=1,r=e(hd(t),vd(t));return r.constant=function(n){return arguments.length?e(hd(t=+n),vd(t)):t},Ht(r)}function $p(){var e=Os(zi());return e.copy=function(){return xn(e,$p()).constant(e.constant())},at.apply(e,arguments)}function pd(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function GP(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function VP(e){return e<0?-e*e:e*e}function As(e){var t=e(Te,Te),r=1;function n(){return r===1?e(Te,Te):r===.5?e(GP,VP):e(pd(r),pd(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},Ht(t)}function Ss(){var e=As(zi());return e.copy=function(){return xn(e,Ss()).exponent(e.exponent())},at.apply(e,arguments),e}function XP(){return Ss.apply(null,arguments).exponent(.5)}function md(e){return Math.sign(e)*e*e}function ZP(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function Rp(){var e=bs(),t=[0,1],r=!1,n;function i(a){var o=ZP(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(md(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,di)).map(md)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return Rp(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},at.apply(i,arguments),Ht(i)}function Lp(){var e=[],t=[],r=[],n;function i(){var o=0,u=Math.max(1,t.length);for(r=new Array(u-1);++o0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[c-1],n[c]]},o.unknown=function(l){return arguments.length&&(a=l),o},o.thresholds=function(){return n.slice()},o.copy=function(){return Bp().domain([e,t]).range(i).unknown(a)},at.apply(Ht(o),arguments)}function Kp(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[yn(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return Kp().domain(e).range(t).unknown(r)},at.apply(i,arguments)}const Ao=new Date,So=new Date;function pe(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),u=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,u)=>{const l=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a0))return l;let c;do l.push(c=new Date(+a)),t(a,u),e(a);while(cpe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,u)=>{if(o>=o)if(u<0)for(;++u<=0;)for(;t(o,-1),!a(o););else for(;--u>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(Ao.setTime(+a),So.setTime(+o),e(Ao),e(So),Math.floor(r(Ao,So))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const vi=pe(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);vi.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?pe(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):vi);vi.range;const yt=1e3,et=yt*60,bt=et*60,Et=bt*24,Es=Et*7,gd=Et*30,Eo=Et*365,ir=pe(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getUTCSeconds());ir.range;const js=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*yt)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getMinutes());js.range;const Ts=pe(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getUTCMinutes());Ts.range;const ks=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*yt-e.getMinutes()*et)},(e,t)=>{e.setTime(+e+t*bt)},(e,t)=>(t-e)/bt,e=>e.getHours());ks.range;const Cs=pe(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*bt)},(e,t)=>(t-e)/bt,e=>e.getUTCHours());Cs.range;const wn=pe(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*et)/Et,e=>e.getDate()-1);wn.range;const Fi=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Et,e=>e.getUTCDate()-1);Fi.range;const qp=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Et,e=>Math.floor(e/Et));qp.range;function mr(e){return pe(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*et)/Es)}const Wi=mr(0),pi=mr(1),JP=mr(2),QP=mr(3),_r=mr(4),eO=mr(5),tO=mr(6);Wi.range;pi.range;JP.range;QP.range;_r.range;eO.range;tO.range;function gr(e){return pe(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Es)}const Ui=gr(0),mi=gr(1),rO=gr(2),nO=gr(3),Mr=gr(4),iO=gr(5),aO=gr(6);Ui.range;mi.range;rO.range;nO.range;Mr.range;iO.range;aO.range;const _s=pe(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());_s.range;const Ms=pe(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Ms.range;const jt=pe(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());jt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});jt.range;const Tt=pe(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Tt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});Tt.range;function zp(e,t,r,n,i,a){const o=[[ir,1,yt],[ir,5,5*yt],[ir,15,15*yt],[ir,30,30*yt],[a,1,et],[a,5,5*et],[a,15,15*et],[a,30,30*et],[i,1,bt],[i,3,3*bt],[i,6,6*bt],[i,12,12*bt],[n,1,Et],[n,2,2*Et],[r,1,Es],[t,1,gd],[t,3,3*gd],[e,1,Eo]];function u(c,s,f){const d=sg).right(o,d);if(h===o.length)return e.every(gu(c/Eo,s/Eo,f));if(h===0)return vi.every(Math.max(gu(c,s,f),1));const[v,p]=o[d/o[h-1][2]53)return null;"w"in k||(k.w=1),"Z"in k?(Q=To(Gr(k.y,0,1)),Ne=Q.getUTCDay(),Q=Ne>4||Ne===0?mi.ceil(Q):mi(Q),Q=Fi.offset(Q,(k.V-1)*7),k.y=Q.getUTCFullYear(),k.m=Q.getUTCMonth(),k.d=Q.getUTCDate()+(k.w+6)%7):(Q=jo(Gr(k.y,0,1)),Ne=Q.getDay(),Q=Ne>4||Ne===0?pi.ceil(Q):pi(Q),Q=wn.offset(Q,(k.V-1)*7),k.y=Q.getFullYear(),k.m=Q.getMonth(),k.d=Q.getDate()+(k.w+6)%7)}else("W"in k||"U"in k)&&("w"in k||(k.w="u"in k?k.u%7:"W"in k?1:0),Ne="Z"in k?To(Gr(k.y,0,1)).getUTCDay():jo(Gr(k.y,0,1)).getDay(),k.m=0,k.d="W"in k?(k.w+6)%7+k.W*7-(Ne+5)%7:k.w+k.U*7-(Ne+6)%7);return"Z"in k?(k.H+=k.Z/100|0,k.M+=k.Z%100,To(k)):jo(k)}}function j(N,q,W,k){for(var _e=0,Q=q.length,Ne=W.length,$e,Zt;_e=Ne)return-1;if($e=q.charCodeAt(_e++),$e===37){if($e=q.charAt(_e++),Zt=w[$e in yd?q.charAt(_e++):$e],!Zt||(k=Zt(N,W,k))<0)return-1}else if($e!=W.charCodeAt(k++))return-1}return k}function T(N,q,W){var k=c.exec(q.slice(W));return k?(N.p=s.get(k[0].toLowerCase()),W+k[0].length):-1}function I(N,q,W){var k=h.exec(q.slice(W));return k?(N.w=v.get(k[0].toLowerCase()),W+k[0].length):-1}function C(N,q,W){var k=f.exec(q.slice(W));return k?(N.w=d.get(k[0].toLowerCase()),W+k[0].length):-1}function _(N,q,W){var k=y.exec(q.slice(W));return k?(N.m=b.get(k[0].toLowerCase()),W+k[0].length):-1}function R(N,q,W){var k=p.exec(q.slice(W));return k?(N.m=g.get(k[0].toLowerCase()),W+k[0].length):-1}function B(N,q,W){return j(N,t,q,W)}function F(N,q,W){return j(N,r,q,W)}function V(N,q,W){return j(N,n,q,W)}function K(N){return o[N.getDay()]}function de(N){return a[N.getDay()]}function oe(N){return l[N.getMonth()]}function Ie(N){return u[N.getMonth()]}function Ge(N){return i[+(N.getHours()>=12)]}function L(N){return 1+~~(N.getMonth()/3)}function we(N){return o[N.getUTCDay()]}function Xt(N){return a[N.getUTCDay()]}function Ve(N){return l[N.getUTCMonth()]}function Ty(N){return u[N.getUTCMonth()]}function ky(N){return i[+(N.getUTCHours()>=12)]}function Cy(N){return 1+~~(N.getUTCMonth()/3)}return{format:function(N){var q=O(N+="",x);return q.toString=function(){return N},q},parse:function(N){var q=A(N+="",!1);return q.toString=function(){return N},q},utcFormat:function(N){var q=O(N+="",P);return q.toString=function(){return N},q},utcParse:function(N){var q=A(N+="",!0);return q.toString=function(){return N},q}}}var yd={"-":"",_:" ",0:"0"},be=/^\s*\d+/,fO=/^%/,dO=/[\\^$*+?|[\]().{}]/g;function U(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function vO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function pO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function mO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function gO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function yO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function bd(e,t,r){var n=be.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function xd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function bO(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function xO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function wO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function wd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function PO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function Pd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function OO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function AO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function SO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function EO(e,t,r){var n=be.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function jO(e,t,r){var n=fO.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function TO(e,t,r){var n=be.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function kO(e,t,r){var n=be.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function Od(e,t){return U(e.getDate(),t,2)}function CO(e,t){return U(e.getHours(),t,2)}function _O(e,t){return U(e.getHours()%12||12,t,2)}function MO(e,t){return U(1+wn.count(jt(e),e),t,3)}function Fp(e,t){return U(e.getMilliseconds(),t,3)}function DO(e,t){return Fp(e,t)+"000"}function IO(e,t){return U(e.getMonth()+1,t,2)}function NO(e,t){return U(e.getMinutes(),t,2)}function $O(e,t){return U(e.getSeconds(),t,2)}function RO(e){var t=e.getDay();return t===0?7:t}function LO(e,t){return U(Wi.count(jt(e)-1,e),t,2)}function Wp(e){var t=e.getDay();return t>=4||t===0?_r(e):_r.ceil(e)}function BO(e,t){return e=Wp(e),U(_r.count(jt(e),e)+(jt(e).getDay()===4),t,2)}function KO(e){return e.getDay()}function qO(e,t){return U(pi.count(jt(e)-1,e),t,2)}function zO(e,t){return U(e.getFullYear()%100,t,2)}function FO(e,t){return e=Wp(e),U(e.getFullYear()%100,t,2)}function WO(e,t){return U(e.getFullYear()%1e4,t,4)}function UO(e,t){var r=e.getDay();return e=r>=4||r===0?_r(e):_r.ceil(e),U(e.getFullYear()%1e4,t,4)}function HO(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+U(t/60|0,"0",2)+U(t%60,"0",2)}function Ad(e,t){return U(e.getUTCDate(),t,2)}function YO(e,t){return U(e.getUTCHours(),t,2)}function GO(e,t){return U(e.getUTCHours()%12||12,t,2)}function VO(e,t){return U(1+Fi.count(Tt(e),e),t,3)}function Up(e,t){return U(e.getUTCMilliseconds(),t,3)}function XO(e,t){return Up(e,t)+"000"}function ZO(e,t){return U(e.getUTCMonth()+1,t,2)}function JO(e,t){return U(e.getUTCMinutes(),t,2)}function QO(e,t){return U(e.getUTCSeconds(),t,2)}function eA(e){var t=e.getUTCDay();return t===0?7:t}function tA(e,t){return U(Ui.count(Tt(e)-1,e),t,2)}function Hp(e){var t=e.getUTCDay();return t>=4||t===0?Mr(e):Mr.ceil(e)}function rA(e,t){return e=Hp(e),U(Mr.count(Tt(e),e)+(Tt(e).getUTCDay()===4),t,2)}function nA(e){return e.getUTCDay()}function iA(e,t){return U(mi.count(Tt(e)-1,e),t,2)}function aA(e,t){return U(e.getUTCFullYear()%100,t,2)}function oA(e,t){return e=Hp(e),U(e.getUTCFullYear()%100,t,2)}function uA(e,t){return U(e.getUTCFullYear()%1e4,t,4)}function sA(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Mr(e):Mr.ceil(e),U(e.getUTCFullYear()%1e4,t,4)}function lA(){return"+0000"}function Sd(){return"%"}function Ed(e){return+e}function jd(e){return Math.floor(+e/1e3)}var wr,Yp,Gp;cA({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function cA(e){return wr=cO(e),Yp=wr.format,wr.parse,Gp=wr.utcFormat,wr.utcParse,wr}function fA(e){return new Date(e)}function dA(e){return e instanceof Date?+e:+new Date(+e)}function Ds(e,t,r,n,i,a,o,u,l,c){var s=bs(),f=s.invert,d=s.domain,h=c(".%L"),v=c(":%S"),p=c("%I:%M"),g=c("%I %p"),y=c("%a %d"),b=c("%b %d"),x=c("%B"),P=c("%Y");function w(O){return(l(O)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>eP(e,a/n))},r.copy=function(){return Jp(t).domain(e)},Mt.apply(r,arguments)}function Yi(){var e=0,t=.5,r=1,n=1,i,a,o,u,l,c=Te,s,f=!1,d;function h(p){return isNaN(p=+p)?d:(p=.5+((p=+s(p))-a)*(n*pe.chartData,$s=E([yr],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),Rs=(e,t,r,n)=>n?$s(e):yr(e);function Dr(e){if(Array.isArray(e)&&e.length===2){var[t,r]=e;if(Ye(t)&&Ye(r))return!0}return!1}function Td(e,t,r){return r?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function gA(e,t){if(t&&typeof e!="function"&&Array.isArray(e)&&e.length===2){var[r,n]=e,i,a;if(Ye(r))i=r;else if(typeof r=="function")return;if(Ye(n))a=n;else if(typeof n=="function")return;var o=[i,a];if(Dr(o))return o}}function yA(e,t,r){if(!(!r&&t==null)){if(typeof e=="function"&&t!=null)try{var n=e(t,r);if(Dr(n))return Td(n,t,r)}catch{}if(Array.isArray(e)&&e.length===2){var[i,a]=e,o,u;if(i==="auto")t!=null&&(o=Math.min(...t));else if(D(i))o=i;else if(typeof i=="function")try{t!=null&&(o=i(t==null?void 0:t[0]))}catch{}else if(typeof i=="string"&&gf.test(i)){var l=gf.exec(i);if(l==null||t==null)o=void 0;else{var c=+l[1];o=t[0]-c}}else o=t==null?void 0:t[0];if(a==="auto")t!=null&&(u=Math.max(...t));else if(D(a))u=a;else if(typeof a=="function")try{t!=null&&(u=a(t==null?void 0:t[1]))}catch{}else if(typeof a=="string"&&yf.test(a)){var s=yf.exec(a);if(s==null||t==null)u=void 0;else{var f=+s[1];u=t[1]+f}}else u=t==null?void 0:t[1];var d=[o,u];if(Dr(d))return t==null?d:Td(d,t,r)}}}var Rr=1e9,bA={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Bs,ne=!0,rt="[DecimalError] ",lr=rt+"Invalid argument: ",Ls=rt+"Exponent out of range: ",Lr=Math.floor,er=Math.pow,xA=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,ze,me=1e7,te=7,rm=9007199254740991,gi=Lr(rm/te),M={};M.absoluteValue=M.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};M.comparedTo=M.cmp=function(e){var t,r,n,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};M.decimalPlaces=M.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*te;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};M.dividedBy=M.div=function(e){return At(this,new this.constructor(e))};M.dividedToIntegerBy=M.idiv=function(e){var t=this,r=t.constructor;return Z(At(t,new r(e),0,1),r.precision)};M.equals=M.eq=function(e){return!this.cmp(e)};M.exponent=function(){return fe(this)};M.greaterThan=M.gt=function(e){return this.cmp(e)>0};M.greaterThanOrEqualTo=M.gte=function(e){return this.cmp(e)>=0};M.isInteger=M.isint=function(){return this.e>this.d.length-2};M.isNegative=M.isneg=function(){return this.s<0};M.isPositive=M.ispos=function(){return this.s>0};M.isZero=function(){return this.s===0};M.lessThan=M.lt=function(e){return this.cmp(e)<0};M.lessThanOrEqualTo=M.lte=function(e){return this.cmp(e)<1};M.logarithm=M.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(ze))throw Error(rt+"NaN");if(r.s<1)throw Error(rt+(r.s?"NaN":"-Infinity"));return r.eq(ze)?new n(0):(ne=!1,t=At(fn(r,a),fn(e,a),a),ne=!0,Z(t,i))};M.minus=M.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?am(t,e):nm(t,(e.s=-e.s,e))};M.modulo=M.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(rt+"NaN");return r.s?(ne=!1,t=At(r,e,0,1).times(e),ne=!0,r.minus(t)):Z(new n(r),i)};M.naturalExponential=M.exp=function(){return im(this)};M.naturalLogarithm=M.ln=function(){return fn(this)};M.negated=M.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};M.plus=M.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?nm(t,e):am(t,(e.s=-e.s,e))};M.precision=M.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(lr+e);if(t=fe(i)+1,n=i.d.length-1,r=n*te+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};M.squareRoot=M.sqrt=function(){var e,t,r,n,i,a,o,u=this,l=u.constructor;if(u.s<1){if(!u.s)return new l(0);throw Error(rt+"NaN")}for(e=fe(u),ne=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=ct(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Lr((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new l(t)):n=new l(i.toString()),r=l.precision,i=o=r+3;;)if(a=n,n=a.plus(At(u,a,o+2)).times(.5),ct(a.d).slice(0,o)===(t=ct(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(Z(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;o+=4}return ne=!0,Z(n,r)};M.times=M.mul=function(e){var t,r,n,i,a,o,u,l,c,s=this,f=s.constructor,d=s.d,h=(e=new f(e)).d;if(!s.s||!e.s)return new f(0);for(e.s*=s.s,r=s.e+e.e,l=d.length,c=h.length,l=0;){for(t=0,i=l+n;i>n;)u=a[i]+h[n]*d[i-n-1]+t,a[i--]=u%me|0,t=u/me|0;a[i]=(a[i]+t)%me|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,ne?Z(e,f.precision):e};M.toDecimalPlaces=M.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(ht(e,0,Rr),t===void 0?t=n.rounding:ht(t,0,8),Z(r,e+fe(r)+1,t))};M.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=hr(n,!0):(ht(e,0,Rr),t===void 0?t=i.rounding:ht(t,0,8),n=Z(new i(n),e+1,t),r=hr(n,!0,e+1)),r};M.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?hr(i):(ht(e,0,Rr),t===void 0?t=a.rounding:ht(t,0,8),n=Z(new a(i),e+fe(i)+1,t),r=hr(n.abs(),!1,e+fe(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};M.toInteger=M.toint=function(){var e=this,t=e.constructor;return Z(new t(e),fe(e)+1,t.rounding)};M.toNumber=function(){return+this};M.toPower=M.pow=function(e){var t,r,n,i,a,o,u=this,l=u.constructor,c=12,s=+(e=new l(e));if(!e.s)return new l(ze);if(u=new l(u),!u.s){if(e.s<1)throw Error(rt+"Infinity");return u}if(u.eq(ze))return u;if(n=l.precision,e.eq(ze))return Z(u,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=u.s,o){if((r=s<0?-s:s)<=rm){for(i=new l(ze),t=Math.ceil(n/te+4),ne=!1;r%2&&(i=i.times(u),Cd(i.d,t)),r=Lr(r/2),r!==0;)u=u.times(u),Cd(u.d,t);return ne=!0,e.s<0?new l(ze).div(i):Z(i,n)}}else if(a<0)throw Error(rt+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,ne=!1,i=e.times(fn(u,n+c)),ne=!0,i=im(i),i.s=a,i};M.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=fe(i),n=hr(i,r<=a.toExpNeg||r>=a.toExpPos)):(ht(e,1,Rr),t===void 0?t=a.rounding:ht(t,0,8),i=Z(new a(i),e,t),r=fe(i),n=hr(i,e<=r||r<=a.toExpNeg,e)),n};M.toSignificantDigits=M.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(ht(e,1,Rr),t===void 0?t=n.rounding:ht(t,0,8)),Z(new n(r),e,t)};M.toString=M.valueOf=M.val=M.toJSON=M[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=fe(e),r=e.constructor;return hr(e,t<=r.toExpNeg||t>=r.toExpPos)};function nm(e,t){var r,n,i,a,o,u,l,c,s=e.constructor,f=s.precision;if(!e.s||!t.s)return t.s||(t=new s(e)),ne?Z(t,f):t;if(l=e.d,c=t.d,o=e.e,i=t.e,l=l.slice(),a=o-i,a){for(a<0?(n=l,a=-a,u=c.length):(n=c,i=o,u=l.length),o=Math.ceil(f/te),u=o>u?o+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=l.length,a=c.length,u-a<0&&(a=u,n=c,c=l,l=n),r=0;a;)r=(l[--a]=l[a]+c[a]+r)/me|0,l[a]%=me;for(r&&(l.unshift(r),++i),u=l.length;l[--u]==0;)l.pop();return t.d=l,t.e=i,ne?Z(t,f):t}function ht(e,t,r){if(e!==~~e||er)throw Error(lr+e)}function ct(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(u=l=0;ui[u]?1:-1;break}return l}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var u,l,c,s,f,d,h,v,p,g,y,b,x,P,w,O,A,j,T=n.constructor,I=n.s==i.s?1:-1,C=n.d,_=i.d;if(!n.s)return new T(n);if(!i.s)throw Error(rt+"Division by zero");for(l=n.e-i.e,A=_.length,w=C.length,h=new T(I),v=h.d=[],c=0;_[c]==(C[c]||0);)++c;if(_[c]>(C[c]||0)&&--l,a==null?b=a=T.precision:o?b=a+(fe(n)-fe(i))+1:b=a,b<0)return new T(0);if(b=b/te+2|0,c=0,A==1)for(s=0,_=_[0],b++;(c1&&(_=e(_,s),C=e(C,s),A=_.length,w=C.length),P=A,p=C.slice(0,A),g=p.length;g=me/2&&++O;do s=0,u=t(_,p,A,g),u<0?(y=p[0],A!=g&&(y=y*me+(p[1]||0)),s=y/O|0,s>1?(s>=me&&(s=me-1),f=e(_,s),d=f.length,g=p.length,u=t(f,p,d,g),u==1&&(s--,r(f,A16)throw Error(Ls+fe(e));if(!e.s)return new s(ze);for(ne=!1,u=f,o=new s(.03125);e.abs().gte(.1);)e=e.times(o),c+=5;for(n=Math.log(er(2,c))/Math.LN10*2+5|0,u+=n,r=i=a=new s(ze),s.precision=u;;){if(i=Z(i.times(e),u),r=r.times(++l),o=a.plus(At(i,r,u)),ct(o.d).slice(0,u)===ct(a.d).slice(0,u)){for(;c--;)a=Z(a.times(a),u);return s.precision=f,t==null?(ne=!0,Z(a,f)):a}a=o}}function fe(e){for(var t=e.e*te,r=e.d[0];r>=10;r/=10)t++;return t}function ko(e,t,r){if(t>e.LN10.sd())throw ne=!0,r&&(e.precision=r),Error(rt+"LN10 precision limit exceeded");return Z(new e(e.LN10),t)}function Rt(e){for(var t="";e--;)t+="0";return t}function fn(e,t){var r,n,i,a,o,u,l,c,s,f=1,d=10,h=e,v=h.d,p=h.constructor,g=p.precision;if(h.s<1)throw Error(rt+(h.s?"NaN":"-Infinity"));if(h.eq(ze))return new p(0);if(t==null?(ne=!1,c=g):c=t,h.eq(10))return t==null&&(ne=!0),ko(p,c);if(c+=d,p.precision=c,r=ct(v),n=r.charAt(0),a=fe(h),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)h=h.times(e),r=ct(h.d),n=r.charAt(0),f++;a=fe(h),n>1?(h=new p("0."+r),a++):h=new p(n+"."+r.slice(1))}else return l=ko(p,c+2,g).times(a+""),h=fn(new p(n+"."+r.slice(1)),c-d).plus(l),p.precision=g,t==null?(ne=!0,Z(h,g)):h;for(u=o=h=At(h.minus(ze),h.plus(ze),c),s=Z(h.times(h),c),i=3;;){if(o=Z(o.times(s),c),l=u.plus(At(o,new p(i),c)),ct(l.d).slice(0,c)===ct(u.d).slice(0,c))return u=u.times(2),a!==0&&(u=u.plus(ko(p,c+2,g).times(a+""))),u=At(u,new p(f),c),p.precision=g,t==null?(ne=!0,Z(u,g)):u;u=l,i+=2}}function kd(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Lr(r/te),e.d=[],n=(r+1)%te,r<0&&(n+=te),ngi||e.e<-gi))throw Error(Ls+r)}else e.s=0,e.e=0,e.d=[0];return e}function Z(e,t,r){var n,i,a,o,u,l,c,s,f=e.d;for(o=1,a=f[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=te,i=t,c=f[s=0];else{if(s=Math.ceil((n+1)/te),a=f.length,s>=a)return e;for(c=a=f[s],o=1;a>=10;a/=10)o++;n%=te,i=n-te+o}if(r!==void 0&&(a=er(10,o-i-1),u=c/a%10|0,l=t<0||f[s+1]!==void 0||c%a,l=r<4?(u||l)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||l||r==6&&(n>0?i>0?c/er(10,o-i):0:f[s-1])%10&1||r==(e.s<0?8:7))),t<1||!f[0])return l?(a=fe(e),f.length=1,t=t-a-1,f[0]=er(10,(te-t%te)%te),e.e=Lr(-t/te)||0):(f.length=1,f[0]=e.e=e.s=0),e;if(n==0?(f.length=s,a=1,s--):(f.length=s+1,a=er(10,te-n),f[s]=i>0?(c/er(10,o-i)%er(10,i)|0)*a:0),l)for(;;)if(s==0){(f[0]+=a)==me&&(f[0]=1,++e.e);break}else{if(f[s]+=a,f[s]!=me)break;f[s--]=0,a=1}for(n=f.length;f[--n]===0;)f.pop();if(ne&&(e.e>gi||e.e<-gi))throw Error(Ls+fe(e));return e}function am(e,t){var r,n,i,a,o,u,l,c,s,f,d=e.constructor,h=d.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new d(e),ne?Z(t,h):t;if(l=e.d,f=t.d,n=t.e,c=e.e,l=l.slice(),o=c-n,o){for(s=o<0,s?(r=l,o=-o,u=f.length):(r=f,n=c,u=l.length),i=Math.max(Math.ceil(h/te),u)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=l.length,u=f.length,s=i0;--i)l[u++]=0;for(i=f.length;i>o;){if(l[--i]0?a=a.charAt(0)+"."+a.slice(1)+Rt(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+Rt(-i-1)+a,r&&(n=r-o)>0&&(a+=Rt(n))):i>=o?(a+=Rt(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+Rt(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=Rt(n))),e.s<0?"-"+a:a}function Cd(e,t){if(e.length>t)return e.length=t,!0}function om(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(lr+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return kd(o,a.toString())}else if(typeof a!="string")throw Error(lr+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,xA.test(a))kd(o,a);else throw Error(lr+a)}if(i.prototype=M,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=om,i.config=i.set=wA,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(lr+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(lr+r+": "+n);return this}var Bs=om(bA);ze=new Bs(1);const G=Bs;var PA=e=>e,um={},sm=e=>e===um,_d=e=>function t(){return arguments.length===0||arguments.length===1&&sm(arguments.length<=0?void 0:arguments[0])?t:e(...arguments)},lm=(e,t)=>e===1?t:_d(function(){for(var r=arguments.length,n=new Array(r),i=0;io!==um).length;return a>=e?t(...n):lm(e-a,_d(function(){for(var o=arguments.length,u=new Array(o),l=0;lsm(s)?u.shift():s);return t(...c,...u)}))}),Gi=e=>lm(e.length,e),Pu=(e,t)=>{for(var r=[],n=e;nArray.isArray(t)?t.map(e):Object.keys(t).map(r=>t[r]).map(e)),AA=function(){for(var t=arguments.length,r=new Array(t),n=0;nl(u),a(...arguments))}},Ou=e=>Array.isArray(e)?e.reverse():e.split("").reverse().join(""),cm=e=>{var t=null,r=null;return function(){for(var n=arguments.length,i=new Array(n),a=0;a{var l;return o===((l=t)===null||l===void 0?void 0:l[u])})||(t=i,r=e(...i)),r}};function fm(e){var t;return e===0?t=1:t=Math.floor(new G(e).abs().log(10).toNumber())+1,t}function dm(e,t,r){for(var n=new G(e),i=0,a=[];n.lt(t)&&i<1e5;)a.push(n.toNumber()),n=n.add(r),i++;return a}Gi((e,t,r)=>{var n=+e,i=+t;return n+r*(i-n)});Gi((e,t,r)=>{var n=t-+e;return n=n||1/0,(r-e)/n});Gi((e,t,r)=>{var n=t-+e;return n=n||1/0,Math.max(0,Math.min(1,(r-e)/n))});var hm=e=>{var[t,r]=e,[n,i]=[t,r];return t>r&&([n,i]=[r,t]),[n,i]},vm=(e,t,r)=>{if(e.lte(0))return new G(0);var n=fm(e.toNumber()),i=new G(10).pow(n),a=e.div(i),o=n!==1?.05:.1,u=new G(Math.ceil(a.div(o).toNumber())).add(r).mul(o),l=u.mul(i);return t?new G(l.toNumber()):new G(Math.ceil(l.toNumber()))},SA=(e,t,r)=>{var n=new G(1),i=new G(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new G(10).pow(fm(e)-1),i=new G(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new G(Math.floor(e)))}else e===0?i=new G(Math.floor((t-1)/2)):r||(i=new G(Math.floor(e)));var o=Math.floor((t-1)/2),u=AA(OA(l=>i.add(new G(l-o).mul(n)).toNumber()),Pu);return u(0,t)},pm=function(t,r,n,i){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((r-t)/(n-1)))return{step:new G(0),tickMin:new G(0),tickMax:new G(0)};var o=vm(new G(r).sub(t).div(n-1),i,a),u;t<=0&&r>=0?u=new G(0):(u=new G(t).add(r).div(2),u=u.sub(new G(u).mod(o)));var l=Math.ceil(u.sub(t).div(o).toNumber()),c=Math.ceil(new G(r).sub(u).div(o).toNumber()),s=l+c+1;return s>n?pm(t,r,n,i,a+1):(s0?c+(n-s):c,l=r>0?l:l+(n-s)),{step:o,tickMin:u.sub(new G(l).mul(o)),tickMax:u.add(new G(c).mul(o))})};function EA(e){var[t,r]=e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Math.max(n,2),[o,u]=hm([t,r]);if(o===-1/0||u===1/0){var l=u===1/0?[o,...Pu(0,n-1).map(()=>1/0)]:[...Pu(0,n-1).map(()=>-1/0),u];return t>r?Ou(l):l}if(o===u)return SA(o,n,i);var{step:c,tickMin:s,tickMax:f}=pm(o,u,a,i,0),d=dm(s,f.add(new G(.1).mul(c)),c);return t>r?Ou(d):d}function jA(e,t){var[r,n]=e,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,[a,o]=hm([r,n]);if(a===-1/0||o===1/0)return[r,n];if(a===o)return[a];var u=Math.max(t,2),l=vm(new G(o).sub(a).div(u-1),i,0),c=[...dm(new G(a),new G(o),l),o];return i===!1&&(c=c.map(s=>Math.round(s))),r>n?Ou(c):c}var TA=cm(EA),kA=cm(jA),mm=e=>e.rootProps.maxBarSize,CA=e=>e.rootProps.barGap,gm=e=>e.rootProps.barCategoryGap,_A=e=>e.rootProps.barSize,Pn=e=>e.rootProps.stackOffset,Ks=e=>e.options.chartName,qs=e=>e.rootProps.syncId,ym=e=>e.rootProps.syncMethod,zs=e=>e.options.eventEmitter,mt={allowDuplicatedCategory:!0,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"category"},Be={allowDataOverflow:!1,allowDuplicatedCategory:!0,radiusAxisId:0,scale:"auto",tick:!0,tickCount:5,type:"number"},Vi=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t},MA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!1,dataKey:void 0,domain:void 0,id:mt.angleAxisId,includeHidden:!1,name:void 0,reversed:mt.reversed,scale:mt.scale,tick:mt.tick,tickCount:void 0,ticks:void 0,type:mt.type,unit:void 0},DA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:Be.type,unit:void 0},IA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:mt.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:mt.angleAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:mt.scale,tick:mt.tick,tickCount:void 0,ticks:void 0,type:"number",unit:void 0},NA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:"category",unit:void 0},Fs=(e,t)=>e.polarAxis.angleAxis[t]!=null?e.polarAxis.angleAxis[t]:e.layout.layoutType==="radial"?IA:MA,Ws=(e,t)=>e.polarAxis.radiusAxis[t]!=null?e.polarAxis.radiusAxis[t]:e.layout.layoutType==="radial"?NA:DA,Xi=e=>e.polarOptions,Us=E([Ct,_t,ve],Qv),bm=E([Xi,Us],(e,t)=>{if(e!=null)return ke(e.innerRadius,t,0)}),xm=E([Xi,Us],(e,t)=>{if(e!=null)return ke(e.outerRadius,t,t*.8)}),$A=e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:r}=e;return[t,r]},wm=E([Xi],$A);E([Fs,wm],Vi);var Pm=E([Us,bm,xm],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});E([Ws,Pm],Vi);var RA=E([Y,Xi,bm,xm,Ct,_t],(e,t,r,n,i,a)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var{cx:o,cy:u,startAngle:l,endAngle:c}=t;return{cx:ke(o,i,i/2),cy:ke(u,a,a/2),innerRadius:r,outerRadius:n,startAngle:l,endAngle:c,clockWise:!1}}}),ue=(e,t)=>t,On=(e,t,r)=>r;function Md(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function yi(e){for(var t=1;t{var r=e.cartesianAxis.xAxis[t];return r??Re},Le={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:Au,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,width:Li},Gt=(e,t)=>{var r=e.cartesianAxis.yAxis[t];return r??Le},qA={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},Hs=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??qA},se=(e,t,r)=>{switch(t){case"xAxis":return Dt(e,r);case"yAxis":return Gt(e,r);case"zAxis":return Hs(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return Ws(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},zA=(e,t,r)=>{switch(t){case"xAxis":return Dt(e,r);case"yAxis":return Gt(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},An=(e,t,r)=>{switch(t){case"xAxis":return Dt(e,r);case"yAxis":return Gt(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return Ws(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},Om=e=>e.graphicalItems.countOfBars>0;function Ys(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var Zi=e=>e.graphicalItems.cartesianItems,FA=E([ue,On],Ys),Gs=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),Sn=E([Zi,se,FA],Gs),Am=e=>e.filter(t=>t.stackId===void 0),WA=E([Sn],Am),Vs=e=>e.map(t=>t.data).filter(Boolean).flat(1),UA=E([Sn],Vs),Xs=(e,t)=>{var{chartData:r=[],dataStartIndex:n,dataEndIndex:i}=t;return e.length>0?e:r.slice(n,i+1)},Ji=E([UA,Rs],Xs),Zs=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:re(i,n)}))):e.map(n=>({value:n})),Qi=E([Ji,se,Sn],Zs);function Sm(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function br(e){return e.filter(t=>dt(t)||t instanceof Date).map(Number).filter(t=>We(t)===!1)}function HA(e,t,r){return!r||typeof t!="number"||We(t)?[]:r.length?br(r.flatMap(n=>{var i=re(e,n.dataKey),a,o;if(Array.isArray(i)?[a,o]=i:a=o=i,!(!Ye(a)||!Ye(o)))return[t-a,t+o]})):[]}var Em=(e,t,r)=>{var n={},i=t.reduce((a,o)=>(o.stackId==null||(a[o.stackId]==null&&(a[o.stackId]=[]),a[o.stackId].push(o)),a),n);return Object.fromEntries(Object.entries(i).map(a=>{var[o,u]=a,l=u.map(c=>c.dataKey);return[o,{stackedData:ow(e,l,r),graphicalItems:u}]}))},Su=E([Ji,Sn,Pn],Em),jm=(e,t,r)=>{var{dataStartIndex:n,dataEndIndex:i}=t;if(r!=="zAxis"){var a=cw(e,n,i);if(!(a!=null&&a[0]===0&&a[1]===0))return a}},YA=E([Su,yr,ue],jm),Tm=(e,t,r,n)=>r.length>0?e.flatMap(i=>r.flatMap(a=>{var o,u,l=(o=a.errorBars)===null||o===void 0?void 0:o.filter(s=>Sm(n,s)),c=re(i,(u=t.dataKey)!==null&&u!==void 0?u:a.dataKey);return{value:c,errorDomain:HA(i,c,l)}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(i=>({value:re(i,t.dataKey),errorDomain:[]})):e.map(i=>({value:i,errorDomain:[]})),GA=E(Ji,se,WA,ue,Tm);function VA(e){var{value:t}=e;if(dt(t)||t instanceof Date)return t}var XA=e=>{var t=e.flatMap(n=>[n.value,n.errorDomain]).flat(1),r=br(t);if(r.length!==0)return[Math.min(...r),Math.max(...r)]},ZA=(e,t,r)=>{var n=e.map(VA).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&Xh(n))?wp(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},Js=e=>{var t;if(e==null||!("domain"in e))return Au;if(e.domain!=null)return e.domain;if(e.ticks!=null){if(e.type==="number"){var r=br(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:Au},Qs=function(){for(var t=arguments.length,r=new Array(t),n=0;ne.referenceElements.dots,Br=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),JA=E([km,ue,On],Br),Cm=e=>e.referenceElements.areas,QA=E([Cm,ue,On],Br),_m=e=>e.referenceElements.lines,eS=E([_m,ue,On],Br),Mm=(e,t)=>{var r=br(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},tS=E(JA,ue,Mm),Dm=(e,t)=>{var r=br(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},rS=E([QA,ue],Dm),Im=(e,t)=>{var r=br(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},nS=E(eS,ue,Im),iS=E(tS,nS,rS,(e,t,r)=>Qs(e,r,t)),Nm=E([se],Js),el=(e,t,r,n,i)=>{var a=gA(t,e.allowDataOverflow);return a??yA(t,Qs(r,i,XA(n)),e.allowDataOverflow)},aS=E([se,Nm,YA,GA,iS],el),oS=[0,1],tl=(e,t,r,n,i,a,o)=>{if(!(e==null||r==null||r.length===0)){var{dataKey:u,type:l}=e,c=Ut(t,a);return c&&u==null?wp(0,r.length):l==="category"?ZA(n,e,c):i==="expand"?oS:o}},rl=E([se,Y,Ji,Qi,Pn,ue,aS],tl),$m=(e,t,r,n,i)=>{if(e!=null){var{scale:a,type:o}=e;if(a==="auto")return t==="radial"&&i==="radiusAxis"?"band":t==="radial"&&i==="angleAxis"?"linear":o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?"point":o==="category"?"band":"linear";if(typeof a=="string"){var u="scale".concat(pn(a));return u in Qr?u:"point"}}},Kr=E([se,Y,Om,Ks,ue],$m);function uS(e){if(e!=null){if(e in Qr)return Qr[e]();var t="scale".concat(pn(e));if(t in Qr)return Qr[t]()}}function nl(e,t,r,n){if(!(r==null||n==null)){if(typeof e.scale=="function")return e.scale.copy().domain(r).range(n);var i=uS(t);if(i!=null){var a=i.domain(r).range(n);return tw(a),a}}}var il=(e,t,r)=>{var n=Js(t);if(!(r!=="auto"&&r!=="linear")){if(t!=null&&t.tickCount&&Array.isArray(n)&&(n[0]==="auto"||n[1]==="auto")&&Dr(e))return TA(e,t.tickCount,t.allowDecimals);if(t!=null&&t.tickCount&&t.type==="number"&&Dr(e))return kA(e,t.tickCount,t.allowDecimals)}},al=E([rl,An,Kr],il),ol=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&Dr(t)&&Array.isArray(r)&&r.length>0){var i=t[0],a=r[0],o=t[1],u=r[r.length-1];return[Math.min(i,a),Math.max(o,u)]}return t},sS=E([se,rl,al,ue],ol),lS=E(Qi,se,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(br(e.map(u=>u.value))).sort((u,l)=>u-l);if(n.length<2)return 1/0;var i=n[n.length-1]-n[0];if(i===0)return 1/0;for(var a=0;an,(e,t,r,n,i)=>{if(!Ye(e))return 0;var a=t==="vertical"?n.height:n.width;if(i==="gap")return e*a/2;if(i==="no-gap"){var o=ke(r,e*a),u=e*a/2;return u-o-(u-o)/a*o}return 0}),cS=(e,t)=>{var r=Dt(e,t);return r==null||typeof r.padding!="string"?0:Rm(e,"xAxis",t,r.padding)},fS=(e,t)=>{var r=Gt(e,t);return r==null||typeof r.padding!="string"?0:Rm(e,"yAxis",t,r.padding)},dS=E(Dt,cS,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var{padding:i}=e;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),hS=E(Gt,fS,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var{padding:i}=e;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),vS=E([ve,dS,Ki,Bi,(e,t,r)=>r],(e,t,r,n,i)=>{var{padding:a}=n;return i?[a.left,r.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),pS=E([ve,Y,hS,Ki,Bi,(e,t,r)=>r],(e,t,r,n,i,a)=>{var{padding:o}=i;return a?[n.height-o.bottom,o.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),En=(e,t,r,n)=>{var i;switch(t){case"xAxis":return vS(e,r,n);case"yAxis":return pS(e,r,n);case"zAxis":return(i=Hs(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return wm(e);case"radiusAxis":return Pm(e,r);default:return}},Lm=E([se,En],Vi),qr=E([se,Kr,sS,Lm],nl);E(Sn,ue,(e,t)=>e.flatMap(r=>{var n;return(n=r.errorBars)!==null&&n!==void 0?n:[]}).filter(r=>Sm(t,r)));function Bm(e,t){return e.idt.id?1:0}var ea=(e,t)=>t,ta=(e,t,r)=>r,mS=E(ss,ea,ta,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(Bm)),gS=E(ls,ea,ta,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(Bm)),Km=(e,t)=>({width:e.width,height:t.height}),yS=(e,t)=>{var r=typeof t.width=="number"?t.width:Li;return{width:r,height:e.height}},qm=E(ve,Dt,Km),bS=(e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}},xS=(e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}},wS=E(_t,ve,mS,ea,ta,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=Km(t,u);o==null&&(o=bS(t,n,e));var c=n==="top"&&!i||n==="bottom"&&i;a[u.id]=o-Number(c)*l.height,o+=(c?-1:1)*l.height}),a}),PS=E(Ct,ve,gS,ea,ta,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=yS(t,u);o==null&&(o=xS(t,n,e));var c=n==="left"&&!i||n==="right"&&i;a[u.id]=o-Number(c)*l.width,o+=(c?-1:1)*l.width}),a}),OS=(e,t)=>{var r=ve(e),n=Dt(e,t);if(n!=null){var i=wS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:r.left,y:0}:{x:r.left,y:a}}},AS=(e,t)=>{var r=ve(e),n=Gt(e,t);if(n!=null){var i=PS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:0,y:r.top}:{x:a,y:r.top}}},zm=E(ve,Gt,(e,t)=>{var r=typeof t.width=="number"?t.width:Li;return{width:r,height:e.height}}),Dd=(e,t,r)=>{switch(t){case"xAxis":return qm(e,r).width;case"yAxis":return zm(e,r).height;default:return}},Fm=(e,t,r,n)=>{if(r!=null){var{allowDuplicatedCategory:i,type:a,dataKey:o}=r,u=Ut(e,n),l=t.map(c=>c.value);if(o&&u&&a==="category"&&i&&Xh(l))return l}},ul=E([Y,Qi,se,ue],Fm),Wm=(e,t,r,n)=>{if(!(r==null||r.dataKey==null)){var{type:i,scale:a}=r,o=Ut(e,n);if(o&&(i==="number"||a!=="auto"))return t.map(u=>u.value)}},sl=E([Y,Qi,An,ue],Wm),Id=E([Y,zA,Kr,qr,ul,sl,En,al,ue],(e,t,r,n,i,a,o,u,l)=>{if(t==null)return null;var c=Ut(e,l);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:l,categoricalDomain:a,duplicateDomain:i,isCategorical:c,niceTicks:u,range:o,realScaleType:r,scale:n}}),SS=(e,t,r,n,i,a,o,u,l)=>{if(!(t==null||n==null)){var c=Ut(e,l),{type:s,ticks:f,tickCount:d}=t,h=r==="scaleBand"&&typeof n.bandwidth=="function"?n.bandwidth()/2:2,v=s==="category"&&n.bandwidth?n.bandwidth()/h:0;v=l==="angleAxis"&&a!=null&&a.length>=2?ge(a[0]-a[1])*2*v:v;var p=f||i;if(p){var g=p.map((y,b)=>{var x=o?o.indexOf(y):y;return{index:b,coordinate:n(x)+v,value:y,offset:v}});return g.filter(y=>!We(y.coordinate))}return c&&u?u.map((y,b)=>({coordinate:n(y)+v,value:y,index:b,offset:v})):n.ticks?n.ticks(d).map(y=>({coordinate:n(y)+v,value:y,offset:v})):n.domain().map((y,b)=>({coordinate:n(y)+v,value:o?o[y]:y,index:b,offset:v}))}},Um=E([Y,An,Kr,qr,al,En,ul,sl,ue],SS),ES=(e,t,r,n,i,a,o)=>{if(!(t==null||r==null||n==null||n[0]===n[1])){var u=Ut(e,o),{tickCount:l}=t,c=0;return c=o==="angleAxis"&&(n==null?void 0:n.length)>=2?ge(n[0]-n[1])*2*c:c,u&&a?a.map((s,f)=>({coordinate:r(s)+c,value:s,index:f,offset:c})):r.ticks?r.ticks(l).map(s=>({coordinate:r(s)+c,value:s,offset:c})):r.domain().map((s,f)=>({coordinate:r(s)+c,value:i?i[s]:s,index:f,offset:c}))}},Ft=E([Y,An,qr,En,ul,sl,ue],ES),vt=E(se,qr,(e,t)=>{if(!(e==null||t==null))return yi(yi({},e),{},{scale:t})}),jS=E([se,Kr,rl,Lm],nl);E((e,t,r)=>Hs(e,r),jS,(e,t)=>{if(!(e==null||t==null))return yi(yi({},e),{},{scale:t})});var TS=E([Y,ss,ls],(e,t,r)=>{switch(e){case"horizontal":return t.some(n=>n.reversed)?"right-to-left":"left-to-right";case"vertical":return r.some(n=>n.reversed)?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}}),Hm=e=>e.options.defaultTooltipEventType,Ym=e=>e.options.validateTooltipEventTypes;function Gm(e,t,r){if(e==null)return t;var n=e?"axis":"item";return r==null?t:r.includes(n)?n:t}function ll(e,t){var r=Hm(e),n=Ym(e);return Gm(t,r,n)}function kS(e){return $(t=>ll(t,e))}var Vm=(e,t)=>{var r,n=Number(t);if(!(We(n)||t==null))return n>=0?e==null||(r=e[n])===null||r===void 0?void 0:r.value:void 0},CS=e=>e.tooltip.settings,Lt={active:!1,index:null,dataKey:void 0,coordinate:void 0},_S={itemInteraction:{click:Lt,hover:Lt},axisInteraction:{click:Lt,hover:Lt},keyboardInteraction:Lt,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},Xm=nt({name:"tooltip",initialState:_S,reducers:{addTooltipEntrySettings(e,t){e.tooltipItemPayloads.push(t.payload)},removeTooltipEntrySettings(e,t){var r=Ot(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate,e.keyboardInteraction.dataKey=t.payload.activeDataKey}}}),{addTooltipEntrySettings:MS,removeTooltipEntrySettings:DS,setTooltipSettingsState:IS,setActiveMouseOverItemIndex:Zm,mouseLeaveItem:NS,mouseLeaveChart:Jm,setActiveClickItemIndex:$S,setMouseOverAxisIndex:Qm,setMouseClickAxisIndex:RS,setSyncInteraction:Eu,setKeyboardInteraction:ju}=Xm.actions,LS=Xm.reducer;function Nd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function qn(e){for(var t=1;t{if(t==null)return Lt;var i=zS(e,t,r);if(i==null)return Lt;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var a=e.settings.active===!0;if(FS(i)){if(a)return qn(qn({},i),{},{active:!0})}else if(n!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:n};return qn(qn({},Lt),{},{coordinate:i.coordinate})},cl=(e,t)=>{var r=e==null?void 0:e.index;if(r==null)return null;var n=Number(r);if(!Ye(n))return r;var i=0,a=1/0;return t.length>0&&(a=t.length-1),String(Math.max(i,Math.min(n,a)))},tg=(e,t,r,n,i,a,o,u)=>{if(!(a==null||u==null)){var l=o[0],c=l==null?void 0:u(l.positions,a);if(c!=null)return c;var s=i==null?void 0:i[Number(a)];if(s)switch(r){case"horizontal":return{x:s.coordinate,y:(n.top+t)/2};default:return{x:(n.left+e)/2,y:s.coordinate}}}},rg=(e,t,r,n)=>{if(t==="axis")return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i;return r==="hover"?i=e.itemInteraction.hover.dataKey:i=e.itemInteraction.click.dataKey,i==null&&n!=null?[e.tooltipItemPayloads[0]]:e.tooltipItemPayloads.filter(a=>{var o;return((o=a.settings)===null||o===void 0?void 0:o.dataKey)===i})},jn=e=>e.options.tooltipPayloadSearcher,zr=e=>e.tooltip;function $d(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Rd(e){for(var t=1;t{if(!(t==null||a==null)){var{chartData:u,computedData:l,dataStartIndex:c,dataEndIndex:s}=r,f=[];return e.reduce((d,h)=>{var v,{dataDefinedOnItem:p,settings:g}=h,y=GS(p,u),b=YS(y,c,s),x=(v=g==null?void 0:g.dataKey)!==null&&v!==void 0?v:n==null?void 0:n.dataKey,P=g==null?void 0:g.nameKey,w;if(n!=null&&n.dataKey&&Array.isArray(b)&&!Array.isArray(b[0])&&o==="axis"?w=Zh(b,n.dataKey,i):w=a(b,t,l,P),Array.isArray(w))w.forEach(A=>{var j=Rd(Rd({},g),{},{name:A.name,unit:A.unit,color:void 0,fill:void 0});d.push(bf({tooltipEntrySettings:j,dataKey:A.dataKey,payload:A.payload,value:re(A.payload,A.dataKey),name:A.name}))});else{var O;d.push(bf({tooltipEntrySettings:g,dataKey:x,payload:w,value:re(w,x),name:(O=re(w,P))!==null&&O!==void 0?O:g==null?void 0:g.name}))}return d},f)}},xe=e=>{var t=Y(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},Fr=e=>e.tooltip.settings.axisId,Ae=e=>{var t=xe(e),r=Fr(e);return An(e,t,r)},fl=E([Ae,Y,Om,Ks,xe],$m),VS=E([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),XS=E([xe,Fr],Ys),ra=E([VS,Ae,XS],Gs),ZS=E([ra],Vs),xr=E([ZS,yr],Xs),dl=E([xr,Ae,ra],Zs),JS=E([Ae],Js),QS=E([xr,ra,Pn],Em),eE=E([QS,yr,xe],jm),tE=E([ra],Am),rE=E([xr,Ae,tE,xe],Tm),nE=E([km,xe,Fr],Br),iE=E([nE,xe],Mm),aE=E([Cm,xe,Fr],Br),oE=E([aE,xe],Dm),uE=E([_m,xe,Fr],Br),sE=E([uE,xe],Im),lE=E([iE,sE,oE],Qs),cE=E([Ae,JS,eE,rE,lE],el),ig=E([Ae,Y,xr,dl,Pn,xe,cE],tl),fE=E([ig,Ae,fl],il),dE=E([Ae,ig,fE,xe],ol),ag=e=>{var t=xe(e),r=Fr(e),n=!1;return En(e,t,r,n)},og=E([Ae,ag],Vi),ug=E([Ae,fl,dE,og],nl),hE=E([Y,dl,Ae,xe],Fm),vE=E([Y,dl,Ae,xe],Wm),pE=(e,t,r,n,i,a,o,u)=>{if(t){var{type:l}=t,c=Ut(e,u);if(n){var s=r==="scaleBand"&&n.bandwidth?n.bandwidth()/2:2,f=l==="category"&&n.bandwidth?n.bandwidth()/s:0;return f=u==="angleAxis"&&i!=null&&(i==null?void 0:i.length)>=2?ge(i[0]-i[1])*2*f:f,c&&o?o.map((d,h)=>({coordinate:n(d)+f,value:d,index:h,offset:f})):n.domain().map((d,h)=>({coordinate:n(d)+f,value:a?a[d]:d,index:h,offset:f}))}}},It=E([Y,Ae,fl,ug,ag,hE,vE,xe],pE),hl=E([Hm,Ym,CS],(e,t,r)=>Gm(r.shared,e,t)),sg=e=>e.tooltip.settings.trigger,vl=e=>e.tooltip.settings.defaultIndex,na=E([zr,hl,sg,vl],eg),Wt=E([na,xr],cl),lg=E([It,Wt],Vm),cg=E([na],e=>{if(e)return e.dataKey}),fg=E([zr,hl,sg,vl],rg),mE=E([Ct,_t,Y,ve,It,vl,fg,jn],tg),gE=E([na,mE],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),yE=E([na],e=>e.active),bE=E([fg,Wt,yr,Ae,lg,jn,hl],ng),xE=E([bE],e=>{if(e!=null){var t=e.map(r=>r.payload).filter(r=>r!=null);return Array.from(new Set(t))}});function Ld(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Bd(e){for(var t=1;t$(Ae),SE=()=>{var e=AE(),t=$(It),r=$(ug);return an(Bd(Bd({},e),{},{scale:r}),t)},EE=()=>$(Ks),pl=(e,t)=>t,dg=(e,t,r)=>r,ml=(e,t,r,n)=>n,jE=E(It,e=>_i(e,t=>t.coordinate)),gl=E([zr,pl,dg,ml],eg),hg=E([gl,xr],cl),TE=(e,t,r)=>{if(t!=null){var n=zr(e);return t==="axis"?r==="hover"?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:r==="hover"?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},vg=E([zr,pl,dg,ml],rg),bi=E([Ct,_t,Y,ve,It,ml,vg,jn],tg),kE=E([gl,bi],(e,t)=>{var r;return(r=e.coordinate)!==null&&r!==void 0?r:t}),pg=E(It,hg,Vm),CE=E([vg,hg,yr,Ae,pg,jn,pl],ng),_E=E([gl],e=>({isActive:e.active,activeIndex:e.index})),ME=(e,t,r,n,i,a,o,u)=>{if(!(!e||!t||!n||!i||!a)){var l=fw(e.chartX,e.chartY,t,r,u);if(l){var c=hw(l,t),s=Qx(c,o,a,n,i),f=dw(t,a,s,l);return{activeIndex:String(s),activeCoordinate:f}}}};function Tu(){return Tu=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.useContext(mg),Co={exports:{}},qd;function BE(){return qd||(qd=1,function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(r=!1));function i(l,c,s){this.fn=l,this.context=c,this.once=s||!1}function a(l,c,s,f,d){if(typeof s!="function")throw new TypeError("The listener must be a function");var h=new i(s,f||l,d),v=r?r+c:c;return l._events[v]?l._events[v].fn?l._events[v]=[l._events[v],h]:l._events[v].push(h):(l._events[v]=h,l._eventsCount++),l}function o(l,c){--l._eventsCount===0?l._events=new n:delete l._events[c]}function u(){this._events=new n,this._eventsCount=0}u.prototype.eventNames=function(){var c=[],s,f;if(this._eventsCount===0)return c;for(f in s=this._events)t.call(s,f)&&c.push(r?f.slice(1):f);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(s)):c},u.prototype.listeners=function(c){var s=r?r+c:c,f=this._events[s];if(!f)return[];if(f.fn)return[f.fn];for(var d=0,h=f.length,v=new Array(h);d{e.eventEmitter==null&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),FE=gg.reducer,{createEventEmitter:WE}=gg.actions;function UE(e){return e.tooltip.syncInteraction}var HE={chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},yg=nt({name:"chartData",initialState:HE,reducers:{setChartData(e,t){if(e.chartData=t.payload,t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var{startIndex:r,endIndex:n}=t.payload;r!=null&&(e.dataStartIndex=r),n!=null&&(e.dataEndIndex=n)}}}),{setChartData:Fd,setDataStartEndIndexes:YE,setComputedData:H2}=yg.actions,GE=yg.reducer,bg=()=>{};function VE(){var e=$(qs),t=$(zs),r=ae(),n=$(ym),i=$(It),a=qi(),o=cs(),u=$(l=>l.rootProps.className);m.useEffect(()=>{if(e==null)return bg;var l=(c,s,f)=>{if(t!==f&&e===c){if(n==="index"){r(s);return}if(i!=null){var d;if(typeof n=="function"){var h={activeTooltipIndex:s.payload.index==null?void 0:Number(s.payload.index),isTooltipActive:s.payload.active,activeIndex:s.payload.index==null?void 0:Number(s.payload.index),activeLabel:s.payload.label,activeDataKey:s.payload.dataKey,activeCoordinate:s.payload.coordinate},v=n(i,h);d=i[v]}else n==="value"&&(d=i.find(O=>String(O.value)===s.payload.label));var{coordinate:p}=s.payload;if(d==null||s.payload.active===!1||p==null||o==null){r(Eu({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0}));return}var{x:g,y}=p,b=Math.min(g,o.x+o.width),x=Math.min(y,o.y+o.height),P={x:a==="horizontal"?d.coordinate:b,y:a==="horizontal"?x:d.coordinate},w=Eu({active:s.payload.active,coordinate:P,dataKey:s.payload.dataKey,index:String(d.index),label:s.payload.label});r(w)}}};return dn.on(ku,l),()=>{dn.off(ku,l)}},[u,r,t,e,n,i,a,o])}function XE(){var e=$(qs),t=$(zs),r=ae();m.useEffect(()=>{if(e==null)return bg;var n=(i,a,o)=>{t!==o&&e===i&&r(YE(a))};return dn.on(zd,n),()=>{dn.off(zd,n)}},[r,t,e])}function ZE(){var e=ae();m.useEffect(()=>{e(WE())},[e]),VE(),XE()}function JE(e,t,r,n,i,a){var o=$(d=>TE(d,e,t)),u=$(zs),l=$(qs),c=$(ym),s=$(UE),f=s==null?void 0:s.active;m.useEffect(()=>{if(!f&&l!=null&&u!=null){var d=Eu({active:a,coordinate:r,dataKey:o,index:i,label:typeof n=="number"?String(n):n});dn.emit(ku,l,d,u)}},[f,r,o,i,n,u,l,c,a])}function Wd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ud(e){for(var t=1;t{w(IS({shared:g,trigger:y,axisId:P,active:r,defaultIndex:O}))},[w,g,y,P,r,O]);var A=cs(),j=hp(),T=kS(g),{activeIndex:I,isActive:C}=$(Ve=>_E(Ve,T,y,O)),_=$(Ve=>CE(Ve,T,y,O)),R=$(Ve=>pg(Ve,T,y,O)),B=$(Ve=>kE(Ve,T,y,O)),F=_,V=LE(),K=r??C,[de,oe]=Fb([F,K]),Ie=T==="axis"?R:void 0;JE(T,y,B,Ie,I,K);var Ge=x??V;if(Ge==null)return null;var L=F??Hd;K||(L=Hd),u&&L.length&&(L=pb(F.filter(Ve=>Ve.value!=null&&(Ve.hide!==!0||t.includeHidden)),s,rj));var we=L.length>0,Xt=m.createElement(Nw,{allowEscapeViewBox:n,animationDuration:i,animationEasing:a,isAnimationActive:l,active:K,coordinate:B,hasPayload:we,offset:c,position:f,reverseDirection:d,useTranslate3d:h,viewBox:A,wrapperStyle:v,lastBoundingBox:de,innerRef:oe,hasPortalFromProps:!!x},nj(o,Ud(Ud({},t),{},{payload:L,label:Ie,active:K,coordinate:B,accessibilityLayer:j})));return m.createElement(m.Fragment,null,Dy.createPortal(Xt,Ge),K&&m.createElement(RE,{cursor:p,tooltipEventType:T,coordinate:B,payload:F,index:I}))}var _o={},Mo={},Yd;function aj(){return Yd||(Yd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=0,i={}){typeof i!="object"&&(i={});let a=null,o=null,u=null,l=0,c=null,s;const{leading:f=!1,trailing:d=!0,maxWait:h}=i,v="maxWait"in i,p=v?Math.max(Number(h)||0,n):0,g=A=>(a!==null&&(s=r.apply(o,a)),a=o=null,l=A,s),y=A=>(l=A,c=setTimeout(w,n),f&&a!==null?g(A):s),b=A=>(c=null,d&&a!==null?g(A):s),x=A=>{if(u===null)return!0;const j=A-u,T=j>=n||j<0,I=v&&A-l>=p;return T||I},P=A=>{const j=u===null?0:A-u,T=n-j,I=p-(A-l);return v?Math.min(T,I):T},w=()=>{const A=Date.now();if(x(A))return b(A);c=setTimeout(w,P(A))},O=function(...A){const j=Date.now(),T=x(j);if(a=A,o=this,u=j,T){if(c===null)return y(j);if(v)return clearTimeout(c),c=setTimeout(w,n),g(j)}return c===null&&(c=setTimeout(w,n)),s};return O.cancel=()=>{c!==null&&clearTimeout(c),l=0,u=a=o=c=null},O.flush=()=>c===null?s:b(Date.now()),O}e.debounce=t}(Mo)),Mo}var Gd;function oj(){return Gd||(Gd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=aj();function r(n,i=0,a={}){const{leading:o=!0,trailing:u=!0}=a;return t.debounce(n,i,{leading:o,maxWait:i,trailing:u})}e.throttle=r}(_o)),_o}var Do,Vd;function uj(){return Vd||(Vd=1,Do=oj().throttle),Do}var sj=uj();const lj=kt(sj);var en=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;a{var{aspect:r,initialDimension:n={width:-1,height:-1},width:i="100%",height:a="100%",minWidth:o=0,minHeight:u,maxHeight:l,children:c,debounce:s=0,id:f,className:d,onResize:h,style:v={}}=e,p=m.useRef(null),g=m.useRef();g.current=h,m.useImperativeHandle(t,()=>p.current);var[y,b]=m.useState({containerWidth:n.width,containerHeight:n.height}),x=m.useCallback((w,O)=>{b(A=>{var j=Math.round(w),T=Math.round(O);return A.containerWidth===j&&A.containerHeight===T?A:{containerWidth:j,containerHeight:T}})},[]);m.useEffect(()=>{var w=T=>{var I,{width:C,height:_}=T[0].contentRect;x(C,_),(I=g.current)===null||I===void 0||I.call(g,C,_)};s>0&&(w=lj(w,s,{trailing:!0,leading:!1}));var O=new ResizeObserver(w),{width:A,height:j}=p.current.getBoundingClientRect();return x(A,j),O.observe(p.current),()=>{O.disconnect()}},[x,s]);var P=m.useMemo(()=>{var{containerWidth:w,containerHeight:O}=y;if(w<0||O<0)return null;en(tr(i)||tr(a),`The width(%s) and height(%s) are both fixed numbers, - maybe you don't need to use a ResponsiveContainer.`,i,a),en(!r||r>0,"The aspect(%s) must be greater than zero.",r);var A=tr(i)?w:i,j=tr(a)?O:a;return r&&r>0&&(A?j=A/r:j&&(A=j*r),l&&j>l&&(j=l)),en(A>0||j>0,`The width(%s) and height(%s) of chart should be greater than 0, - please check the style of container, or the props width(%s) and height(%s), - or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the - height and width.`,A,j,i,a,o,u,r),m.Children.map(c,T=>m.cloneElement(T,{width:A,height:j,style:Io({width:A,height:j},T.props.style)}))},[r,c,a,l,u,o,y,i]);return m.createElement("div",{id:f?"".concat(f):void 0,className:H("recharts-responsive-container",d),style:Io(Io({},v),{},{width:i,height:a,minWidth:o,minHeight:u,maxHeight:l}),ref:p},m.createElement("div",{style:{width:0,height:0,overflow:"visible"}},P))}),Tn=e=>null;Tn.displayName="Cell";function Zd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Cu(e){for(var t=1;t{t[r]||delete t[r]}),t}var tn=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||pr.isSsr)return{width:0,height:0};var n=yj(r),i=JSON.stringify({text:t,copyStyle:n});if(Pr.widthCache[i])return Pr.widthCache[i];try{var a=document.getElementById(Jd);a||(a=document.createElement("span"),a.setAttribute("id",Jd),a.setAttribute("aria-hidden","true"),document.body.appendChild(a));var o=Cu(Cu({},gj),n);Object.assign(a.style,o),a.textContent="".concat(t);var u=a.getBoundingClientRect(),l={width:u.width,height:u.height};return Pr.widthCache[i]=l,++Pr.cacheCount>mj&&(Pr.cacheCount=0,Pr.widthCache={}),l}catch{return{width:0,height:0}}},Qd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,eh=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,bj=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,xj=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,xg={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},wj=Object.keys(xg),Or="NaN";function Pj(e,t){return e*xg[t]}class Me{static parse(t){var r,[,n,i]=(r=xj.exec(t))!==null&&r!==void 0?r:[];return new Me(parseFloat(n),i??"")}constructor(t,r){this.num=t,this.unit=r,this.num=t,this.unit=r,We(t)&&(this.unit=""),r!==""&&!bj.test(r)&&(this.num=NaN,this.unit=""),wj.includes(r)&&(this.num=Pj(t,r),this.unit="px")}add(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num+t.num,this.unit)}subtract(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num-t.num,this.unit)}multiply(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num*t.num,this.unit||t.unit)}divide(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num/t.num,this.unit||t.unit)}toString(){return"".concat(this.num).concat(this.unit)}isNaN(){return We(this.num)}}function wg(e){if(e.includes(Or))return Or;for(var t=e;t.includes("*")||t.includes("/");){var r,[,n,i,a]=(r=Qd.exec(t))!==null&&r!==void 0?r:[],o=Me.parse(n??""),u=Me.parse(a??""),l=i==="*"?o.multiply(u):o.divide(u);if(l.isNaN())return Or;t=t.replace(Qd,l.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,[,s,f,d]=(c=eh.exec(t))!==null&&c!==void 0?c:[],h=Me.parse(s??""),v=Me.parse(d??""),p=f==="+"?h.add(v):h.subtract(v);if(p.isNaN())return Or;t=t.replace(eh,p.toString())}return t}var th=/\(([^()]*)\)/;function Oj(e){for(var t=e,r;(r=th.exec(t))!=null;){var[,n]=r;t=t.replace(th,wg(n))}return t}function Aj(e){var t=e.replace(/\s+/g,"");return t=Oj(t),t=wg(t),t}function Sj(e){try{return Aj(e)}catch{return Or}}function No(e){var t=Sj(e.slice(5,-1));return t===Or?"":t}var Ej=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],jj=["dx","dy","angle","className","breakAll"];function _u(){return _u=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:t,breakAll:r,style:n}=e;try{var i=[];J(t)||(r?i=t.toString().split(""):i=t.toString().split(Pg));var a=i.map(u=>({word:u,width:tn(u,n).width})),o=r?0:tn(" ",n).width;return{wordsWithComputedWidth:a,spaceWidth:o}}catch{return null}},kj=(e,t,r,n,i)=>{var{maxLines:a,children:o,style:u,breakAll:l}=e,c=D(a),s=o,f=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return C.reduce((_,R)=>{var{word:B,width:F}=R,V=_[_.length-1];if(V&&(n==null||i||V.width+F+rI.reduce((C,_)=>C.width>_.width?C:_);if(!c||i)return d;var v=d.length>a||h(d).width>Number(n);if(!v)return d;for(var p="…",g=I=>{var C=s.slice(0,I),_=Og({breakAll:l,style:u,children:C+p}).wordsWithComputedWidth,R=f(_),B=R.length>a||h(R).width>Number(n);return[B,R]},y=0,b=s.length-1,x=0,P;y<=b&&x<=s.length-1;){var w=Math.floor((y+b)/2),O=w-1,[A,j]=g(O),[T]=g(w);if(!A&&!T&&(y=w+1),A&&T&&(b=w-1),!A&&T){P=j;break}x++}return P||d},nh=e=>{var t=J(e)?[]:e.toString().split(Pg);return[{words:t}]},Cj=e=>{var{width:t,scaleToFit:r,children:n,style:i,breakAll:a,maxLines:o}=e;if((t||r)&&!pr.isSsr){var u,l,c=Og({breakAll:a,children:n,style:i});if(c){var{wordsWithComputedWidth:s,spaceWidth:f}=c;u=s,l=f}else return nh(n);return kj({breakAll:a,children:n,maxLines:o,style:i},u,l,t,r)}return nh(n)},ih="#808080",ia=m.forwardRef((e,t)=>{var{x:r=0,y:n=0,lineHeight:i="1em",capHeight:a="0.71em",scaleToFit:o=!1,textAnchor:u="start",verticalAnchor:l="end",fill:c=ih}=e,s=rh(e,Ej),f=m.useMemo(()=>Cj({breakAll:s.breakAll,children:s.children,maxLines:s.maxLines,scaleToFit:o,style:s.style,width:s.width}),[s.breakAll,s.children,s.maxLines,o,s.style,s.width]),{dx:d,dy:h,angle:v,className:p,breakAll:g}=s,y=rh(s,jj);if(!dt(r)||!dt(n))return null;var b=r+(D(d)?d:0),x=n+(D(h)?h:0),P;switch(l){case"start":P=No("calc(".concat(a,")"));break;case"middle":P=No("calc(".concat((f.length-1)/2," * -").concat(i," + (").concat(a," / 2))"));break;default:P=No("calc(".concat(f.length-1," * -").concat(i,")"));break}var w=[];if(o){var O=f[0].width,{width:A}=s;w.push("scale(".concat(D(A)?A/O:1,")"))}return v&&w.push("rotate(".concat(v,", ").concat(b,", ").concat(x,")")),w.length&&(y.transform=w.join(" ")),m.createElement("text",_u({},z(y,!0),{ref:t,x:b,y:x,className:H("recharts-text",p),textAnchor:u,fill:c.includes("url")?ih:c}),f.map((j,T)=>{var I=j.words.join(g?"":" ");return m.createElement("tspan",{x:b,dy:T===0?P:i,key:"".concat(I,"-").concat(T)},I)}))});ia.displayName="Text";var _j=["offset"],Mj=["labelRef"];function ah(e,t){if(e==null)return{};var r,n,i=Dj(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{value:t,formatter:r}=e,n=J(e.children)?t:e.children;return typeof r=="function"?r(n):n},wl=e=>e!=null&&typeof e=="function",Lj=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},Bj=(e,t,r)=>{var{position:n,viewBox:i,offset:a,className:o}=e,{cx:u,cy:l,innerRadius:c,outerRadius:s,startAngle:f,endAngle:d,clockWise:h}=i,v=(c+s)/2,p=Lj(f,d),g=p>=0?1:-1,y,b;n==="insideStart"?(y=f+g*a,b=h):n==="insideEnd"?(y=d-g*a,b=!h):n==="end"&&(y=d+g*a,b=h),b=p<=0?b:!b;var x=ce(u,l,v,y),P=ce(u,l,v,y+(b?1:-1)*359),w="M".concat(x.x,",").concat(x.y,` - A`).concat(v,",").concat(v,",0,1,").concat(b?0:1,`, - `).concat(P.x,",").concat(P.y),O=J(e.id)?cr("recharts-radial-line-"):e.id;return m.createElement("text",gt({},r,{dominantBaseline:"central",className:H("recharts-radial-bar-label",o)}),m.createElement("defs",null,m.createElement("path",{id:O,d:w})),m.createElement("textPath",{xlinkHref:"#".concat(O)},t))},Kj=e=>{var{viewBox:t,offset:r,position:n}=e,{cx:i,cy:a,innerRadius:o,outerRadius:u,startAngle:l,endAngle:c}=t,s=(l+c)/2;if(n==="outside"){var{x:f,y:d}=ce(i,a,u+r,s);return{x:f,y:d,textAnchor:f>=i?"start":"end",verticalAnchor:"middle"}}if(n==="center")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"middle"};if(n==="centerTop")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"start"};if(n==="centerBottom")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"end"};var h=(o+u)/2,{x:v,y:p}=ce(i,a,h,s);return{x:v,y:p,textAnchor:"middle",verticalAnchor:"middle"}},qj=(e,t)=>{var{parentViewBox:r,offset:n,position:i}=e,{x:a,y:o,width:u,height:l}=t,c=l>=0?1:-1,s=c*n,f=c>0?"end":"start",d=c>0?"start":"end",h=u>=0?1:-1,v=h*n,p=h>0?"end":"start",g=h>0?"start":"end";if(i==="top"){var y={x:a+u/2,y:o-c*n,textAnchor:"middle",verticalAnchor:f};return le(le({},y),r?{height:Math.max(o-r.y,0),width:u}:{})}if(i==="bottom"){var b={x:a+u/2,y:o+l+s,textAnchor:"middle",verticalAnchor:d};return le(le({},b),r?{height:Math.max(r.y+r.height-(o+l),0),width:u}:{})}if(i==="left"){var x={x:a-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"};return le(le({},x),r?{width:Math.max(x.x-r.x,0),height:l}:{})}if(i==="right"){var P={x:a+u+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"};return le(le({},P),r?{width:Math.max(r.x+r.width-P.x,0),height:l}:{})}var w=r?{width:u,height:l}:{};return i==="insideLeft"?le({x:a+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"},w):i==="insideRight"?le({x:a+u-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"},w):i==="insideTop"?le({x:a+u/2,y:o+s,textAnchor:"middle",verticalAnchor:d},w):i==="insideBottom"?le({x:a+u/2,y:o+l-s,textAnchor:"middle",verticalAnchor:f},w):i==="insideTopLeft"?le({x:a+v,y:o+s,textAnchor:g,verticalAnchor:d},w):i==="insideTopRight"?le({x:a+u-v,y:o+s,textAnchor:p,verticalAnchor:d},w):i==="insideBottomLeft"?le({x:a+v,y:o+l-s,textAnchor:g,verticalAnchor:f},w):i==="insideBottomRight"?le({x:a+u-v,y:o+l-s,textAnchor:p,verticalAnchor:f},w):i&&typeof i=="object"&&(D(i.x)||tr(i.x))&&(D(i.y)||tr(i.y))?le({x:a+ke(i.x,u),y:o+ke(i.y,l),textAnchor:"end",verticalAnchor:"end"},w):le({x:a+u/2,y:o+l/2,textAnchor:"middle",verticalAnchor:"middle"},w)},zj=e=>"cx"in e&&D(e.cx);function qe(e){var{offset:t=5}=e,r=ah(e,_j),n=le({offset:t},r),{viewBox:i,position:a,value:o,children:u,content:l,className:c="",textBreakAll:s,labelRef:f}=n,d=cs(),h=i||d;if(!h||J(o)&&J(u)&&!m.isValidElement(l)&&typeof l!="function")return null;if(m.isValidElement(l)){var{labelRef:v}=n,p=ah(n,Mj);return m.cloneElement(l,p)}var g;if(typeof l=="function"){if(g=m.createElement(l,n),m.isValidElement(g))return g}else g=Rj(n);var y=zj(h),b=z(n,!0);if(y&&(a==="insideStart"||a==="insideEnd"||a==="end"))return Bj(n,g,b);var x=y?Kj(n):qj(n,h);return m.createElement(ia,gt({ref:f,className:H("recharts-label",c)},b,x,{breakAll:s}),g)}qe.displayName="Label";var Ag=e=>{var{cx:t,cy:r,angle:n,startAngle:i,endAngle:a,r:o,radius:u,innerRadius:l,outerRadius:c,x:s,y:f,top:d,left:h,width:v,height:p,clockWise:g,labelViewBox:y}=e;if(y)return y;if(D(v)&&D(p)){if(D(s)&&D(f))return{x:s,y:f,width:v,height:p};if(D(d)&&D(h))return{x:d,y:h,width:v,height:p}}if(D(s)&&D(f))return{x:s,y:f,width:0,height:0};if(D(t)&&D(r))return{cx:t,cy:r,startAngle:i||n||0,endAngle:a||n||0,innerRadius:l||0,outerRadius:c||u||o||0,clockWise:g};if(e.viewBox)return e.viewBox},Fj=(e,t,r)=>{if(!e)return null;var n={viewBox:t,labelRef:r};return e===!0?m.createElement(qe,gt({key:"label-implicit"},n)):dt(e)?m.createElement(qe,gt({key:"label-implicit",value:e},n)):m.isValidElement(e)?e.type===qe?m.cloneElement(e,le({key:"label-implicit"},n)):m.createElement(qe,gt({key:"label-implicit",content:e},n)):wl(e)?m.createElement(qe,gt({key:"label-implicit",content:e},n)):e&&typeof e=="object"?m.createElement(qe,gt({},e,{key:"label-implicit"},n)):null},Wj=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var{children:i,labelRef:a}=t,o=Ag(t),u=mn(i,qe).map((c,s)=>m.cloneElement(c,{viewBox:r||o,key:"label-".concat(s)}));if(!n)return u;var l=Fj(t.label,r||o,a);return[l,...u]};qe.parseViewBox=Ag;qe.renderCallByParent=Wj;var $o={},Ro={},uh;function Uj(){return uh||(uh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r[r.length-1]}e.last=t}(Ro)),Ro}var Lo={},sh;function Hj(){return sh||(sh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Array.isArray(r)?r:Array.from(r)}e.toArray=t}(Lo)),Lo}var lh;function Yj(){return lh||(lh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Uj(),r=Hj(),n=Zu();function i(a){if(n.isArrayLike(a))return t.last(r.toArray(a))}e.last=i}($o)),$o}var Bo,ch;function Gj(){return ch||(ch=1,Bo=Yj().last),Bo}var Vj=Gj();const Xj=kt(Vj);var Zj=["valueAccessor"],Jj=["data","dataKey","clockWise","id","textBreakAll"];function xi(){return xi=Object.assign?Object.assign.bind():function(e){for(var t=1;tArray.isArray(e.value)?Xj(e.value):e.value;function Kt(e){var{valueAccessor:t=nT}=e,r=hh(e,Zj),{data:n,dataKey:i,clockWise:a,id:o,textBreakAll:u}=r,l=hh(r,Jj);return!n||!n.length?null:m.createElement(ye,{className:"recharts-label-list"},n.map((c,s)=>{var f=J(i)?t(c,s):re(c&&c.payload,i),d=J(o)?{}:{id:"".concat(o,"-").concat(s)};return m.createElement(qe,xi({},z(c,!0),l,d,{parentViewBox:c.parentViewBox,value:f,textBreakAll:u,viewBox:qe.parseViewBox(J(a)?c:dh(dh({},c),{},{clockWise:a})),key:"label-".concat(s),index:s}))}))}Kt.displayName="LabelList";function iT(e,t){return e?e===!0?m.createElement(Kt,{key:"labelList-implicit",data:t}):m.isValidElement(e)||wl(e)?m.createElement(Kt,{key:"labelList-implicit",data:t,content:e}):typeof e=="object"?m.createElement(Kt,xi({data:t},e,{key:"labelList-implicit"})):null:null}function aT(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var{children:n}=e,i=mn(n,Kt).map((o,u)=>m.cloneElement(o,{data:t,key:"labelList-".concat(u)}));if(!r)return i;var a=iT(e.label,t);return[a,...i]}Kt.renderCallByParent=aT;function Mu(){return Mu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{cx:t,cy:r,r:n,className:i}=e,a=H("recharts-dot",i);return t===+t&&r===+r&&n===+n?m.createElement("circle",Mu({},z(e,!1),Yu(e),{className:a,cx:t,cy:r,r:n})):null},Eg=e=>e.graphicalItems.polarItems,oT=E([ue,On],Ys),Pl=E([Eg,se,oT],Gs),uT=E([Pl],Vs),Ol=E([uT,$s],Xs),sT=E([Ol,se,Pl],Zs),lT=E([Ol,se,Pl],(e,t,r)=>r.length>0?e.flatMap(n=>r.flatMap(i=>{var a,o=re(n,(a=t.dataKey)!==null&&a!==void 0?a:i.dataKey);return{value:o,errorDomain:[]}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey),errorDomain:[]})):e.map(n=>({value:n,errorDomain:[]}))),vh=()=>{},cT=E([se,Nm,vh,lT,vh],el),jg=E([se,Y,Ol,sT,Pn,ue,cT],tl),fT=E([jg,se,Kr],il);E([se,jg,fT,ue],ol);var dT={radiusAxis:{},angleAxis:{}},Tg=nt({name:"polarAxis",initialState:dT,reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),{addRadiusAxis:Y2,removeRadiusAxis:G2,addAngleAxis:V2,removeAngleAxis:X2}=Tg.actions,hT=Tg.reducer;function ph(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function mh(e){for(var t=1;tt,gT=[],Sl=(e,t,r)=>(r==null?void 0:r.length)===0?gT:r,kg=E([$s,Al,Sl],(e,t,r)=>{var{chartData:n}=e,i;if((t==null?void 0:t.data)!=null&&t.data.length>0?i=t.data:i=n,(!i||!i.length)&&r!=null&&(i=r.map(a=>mh(mh({},t.presentationProps),a.props))),i!=null)return i}),yT=E([kg,Al,Sl],(e,t,r)=>{if(e!=null)return e.map((n,i)=>{var a,o=re(n,t.nameKey,t.name),u;return r!=null&&(a=r[i])!==null&&a!==void 0&&(a=a.props)!==null&&a!==void 0&&a.fill?u=r[i].props.fill:typeof n=="object"&&n!=null&&"fill"in n?u=n.fill:u=t.fill,{value:Nr(o,t.dataKey),color:u,payload:n,type:t.legendType}})}),bT=E([Eg,Al],(e,t)=>{if(e.some(r=>r.type==="pie"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),xT=E([kg,bT,Sl,ve],(e,t,r,n)=>{if(!(t==null||e==null))return fk({offset:n,pieSettings:t,displayedData:e,cells:r})}),wT={countOfBars:0,cartesianItems:[],polarItems:[]},Cg=nt({name:"graphicalItems",initialState:wT,reducers:{addBar(e){e.countOfBars+=1},removeBar(e){e.countOfBars-=1},addCartesianGraphicalItem(e,t){e.cartesianItems.push(t.payload)},replaceCartesianGraphicalItem(e,t){var{prev:r,next:n}=t.payload,i=Ot(e).cartesianItems.indexOf(r);i>-1&&(e.cartesianItems[i]=n)},removeCartesianGraphicalItem(e,t){var r=Ot(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},addPolarGraphicalItem(e,t){e.polarItems.push(t.payload)},removePolarGraphicalItem(e,t){var r=Ot(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)}}}),{addBar:PT,removeBar:OT,addCartesianGraphicalItem:AT,replaceCartesianGraphicalItem:ST,removeCartesianGraphicalItem:ET,addPolarGraphicalItem:jT,removePolarGraphicalItem:TT}=Cg.actions,kT=Cg.reducer;function gh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function yh(e){for(var t=1;t{var n=yh(yh({},e),{},{stackId:rp(e.stackId)});r.current===null?t(AT(n)):r.current!==n&&t(ST({prev:r.current,next:n})),r.current=n},[t,e]),m.useEffect(()=>()=>{r.current&&(t(ET(r.current)),r.current=null)},[t]),null}function IT(e){var t=ae();return m.useEffect(()=>(t(jT(e)),()=>{t(TT(e))}),[t,e]),null}var Ko={},bh;function NT(){return bh||(bh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var i;if(typeof r!="object"||r==null)return!1;if(Object.getPrototypeOf(r)===null)return!0;if(Object.prototype.toString.call(r)!=="[object Object]"){const a=r[Symbol.toStringTag];return a==null||!((i=Object.getOwnPropertyDescriptor(r,Symbol.toStringTag))!=null&&i.writable)?!1:r.toString()===`[object ${a}]`}let n=r;for(;Object.getPrototypeOf(n)!==null;)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(r)===n}e.isPlainObject=t}(Ko)),Ko}var qo,xh;function $T(){return xh||(xh=1,qo=NT().isPlainObject),qo}var RT=$T();const LT=kt(RT);function wi(){return wi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=r-n,o;return o="M ".concat(e,",").concat(t),o+="L ".concat(e+r,",").concat(t),o+="L ".concat(e+r-a/2,",").concat(t+i),o+="L ".concat(e+r-a/2-n,",").concat(t+i),o+="L ".concat(e,",").concat(t," Z"),o},BT={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},KT=e=>{var t=it(e,BT),r=m.useRef(),[n,i]=m.useState(-1);m.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var g=r.current.getTotalLength();g&&i(g)}catch{}},[]);var{x:a,y:o,upperWidth:u,lowerWidth:l,height:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isUpdateAnimationActive:v}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||c!==+c||u===0&&l===0||c===0)return null;var p=H("recharts-trapezoid",s);return v?m.createElement(zt,{canBegin:n>0,from:{upperWidth:0,lowerWidth:0,height:c,x:a,y:o},to:{upperWidth:u,lowerWidth:l,height:c,x:a,y:o},duration:d,animationEasing:f,isActive:v},g=>{var{upperWidth:y,lowerWidth:b,height:x,x:P,y:w}=g;return m.createElement(zt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,easing:f},m.createElement("path",wi({},z(t,!0),{className:p,d:wh(P,w,y,b,x),ref:r})))}):m.createElement("g",null,m.createElement("path",wi({},z(t,!0),{className:p,d:wh(a,o,u,l,c)})))},qT=["option","shapeType","propTransformer","activeClassName","isActive"];function zT(e,t){if(e==null)return{};var r,n,i=FT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(Zm({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}},jl=e=>{var t=ae();return(r,n)=>i=>{e==null||e(r,n,i),t(NS())}},Tl=(e,t)=>{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r($S({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}};function kl(e){var{fn:t,args:r}=e,n=ae(),i=Ce();return m.useEffect(()=>{if(!i){var a=t(r);return n(MS(a)),()=>{n(DS(a))}}},[t,r,n,i]),null}var Mg=()=>{};function Dg(e){var{legendPayload:t}=e,r=ae(),n=Ce();return m.useEffect(()=>n?Mg:(r(fp(t)),()=>{r(dp(t))}),[r,n,t]),null}function XT(e){var{legendPayload:t}=e,r=ae(),n=$(Y);return m.useEffect(()=>n!=="centric"&&n!=="radial"?Mg:(r(fp(t)),()=>{r(dp(t))}),[r,n,t]),null}function Cl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"animation-",r=m.useRef(cr(t)),n=m.useRef(e);return n.current!==e&&(r.current=cr(t),n.current=e),r.current}var ZT=["onMouseEnter","onClick","onMouseLeave"];function JT(e,t){if(e==null)return{};var r,n,i=QT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;nz(e,!1),[e]),r=m.useMemo(()=>mn(e.children,Tn),[e.children]),n=m.useMemo(()=>({name:e.name,nameKey:e.nameKey,tooltipType:e.tooltipType,data:e.data,dataKey:e.dataKey,cx:e.cx,cy:e.cy,startAngle:e.startAngle,endAngle:e.endAngle,minAngle:e.minAngle,paddingAngle:e.paddingAngle,innerRadius:e.innerRadius,outerRadius:e.outerRadius,cornerRadius:e.cornerRadius,legendType:e.legendType,fill:e.fill,presentationProps:t}),[e.cornerRadius,e.cx,e.cy,e.data,e.dataKey,e.endAngle,e.innerRadius,e.minAngle,e.name,e.nameKey,e.outerRadius,e.paddingAngle,e.startAngle,e.tooltipType,e.legendType,e.fill,t]),i=$(a=>yT(a,n,r));return m.createElement(XT,{legendPayload:i})}function nk(e){var{dataKey:t,nameKey:r,sectors:n,stroke:i,strokeWidth:a,fill:o,name:u,hide:l,tooltipType:c}=e;return{dataDefinedOnItem:n==null?void 0:n.map(s=>s.tooltipPayload),positions:n==null?void 0:n.map(s=>s.tooltipPosition),settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:r,name:Nr(u,t),hide:l,type:c,color:o,unit:""}}}var ik=(e,t)=>e>t?"start":etypeof t=="function"?t(e):ke(t,r,r*.8),ok=(e,t,r)=>{var{top:n,left:i,width:a,height:o}=t,u=Qv(a,o),l=i+ke(e.cx,a,a/2),c=n+ke(e.cy,o,o/2),s=ke(e.innerRadius,u,0),f=ak(r,e.outerRadius,u),d=e.maxRadius||Math.sqrt(a*a+o*o)/2;return{cx:l,cy:c,innerRadius:s,outerRadius:f,maxRadius:d}},uk=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},sk=(e,t)=>{if(m.isValidElement(e))return m.cloneElement(e,t);if(typeof e=="function")return e(t);var r=H("recharts-pie-label-line",typeof e!="boolean"?e.className:"");return m.createElement(fs,vr({},t,{type:"linear",className:r}))},lk=(e,t,r)=>{if(m.isValidElement(e))return m.cloneElement(e,t);var n=r;if(typeof e=="function"&&(n=e(t),m.isValidElement(n)))return n;var i=H("recharts-pie-label-text",typeof e!="boolean"&&typeof e!="function"?e.className:"");return m.createElement(ia,vr({},t,{alignmentBaseline:"middle",className:i}),n)};function ck(e){var{sectors:t,props:r,showLabels:n}=e,{label:i,labelLine:a,dataKey:o}=r;if(!n||!i||!t)return null;var u=z(r,!1),l=z(i,!1),c=z(a,!1),s=typeof i=="object"&&"offsetRadius"in i&&i.offsetRadius||20,f=t.map((d,h)=>{var v=(d.startAngle+d.endAngle)/2,p=ce(d.cx,d.cy,d.outerRadius+s,v),g=ie(ie(ie(ie({},u),d),{},{stroke:"none"},l),{},{index:h,textAnchor:ik(p.x,d.cx)},p),y=ie(ie(ie(ie({},u),d),{},{fill:"none",stroke:d.fill},c),{},{index:h,points:[ce(d.cx,d.cy,d.outerRadius,v),p],key:"line"});return m.createElement(ye,{key:"label-".concat(d.startAngle,"-").concat(d.endAngle,"-").concat(d.midAngle,"-").concat(h)},a&&sk(a,y),lk(i,g,re(d,o)))});return m.createElement(ye,{className:"recharts-pie-labels"},f)}function Ig(e){var{sectors:t,activeShape:r,inactiveShape:n,allOtherPieProps:i,showLabels:a}=e,o=$(Wt),{onMouseEnter:u,onClick:l,onMouseLeave:c}=i,s=JT(i,ZT),f=El(u,i.dataKey),d=jl(c),h=Tl(l,i.dataKey);return t==null?null:m.createElement(m.Fragment,null,t.map((v,p)=>{if((v==null?void 0:v.startAngle)===0&&(v==null?void 0:v.endAngle)===0&&t.length!==1)return null;var g=r&&String(p)===o,y=o?n:null,b=g?r:y,x=ie(ie({},v),{},{stroke:v.stroke,tabIndex:-1,[ip]:p,[ap]:i.dataKey});return m.createElement(ye,vr({tabIndex:-1,className:"recharts-pie-sector"},ji(s,v,p),{onMouseEnter:f(v,p),onMouseLeave:d(v,p),onClick:h(v,p),key:"sector-".concat(v==null?void 0:v.startAngle,"-").concat(v==null?void 0:v.endAngle,"-").concat(v.midAngle,"-").concat(p)}),m.createElement(_g,vr({option:b,isActive:g,shapeType:"sector"},x)))}),m.createElement(ck,{sectors:t,props:i,showLabels:a}))}function fk(e){var t,{pieSettings:r,displayedData:n,cells:i,offset:a}=e,{cornerRadius:o,startAngle:u,endAngle:l,dataKey:c,nameKey:s,tooltipType:f}=r,d=Math.abs(r.minAngle),h=uk(u,l),v=Math.abs(h),p=n.length<=1?0:(t=r.paddingAngle)!==null&&t!==void 0?t:0,g=n.filter(O=>re(O,c,0)!==0).length,y=(v>=360?g:g-1)*p,b=v-g*d-y,x=n.reduce((O,A)=>{var j=re(A,c,0);return O+(D(j)?j:0)},0),P;if(x>0){var w;P=n.map((O,A)=>{var j=re(O,c,0),T=re(O,s,A),I=ok(r,a,O),C=(D(j)?j:0)/x,_,R=ie(ie({},O),i&&i[A]&&i[A].props);A?_=w.endAngle+ge(h)*p*(j!==0?1:0):_=u;var B=_+ge(h)*((j!==0?d:0)+C*b),F=(_+B)/2,V=(I.innerRadius+I.outerRadius)/2,K=[{name:T,value:j,payload:R,dataKey:c,type:f}],de=ce(I.cx,I.cy,V,F);return w=ie(ie(ie(ie({},r.presentationProps),{},{percent:C,cornerRadius:o,name:T,tooltipPayload:K,midAngle:F,middleRadius:V,tooltipPosition:de},R),I),{},{value:re(O,c),startAngle:_,endAngle:B,payload:R,paddingAngle:ge(h)*p}),w})}return P}function dk(e){var{props:t,previousSectorsRef:r}=e,{sectors:n,isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:u,activeShape:l,inactiveShape:c,onAnimationStart:s,onAnimationEnd:f}=t,d=Cl(t,"recharts-pie-"),h=r.current,[v,p]=m.useState(!0),g=m.useCallback(()=>{typeof f=="function"&&f(),p(!1)},[f]),y=m.useCallback(()=>{typeof s=="function"&&s(),p(!0)},[s]);return m.createElement(zt,{begin:a,duration:o,isActive:i,easing:u,from:{t:0},to:{t:1},onAnimationStart:y,onAnimationEnd:g,key:d},b=>{var{t:x}=b,P=[],w=n&&n[0],O=w.startAngle;return n.forEach((A,j)=>{var T=h&&h[j],I=j>0?qt(A,"paddingAngle",0):0;if(T){var C=Ke(T.endAngle-T.startAngle,A.endAngle-A.startAngle),_=ie(ie({},A),{},{startAngle:O+I,endAngle:O+C(x)+I});P.push(_),O=_.endAngle}else{var{endAngle:R,startAngle:B}=A,F=Ke(0,R-B),V=F(x),K=ie(ie({},A),{},{startAngle:O+I,endAngle:O+V+I});P.push(K),O=K.endAngle}}),r.current=P,m.createElement(ye,null,m.createElement(Ig,{sectors:P,activeShape:l,inactiveShape:c,allOtherPieProps:t,showLabels:!v}))})}function hk(e){var{sectors:t,isAnimationActive:r,activeShape:n,inactiveShape:i}=e,a=m.useRef(null),o=a.current;return r&&t&&t.length&&(!o||o!==t)?m.createElement(dk,{props:e,previousSectorsRef:a}):m.createElement(Ig,{sectors:t,activeShape:n,inactiveShape:i,allOtherPieProps:e,showLabels:!0})}function vk(e){var{hide:t,className:r,rootTabIndex:n}=e,i=H("recharts-pie",r);return t?null:m.createElement(ye,{tabIndex:n,className:i},m.createElement(hk,e))}var Ng={animationBegin:400,animationDuration:1500,animationEasing:"ease",cx:"50%",cy:"50%",dataKey:"value",endAngle:360,fill:"#808080",hide:!1,innerRadius:0,isAnimationActive:!pr.isSsr,labelLine:!0,legendType:"rect",minAngle:0,nameKey:"name",outerRadius:"80%",paddingAngle:0,rootTabIndex:0,startAngle:0,stroke:"#fff"};function pk(e){var t=it(e,Ng),r=m.useMemo(()=>mn(e.children,Tn),[e.children]),n=z(t,!1),i=m.useMemo(()=>({name:t.name,nameKey:t.nameKey,tooltipType:t.tooltipType,data:t.data,dataKey:t.dataKey,cx:t.cx,cy:t.cy,startAngle:t.startAngle,endAngle:t.endAngle,minAngle:t.minAngle,paddingAngle:t.paddingAngle,innerRadius:t.innerRadius,outerRadius:t.outerRadius,cornerRadius:t.cornerRadius,legendType:t.legendType,fill:t.fill,presentationProps:n}),[t.cornerRadius,t.cx,t.cy,t.data,t.dataKey,t.endAngle,t.innerRadius,t.minAngle,t.name,t.nameKey,t.outerRadius,t.paddingAngle,t.startAngle,t.tooltipType,t.legendType,t.fill,n]),a=$(o=>xT(o,i,r));return m.createElement(m.Fragment,null,m.createElement(kl,{fn:nk,args:ie(ie({},t),{},{sectors:a})}),m.createElement(vk,vr({},t,{sectors:a})))}class _l extends m.PureComponent{constructor(){super(...arguments),aa(this,"id",cr("recharts-pie-"))}render(){return m.createElement(m.Fragment,null,m.createElement(IT,{data:this.props.data,dataKey:this.props.dataKey,hide:this.props.hide,angleAxisId:0,radiusAxisId:0,stackId:void 0,barSize:void 0,type:"pie"}),m.createElement(rk,this.props),m.createElement(pk,this.props),this.props.children)}}aa(_l,"displayName","Pie");aa(_l,"defaultProps",Ng);var mk=E([ve],e=>{if(e)return{top:e.top,bottom:e.bottom,left:e.left,right:e.right}}),gk=E([mk,Ct,_t],(e,t,r)=>{if(!(!e||t==null||r==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}}),yk=e=>{var t=Ce();return $(r=>vt(r,"xAxis",e,t))},bk=e=>{var t=Ce();return $(r=>vt(r,"yAxis",e,t))},Ml=()=>$(gk),xk=()=>$(xE);function Sh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Eh(e){for(var t=1;t{var{point:t,childIndex:r,mainColor:n,activeDot:i,dataKey:a}=e;if(i===!1||t.x==null||t.y==null)return null;var o=Eh(Eh({index:r,dataKey:a,cx:t.x,cy:t.y,r:4,fill:n??"none",strokeWidth:2,stroke:"#fff",payload:t.payload,value:t.value},z(i,!1)),Yu(i)),u;return m.isValidElement(i)?u=m.cloneElement(i,o):typeof i=="function"?u=i(o):u=m.createElement(Sg,o),m.createElement(ye,{className:"recharts-active-dot"},u)};function Sk(e){var{points:t,mainColor:r,activeDot:n,itemDataKey:i}=e,a=$(Wt),o=xk();if(t==null||o==null)return null;var u=t.find(l=>o.includes(l.payload));return J(u)?null:Ak({point:u,childIndex:Number(a),mainColor:r,dataKey:i,activeDot:n})}var Ek=()=>{var e=ae();return m.useEffect(()=>(e(PT()),()=>{e(OT())})),null},jk=["children"];function Tk(e,t){if(e==null)return{};var r,n,i=kk(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{},$g=m.createContext({addErrorBar:jh,removeErrorBar:jh}),Ck={data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0},Rg=m.createContext(Ck);function Lg(e){var{children:t}=e,r=Tk(e,jk);return m.createElement(Rg.Provider,{value:r},t)}var _k=()=>m.useContext(Rg),Bg=e=>{var{children:t,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,data:o,stackId:u,hide:l,type:c,barSize:s}=e,[f,d]=m.useState([]),h=m.useCallback(g=>{d(y=>[...y,g])},[d]),v=m.useCallback(g=>{d(y=>y.filter(b=>b!==g))},[d]),p=Ce();return m.createElement($g.Provider,{value:{addErrorBar:h,removeErrorBar:v}},m.createElement(DT,{type:c,data:o,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,errorBars:f,stackId:u,hide:l,barSize:s,isPanorama:p}),t)};function Mk(e){var{addErrorBar:t,removeErrorBar:r}=m.useContext($g);return m.useEffect(()=>(t(e),()=>{r(e)}),[t,r,e]),null}var Dk=["direction","width","dataKey","isAnimationActive","animationBegin","animationDuration","animationEasing"];function Kg(e,t,r){return(t=Ik(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ik(e){var t=Nk(e,"string");return typeof t=="symbol"?t:t+""}function Nk(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function hn(){return hn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{x,y:P,value:w,errorVal:O}=f(b,n,t);if(!O)return null;var A=[],j,T;if(Array.isArray(O)?[j,T]=O:j=T=O,t==="x"){var{scale:I}=p,C=P+v,_=C+r,R=C-r,B=I(w-j),F=I(w+T);A.push({x1:F,y1:_,x2:F,y2:R}),A.push({x1:B,y1:C,x2:F,y2:C}),A.push({x1:B,y1:_,x2:B,y2:R})}else if(t==="y"){var{scale:V}=g,K=x+v,de=K-r,oe=K+r,Ie=V(w-j),Ge=V(w+T);A.push({x1:de,y1:Ge,x2:oe,y2:Ge}),A.push({x1:K,y1:Ie,x2:K,y2:Ge}),A.push({x1:de,y1:Ie,x2:oe,y2:Ie})}var L="".concat(x+v,"px ").concat(P+v,"px");return m.createElement(ye,hn({className:"recharts-errorBar",key:"bar-".concat(A.map(we=>"".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2)))},c),A.map(we=>{var Xt=i?{transformOrigin:"".concat(we.x1-5,"px")}:void 0;return m.createElement(zt,{from:{transform:"scaleY(0)",transformOrigin:L},to:{transform:"scaleY(1)",transformOrigin:L},begin:a,easing:u,isActive:i,duration:o,key:"line-".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2),style:{transformOrigin:L}},m.createElement("line",hn({},we,{style:Xt})))}))});return m.createElement(ye,{className:"recharts-errorBars"},y)}var qg=m.createContext(void 0);function Bk(e){var t=m.useContext(qg);return e??t??"x"}function zg(e){var{direction:t,children:r}=e;return m.createElement(qg.Provider,{value:t},r)}var Fg={stroke:"black",strokeWidth:1.5,width:5,offset:0,isAnimationActive:!0,animationBegin:0,animationDuration:400,animationEasing:"ease-in-out"};function Kk(e){var t=Bk(e.direction),{width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o}=it(e,Fg);return m.createElement(m.Fragment,null,m.createElement(Mk,{dataKey:e.dataKey,direction:t}),m.createElement(Lk,hn({},e,{direction:t,width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o})))}class Wg extends m.Component{render(){return m.createElement(Kk,this.props)}}Kg(Wg,"defaultProps",Fg);Kg(Wg,"displayName","ErrorBar");var qk="Invariant failed";function zk(e,t){throw new Error(qk)}var Fk=["x","y"];function Du(){return Du=Object.assign?Object.assign.bind():function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:0;return(n,i)=>{if(D(t))return t;var a=D(n)||J(n);return a?t(n,i):(a||zk(),r)}};function Dl(e,t){var r,n,i=$(c=>Dt(c,e)),a=$(c=>Gt(c,t)),o=(r=i==null?void 0:i.allowDataOverflow)!==null&&r!==void 0?r:Re.allowDataOverflow,u=(n=a==null?void 0:a.allowDataOverflow)!==null&&n!==void 0?n:Le.allowDataOverflow,l=o||u;return{needClip:l,needClipX:o,needClipY:u}}function Hg(e){var{xAxisId:t,yAxisId:r,clipPathId:n}=e,i=Ml(),{needClipX:a,needClipY:o,needClip:u}=Dl(t,r);if(!u)return null;var{x:l,y:c,width:s,height:f}=i;return m.createElement("clipPath",{id:"clipPath-".concat(n)},m.createElement("rect",{x:a?l:l-s/2,y:o?c:c-f/2,width:a?s:s*2,height:o?f:f*2}))}var Zk=["onMouseEnter","onMouseLeave","onClick"],Jk=["value","background","tooltipPosition"],Qk=["onMouseEnter","onClick","onMouseLeave"];function vn(){return vn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:r,fill:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Nr(r,t),payload:e}]};function iC(e){var{dataKey:t,stroke:r,strokeWidth:n,fill:i,name:a,hide:o,unit:u}=e;return{dataDefinedOnItem:void 0,positions:void 0,settings:{stroke:r,strokeWidth:n,fill:i,dataKey:t,nameKey:void 0,name:Nr(a,t),hide:o,type:e.tooltipType,color:e.fill,unit:u}}}function aC(e){var t=$(Wt),{data:r,dataKey:n,background:i,allOtherBarProps:a}=e,{onMouseEnter:o,onMouseLeave:u,onClick:l}=a,c=Iu(a,Zk),s=El(o,n),f=jl(u),d=Tl(l,n);if(!i||r==null)return null;var h=z(i,!1);return m.createElement(m.Fragment,null,r.map((v,p)=>{var{value:g,background:y,tooltipPosition:b}=v,x=Iu(v,Jk);if(!y)return null;var P=s(v,p),w=f(v,p),O=d(v,p),A=Ee(Ee(Ee(Ee(Ee({option:i,isActive:String(p)===t},x),{},{fill:"#eee"},y),h),ji(c,v,p)),{},{onMouseEnter:P,onMouseLeave:w,onClick:O,dataKey:n,index:p,className:"recharts-bar-background-rectangle"});return m.createElement(Ug,vn({key:"background-bar-".concat(p)},A))}))}function Yg(e){var{data:t,props:r,showLabels:n}=e,i=z(r,!1),{shape:a,dataKey:o,activeBar:u}=r,l=$(Wt),c=$(cg),{onMouseEnter:s,onClick:f,onMouseLeave:d}=r,h=Iu(r,Qk),v=El(s,o),p=jl(d),g=Tl(f,o);return t?m.createElement(m.Fragment,null,t.map((y,b)=>{var x=u&&String(b)===l&&(c==null||o===c),P=x?u:a,w=Ee(Ee(Ee({},i),y),{},{isActive:x,option:P,index:b,dataKey:o});return m.createElement(ye,vn({className:"recharts-bar-rectangle"},ji(h,y,b),{onMouseEnter:v(y,b),onMouseLeave:p(y,b),onClick:g(y,b),key:"rectangle-".concat(y==null?void 0:y.x,"-").concat(y==null?void 0:y.y,"-").concat(y==null?void 0:y.value,"-").concat(b)}),m.createElement(Ug,w))}),n&&Kt.renderCallByParent(r,t)):null}function oC(e){var{props:t,previousRectanglesRef:r}=e,{data:n,layout:i,isAnimationActive:a,animationBegin:o,animationDuration:u,animationEasing:l,onAnimationEnd:c,onAnimationStart:s}=t,f=r.current,d=Cl(t,"recharts-bar-"),[h,v]=m.useState(!1),p=m.useCallback(()=>{typeof c=="function"&&c(),v(!1)},[c]),g=m.useCallback(()=>{typeof s=="function"&&s(),v(!0)},[s]);return m.createElement(zt,{begin:o,duration:u,isActive:a,easing:l,from:{t:0},to:{t:1},onAnimationEnd:p,onAnimationStart:g,key:d},y=>{var{t:b}=y,x=b===1?n:n.map((P,w)=>{var O=f&&f[w];if(O){var A=Ke(O.x,P.x),j=Ke(O.y,P.y),T=Ke(O.width,P.width),I=Ke(O.height,P.height);return Ee(Ee({},P),{},{x:A(b),y:j(b),width:T(b),height:I(b)})}if(i==="horizontal"){var C=Ke(0,P.height),_=C(b);return Ee(Ee({},P),{},{y:P.y+P.height-_,height:_})}var R=Ke(0,P.width),B=R(b);return Ee(Ee({},P),{},{width:B})});return b>0&&(r.current=x),m.createElement(ye,null,m.createElement(Yg,{props:t,data:x,showLabels:!h}))})}function uC(e){var{data:t,isAnimationActive:r}=e,n=m.useRef(null);return r&&t&&t.length&&(n.current==null||n.current!==t)?m.createElement(oC,{previousRectanglesRef:n,props:e}):m.createElement(Yg,{props:e,data:t,showLabels:!0})}var Gg=0,sC=(e,t)=>{var r=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:r,errorVal:re(e,t)}};class lC extends m.PureComponent{constructor(){super(...arguments),oa(this,"id",cr("recharts-bar-"))}render(){var{hide:t,data:r,dataKey:n,className:i,xAxisId:a,yAxisId:o,needClip:u,background:l,id:c,layout:s}=this.props;if(t)return null;var f=H("recharts-bar",i),d=J(c)?this.id:c;return m.createElement(ye,{className:f},u&&m.createElement("defs",null,m.createElement(Hg,{clipPathId:d,xAxisId:a,yAxisId:o})),m.createElement(ye,{className:"recharts-bar-rectangles",clipPath:u?"url(#clipPath-".concat(d,")"):null},m.createElement(aC,{data:r,dataKey:n,background:l,allOtherBarProps:this.props}),m.createElement(uC,this.props)),m.createElement(zg,{direction:s==="horizontal"?"y":"x"},this.props.children))}}var Vg={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",hide:!1,isAnimationActive:!pr.isSsr,legendType:"rect",minPointSize:Gg,xAxisId:0,yAxisId:0};function cC(e){var{xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s}=it(e,Vg),{needClip:f}=Dl(t,r),d=qi(),h=Ce(),v=m.useMemo(()=>({barSize:e.barSize,data:void 0,dataKey:e.dataKey,maxBarSize:e.maxBarSize,minPointSize:a,stackId:rp(e.stackId)}),[e.barSize,e.dataKey,e.maxBarSize,a,e.stackId]),p=mn(e.children,Tn),g=$(x=>LC(x,t,r,h,v,p));if(d!=="vertical"&&d!=="horizontal")return null;var y,b=g==null?void 0:g[0];return b==null||b.height==null||b.width==null?y=0:y=d==="vertical"?b.height/2:b.width/2,m.createElement(Lg,{xAxisId:t,yAxisId:r,data:g,dataPointFormatter:sC,errorBarOffset:y},m.createElement(lC,vn({},e,{layout:d,needClip:f,data:g,xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s})))}function fC(e){var{layout:t,barSettings:{dataKey:r,minPointSize:n},pos:i,bandSize:a,xAxis:o,yAxis:u,xAxisTicks:l,yAxisTicks:c,stackedData:s,displayedData:f,offset:d,cells:h}=e,v=t==="horizontal"?u:o,p=s?v.scale.domain():null,g=uw({numericAxis:v});return f.map((y,b)=>{var x,P,w,O,A,j;s?x=rw(s[b],p):(x=re(y,r),Array.isArray(x)||(x=[g,x]));var T=Xk(n,Gg)(x[1],b);if(t==="horizontal"){var I,[C,_]=[u.scale(x[0]),u.scale(x[1])];P=mf({axis:o,ticks:l,bandSize:a,offset:i.offset,entry:y,index:b}),w=(I=_??C)!==null&&I!==void 0?I:void 0,O=i.size;var R=C-_;if(A=We(R)?0:R,j={x:P,y:d.top,width:O,height:d.height},Math.abs(T)>0&&Math.abs(A)0&&Math.abs(O)t,mC=(e,t,r)=>r,gC=(e,t,r,n)=>n,Nl=(e,t,r,n,i)=>i,yC=(e,t,r,n,i)=>i.maxBarSize,bC=(e,t,r,n,i,a)=>a,_h=(e,t,r)=>{var n=r??e;if(!J(n))return ke(n,t,0)},xC=E([Y,Zi,pC,mC,gC],(e,t,r,n,i)=>t.filter(a=>e==="horizontal"?a.xAxisId===r:a.yAxisId===n).filter(a=>a.isPanorama===i).filter(a=>a.hide===!1).filter(a=>a.type==="bar")),wC=(e,t,r,n)=>{var i=Y(e);return i==="horizontal"?Su(e,"yAxis",r,n):Su(e,"xAxis",t,n)},PC=(e,t,r)=>{var n=Y(e);return n==="horizontal"?Dd(e,"xAxis",t):Dd(e,"yAxis",r)};function OC(e){return e.stackId!=null&&e.dataKey!=null}var AC=(e,t,r)=>{var n={},i=e.filter(OC),a=e.filter(c=>c.stackId==null),o=i.reduce((c,s)=>(c[s.stackId]||(c[s.stackId]=[]),c[s.stackId].push(s),c),n),u=Object.entries(o).map(c=>{var[s,f]=c,d=f.map(v=>v.dataKey),h=_h(t,r,f[0].barSize);return{stackId:s,dataKeys:d,barSize:h}}),l=a.map(c=>{var s=[c.dataKey].filter(d=>d!=null),f=_h(t,r,c.barSize);return{stackId:void 0,dataKeys:s,barSize:f}});return[...u,...l]},SC=E([xC,_A,PC],AC),EC=(e,t,r,n,i)=>{var a,o,u=Y(e),l=mm(e),{maxBarSize:c}=i,s=J(c)?l:c,f,d;return u==="horizontal"?(f=vt(e,"xAxis",t,n),d=Ft(e,"xAxis",t,n)):(f=vt(e,"yAxis",r,n),d=Ft(e,"yAxis",r,n)),(a=(o=an(f,d,!0))!==null&&o!==void 0?o:s)!==null&&a!==void 0?a:0},Xg=(e,t,r,n)=>{var i=Y(e),a,o;return i==="horizontal"?(a=vt(e,"xAxis",t,n),o=Ft(e,"xAxis",t,n)):(a=vt(e,"yAxis",r,n),o=Ft(e,"yAxis",r,n)),an(a,o)};function jC(e,t,r,n,i){var a=n.length;if(!(a<1)){var o=ke(e,r,0,!0),u,l=[];if(Ye(n[0].barSize)){var c=!1,s=r/a,f=n.reduce((y,b)=>y+(b.barSize||0),0);f+=(a-1)*o,f>=r&&(f-=(a-1)*o,o=0),f>=r&&s>0&&(c=!0,s*=.9,f=a*s);var d=(r-f)/2>>0,h={offset:d-o,size:0};u=n.reduce((y,b)=>{var x,P={stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:h.offset+h.size+o,size:c?s:(x=b.barSize)!==null&&x!==void 0?x:0}},w=[...y,P];return h=w[w.length-1].position,w},l)}else{var v=ke(t,r,0,!0);r-2*v-(a-1)*o<=0&&(o=0);var p=(r-2*v-(a-1)*o)/a;p>1&&(p>>=0);var g=Ye(i)?Math.min(p,i):p;u=n.reduce((y,b,x)=>[...y,{stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:v+(p+o)*x+(p-g)/2,size:g}}],l)}return u}}var TC=(e,t,r,n,i,a,o)=>{var u=J(o)?t:o,l=jC(r,n,i!==a?i:a,e,u);return i!==a&&l!=null&&(l=l.map(c=>Fn(Fn({},c),{},{position:Fn(Fn({},c.position),{},{offset:c.position.offset-i/2})}))),l},kC=E([SC,mm,CA,gm,EC,Xg,yC],TC),CC=(e,t,r,n)=>vt(e,"xAxis",t,n),_C=(e,t,r,n)=>vt(e,"yAxis",r,n),MC=(e,t,r,n)=>Ft(e,"xAxis",t,n),DC=(e,t,r,n)=>Ft(e,"yAxis",r,n),IC=E([kC,Nl],(e,t)=>{if(e!=null){var r=e.find(n=>n.stackId===t.stackId&&n.dataKeys.includes(t.dataKey));if(r!=null)return r.position}}),NC=(e,t)=>{if(!(!e||(t==null?void 0:t.dataKey)==null)){var{stackId:r}=t;if(r!=null){var n=e[r];if(n){var{stackedData:i}=n;if(i){var a=i.find(o=>o.key===t.dataKey);return a}}}}},$C=E([Zi,Nl],(e,t)=>{if(e.some(r=>r.type==="bar"&&t.dataKey===r.dataKey&&t.stackId===r.stackId&&t.stackId===r.stackId))return t}),RC=E([wC,Nl],NC),LC=E([ve,CC,_C,MC,DC,IC,Y,Rs,Xg,RC,$C,bC],(e,t,r,n,i,a,o,u,l,c,s,f)=>{var{chartData:d,dataStartIndex:h,dataEndIndex:v}=u;if(!(s==null||a==null||o!=="horizontal"&&o!=="vertical"||t==null||r==null||n==null||i==null||l==null)){var{data:p}=s,g;if(p!=null&&p.length>0?g=p:g=d==null?void 0:d.slice(h,v+1),g!=null)return fC({layout:o,barSettings:s,pos:a,bandSize:l,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,stackedData:c,displayedData:g,offset:e,cells:f})}}),Zg=e=>{var{chartData:t}=e,r=ae(),n=Ce();return m.useEffect(()=>n?()=>{}:(r(Fd(t)),()=>{r(Fd(void 0))}),[t,r,n]),null},Mh={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},Jg=nt({name:"brush",initialState:Mh,reducers:{setBrushSettings(e,t){return t.payload==null?Mh:t.payload}}}),{setBrushSettings:Z2}=Jg.actions,BC=Jg.reducer;function KC(e,t,r){return(t=qC(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function qC(e){var t=zC(e,"string");return typeof t=="symbol"?t:t+""}function zC(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}class $l{static create(t){return new $l(t)}constructor(t){this.scale=t}get domain(){return this.scale.domain}get range(){return this.scale.range}get rangeMin(){return this.range()[0]}get rangeMax(){return this.range()[1]}get bandwidth(){return this.scale.bandwidth}apply(t){var{bandAware:r,position:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t!==void 0){if(n)switch(n){case"start":return this.scale(t);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+i}case"end":{var a=this.bandwidth?this.bandwidth():0;return this.scale(t)+a}default:return this.scale(t)}if(r){var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+o}return this.scale(t)}}isInRange(t){var r=this.range(),n=r[0],i=r[r.length-1];return n<=i?t>=n&&t<=i:t>=i&&t<=n}}KC($l,"EPS",1e-4);function FC(e){return(e%180+180)%180}var WC=function(t){var{width:r,height:n}=t,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=FC(i),o=a*Math.PI/180,u=Math.atan(n/r),l=o>u&&o{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=Ot(e).dots.findIndex(n=>n===t.payload);r!==-1&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=Ot(e).areas.findIndex(n=>n===t.payload);r!==-1&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=Ot(e).lines.findIndex(n=>n===t.payload);r!==-1&&e.lines.splice(r,1)}}}),{addDot:J2,removeDot:Q2,addArea:eD,removeArea:tD,addLine:rD,removeLine:nD}=Qg.actions,HC=Qg.reducer,YC=m.createContext(void 0),GC=e=>{var{children:t}=e,[r]=m.useState("".concat(cr("recharts"),"-clip")),n=Ml();if(n==null)return null;var{x:i,y:a,width:o,height:u}=n;return m.createElement(YC.Provider,{value:r},m.createElement("defs",null,m.createElement("clipPath",{id:r},m.createElement("rect",{x:i,y:a,height:u,width:o}))),t)};function zo(e,t){for(var r in e)if({}.hasOwnProperty.call(e,r)&&(!{}.hasOwnProperty.call(t,r)||e[r]!==t[r]))return!1;for(var n in t)if({}.hasOwnProperty.call(t,n)&&!{}.hasOwnProperty.call(e,n))return!1;return!0}function ey(e,t,r){if(t<1)return[];if(t===1&&r===void 0)return e;for(var n=[],i=0;ie*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function ZC(e,t){return ey(e,t+1)}function JC(e,t,r,n,i){for(var a=(n||[]).slice(),{start:o,end:u}=t,l=0,c=1,s=o,f=function(){var v=n==null?void 0:n[l];if(v===void 0)return{v:ey(n,c)};var p=l,g,y=()=>(g===void 0&&(g=r(v,p)),g),b=v.coordinate,x=l===0||Oi(e,b,y,s,u);x||(l=0,s=o,c+=1),x&&(s=b+e*(y()/2+i),l+=c)},d;c<=a.length;)if(d=f(),d)return d.v;return[]}function Dh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t(v===void 0&&(v=r(h,d)),v);if(d===o-1){var g=e*(h.coordinate+e*p()/2-l);a[d]=h=Se(Se({},h),{},{tickCoord:g>0?h.coordinate-g*e:h.coordinate})}else a[d]=h=Se(Se({},h),{},{tickCoord:h.coordinate});var y=Oi(e,h.tickCoord,p,u,l);y&&(l=h.tickCoord-e*(p()/2+i),a[d]=Se(Se({},h),{},{isShow:!0}))},s=o-1;s>=0;s--)c(s);return a}function n_(e,t,r,n,i,a){var o=(n||[]).slice(),u=o.length,{start:l,end:c}=t;if(a){var s=n[u-1],f=r(s,u-1),d=e*(s.coordinate+e*f/2-c);o[u-1]=s=Se(Se({},s),{},{tickCoord:d>0?s.coordinate-d*e:s.coordinate});var h=Oi(e,s.tickCoord,()=>f,l,c);h&&(c=s.tickCoord-e*(f/2+i),o[u-1]=Se(Se({},s),{},{isShow:!0}))}for(var v=a?u-1:u,p=function(b){var x=o[b],P,w=()=>(P===void 0&&(P=r(x,b)),P);if(b===0){var O=e*(x.coordinate-e*w()/2-l);o[b]=x=Se(Se({},x),{},{tickCoord:O<0?x.coordinate-O*e:x.coordinate})}else o[b]=x=Se(Se({},x),{},{tickCoord:x.coordinate});var A=Oi(e,x.tickCoord,w,l,c);A&&(l=x.tickCoord+e*(w()/2+i),o[b]=Se(Se({},x),{},{isShow:!0}))},g=0;g{var w=typeof c=="function"?c(x.value,P):x.value;return v==="width"?VC(tn(w,{fontSize:t,letterSpacing:r}),p,f):tn(w,{fontSize:t,letterSpacing:r})[v]},y=i.length>=2?ge(i[1].coordinate-i[0].coordinate):1,b=XC(a,y,v);return l==="equidistantPreserveStart"?JC(y,b,g,i,o):(l==="preserveStart"||l==="preserveStartEnd"?h=n_(y,b,g,i,o,l==="preserveStartEnd"):h=r_(y,b,g,i,o),h.filter(x=>x.isShow))}var i_=["viewBox"],a_=["viewBox"];function Ar(){return Ar=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:[],{tickLine:i,stroke:a,tick:o,tickFormatter:u,unit:l}=this.props,c=Rl(he(he({},this.props),{},{ticks:n}),t,r),s=this.getTickTextAnchor(),f=this.getTickVerticalAnchor(),d=z(this.props,!1),h=z(o,!1),v=he(he({},d),{},{fill:"none"},z(i,!1)),p=c.map((g,y)=>{var{line:b,tick:x}=this.getTickLineCoord(g),P=he(he(he(he({textAnchor:s,verticalAnchor:f},d),{},{stroke:"none",fill:a},h),x),{},{index:y,payload:g,visibleTicksCount:c.length,tickFormatter:u});return m.createElement(ye,Ar({className:"recharts-cartesian-axis-tick",key:"tick-".concat(g.value,"-").concat(g.coordinate,"-").concat(g.tickCoord)},ji(this.props,g,y)),i&&m.createElement("line",Ar({},v,b,{className:H("recharts-cartesian-axis-tick-line",qt(i,"className"))})),o&&Vt.renderTickItem(o,P,"".concat(typeof u=="function"?u(g.value,y):g.value).concat(l||"")))});return p.length>0?m.createElement("g",{className:"recharts-cartesian-axis-ticks"},p):null}render(){var{axisLine:t,width:r,height:n,className:i,hide:a}=this.props;if(a)return null;var{ticks:o}=this.props;return r!=null&&r<=0||n!=null&&n<=0?null:m.createElement(ye,{className:H("recharts-cartesian-axis",i),ref:u=>{if(u){var l=u.getElementsByClassName("recharts-cartesian-axis-tick-value");this.tickRefs.current=Array.from(l);var c=l[0];if(c){var s=window.getComputedStyle(c).fontSize,f=window.getComputedStyle(c).letterSpacing;(s!==this.state.fontSize||f!==this.state.letterSpacing)&&this.setState({fontSize:window.getComputedStyle(c).fontSize,letterSpacing:window.getComputedStyle(c).letterSpacing})}}}},t&&this.renderAxisLine(),this.renderTicks(this.state.fontSize,this.state.letterSpacing,o),qe.renderCallByParent(this.props))}}Ll(Vt,"displayName","CartesianAxis");Ll(Vt,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var l_=["x1","y1","x2","y2","key"],c_=["offset"],f_=["xAxisId","yAxisId"],d_=["xAxisId","yAxisId"];function $h(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function je(e){for(var t=1;t{var{fill:t}=e;if(!t||t==="none")return null;var{fillOpacity:r,x:n,y:i,width:a,height:o,ry:u}=e;return m.createElement("rect",{x:n,y:i,ry:u,width:a,height:o,stroke:"none",fill:t,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function ty(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var{x1:n,y1:i,x2:a,y2:o,key:u}=t,l=Ai(t,l_),c=z(l,!1),{offset:s}=c,f=Ai(c,c_);r=m.createElement("line",ar({},f,{x1:n,y1:i,x2:a,y2:o,fill:"none",key:u}))}return r}function y_(e){var{x:t,width:r,horizontal:n=!0,horizontalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Ai(e,f_),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:t,y1:c,x2:t+r,y2:c,key:"line-".concat(s),index:s});return ty(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-horizontal"},l)}function b_(e){var{y:t,height:r,vertical:n=!0,verticalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Ai(e,d_),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:c,y1:t,x2:c,y2:t+r,key:"line-".concat(s),index:s});return ty(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-vertical"},l)}function x_(e){var{horizontalFill:t,fillOpacity:r,x:n,y:i,width:a,height:o,horizontalPoints:u,horizontal:l=!0}=e;if(!l||!t||!t.length)return null;var c=u.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%t.length;return m.createElement("rect",{key:"react-".concat(d),y:f,x:n,height:v,width:a,stroke:"none",fill:t[p],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},s)}function w_(e){var{vertical:t=!0,verticalFill:r,fillOpacity:n,x:i,y:a,width:o,height:u,verticalPoints:l}=e;if(!t||!r||!r.length)return null;var c=l.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%r.length;return m.createElement("rect",{key:"react-".concat(d),x:f,y:a,width:v,height:u,stroke:"none",fill:r[p],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},s)}var P_=(e,t)=>{var{xAxis:r,width:n,height:i,offset:a}=e;return ep(Rl(je(je(je({},Vt.defaultProps),r),{},{ticks:tp(r),viewBox:{x:0,y:0,width:n,height:i}})),a.left,a.left+a.width,t)},O_=(e,t)=>{var{yAxis:r,width:n,height:i,offset:a}=e;return ep(Rl(je(je(je({},Vt.defaultProps),r),{},{ticks:tp(r),viewBox:{x:0,y:0,width:n,height:i}})),a.top,a.top+a.height,t)},A_={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0};function Bl(e){var t=sp(),r=lp(),n=up(),i=je(je({},it(e,A_)),{},{x:D(e.x)?e.x:n.left,y:D(e.y)?e.y:n.top,width:D(e.width)?e.width:n.width,height:D(e.height)?e.height:n.height}),{xAxisId:a,yAxisId:o,x:u,y:l,width:c,height:s,syncWithTicks:f,horizontalValues:d,verticalValues:h}=i,v=Ce(),p=$(T=>Id(T,"xAxis",a,v)),g=$(T=>Id(T,"yAxis",o,v));if(!D(c)||c<=0||!D(s)||s<=0||!D(u)||u!==+u||!D(l)||l!==+l)return null;var y=i.verticalCoordinatesGenerator||P_,b=i.horizontalCoordinatesGenerator||O_,{horizontalPoints:x,verticalPoints:P}=i;if((!x||!x.length)&&typeof b=="function"){var w=d&&d.length,O=b({yAxis:g?je(je({},g),{},{ticks:w?d:g.ticks}):void 0,width:t,height:r,offset:n},w?!0:f);en(Array.isArray(O),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof O,"]")),Array.isArray(O)&&(x=O)}if((!P||!P.length)&&typeof y=="function"){var A=h&&h.length,j=y({xAxis:p?je(je({},p),{},{ticks:A?h:p.ticks}):void 0,width:t,height:r,offset:n},A?!0:f);en(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(P=j)}return m.createElement("g",{className:"recharts-cartesian-grid"},m.createElement(g_,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),m.createElement(x_,ar({},i,{horizontalPoints:x})),m.createElement(w_,ar({},i,{verticalPoints:P})),m.createElement(y_,ar({},i,{offset:n,horizontalPoints:x,xAxis:p,yAxis:g})),m.createElement(b_,ar({},i,{offset:n,verticalPoints:P,xAxis:p,yAxis:g})))}Bl.displayName="CartesianGrid";var ry=(e,t,r,n)=>vt(e,"xAxis",t,n),ny=(e,t,r,n)=>Ft(e,"xAxis",t,n),iy=(e,t,r,n)=>vt(e,"yAxis",r,n),ay=(e,t,r,n)=>Ft(e,"yAxis",r,n),S_=E([Y,ry,iy,ny,ay],(e,t,r,n,i)=>Ut(e,"xAxis")?an(t,n,!1):an(r,i,!1)),E_=(e,t,r,n,i)=>i,j_=E([Zi,E_],(e,t)=>{if(e.some(r=>r.type==="line"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),T_=E([Y,ry,iy,ny,ay,j_,S_,Rs],(e,t,r,n,i,a,o,u)=>{var{chartData:l,dataStartIndex:c,dataEndIndex:s}=u;if(!(a==null||t==null||r==null||n==null||i==null||n.length===0||i.length===0||o==null)){var{dataKey:f,data:d}=a,h;if(d!=null&&d.length>0?h=d:h=l==null?void 0:l.slice(c,s+1),h!=null)return Y_({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataKey:f,bandSize:o,displayedData:h})}}),k_=["type","layout","connectNulls","needClip"],C_=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId"];function oy(e,t){if(e==null)return{};var r,n,i=__(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{dataKey:t,name:r,stroke:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Nr(r,t),payload:e}]};function N_(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:u,unit:l}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:Nr(o,t),hide:u,type:e.tooltipType,color:e.stroke,unit:l}}}var uy=(e,t)=>"".concat(t,"px ").concat(e-t,"px");function $_(e,t){for(var r=e.length%2!==0?[...e,0]:e,n=[],i=0;i{var n=r.reduce((f,d)=>f+d);if(!n)return uy(t,e);for(var i=Math.floor(e/n),a=e%n,o=t-e,u=[],l=0,c=0;la){u=[...r.slice(0,l),a-c];break}var s=u.length%2===0?[0,o]:[o];return[...$_(r,i),...u,...s].map(f=>"".concat(f,"px")).join(", ")};function L_(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var n=H("recharts-line-dot",typeof e!="boolean"?e.className:"");r=m.createElement(Sg,Ir({},t,{className:n}))}return r}function B_(e,t){return e==null?!1:t?!0:e.length===1}function K_(e){var{clipPathId:t,points:r,props:n}=e,{dot:i,dataKey:a,needClip:o}=n;if(!B_(r,i))return null;var u=Qh(i),l=z(n,!1),c=z(i,!0),s=r.map((d,h)=>{var v=ot(ot(ot({key:"dot-".concat(h),r:3},l),c),{},{index:h,cx:d.x,cy:d.y,dataKey:a,value:d.value,payload:d.payload,points:r});return L_(i,v)}),f={clipPath:o?"url(#clipPath-".concat(u?"":"dots-").concat(t,")"):null};return m.createElement(ye,Ir({className:"recharts-line-dots",key:"dots"},f),s)}function Nu(e){var{clipPathId:t,pathRef:r,points:n,strokeDasharray:i,props:a,showLabels:o}=e,{type:u,layout:l,connectNulls:c,needClip:s}=a,f=oy(a,k_),d=ot(ot({},z(f,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:s?"url(#clipPath-".concat(t,")"):null,points:n,type:u,layout:l,connectNulls:c,strokeDasharray:i??a.strokeDasharray});return m.createElement(m.Fragment,null,(n==null?void 0:n.length)>1&&m.createElement(fs,Ir({},d,{pathRef:r})),m.createElement(K_,{points:n,clipPathId:t,props:a}),o&&Kt.renderCallByParent(a,n))}function q_(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function z_(e){var{clipPathId:t,props:r,pathRef:n,previousPointsRef:i,longestAnimatedLengthRef:a}=e,{points:o,strokeDasharray:u,isAnimationActive:l,animationBegin:c,animationDuration:s,animationEasing:f,animateNewValues:d,width:h,height:v,onAnimationEnd:p,onAnimationStart:g}=r,y=i.current,b=Cl(r,"recharts-line-"),[x,P]=m.useState(!1),w=m.useCallback(()=>{typeof p=="function"&&p(),P(!1)},[p]),O=m.useCallback(()=>{typeof g=="function"&&g(),P(!0)},[g]),A=q_(n.current),j=a.current;return m.createElement(zt,{begin:c,duration:s,isActive:l,easing:f,from:{t:0},to:{t:1},onAnimationEnd:w,onAnimationStart:O,key:b},T=>{var{t:I}=T,C=Ke(j,A+j),_=Math.min(C(I),A),R;if(u){var B="".concat(u).split(/[,\s]+/gim).map(K=>parseFloat(K));R=R_(_,A,B)}else R=uy(A,_);if(y){var F=y.length/o.length,V=I===1?o:o.map((K,de)=>{var oe=Math.floor(de*F);if(y[oe]){var Ie=y[oe],Ge=Ke(Ie.x,K.x),L=Ke(Ie.y,K.y);return ot(ot({},K),{},{x:Ge(I),y:L(I)})}if(d){var we=Ke(h*2,K.x),Xt=Ke(v/2,K.y);return ot(ot({},K),{},{x:we(I),y:Xt(I)})}return ot(ot({},K),{},{x:K.x,y:K.y})});return i.current=V,m.createElement(Nu,{props:r,points:V,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})}return I>0&&A>0&&(i.current=o,a.current=_),m.createElement(Nu,{props:r,points:o,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})})}function F_(e){var{clipPathId:t,props:r}=e,{points:n,isAnimationActive:i}=r,a=m.useRef(null),o=m.useRef(0),u=m.useRef(null),l=a.current;return i&&n&&n.length&&l!==n?m.createElement(z_,{props:r,clipPathId:t,previousPointsRef:a,longestAnimatedLengthRef:o,pathRef:u}):m.createElement(Nu,{props:r,points:n,clipPathId:t,pathRef:u,showLabels:!0})}var W_=(e,t)=>({x:e.x,y:e.y,value:e.value,errorVal:re(e.payload,t)});class U_ extends m.Component{constructor(){super(...arguments),ua(this,"id",cr("recharts-line-"))}render(){var t,{hide:r,dot:n,points:i,className:a,xAxisId:o,yAxisId:u,top:l,left:c,width:s,height:f,id:d,needClip:h,layout:v}=this.props;if(r)return null;var p=H("recharts-line",a),g=J(d)?this.id:d,{r:y=3,strokeWidth:b=2}=(t=z(n,!1))!==null&&t!==void 0?t:{r:3,strokeWidth:2},x=Qh(n),P=y*2+b;return m.createElement(m.Fragment,null,m.createElement(ye,{className:p},h&&m.createElement("defs",null,m.createElement(Hg,{clipPathId:g,xAxisId:o,yAxisId:u}),!x&&m.createElement("clipPath",{id:"clipPath-dots-".concat(g)},m.createElement("rect",{x:c-P/2,y:l-P/2,width:s+P,height:f+P}))),m.createElement(F_,{props:this.props,clipPathId:g}),m.createElement(zg,{direction:v==="horizontal"?"y":"x"},m.createElement(Lg,{xAxisId:o,yAxisId:u,data:i,dataPointFormatter:W_,errorBarOffset:0},this.props.children))),m.createElement(Sk,{activeDot:this.props.activeDot,points:i,mainColor:this.props.stroke,itemDataKey:this.props.dataKey}))}}var sy={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:!pr.isSsr,label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0};function H_(e){var t=it(e,sy),{activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,connectNulls:u,dot:l,hide:c,isAnimationActive:s,label:f,legendType:d,xAxisId:h,yAxisId:v}=t,p=oy(t,C_),{needClip:g}=Dl(h,v),{height:y,width:b,x,y:P}=Ml(),w=qi(),O=Ce(),A=m.useMemo(()=>({dataKey:e.dataKey,data:e.data}),[e.dataKey,e.data]),j=$(T=>T_(T,h,v,O,A));return w!=="horizontal"&&w!=="vertical"?null:m.createElement(U_,Ir({},p,{connectNulls:u,dot:l,activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:s,hide:c,label:f,legendType:d,xAxisId:h,yAxisId:v,points:j,layout:w,height:y,width:b,left:x,top:P,needClip:g}))}function Y_(e){var{layout:t,xAxis:r,yAxis:n,xAxisTicks:i,yAxisTicks:a,dataKey:o,bandSize:u,displayedData:l}=e;return l.map((c,s)=>{var f=re(c,o);return t==="horizontal"?{x:pf({axis:r,ticks:i,bandSize:u,entry:c,index:s}),y:J(f)?null:n.scale(f),value:f,payload:c}:{x:J(f)?null:r.scale(f),y:pf({axis:n,ticks:a,bandSize:u,entry:c,index:s}),value:f,payload:c}})}class Kl extends m.PureComponent{render(){return m.createElement(Bg,{type:"line",data:this.props.data,xAxisId:this.props.xAxisId,yAxisId:this.props.yAxisId,zAxisId:0,dataKey:this.props.dataKey,stackId:void 0,hide:this.props.hide,barSize:void 0},m.createElement(Dg,{legendPayload:I_(this.props)}),m.createElement(kl,{fn:N_,args:this.props}),m.createElement(H_,this.props))}}ua(Kl,"displayName","Line");ua(Kl,"defaultProps",sy);function Lh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Bh(e){for(var t=1;t{var{children:a}=e,o=fy(e,iM);return o},[e]),n=$(a=>Dt(a,r.id)),i=r===n;return m.useEffect(()=>(t(J_(r)),()=>{t(Q_(r))}),[r,t]),i?e.children:null}var cM=e=>{var{xAxisId:t,className:r}=e,n=$(op),i=Ce(),a="xAxis",o=$(h=>qr(h,a,t,i)),u=$(h=>Um(h,a,t,i)),l=$(h=>qm(h,t)),c=$(h=>OS(h,t));if(l==null||c==null)return null;var{dangerouslySetInnerHTML:s,ticks:f}=e,d=fy(e,aM);return m.createElement(Vt,$u({},d,{scale:o,x:c.x,y:c.y,width:l.width,height:l.height,className:H("recharts-".concat(a," ").concat(a),r),viewBox:n,ticks:u}))},fM=e=>{var t,r,n,i,a;return m.createElement(lM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.xAxisId,scale:e.scale,type:e.type,padding:e.padding,allowDataOverflow:e.allowDataOverflow,domain:e.domain,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,height:e.height,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter},m.createElement(cM,e))};class sa extends m.Component{render(){return m.createElement(fM,this.props)}}cy(sa,"displayName","XAxis");cy(sa,"defaultProps",{allowDataOverflow:Re.allowDataOverflow,allowDecimals:Re.allowDecimals,allowDuplicatedCategory:Re.allowDuplicatedCategory,height:Re.height,hide:!1,mirror:Re.mirror,orientation:Re.orientation,padding:Re.padding,reversed:Re.reversed,scale:Re.scale,tickCount:Re.tickCount,type:Re.type,xAxisId:0});var dM=e=>{var{ticks:t,label:r,labelGapWithTick:n=5,tickSize:i=0,tickMargin:a=0}=e,o=0;if(t){t.forEach(s=>{if(s){var f=s.getBoundingClientRect();f.width>o&&(o=f.width)}});var u=r?r.getBoundingClientRect().width:0,l=i+a,c=o+l+u+(r?n:0);return Math.round(c)}return 0},hM=["dangerouslySetInnerHTML","ticks"];function dy(e,t,r){return(t=vM(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function vM(e){var t=pM(e,"string");return typeof t=="symbol"?t:t+""}function pM(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Ru(){return Ru=Object.assign?Object.assign.bind():function(e){for(var t=1;t(t(eM(e)),()=>{t(tM(e))}),[e,t]),null}var bM=e=>{var t,{yAxisId:r,className:n,width:i,label:a}=e,o=m.useRef(null),u=m.useRef(null),l=$(op),c=Ce(),s=ae(),f="yAxis",d=$(x=>qr(x,f,r,c)),h=$(x=>zm(x,r)),v=$(x=>AS(x,r)),p=$(x=>Um(x,f,r,c));if(m.useLayoutEffect(()=>{var x;if(!(i!=="auto"||!h||wl(a)||m.isValidElement(a))){var P=o.current,w=P==null||(x=P.tickRefs)===null||x===void 0?void 0:x.current,{tickSize:O,tickMargin:A}=P.props,j=dM({ticks:w,label:u.current,labelGapWithTick:5,tickSize:O,tickMargin:A});Math.round(h.width)!==Math.round(j)&&s(rM({id:r,width:j}))}},[o,o==null||(t=o.current)===null||t===void 0||(t=t.tickRefs)===null||t===void 0?void 0:t.current,h==null?void 0:h.width,h,s,a,r,i]),h==null||v==null)return null;var{dangerouslySetInnerHTML:g,ticks:y}=e,b=mM(e,hM);return m.createElement(Vt,Ru({},b,{ref:o,labelRef:u,scale:d,x:v.x,y:v.y,width:h.width,height:h.height,className:H("recharts-".concat(f," ").concat(f),n),viewBox:l,ticks:p}))},xM=e=>{var t,r,n,i,a;return m.createElement(m.Fragment,null,m.createElement(yM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.yAxisId,scale:e.scale,type:e.type,domain:e.domain,allowDataOverflow:e.allowDataOverflow,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,padding:e.padding,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,width:e.width,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter}),m.createElement(bM,e))},wM={allowDataOverflow:Le.allowDataOverflow,allowDecimals:Le.allowDecimals,allowDuplicatedCategory:Le.allowDuplicatedCategory,hide:!1,mirror:Le.mirror,orientation:Le.orientation,padding:Le.padding,reversed:Le.reversed,scale:Le.scale,tickCount:Le.tickCount,type:Le.type,width:Le.width,yAxisId:0};class la extends m.Component{render(){return m.createElement(xM,this.props)}}dy(la,"displayName","YAxis");dy(la,"defaultProps",wM);var Fo={exports:{}},Wo={};/** - * @license React - * use-sync-external-store-with-selector.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Kh;function PM(){if(Kh)return Wo;Kh=1;var e=zu();function t(l,c){return l===c&&(l!==0||1/l===1/c)||l!==l&&c!==c}var r=typeof Object.is=="function"?Object.is:t,n=e.useSyncExternalStore,i=e.useRef,a=e.useEffect,o=e.useMemo,u=e.useDebugValue;return Wo.useSyncExternalStoreWithSelector=function(l,c,s,f,d){var h=i(null);if(h.current===null){var v={hasValue:!1,value:null};h.current=v}else v=h.current;h=o(function(){function g(w){if(!y){if(y=!0,b=w,w=f(w),d!==void 0&&v.hasValue){var O=v.value;if(d(O,w))return x=O}return x=w}if(O=x,r(b,w))return O;var A=f(w);return d!==void 0&&d(O,A)?(b=w,O):(b=w,x=A)}var y=!1,b,x,P=s===void 0?null:s;return[function(){return g(c())},P===null?void 0:function(){return g(P())}]},[c,s,f,d]);var p=n(l,h[0],h[1]);return a(function(){v.hasValue=!0,v.value=p},[p]),u(p),p},Wo}var qh;function OM(){return qh||(qh=1,Fo.exports=PM()),Fo.exports}OM();function AM(e){e()}function SM(){let e=null,t=null;return{clear(){e=null,t=null},notify(){AM(()=>{let r=e;for(;r;)r.callback(),r=r.next})},get(){const r=[];let n=e;for(;n;)r.push(n),n=n.next;return r},subscribe(r){let n=!0;const i=t={callback:r,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!n||e===null||(n=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var zh={notify(){},get:()=>[]};function EM(e,t){let r,n=zh,i=0,a=!1;function o(p){s();const g=n.subscribe(p);let y=!1;return()=>{y||(y=!0,g(),f())}}function u(){n.notify()}function l(){v.onStateChange&&v.onStateChange()}function c(){return a}function s(){i++,r||(r=e.subscribe(l),n=SM())}function f(){i--,r&&i===0&&(r(),r=void 0,n.clear(),n=zh)}function d(){a||(a=!0,s())}function h(){a&&(a=!1,f())}const v={addNestedSub:o,notifyNestedSubs:u,handleChangeWrapper:l,isSubscribed:c,trySubscribe:d,tryUnsubscribe:h,getListeners:()=>n};return v}var jM=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",TM=jM(),kM=()=>typeof navigator<"u"&&navigator.product==="ReactNative",CM=kM(),_M=()=>TM||CM?m.useLayoutEffect:m.useEffect,MM=_M(),Uo=Symbol.for("react-redux-context"),Ho=typeof globalThis<"u"?globalThis:{};function DM(){if(!m.createContext)return{};const e=Ho[Uo]??(Ho[Uo]=new Map);let t=e.get(m.createContext);return t||(t=m.createContext(null),e.set(m.createContext,t)),t}var IM=DM();function NM(e){const{children:t,context:r,serverState:n,store:i}=e,a=m.useMemo(()=>{const l=EM(i);return{store:i,subscription:l,getServerState:n?()=>n:void 0}},[i,n]),o=m.useMemo(()=>i.getState(),[i]);MM(()=>{const{subscription:l}=a;return l.onStateChange=l.notifyNestedSubs,l.trySubscribe(),o!==i.getState()&&l.notifyNestedSubs(),()=>{l.tryUnsubscribe(),l.onStateChange=void 0}},[a,o]);const u=r||IM;return m.createElement(u.Provider,{value:a},t)}var $M=NM,RM=(e,t)=>t,ql=E([RM,Y,RA,xe,og,It,jE,ve],ME),zl=e=>{var t=e.currentTarget.getBoundingClientRect(),r=t.width/e.currentTarget.offsetWidth,n=t.height/e.currentTarget.offsetHeight;return{chartX:Math.round((e.clientX-t.left)/r),chartY:Math.round((e.clientY-t.top)/n)}},hy=tt("mouseClick"),vy=gn();vy.startListening({actionCreator:hy,effect:(e,t)=>{var r=e.payload,n=ql(t.getState(),zl(r));(n==null?void 0:n.activeIndex)!=null&&t.dispatch(RS({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var Lu=tt("mouseMove"),py=gn();py.startListening({actionCreator:Lu,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=ll(n,n.tooltip.settings.shared),a=ql(n,zl(r));i==="axis"&&((a==null?void 0:a.activeIndex)!=null?t.dispatch(Qm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate})):t.dispatch(Jm()))}});function LM(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":t}var Fh={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index"},my=nt({name:"rootProps",initialState:Fh,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=(r=t.payload.barGap)!==null&&r!==void 0?r:Fh.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className}}}),BM=my.reducer,{updateOptions:KM}=my.actions,gy=nt({name:"polarOptions",initialState:null,reducers:{updatePolarOptions:(e,t)=>t.payload}}),{updatePolarOptions:qM}=gy.actions,zM=gy.reducer,yy=tt("keyDown"),by=tt("focus"),Fl=gn();Fl.startListening({actionCreator:yy,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip,a=e.payload;if(!(a!=="ArrowRight"&&a!=="ArrowLeft"&&a!=="Enter")){var o=Number(cl(i,xr(r))),u=It(r);if(a==="Enter"){var l=bi(r,"axis","hover",String(i.index));t.dispatch(ju({active:!i.active,activeIndex:i.index,activeDataKey:i.dataKey,activeCoordinate:l}));return}var c=TS(r),s=c==="left-to-right"?1:-1,f=a==="ArrowRight"?1:-1,d=o+f*s;if(!(u==null||d>=u.length||d<0)){var h=bi(r,"axis","hover",String(d));t.dispatch(ju({active:!0,activeIndex:d.toString(),activeDataKey:void 0,activeCoordinate:h}))}}}}});Fl.startListening({actionCreator:by,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip;if(!i.active&&i.index==null){var a="0",o=bi(r,"axis","hover",String(a));t.dispatch(ju({activeDataKey:void 0,active:!0,activeIndex:a,activeCoordinate:o}))}}}});var Je=tt("externalEvent"),xy=gn();xy.startListening({actionCreator:Je,effect:(e,t)=>{if(e.payload.handler!=null){var r=t.getState(),n={activeCoordinate:gE(r),activeDataKey:cg(r),activeIndex:Wt(r),activeLabel:lg(r),activeTooltipIndex:Wt(r),isTooltipActive:yE(r)};e.payload.handler(n,e.payload.reactEvent)}}});var FM=E([zr],e=>e.tooltipItemPayloads),WM=E([FM,jn,(e,t,r)=>t,(e,t,r)=>r],(e,t,r,n)=>{var i=e.find(u=>u.settings.dataKey===n);if(i!=null){var{positions:a}=i;if(a!=null){var o=t(a,r);return o}}}),wy=tt("touchMove"),Py=gn();Py.startListening({actionCreator:wy,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=ll(n,n.tooltip.settings.shared);if(i==="axis"){var a=ql(n,zl({clientX:r.touches[0].clientX,clientY:r.touches[0].clientY,currentTarget:r.currentTarget}));(a==null?void 0:a.activeIndex)!=null&&t.dispatch(Qm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate}))}else if(i==="item"){var o,u=r.touches[0],l=document.elementFromPoint(u.clientX,u.clientY);if(!l||!l.getAttribute)return;var c=l.getAttribute(ip),s=(o=l.getAttribute(ap))!==null&&o!==void 0?o:void 0,f=WM(t.getState(),c,s);t.dispatch(Zm({activeDataKey:s,activeIndex:c,activeCoordinate:f}))}}});var UM=Cv({brush:BC,cartesianAxis:nM,chartData:GE,graphicalItems:kT,layout:Kx,legend:Ow,options:FE,polarAxis:hT,polarOptions:zM,referenceElements:HC,rootProps:BM,tooltip:LS}),HM=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Chart";return fx({reducer:UM,preloadedState:t,middleware:n=>n({serializableCheck:!1}).concat([vy.middleware,py.middleware,Fl.middleware,xy.middleware,Py.middleware]),devTools:{serialize:{replacer:LM},name:"recharts-".concat(r)}})};function Oy(e){var{preloadedState:t,children:r,reduxStoreName:n}=e,i=Ce(),a=m.useRef(null);if(i)return r;a.current==null&&(a.current=HM(t,n));var o=rs;return m.createElement($M,{context:o,store:a.current},r)}function Ay(e){var{layout:t,width:r,height:n,margin:i}=e,a=ae(),o=Ce();return m.useEffect(()=>{o||(a(Rx(t)),a(Lx({width:r,height:n})),a($x(i)))},[a,o,t,r,n,i]),null}function Sy(e){var t=ae();return m.useEffect(()=>{t(KM(e))},[t,e]),null}var YM=["children"];function GM(e,t){if(e==null)return{};var r,n,i=VM(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=sp(),n=lp(),i=hp();if(!kr(r)||!kr(n))return null;var{children:a,otherAttributes:o,title:u,desc:l}=e,c,s;return typeof o.tabIndex=="number"?c=o.tabIndex:c=i?0:void 0,typeof o.role=="string"?s=o.role:s=i?"application":void 0,m.createElement(ev,Si({},o,{title:u,desc:l,role:s,tabIndex:c,width:r,height:n,style:XM,ref:t}),a)}),JM=e=>{var{children:t}=e,r=$(Ki);if(!r)return null;var{width:n,height:i,y:a,x:o}=r;return m.createElement(ev,{width:n,height:i,x:o,y:a},t)},Wh=m.forwardRef((e,t)=>{var{children:r}=e,n=GM(e,YM),i=Ce();return i?m.createElement(JM,null,r):m.createElement(ZM,Si({ref:t},n),r)});function QM(){var e=ae(),[t,r]=m.useState(null),n=$(vw);return m.useEffect(()=>{if(t!=null){var i=t.getBoundingClientRect(),a=i.width/t.offsetWidth;Ye(a)&&a!==n&&e(Bx(a))}},[t,e,n]),r}function Uh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function e2(e){for(var t=1;t{var{children:r,className:n,height:i,onClick:a,onContextMenu:o,onDoubleClick:u,onMouseDown:l,onMouseEnter:c,onMouseLeave:s,onMouseMove:f,onMouseUp:d,onTouchEnd:h,onTouchMove:v,onTouchStart:p,style:g,width:y}=e,b=ae(),[x,P]=m.useState(null),[w,O]=m.useState(null);ZE();var A=QM(),j=m.useCallback(L=>{A(L),typeof t=="function"&&t(L),P(L),O(L)},[A,t,P,O]),T=m.useCallback(L=>{b(hy(L)),b(Je({handler:a,reactEvent:L}))},[b,a]),I=m.useCallback(L=>{b(Lu(L)),b(Je({handler:c,reactEvent:L}))},[b,c]),C=m.useCallback(L=>{b(Jm()),b(Je({handler:s,reactEvent:L}))},[b,s]),_=m.useCallback(L=>{b(Lu(L)),b(Je({handler:f,reactEvent:L}))},[b,f]),R=m.useCallback(()=>{b(by())},[b]),B=m.useCallback(L=>{b(yy(L.key))},[b]),F=m.useCallback(L=>{b(Je({handler:o,reactEvent:L}))},[b,o]),V=m.useCallback(L=>{b(Je({handler:u,reactEvent:L}))},[b,u]),K=m.useCallback(L=>{b(Je({handler:l,reactEvent:L}))},[b,l]),de=m.useCallback(L=>{b(Je({handler:d,reactEvent:L}))},[b,d]),oe=m.useCallback(L=>{b(Je({handler:p,reactEvent:L}))},[b,p]),Ie=m.useCallback(L=>{b(wy(L)),b(Je({handler:v,reactEvent:L}))},[b,v]),Ge=m.useCallback(L=>{b(Je({handler:h,reactEvent:L}))},[b,h]);return m.createElement(mg.Provider,{value:x},m.createElement(u0.Provider,{value:w},m.createElement("div",{className:H("recharts-wrapper",n),style:e2({position:"relative",cursor:"default",width:y,height:i},g),onClick:T,onContextMenu:F,onDoubleClick:V,onFocus:R,onKeyDown:B,onMouseDown:K,onMouseEnter:I,onMouseLeave:C,onMouseMove:_,onMouseUp:de,onTouchEnd:Ge,onTouchMove:Ie,onTouchStart:oe,ref:j},r)))}),a2=["children","className","width","height","style","compact","title","desc"];function o2(e,t){if(e==null)return{};var r,n,i=u2(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{children:r,className:n,width:i,height:a,style:o,compact:u,title:l,desc:c}=e,s=o2(e,a2),f=z(s,!1);return u?m.createElement(Wh,{otherAttributes:f,title:l,desc:c},r):m.createElement(i2,{className:n,style:o,width:i,height:a,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},m.createElement(Wh,{otherAttributes:f,title:l,desc:c,ref:t},m.createElement(GC,null,r)))}),s2=["width","height"];function Bu(){return Bu=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.createElement(jy,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:h2,tooltipPayloadSearcher:yl,categoricalChartProps:e,ref:t})),p2=["axis","item"],m2=m.forwardRef((e,t)=>m.createElement(jy,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:p2,tooltipPayloadSearcher:yl,categoricalChartProps:e,ref:t}));function g2(e){var t=ae();return m.useEffect(()=>{t(qM(e))},[t,e]),null}var y2=["width","height","layout"];function Ku(){return Ku=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=it(e,S2);return m.createElement(O2,{chartName:"PieChart",defaultTooltipEventType:"item",validateTooltipEventTypes:A2,tooltipPayloadSearcher:yl,categoricalChartProps:r,ref:t})});const Wl=(e="line")=>m.useMemo(()=>({...{margin:{top:5,right:30,left:20,bottom:5},gridProps:{strokeDasharray:"3 3",stroke:"#f3f4f6"},axisProps:{stroke:"#6b7280",fontSize:12}},...{line:{strokeWidth:3,dot:{strokeWidth:2,r:4},activeDot:{r:6,strokeWidth:2}},bar:{radius:[4,4,0,0]},pie:{innerRadius:60,outerRadius:80,paddingAngle:5}}[e]}),[e]),Ul=(e,t={})=>{const[r,n]=m.useState(null),[i,a]=m.useState(!0),[o,u]=m.useState(null),l=m.useCallback(async()=>{try{a(!0),u(null);const s=await e(t);n(s.data)}catch(s){console.error("Error fetching chart data:",s),u(s.message||"Failed to fetch chart data")}finally{a(!1)}},[e,t]);m.useEffect(()=>{l()},[l]);const c=m.useCallback(()=>{l()},[l]);return{data:r,loading:i,error:o,refresh:c}},j2=(e={})=>Ul(Fu.getSurvivalRate,e),T2=(e={})=>Ul(Fu.getHeightGrowth,e),k2=(e={})=>Ul(Fu.getCO2Absorption,e),C2=({filters:e={}})=>{var l,c;const{data:t,loading:r,error:n}=j2(e),i=((l=t==null?void 0:t.chartData)==null?void 0:l.length)>0&&((c=t.chartData[t.chartData.length-1])==null?void 0:c.survivalRate)||0,a={survived:i,lost:100-i},o=Wl("pie"),u=[{name:"Survived",value:a.survived,color:"#10b981"},{name:"Lost",value:a.lost,color:"#ef4444"}];return r?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Tree Survival Rate"})}),S.jsx("div",{className:"flex justify-center items-center h-48",children:S.jsx(Ei,{size:"32px",text:"Loading chart data..."})})]}):n?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Tree Survival Rate"})}),S.jsx("div",{className:"flex justify-center items-center h-48",children:S.jsxs("div",{className:"text-center",children:[S.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),S.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Tree Survival Rate"})}),S.jsx(Iy,{value:a.survived,label:"Survival Rate"}),S.jsx(xl,{width:"100%",height:200,children:S.jsxs(E2,{children:[S.jsx(_l,{data:u,cx:"50%",cy:"50%",innerRadius:o.innerRadius,outerRadius:o.outerRadius,paddingAngle:o.paddingAngle,dataKey:"value",children:u.map((s,f)=>S.jsx(Tn,{fill:s.color},`cell-${f}`))}),S.jsx(bl,{content:S.jsx(qu,{valueFormatter:s=>`${s.toFixed(1)}%`})})]})}),S.jsx(Ny,{data:u})]})},_2=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=T2(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>{var l,c;return{period:u.period,height:((l=u.species)==null?void 0:l.reduce((s,f)=>s+f.avgHeight,0))/(((c=u.species)==null?void 0:c.length)||1)||0}}))||[],a=Wl("line");return r?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Average Tree Height Over Time"})}),S.jsx("div",{className:"flex justify-center items-center h-72",children:S.jsx(Ei,{size:"32px",text:"Loading chart data..."})})]}):n?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Average Tree Height Over Time"})}),S.jsx("div",{className:"flex justify-center items-center h-72",children:S.jsxs("div",{className:"text-center",children:[S.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),S.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"Average Tree Height Over Time"})}),S.jsx(xl,{width:"100%",height:300,children:S.jsxs(v2,{data:i,margin:a.margin,children:[S.jsx(Bl,{...a.gridProps}),S.jsx(sa,{dataKey:"period",...a.axisProps}),S.jsx(la,{...a.axisProps,label:{value:"Height (m)",angle:-90,position:"insideLeft",fontSize:12}}),S.jsx(bl,{content:S.jsx(qu,{valueFormatter:u=>`Average Height: ${u.toFixed(1)}m`})}),S.jsx(Kl,{type:"monotone",dataKey:"height",stroke:"#10b981",strokeWidth:a.strokeWidth,dot:{fill:"#10b981",...a.dot},activeDot:{r:6,stroke:"#10b981",...a.activeDot}})]})})]})},M2=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=k2(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>({period:u.period,co2:u.totalCO2||0})))||[],a=Wl("bar");return r?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"CO₂ Absorption Over Time"})}),S.jsx("div",{className:"flex justify-center items-center h-72",children:S.jsx(Ei,{size:"32px",text:"Loading chart data..."})})]}):n?S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"CO₂ Absorption Over Time"})}),S.jsx("div",{className:"flex justify-center items-center h-72",children:S.jsxs("div",{className:"text-center",children:[S.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),S.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):S.jsxs(xt,{children:[S.jsx(wt,{children:S.jsx(Pt,{children:"CO₂ Absorption Over Time"})}),S.jsx(xl,{width:"100%",height:300,children:S.jsxs(m2,{data:i,margin:a.margin,children:[S.jsx(Bl,{...a.gridProps}),S.jsx(sa,{dataKey:"period",...a.axisProps}),S.jsx(la,{...a.axisProps,label:{value:"CO₂ (tons)",angle:-90,position:"insideLeft",fontSize:12}}),S.jsx(bl,{content:S.jsx(qu,{valueFormatter:u=>`CO₂ Absorption: ${u.toFixed(1)} tons`})}),S.jsx(Il,{dataKey:"co2",fill:"#8b5cf6",radius:a.radius})]})})]})},D2=(e=!1)=>{const[t,r]=m.useState(e),n=m.useCallback(()=>{r(o=>!o)},[]),i=m.useCallback(()=>{r(!0)},[]),a=m.useCallback(()=>{r(!1)},[]);return{sidebarOpen:t,toggleSidebar:n,openSidebar:i,closeSidebar:a}},I2=(e={})=>{const[t,r]=m.useState(null),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useCallback(async()=>{try{i(!0),o(null);const c=await Ky.getStats(e);r(c.data)}catch(c){console.error("Error fetching dashboard stats:",c),o(c.message||"Failed to fetch dashboard statistics")}finally{i(!1)}},[e]);m.useEffect(()=>{u()},[u]);const l=m.useCallback(()=>{u()},[u]);return{stats:t,loading:n,error:a,refresh:l}},N2=(e={})=>{const[t,r]=m.useState([]),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useCallback(async()=>{try{i(!0),o(null);const c=await By.getAll(e);r(c.data||[])}catch(c){console.error("Error fetching tree data:",c),o(c.message||"Failed to fetch tree data")}finally{i(!1)}},[e]);m.useEffect(()=>{u()},[u]);const l=m.useCallback(()=>{u()},[u]);return{trees:t,loading:n,error:a,refresh:l}},oD=()=>{var x,P,w,O;const{sidebarOpen:e,toggleSidebar:t,closeSidebar:r}=D2(),[n,i]=m.useState({}),{stats:a,loading:o,error:u,refresh:l}=I2(n),{trees:c,loading:s}=N2(n),f=m.useCallback(A=>{i(A)},[]),d=A=>A?A.toLocaleString():"0",h=A=>A?`${A.toFixed(1)}%`:"0%",v=A=>A?`${A.toFixed(1)}m`:"0m",p=A=>A?`${A.toFixed(1)}t`:"0t",g=()=>{console.log("Export started")},y=(A,j)=>{console.log(`Export completed: ${A} with ${j} records`)},b=A=>{console.error("Export error:",A)};return S.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[S.jsx(qy,{onToggleSidebar:t}),S.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[S.jsx(zy,{isOpen:e,onClose:r}),S.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:S.jsxs("div",{className:"max-w-7xl mx-auto",children:[S.jsx("div",{className:"mb-8",children:S.jsxs("div",{className:"flex justify-between items-center mb-4",children:[S.jsxs("div",{children:[S.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome to Nanwa"}),S.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Monitor your forests and track tree growth with real-time insights."})]}),S.jsx("div",{className:"flex items-center space-x-4",children:S.jsx(Ry,{data:c,fileName:"dashboard_tree_data",filters:n,loading:s,onExportStart:g,onExportComplete:y,onExportError:b})})]})}),S.jsx($y,{onFiltersChange:f}),o?S.jsx("div",{className:"flex justify-center items-center py-12",children:S.jsx(Ei,{text:"Loading dashboard statistics..."})}):u?S.jsxs("div",{className:"bg-red-50 border border-red-200 rounded-lg p-4 mb-8",children:[S.jsxs("p",{className:"text-red-600",children:["Error loading dashboard statistics: ",u]}),S.jsx("button",{onClick:l,className:"mt-2 text-red-600 hover:text-red-800 underline",children:"Try again"})]}):S.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:[S.jsx(kn,{icon:S.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),title:"Total Trees",value:d((x=a==null?void 0:a.overview)==null?void 0:x.totalTrees),color:"green"}),S.jsx(kn,{icon:S.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Survival Rate",value:h((P=a==null?void 0:a.overview)==null?void 0:P.survivalRate),color:"blue"}),S.jsx(kn,{icon:S.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"})}),title:"Avg Height",value:v((w=a==null?void 0:a.height)==null?void 0:w.average),color:"yellow"}),S.jsx(kn,{icon:S.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),title:"CO₂ Absorbed",value:p((O=a==null?void 0:a.co2)==null?void 0:O.totalAbsorption),color:"purple"})]}),S.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6 mb-8",children:[S.jsx("div",{className:"lg:col-span-1",children:S.jsx(C2,{filters:n})}),S.jsx("div",{className:"lg:col-span-1 xl:col-span-2",children:S.jsx(_2,{filters:n})}),S.jsx("div",{className:"lg:col-span-2 xl:col-span-3",children:S.jsx(M2,{filters:n})})]}),S.jsx(Fy,{})]})})]})]})};export{oD as DashboardPage}; diff --git a/frontend/dist/assets/DashboardPage-DOe_EIif.js b/frontend/dist/assets/DashboardPage-DOe_EIif.js new file mode 100644 index 0000000000..ee7628485e --- /dev/null +++ b/frontend/dist/assets/DashboardPage-DOe_EIif.js @@ -0,0 +1,66 @@ +var Ty=Object.defineProperty;var Cy=(e,t,r)=>t in e?Ty(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var la=(e,t,r)=>Cy(e,typeof t!="symbol"?t+"":t,r);import{A as _y,j as E,r as m,c as H,b as ky,e as Si}from"./index-CGkKx7Xv.js";import{C as bt,a as xt,b as wt,c as My,d as Ku,e as Dy}from"./ChartComponents-DOzzJtP4.js";import{g as Tt,r as qu}from"./vendor-BtP0CW_r.js";import{t as Iy,u as Ny,D as $y,a as Ry,G as Ly}from"./useSidebarState-Ctkpd6zX.js";import{E as By}from"./ExportButton-BryKwkQ4.js";import"./DarkModeToggle-Cu0JyOh5.js";import"./IconButton-vDjz_WRZ.js";const zn=new _y,Ky={getStats:(e={})=>zn.get("/dashboard/stats",e)},Fu={getSurvivalRate:(e={})=>zn.get("/charts/survival-rate",e),getHeightGrowth:(e={})=>zn.get("/charts/height-growth",e),getCO2Absorption:(e={})=>zn.get("/charts/co2-absorption",e)},Tn=({icon:e,title:t,value:r,color:n="green"})=>{const i={green:"bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400",blue:"bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400",yellow:"bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400",purple:"bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400"};return E.jsx("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:E.jsxs("div",{className:"flex items-center",children:[E.jsx("div",{className:`p-2 rounded-lg ${i[n]}`,children:e}),E.jsxs("div",{className:"ml-4",children:[E.jsx("p",{className:"text-sm font-medium text-gray-600 dark:text-gray-300",children:t}),E.jsx("p",{className:"text-2xl font-bold text-gray-900 dark:text-white",children:r})]})]})})},qy=()=>E.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:[E.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:"Forest Overview"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-4",children:"Your forests are performing excellently with strong growth indicators and high survival rates."}),E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Recent Activity"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full mr-3"}),"New measurements recorded for Forest A"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-blue-500 rounded-full mr-3"}),"Survival rate improved by 2.3%"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-purple-500 rounded-full mr-3"}),"CO₂ absorption increased by 15%"]})]})]}),E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Next Actions"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-yellow-500 rounded-full mr-3"}),"Schedule maintenance for Forest B"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-orange-500 rounded-full mr-3"}),"Review growth data for Q4 report"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-red-500 rounded-full mr-3"}),"Address low-performing areas in Forest C"]})]})]})]})]});var ca={},fa={},Hl;function Fy(){return Hl||(Hl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==="__proto__"}e.isUnsafeProperty=t}(fa)),fa}var da={},Yl;function Uh(){return Yl||(Yl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){switch(typeof r){case"number":case"symbol":return!1;case"string":return r.includes(".")||r.includes("[")||r.includes("]")}}e.isDeepKey=t}(da)),da}var ha={},Gl;function Hh(){return Gl||(Gl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var n;return typeof r=="string"||typeof r=="symbol"?r:Object.is((n=r==null?void 0:r.valueOf)==null?void 0:n.call(r),-0)?"-0":String(r)}e.toKey=t}(ha)),ha}var va={},Vl;function zu(){return Vl||(Vl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){const n=[],i=r.length;if(i===0)return n;let a=0,o="",u="",l=!1;for(r.charCodeAt(0)===46&&(n.push(""),a++);ae===0?0:e>0?1:-1,We=e=>typeof e=="number"&&e!=+e,er=e=>typeof e=="string"&&e.indexOf("%")===e.length-1,D=e=>(typeof e=="number"||e instanceof Number)&&!We(e),dt=e=>D(e)||typeof e=="string",Gy=0,lr=e=>{var t=++Gy;return"".concat(e||"").concat(t)},Ce=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!D(t)&&typeof t!="string")return n;var a;if(er(t)){if(r==null)return n;var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return We(a)&&(a=n),i&&r!=null&&a>r&&(a=r),a},Yh=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nD(e)&&D(t)?r=>e+r*(t-e):()=>t;function Gh(e,t,r){if(!(!e||!e.length))return e.find(n=>n&&(typeof t=="function"?t(n):Kt(n,t))===r)}var J=e=>e===null||typeof e>"u",vn=e=>J(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1)),Vy=["viewBox","children"],Xy=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],ec=["points","pathLength"],ga={svg:Vy,polygon:ec,polyline:ec},Uu=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],Hu=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(m.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{Uu.includes(i)&&(n[i]=a=>r[i](r,a))}),n},Zy=(e,t,r)=>n=>(e(t,r,n),null),Ei=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var a=e[i];Uu.includes(i)&&typeof a=="function"&&(n||(n={}),n[i]=Zy(a,t,r))}),n},tc=e=>typeof e=="string"?e:e?e.displayName||e.name||"Component":"",rc=null,ya=null,Vh=e=>{if(e===rc&&Array.isArray(ya))return ya;var t=[];return m.Children.forEach(e,r=>{J(r)||(Yy.isFragment(r)?t=t.concat(Vh(r.props.children)):t.push(r))}),ya=t,rc=e,t};function pn(e,t){var r=[],n=[];return Array.isArray(t)?n=t.map(i=>tc(i)):n=[tc(t)],Vh(e).forEach(i=>{var a=Kt(i,"type.displayName")||Kt(i,"type.name");n.indexOf(a)!==-1&&r.push(i)}),r}var Xh=e=>e&&typeof e=="object"&&"clipDot"in e?!!e.clipDot:!0,Jy=(e,t,r,n)=>{var i,a=(i=n&&(ga==null?void 0:ga[n]))!==null&&i!==void 0?i:[];return t.startsWith("data-")||typeof e!="function"&&(n&&a.includes(t)||Xy.includes(t))||r&&Uu.includes(t)},F=(e,t,r)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var n=e;if(m.isValidElement(e)&&(n=e.props),typeof n!="object"&&typeof n!="function")return null;var i={};return Object.keys(n).forEach(a=>{var o;Jy((o=n)===null||o===void 0?void 0:o[a],a,t,r)&&(i[a]=n[a])}),i},Qy=["children","width","height","viewBox","className","style","title","desc"];function Ho(){return Ho=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,width:n,height:i,viewBox:a,className:o,style:u,title:l,desc:c}=e,s=e0(e,Qy),f=a||{width:n,height:i,x:0,y:0},d=H("recharts-surface",o);return m.createElement("svg",Ho({},F(s,!0,"svg"),{className:d,width:n,height:i,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height),ref:t}),m.createElement("title",null,l),m.createElement("desc",null,c),r)}),r0=["children","className"];function Yo(){return Yo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:r,className:n}=e,i=n0(e,r0),a=H("recharts-layer",n);return m.createElement("g",Yo({className:a},F(i,!0),{ref:t}),r)}),a0=m.createContext(null);function ee(e){return function(){return e}}const Jh=Math.cos,Un=Math.sin,lt=Math.sqrt,Hn=Math.PI,ji=2*Hn,Go=Math.PI,Vo=2*Go,Zt=1e-6,o0=Vo-Zt;function Qh(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Qh;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;iZt)if(!(Math.abs(f*l-c*s)>Zt)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let h=n-o,v=i-u,p=l*l+c*c,g=h*h+v*v,y=Math.sqrt(p),b=Math.sqrt(d),x=a*Math.tan((Go-Math.acos((p+d-g)/(2*y*b)))/2),P=x/b,w=x/y;Math.abs(P-1)>Zt&&this._append`L${t+P*s},${r+P*f}`,this._append`A${a},${a},0,0,${+(f*h>s*v)},${this._x1=t+w*l},${this._y1=r+w*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),l=n*Math.sin(i),c=t+u,s=r+l,f=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${c},${s}`:(Math.abs(this._x1-c)>Zt||Math.abs(this._y1-s)>Zt)&&this._append`L${c},${s}`,n&&(d<0&&(d=d%Vo+Vo),d>o0?this._append`A${n},${n},0,1,${f},${t-u},${r-l}A${n},${n},0,1,${f},${this._x1=c},${this._y1=s}`:d>Zt&&this._append`A${n},${n},0,${+(d>=Go)},${f},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Yu(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new s0(t)}function Gu(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function ev(e){this._context=e}ev.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function Ti(e){return new ev(e)}function tv(e){return e[0]}function rv(e){return e[1]}function nv(e,t){var r=ee(!0),n=null,i=Ti,a=null,o=Yu(u);e=typeof e=="function"?e:e===void 0?tv:ee(e),t=typeof t=="function"?t:t===void 0?rv:ee(t);function u(l){var c,s=(l=Gu(l)).length,f,d=!1,h;for(n==null&&(a=i(h=o())),c=0;c<=s;++c)!(c=h;--v)u.point(x[v],P[v]);u.lineEnd(),u.areaEnd()}y&&(x[d]=+e(g,d,f),P[d]=+t(g,d,f),u.point(n?+n(g,d,f):x[d],r?+r(g,d,f):P[d]))}if(b)return u=null,b+""||null}function s(){return nv().defined(i).curve(o).context(a)}return c.x=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),n=null,c):e},c.x0=function(f){return arguments.length?(e=typeof f=="function"?f:ee(+f),c):e},c.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:ee(+f),c):n},c.y=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),r=null,c):t},c.y0=function(f){return arguments.length?(t=typeof f=="function"?f:ee(+f),c):t},c.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:ee(+f),c):r},c.lineX0=c.lineY0=function(){return s().x(e).y(t)},c.lineY1=function(){return s().x(e).y(r)},c.lineX1=function(){return s().x(n).y(t)},c.defined=function(f){return arguments.length?(i=typeof f=="function"?f:ee(!!f),c):i},c.curve=function(f){return arguments.length?(o=f,a!=null&&(u=o(a)),c):o},c.context=function(f){return arguments.length?(f==null?a=u=null:u=o(a=f),c):a},c}class iv{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function l0(e){return new iv(e,!0)}function c0(e){return new iv(e,!1)}const Vu={draw(e,t){const r=lt(t/Hn);e.moveTo(r,0),e.arc(0,0,r,0,ji)}},f0={draw(e,t){const r=lt(t/5)/2;e.moveTo(-3*r,-r),e.lineTo(-r,-r),e.lineTo(-r,-3*r),e.lineTo(r,-3*r),e.lineTo(r,-r),e.lineTo(3*r,-r),e.lineTo(3*r,r),e.lineTo(r,r),e.lineTo(r,3*r),e.lineTo(-r,3*r),e.lineTo(-r,r),e.lineTo(-3*r,r),e.closePath()}},av=lt(1/3),d0=av*2,h0={draw(e,t){const r=lt(t/d0),n=r*av;e.moveTo(0,-r),e.lineTo(n,0),e.lineTo(0,r),e.lineTo(-n,0),e.closePath()}},v0={draw(e,t){const r=lt(t),n=-r/2;e.rect(n,n,r,r)}},p0=.8908130915292852,ov=Un(Hn/10)/Un(7*Hn/10),m0=Un(ji/10)*ov,g0=-Jh(ji/10)*ov,y0={draw(e,t){const r=lt(t*p0),n=m0*r,i=g0*r;e.moveTo(0,-r),e.lineTo(n,i);for(let a=1;a<5;++a){const o=ji*a/5,u=Jh(o),l=Un(o);e.lineTo(l*r,-u*r),e.lineTo(u*n-l*i,l*n+u*i)}e.closePath()}},ba=lt(3),b0={draw(e,t){const r=-lt(t/(ba*3));e.moveTo(0,r*2),e.lineTo(-ba*r,-r),e.lineTo(ba*r,-r),e.closePath()}},Xe=-.5,Ze=lt(3)/2,Xo=1/lt(12),x0=(Xo/2+1)*3,w0={draw(e,t){const r=lt(t/x0),n=r/2,i=r*Xo,a=n,o=r*Xo+r,u=-a,l=o;e.moveTo(n,i),e.lineTo(a,o),e.lineTo(u,l),e.lineTo(Xe*n-Ze*i,Ze*n+Xe*i),e.lineTo(Xe*a-Ze*o,Ze*a+Xe*o),e.lineTo(Xe*u-Ze*l,Ze*u+Xe*l),e.lineTo(Xe*n+Ze*i,Xe*i-Ze*n),e.lineTo(Xe*a+Ze*o,Xe*o-Ze*a),e.lineTo(Xe*u+Ze*l,Xe*l-Ze*u),e.closePath()}};function P0(e,t){let r=null,n=Yu(i);e=typeof e=="function"?e:ee(e||Vu),t=typeof t=="function"?t:ee(t===void 0?64:+t);function i(){let a;if(r||(r=a=n()),e.apply(this,arguments).draw(r,+t.apply(this,arguments)),a)return r=null,a+""||null}return i.type=function(a){return arguments.length?(e=typeof a=="function"?a:ee(a),i):e},i.size=function(a){return arguments.length?(t=typeof a=="function"?a:ee(+a),i):t},i.context=function(a){return arguments.length?(r=a??null,i):r},i}function Yn(){}function Gn(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function uv(e){this._context=e}uv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Gn(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Gn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function O0(e){return new uv(e)}function sv(e){this._context=e}sv.prototype={areaStart:Yn,areaEnd:Yn,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Gn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function A0(e){return new sv(e)}function lv(e){this._context=e}lv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Gn(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function S0(e){return new lv(e)}function cv(e){this._context=e}cv.prototype={areaStart:Yn,areaEnd:Yn,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function E0(e){return new cv(e)}function nc(e){return e<0?-1:1}function ic(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(nc(a)+nc(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function ac(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function xa(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function Vn(e){this._context=e}Vn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:xa(this,this._t0,ac(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,xa(this,ac(this,r=ic(this,e,t)),r);break;default:xa(this,this._t0,r=ic(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function fv(e){this._context=new dv(e)}(fv.prototype=Object.create(Vn.prototype)).point=function(e,t){Vn.prototype.point.call(this,t,e)};function dv(e){this._context=e}dv.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function j0(e){return new Vn(e)}function T0(e){return new fv(e)}function hv(e){this._context=e}hv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=oc(e),i=oc(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function _0(e){return new Ci(e,.5)}function k0(e){return new Ci(e,0)}function M0(e){return new Ci(e,1)}function Er(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function D0(e,t){return e[t]}function I0(e){const t=[];return t.key=e,t}function N0(){var e=ee([]),t=Zo,r=Er,n=D0;function i(a){var o=Array.from(e.apply(this,arguments),I0),u,l=o.length,c=-1,s;for(const f of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n{var t="symbol".concat(vn(e));return vv[t]||Vu},Y0=(e,t,r)=>{if(t==="area")return e;switch(r){case"cross":return 5*e*e/9;case"diamond":return .5*e*e/Math.sqrt(3);case"square":return e*e;case"star":{var n=18*U0;return 1.25*e*e*(Math.tan(n)-Math.tan(n*2)*Math.tan(n)**2)}case"triangle":return Math.sqrt(3)*e*e/4;case"wye":return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}},G0=(e,t)=>{vv["symbol".concat(vn(e))]=t},pv=e=>{var{type:t="circle",size:r=64,sizeType:n="area"}=e,i=z0(e,B0),a=sc(sc({},i),{},{type:t,size:r,sizeType:n}),o=()=>{var f=H0(t),d=P0().type(f).size(Y0(r,n,t));return d()},{className:u,cx:l,cy:c}=a,s=F(a,!0);return l===+l&&c===+c&&r===+r?m.createElement("path",Jo({},s,{className:H("recharts-symbols",u),transform:"translate(".concat(l,", ").concat(c,")"),d:o()})):null};pv.registerSymbol=G0;var wa={},Pa={},lc;function V0(){return lc||(lc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){const i=new Map;for(let a=0;a=0}e.isLength=t}(Ea)),Ea}var dc;function Xu(){return dc||(dc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=X0();function r(n){return n!=null&&typeof n!="function"&&t.isLength(n.length)}e.isArrayLike=r}(Sa)),Sa}var ja={},hc;function Z0(){return hc||(hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="object"&&r!==null}e.isObjectLike=t}(ja)),ja}var vc;function J0(){return vc||(vc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Xu(),r=Z0();function n(i){return r.isObjectLike(i)&&t.isArrayLike(i)}e.isArrayLikeObject=n}(Aa)),Aa}var Ta={},Ca={},pc;function Q0(){return pc||(pc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Wu();function r(n){return function(i){return t.get(i,n)}}e.property=r}(Ca)),Ca}var _a={},ka={},Ma={},Da={},mc;function gv(){return mc||(mc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r!==null&&(typeof r=="object"||typeof r=="function")}e.isObject=t}(Da)),Da}var Ia={},gc;function yv(){return gc||(gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null||typeof r!="object"&&typeof r!="function"}e.isPrimitive=t}(Ia)),Ia}var Na={},yc;function Zu(){return yc||(yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n){return r===n||Number.isNaN(r)&&Number.isNaN(n)}e.eq=t}(Na)),Na}var bc;function eb(){return bc||(bc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ju(),r=gv(),n=yv(),i=Zu();function a(f,d,h){return typeof h!="function"?t.isMatch(f,d):o(f,d,function v(p,g,y,b,x,P){const w=h(p,g,y,b,x,P);return w!==void 0?!!w:o(p,g,v,P)},new Map)}function o(f,d,h,v){if(d===f)return!0;switch(typeof d){case"object":return u(f,d,h,v);case"function":return Object.keys(d).length>0?o(f,{...d},h,v):i.eq(f,d);default:return r.isObject(f)?typeof d=="string"?d==="":!0:i.eq(f,d)}}function u(f,d,h,v){if(d==null)return!0;if(Array.isArray(d))return c(f,d,h,v);if(d instanceof Map)return l(f,d,h,v);if(d instanceof Set)return s(f,d,h,v);const p=Object.keys(d);if(f==null)return p.length===0;if(p.length===0)return!0;if(v&&v.has(d))return v.get(d)===f;v&&v.set(d,f);try{for(let g=0;g{})}e.isMatch=r}(ka)),ka}var $a={},Ra={},La={},wc;function bv(){return wc||(wc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Object.getOwnPropertySymbols(r).filter(n=>Object.prototype.propertyIsEnumerable.call(r,n))}e.getSymbols=t}(La)),La}var Ba={},Pc;function Qu(){return Pc||(Pc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==null?r===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(r)}e.getTag=t}(Ba)),Ba}var Ka={},Oc;function es(){return Oc||(Oc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t="[object RegExp]",r="[object String]",n="[object Number]",i="[object Boolean]",a="[object Arguments]",o="[object Symbol]",u="[object Date]",l="[object Map]",c="[object Set]",s="[object Array]",f="[object Function]",d="[object ArrayBuffer]",h="[object Object]",v="[object Error]",p="[object DataView]",g="[object Uint8Array]",y="[object Uint8ClampedArray]",b="[object Uint16Array]",x="[object Uint32Array]",P="[object BigUint64Array]",w="[object Int8Array]",O="[object Int16Array]",A="[object Int32Array]",j="[object BigInt64Array]",T="[object Float32Array]",I="[object Float64Array]";e.argumentsTag=a,e.arrayBufferTag=d,e.arrayTag=s,e.bigInt64ArrayTag=j,e.bigUint64ArrayTag=P,e.booleanTag=i,e.dataViewTag=p,e.dateTag=u,e.errorTag=v,e.float32ArrayTag=T,e.float64ArrayTag=I,e.functionTag=f,e.int16ArrayTag=O,e.int32ArrayTag=A,e.int8ArrayTag=w,e.mapTag=l,e.numberTag=n,e.objectTag=h,e.regexpTag=t,e.setTag=c,e.stringTag=r,e.symbolTag=o,e.uint16ArrayTag=b,e.uint32ArrayTag=x,e.uint8ArrayTag=g,e.uint8ClampedArrayTag=y}(Ka)),Ka}var qa={},Ac;function tb(){return Ac||(Ac=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return ArrayBuffer.isView(r)&&!(r instanceof DataView)}e.isTypedArray=t}(qa)),qa}var Sc;function xv(){return Sc||(Sc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=bv(),r=Qu(),n=es(),i=yv(),a=tb();function o(s,f){return u(s,void 0,s,new Map,f)}function u(s,f,d,h=new Map,v=void 0){const p=v==null?void 0:v(s,f,d,h);if(p!=null)return p;if(i.isPrimitive(s))return s;if(h.has(s))return h.get(s);if(Array.isArray(s)){const g=new Array(s.length);h.set(s,g);for(let y=0;yt.isMatch(a,i)}e.matches=n}(_a)),_a}var Fa={},za={},Wa={},Tc;function ib(){return Tc||(Tc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=xv(),r=es();function n(i,a){return t.cloneDeepWith(i,(o,u,l,c)=>{const s=a==null?void 0:a(o,u,l,c);if(s!=null)return s;if(typeof i=="object")switch(Object.prototype.toString.call(i)){case r.numberTag:case r.stringTag:case r.booleanTag:{const f=new i.constructor(i==null?void 0:i.valueOf());return t.copyProperties(f,i),f}case r.argumentsTag:{const f={};return t.copyProperties(f,i),f.length=i.length,f[Symbol.iterator]=i[Symbol.iterator],f}default:return}})}e.cloneDeepWith=n}(Wa)),Wa}var Cc;function ab(){return Cc||(Cc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=ib();function r(n){return t.cloneDeepWith(n)}e.cloneDeep=r}(za)),za}var Ua={},Ha={},_c;function wv(){return _c||(_c=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=/^(?:0|[1-9]\d*)$/;function r(n,i=Number.MAX_SAFE_INTEGER){switch(typeof n){case"number":return Number.isInteger(n)&&n>=0&&n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?c:u;return Ja.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:s,Ja}var Bc;function pb(){return Bc||(Bc=1,Za.exports=vb()),Za.exports}/** + * @license React + * use-sync-external-store-shim/with-selector.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Kc;function mb(){if(Kc)return Xa;Kc=1;var e=qu(),t=pb();function r(c,s){return c===s&&(c!==0||1/c===1/s)||c!==c&&s!==s}var n=typeof Object.is=="function"?Object.is:r,i=t.useSyncExternalStore,a=e.useRef,o=e.useEffect,u=e.useMemo,l=e.useDebugValue;return Xa.useSyncExternalStoreWithSelector=function(c,s,f,d,h){var v=a(null);if(v.current===null){var p={hasValue:!1,value:null};v.current=p}else p=v.current;v=u(function(){function y(O){if(!b){if(b=!0,x=O,O=d(O),h!==void 0&&p.hasValue){var A=p.value;if(h(A,O))return P=A}return P=O}if(A=P,n(x,O))return A;var j=d(O);return h!==void 0&&h(A,j)?(x=O,A):(x=O,P=j)}var b=!1,x,P,w=f===void 0?null:f;return[function(){return y(s())},w===null?void 0:function(){return y(w())}]},[s,f,d,h]);var g=i(c,v[0],v[1]);return o(function(){p.hasValue=!0,p.value=g},[g]),l(g),g},Xa}var qc;function gb(){return qc||(qc=1,Va.exports=mb()),Va.exports}var yb=gb(),ts=m.createContext(null),bb=e=>e,ae=()=>{var e=m.useContext(ts);return e?e.store.dispatch:bb},Wn=()=>{},xb=()=>Wn,wb=(e,t)=>e===t;function $(e){var t=m.useContext(ts);return yb.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:xb,t?t.store.getState:Wn,t?t.store.getState:Wn,t?e:Wn,wb)}function Pb(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function Ob(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!="object")throw new TypeError(t)}function Ab(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var Fc=e=>Array.isArray(e)?e:[e];function Sb(e){const t=Array.isArray(e[0])?e[0]:e;return Ab(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function Eb(e,t){const r=[],{length:n}=e;for(let i=0;i{r=_n(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function _b(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let a=0,o=0,u,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),Pb(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const s={...r,...l},{memoize:f,memoizeOptions:d=[],argsMemoize:h=Pv,argsMemoizeOptions:v=[]}=s,p=Fc(d),g=Fc(v),y=Sb(i),b=f(function(){return a++,c.apply(null,arguments)},...p),x=h(function(){o++;const w=Eb(y,arguments);return u=b.apply(null,w),u},...g);return Object.assign(x,{resultFunc:c,memoizedResultFunc:b,dependencies:y,dependencyRecomputations:()=>o,resetDependencyRecomputations:()=>{o=0},lastResult:()=>u,recomputations:()=>a,resetRecomputations:()=>{a=0},memoize:f,argsMemoize:h})};return Object.assign(n,{withTypes:()=>n}),n}var S=_b(Pv),kb=Object.assign((e,t=S)=>{Ob(e,`createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof e}`);const r=Object.keys(e),n=r.map(a=>e[a]);return t(n,(...a)=>a.reduce((o,u,l)=>(o[r[l]]=u,o),{}))},{withTypes:()=>kb}),Qa={},eo={},to={},Wc;function Mb(){return Wc||(Wc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(n){return typeof n=="symbol"?1:n===null?2:n===void 0?3:n!==n?4:0}const r=(n,i,a)=>{if(n!==i){const o=t(n),u=t(i);if(o===u&&o===0){if(ni)return a==="desc"?-1:1}return a==="desc"?u-o:o-u}return 0};e.compareValues=r}(to)),to}var ro={},no={},Uc;function Ov(){return Uc||(Uc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="symbol"||r instanceof Symbol}e.isSymbol=t}(no)),no}var Hc;function Db(){return Hc||(Hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ov(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function i(a,o){return Array.isArray(a)?!1:typeof a=="number"||typeof a=="boolean"||a==null||t.isSymbol(a)?!0:typeof a=="string"&&(n.test(a)||!r.test(a))||o!=null&&Object.hasOwn(o,a)}e.isKey=i}(ro)),ro}var Yc;function Ib(){return Yc||(Yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Mb(),r=Db(),n=zu();function i(a,o,u,l){if(a==null)return[];u=l?void 0:u,Array.isArray(a)||(a=Object.values(a)),Array.isArray(o)||(o=o==null?[null]:[o]),o.length===0&&(o=[null]),Array.isArray(u)||(u=u==null?[]:[u]),u=u.map(h=>String(h));const c=(h,v)=>{let p=h;for(let g=0;gv==null||h==null?v:typeof h=="object"&&"key"in h?Object.hasOwn(v,h.key)?v[h.key]:c(v,h.path):typeof h=="function"?h(v):Array.isArray(h)?c(v,h):typeof v=="object"?v[h]:v,f=o.map(h=>(Array.isArray(h)&&h.length===1&&(h=h[0]),h==null||typeof h=="function"||Array.isArray(h)||r.isKey(h)?h:{key:h,path:n.toPath(h)}));return a.map(h=>({original:h,criteria:f.map(v=>s(v,h))})).slice().sort((h,v)=>{for(let p=0;ph.original)}e.orderBy=i}(eo)),eo}var io={},Gc;function Nb(){return Gc||(Gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=1){const i=[],a=Math.floor(n),o=(u,l)=>{for(let c=0;c1&&n.isIterateeCall(a,o[0],o[1])?o=[]:u>2&&n.isIterateeCall(o[0],o[1],o[2])&&(o=[o[0]]),t.orderBy(a,r.flatten(o),["asc"])}e.sortBy=i}(Qa)),Qa}var oo,Zc;function Rb(){return Zc||(Zc=1,oo=$b().sortBy),oo}var Lb=Rb();const _i=Tt(Lb);var Sv=e=>e.legend.settings,Bb=e=>e.legend.size,Kb=e=>e.legend.payload;S([Kb,Sv],(e,t)=>{var{itemSorter:r}=t,n=e.flat(1);return r?_i(n,r):n});var kn=1;function qb(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],[t,r]=m.useState({height:0,left:0,top:0,width:0}),n=m.useCallback(i=>{if(i!=null){var a=i.getBoundingClientRect(),o={height:a.height,left:a.left,top:a.top,width:a.width};(Math.abs(o.height-t.height)>kn||Math.abs(o.left-t.left)>kn||Math.abs(o.top-t.top)>kn||Math.abs(o.width-t.width)>kn)&&r({height:o.height,left:o.left,top:o.top,width:o.width})}},[t.width,t.height,t.top,t.left,...e]);return[t,n]}function Pe(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Fb=typeof Symbol=="function"&&Symbol.observable||"@@observable",Jc=Fb,uo=()=>Math.random().toString(36).substring(7).split("").join("."),zb={INIT:`@@redux/INIT${uo()}`,REPLACE:`@@redux/REPLACE${uo()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${uo()}`},Xn=zb;function rs(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function Ev(e,t,r){if(typeof e!="function")throw new Error(Pe(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(Pe(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Pe(1));return r(Ev)(e,t)}let n=e,i=t,a=new Map,o=a,u=0,l=!1;function c(){o===a&&(o=new Map,a.forEach((g,y)=>{o.set(y,g)}))}function s(){if(l)throw new Error(Pe(3));return i}function f(g){if(typeof g!="function")throw new Error(Pe(4));if(l)throw new Error(Pe(5));let y=!0;c();const b=u++;return o.set(b,g),function(){if(y){if(l)throw new Error(Pe(6));y=!1,c(),o.delete(b),a=null}}}function d(g){if(!rs(g))throw new Error(Pe(7));if(typeof g.type>"u")throw new Error(Pe(8));if(typeof g.type!="string")throw new Error(Pe(17));if(l)throw new Error(Pe(9));try{l=!0,i=n(i,g)}finally{l=!1}return(a=o).forEach(b=>{b()}),g}function h(g){if(typeof g!="function")throw new Error(Pe(10));n=g,d({type:Xn.REPLACE})}function v(){const g=f;return{subscribe(y){if(typeof y!="object"||y===null)throw new Error(Pe(11));function b(){const P=y;P.next&&P.next(s())}return b(),{unsubscribe:g(b)}},[Jc](){return this}}}return d({type:Xn.INIT}),{dispatch:d,subscribe:f,getState:s,replaceReducer:h,[Jc]:v}}function Wb(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:Xn.INIT})>"u")throw new Error(Pe(12));if(typeof r(void 0,{type:Xn.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Pe(13))})}function jv(e){const t=Object.keys(e),r={};for(let a=0;a"u")throw u&&u.type,new Error(Pe(14));c[f]=v,l=l||v!==h}return l=l||n.length!==Object.keys(o).length,l?c:o}}function Zn(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function Ub(...e){return t=>(r,n)=>{const i=t(r,n);let a=()=>{throw new Error(Pe(15))};const o={getState:i.getState,dispatch:(l,...c)=>a(l,...c)},u=e.map(l=>l(o));return a=Zn(...u)(i.dispatch),{...i,dispatch:a}}}function Tv(e){return rs(e)&&"type"in e&&typeof e.type=="string"}var Cv=Symbol.for("immer-nothing"),Qc=Symbol.for("immer-draftable"),Ue=Symbol.for("immer-state");function ut(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var jr=Object.getPrototypeOf;function cr(e){return!!e&&!!e[Ue]}function At(e){var t;return e?_v(e)||Array.isArray(e)||!!e[Qc]||!!((t=e.constructor)!=null&&t[Qc])||Mi(e)||Di(e):!1}var Hb=Object.prototype.constructor.toString();function _v(e){if(!e||typeof e!="object")return!1;const t=jr(e);if(t===null)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object?!0:typeof r=="function"&&Function.toString.call(r)===Hb}function Jn(e,t){ki(e)===0?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function ki(e){const t=e[Ue];return t?t.type_:Array.isArray(e)?1:Mi(e)?2:Di(e)?3:0}function Qo(e,t){return ki(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function kv(e,t,r){const n=ki(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function Yb(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function Mi(e){return e instanceof Map}function Di(e){return e instanceof Set}function Jt(e){return e.copy_||e.base_}function eu(e,t){if(Mi(e))return new Map(e);if(Di(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=_v(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[Ue];let i=Reflect.ownKeys(n);for(let a=0;a1&&(e.set=e.add=e.clear=e.delete=Gb),Object.freeze(e),t&&Object.entries(e).forEach(([r,n])=>ns(n,!0))),e}function Gb(){ut(2)}function Ii(e){return Object.isFrozen(e)}var Vb={};function fr(e){const t=Vb[e];return t||ut(0,e),t}var tn;function Mv(){return tn}function Xb(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function ef(e,t){t&&(fr("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function tu(e){ru(e),e.drafts_.forEach(Zb),e.drafts_=null}function ru(e){e===tn&&(tn=e.parent_)}function tf(e){return tn=Xb(tn,e)}function Zb(e){const t=e[Ue];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function rf(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[Ue].modified_&&(tu(t),ut(4)),At(e)&&(e=Qn(t,e),t.parent_||ei(t,e)),t.patches_&&fr("Patches").generateReplacementPatches_(r[Ue].base_,e,t.patches_,t.inversePatches_)):e=Qn(t,r,[]),tu(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==Cv?e:void 0}function Qn(e,t,r){if(Ii(t))return t;const n=t[Ue];if(!n)return Jn(t,(i,a)=>nf(e,n,t,i,a,r)),t;if(n.scope_!==e)return t;if(!n.modified_)return ei(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const i=n.copy_;let a=i,o=!1;n.type_===3&&(a=new Set(i),i.clear(),o=!0),Jn(a,(u,l)=>nf(e,n,i,u,l,r,o)),ei(e,i,!1),r&&e.patches_&&fr("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function nf(e,t,r,n,i,a,o){if(cr(i)){const u=a&&t&&t.type_!==3&&!Qo(t.assigned_,n)?a.concat(n):void 0,l=Qn(e,i,u);if(kv(r,n,l),cr(l))e.canAutoFreeze_=!1;else return}else o&&r.add(i);if(At(i)&&!Ii(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Qn(e,i),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&Object.prototype.propertyIsEnumerable.call(r,n)&&ei(e,i)}}function ei(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&ns(t,r)}function Jb(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:Mv(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,a=is;r&&(i=[n],a=rn);const{revoke:o,proxy:u}=Proxy.revocable(i,a);return n.draft_=u,n.revoke_=o,u}var is={get(e,t){if(t===Ue)return e;const r=Jt(e);if(!Qo(r,t))return Qb(e,r,t);const n=r[t];return e.finalized_||!At(n)?n:n===so(e.base_,t)?(lo(e),e.copy_[t]=iu(n,e)):n},has(e,t){return t in Jt(e)},ownKeys(e){return Reflect.ownKeys(Jt(e))},set(e,t,r){const n=Dv(Jt(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=so(Jt(e),t),a=i==null?void 0:i[Ue];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(Yb(r,i)&&(r!==void 0||Qo(e.base_,t)))return!0;lo(e),nu(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return so(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,lo(e),nu(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Jt(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){ut(11)},getPrototypeOf(e){return jr(e.base_)},setPrototypeOf(){ut(12)}},rn={};Jn(is,(e,t)=>{rn[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});rn.deleteProperty=function(e,t){return rn.set.call(this,e,t,void 0)};rn.set=function(e,t,r){return is.set.call(this,e[0],t,r,e[0])};function so(e,t){const r=e[Ue];return(r?Jt(r):e)[t]}function Qb(e,t,r){var i;const n=Dv(t,r);return n?"value"in n?n.value:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function Dv(e,t){if(!(t in e))return;let r=jr(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=jr(r)}}function nu(e){e.modified_||(e.modified_=!0,e.parent_&&nu(e.parent_))}function lo(e){e.copy_||(e.copy_=eu(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var ex=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const a=r;r=t;const o=this;return function(l=a,...c){return o.produce(l,s=>r.call(this,s,...c))}}typeof r!="function"&&ut(6),n!==void 0&&typeof n!="function"&&ut(7);let i;if(At(t)){const a=tf(this),o=iu(t,void 0);let u=!0;try{i=r(o),u=!1}finally{u?tu(a):ru(a)}return ef(a,n),rf(i,a)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===Cv&&(i=void 0),this.autoFreeze_&&ns(i,!0),n){const a=[],o=[];fr("Patches").generateReplacementPatches_(t,i,a,o),n(a,o)}return i}else ut(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(o,...u)=>this.produceWithPatches(o,l=>t(l,...u));let n,i;return[this.produce(t,r,(o,u)=>{n=o,i=u}),n,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){At(e)||ut(8),cr(e)&&(e=Pt(e));const t=tf(this),r=iu(e,void 0);return r[Ue].isManual_=!0,ru(t),r}finishDraft(e,t){const r=e&&e[Ue];(!r||!r.isManual_)&&ut(9);const{scope_:n}=r;return ef(n,t),rf(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const i=t[r];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}r>-1&&(t=t.slice(r+1));const n=fr("Patches").applyPatches_;return cr(e)?n(e,t):this.produce(e,i=>n(i,t))}};function iu(e,t){const r=Mi(e)?fr("MapSet").proxyMap_(e,t):Di(e)?fr("MapSet").proxySet_(e,t):Jb(e,t);return(t?t.scope_:Mv()).drafts_.push(r),r}function Pt(e){return cr(e)||ut(10,e),Iv(e)}function Iv(e){if(!At(e)||Ii(e))return e;const t=e[Ue];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=eu(e,t.scope_.immer_.useStrictShallowCopy_)}else r=eu(e,!0);return Jn(r,(n,i)=>{kv(r,n,Iv(i))}),t&&(t.finalized_=!1),r}var He=new ex,Nv=He.produce;He.produceWithPatches.bind(He);He.setAutoFreeze.bind(He);He.setUseStrictShallowCopy.bind(He);He.applyPatches.bind(He);He.createDraft.bind(He);He.finishDraft.bind(He);function $v(e){return({dispatch:r,getState:n})=>i=>a=>typeof a=="function"?a(r,n,e):i(a)}var tx=$v(),rx=$v,nx=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Zn:Zn.apply(null,arguments)};function tt(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(ze(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>Tv(n)&&n.type===e,r}var Rv=class Zr extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,Zr.prototype)}static get[Symbol.species](){return Zr}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new Zr(...t[0].concat(this)):new Zr(...t.concat(this))}};function af(e){return At(e)?Nv(e,()=>{}):e}function Mn(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function ix(e){return typeof e=="boolean"}var ax=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:a=!0}=t??{};let o=new Rv;return r&&(ix(r)?o.push(tx):o.push(rx(r.extraArgument))),o},ox="RTK_autoBatch",of=e=>t=>{setTimeout(t,e)},ux=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,a=!1,o=!1;const u=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:of(10):e.type==="callback"?e.queueNotification:of(e.timeout),c=()=>{o=!1,a&&(a=!1,u.forEach(s=>s()))};return Object.assign({},n,{subscribe(s){const f=()=>i&&s(),d=n.subscribe(f);return u.add(s),()=>{d(),u.delete(s)}},dispatch(s){var f;try{return i=!((f=s==null?void 0:s.meta)!=null&&f[ox]),a=!i,a&&(o||(o=!0,l(c))),n.dispatch(s)}finally{i=!0}}})},sx=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new Rv(e);return n&&i.push(ux(typeof n=="object"?n:void 0)),i};function lx(e){const t=ax(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:a=void 0,enhancers:o=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(rs(r))u=jv(r);else throw new Error(ze(1));let l;typeof n=="function"?l=n(t):l=t();let c=Zn;i&&(c=nx({trace:!1,...typeof i=="object"&&i}));const s=Ub(...l),f=sx(s);let d=typeof o=="function"?o(f):f();const h=c(...d);return Ev(u,a,h)}function Lv(e){const t={},r=[];let n;const i={addCase(a,o){const u=typeof a=="string"?a:a.type;if(!u)throw new Error(ze(28));if(u in t)throw new Error(ze(29));return t[u]=o,i},addMatcher(a,o){return r.push({matcher:a,reducer:o}),i},addDefaultCase(a){return n=a,i}};return e(i),[t,r,n]}function cx(e){return typeof e=="function"}function fx(e,t){let[r,n,i]=Lv(t),a;if(cx(e))a=()=>af(e());else{const u=af(e);a=()=>u}function o(u=a(),l){let c=[r[l.type],...n.filter(({matcher:s})=>s(l)).map(({reducer:s})=>s)];return c.filter(s=>!!s).length===0&&(c=[i]),c.reduce((s,f)=>{if(f)if(cr(s)){const h=f(s,l);return h===void 0?s:h}else{if(At(s))return Nv(s,d=>f(d,l));{const d=f(s,l);if(d===void 0){if(s===null)return s;throw Error("A case reducer on a non-draftable value must not return undefined")}return d}}return s},u)}return o.getInitialState=a,o}var dx="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",hx=(e=21)=>{let t="",r=e;for(;r--;)t+=dx[Math.random()*64|0];return t},vx=Symbol.for("rtk-slice-createasyncthunk");function px(e,t){return`${e}/${t}`}function mx({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[vx];return function(i){const{name:a,reducerPath:o=a}=i;if(!a)throw new Error(ze(11));const u=(typeof i.reducers=="function"?i.reducers(yx()):i.reducers)||{},l=Object.keys(u),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(P,w){const O=typeof P=="string"?P:P.type;if(!O)throw new Error(ze(12));if(O in c.sliceCaseReducersByType)throw new Error(ze(13));return c.sliceCaseReducersByType[O]=w,s},addMatcher(P,w){return c.sliceMatchers.push({matcher:P,reducer:w}),s},exposeAction(P,w){return c.actionCreators[P]=w,s},exposeCaseReducer(P,w){return c.sliceCaseReducersByName[P]=w,s}};l.forEach(P=>{const w=u[P],O={reducerName:P,type:px(a,P),createNotation:typeof i.reducers=="function"};xx(w)?Px(O,w,s,t):bx(O,w,s)});function f(){const[P={},w=[],O=void 0]=typeof i.extraReducers=="function"?Lv(i.extraReducers):[i.extraReducers],A={...P,...c.sliceCaseReducersByType};return fx(i.initialState,j=>{for(let T in A)j.addCase(T,A[T]);for(let T of c.sliceMatchers)j.addMatcher(T.matcher,T.reducer);for(let T of w)j.addMatcher(T.matcher,T.reducer);O&&j.addDefaultCase(O)})}const d=P=>P,h=new Map,v=new WeakMap;let p;function g(P,w){return p||(p=f()),p(P,w)}function y(){return p||(p=f()),p.getInitialState()}function b(P,w=!1){function O(j){let T=j[P];return typeof T>"u"&&w&&(T=Mn(v,O,y)),T}function A(j=d){const T=Mn(h,w,()=>new WeakMap);return Mn(T,j,()=>{const I={};for(const[_,k]of Object.entries(i.selectors??{}))I[_]=gx(k,j,()=>Mn(v,j,y),w);return I})}return{reducerPath:P,getSelectors:A,get selectors(){return A(O)},selectSlice:O}}const x={name:a,reducer:g,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:y,...b(o),injectInto(P,{reducerPath:w,...O}={}){const A=w??o;return P.inject({reducerPath:A,reducer:g},O),{...x,...b(A,!0)}}};return x}}function gx(e,t,r,n){function i(a,...o){let u=t(a);return typeof u>"u"&&n&&(u=r()),e(u,...o)}return i.unwrapped=e,i}var nt=mx();function yx(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function bx({type:e,reducerName:t,createNotation:r},n,i){let a,o;if("reducer"in n){if(r&&!wx(n))throw new Error(ze(17));a=n.reducer,o=n.prepare}else a=n;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?tt(e,o):tt(e))}function xx(e){return e._reducerDefinitionType==="asyncThunk"}function wx(e){return e._reducerDefinitionType==="reducerWithPrepare"}function Px({type:e,reducerName:t},r,n,i){if(!i)throw new Error(ze(18));const{payloadCreator:a,fulfilled:o,pending:u,rejected:l,settled:c,options:s}=r,f=i(e,a,s);n.exposeAction(t,f),o&&n.addCase(f.fulfilled,o),u&&n.addCase(f.pending,u),l&&n.addCase(f.rejected,l),c&&n.addMatcher(f.settled,c),n.exposeCaseReducer(t,{fulfilled:o||Dn,pending:u||Dn,rejected:l||Dn,settled:c||Dn})}function Dn(){}var Ox="task",Bv="listener",Kv="completed",as="cancelled",Ax=`task-${as}`,Sx=`task-${Kv}`,au=`${Bv}-${as}`,Ex=`${Bv}-${Kv}`,Ni=class{constructor(e){la(this,"name","TaskAbortError");la(this,"message");this.code=e,this.message=`${Ox} ${as} (reason: ${e})`}},os=(e,t)=>{if(typeof e!="function")throw new TypeError(ze(32))},ti=()=>{},qv=(e,t=ti)=>(e.catch(t),e),Fv=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),ar=(e,t)=>{const r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},or=e=>{if(e.aborted){const{reason:t}=e;throw new Ni(t)}};function zv(e,t){let r=ti;return new Promise((n,i)=>{const a=()=>i(new Ni(e.reason));if(e.aborted){a();return}r=Fv(e,a),t.finally(()=>r()).then(n,i)}).finally(()=>{r=ti})}var jx=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof Ni?"cancelled":"rejected",error:r}}finally{t==null||t()}},ri=e=>t=>qv(zv(e,t).then(r=>(or(e),r))),Wv=e=>{const t=ri(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:Ar}=Object,uf={},$i="listenerMiddleware",Tx=(e,t)=>{const r=n=>Fv(e,()=>ar(n,e.reason));return(n,i)=>{os(n);const a=new AbortController;r(a);const o=jx(async()=>{or(e),or(a.signal);const u=await n({pause:ri(a.signal),delay:Wv(a.signal),signal:a.signal});return or(a.signal),u},()=>ar(a,Sx));return i!=null&&i.autoJoin&&t.push(o.catch(ti)),{result:ri(e)(o),cancel(){ar(a,Ax)}}}},Cx=(e,t)=>{const r=async(n,i)=>{or(t);let a=()=>{};const u=[new Promise((l,c)=>{let s=e({predicate:n,effect:(f,d)=>{d.unsubscribe(),l([f,d.getState(),d.getOriginalState()])}});a=()=>{s(),c()}})];i!=null&&u.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await zv(t,Promise.race(u));return or(t),l}finally{a()}};return(n,i)=>qv(r(n,i))},Uv=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:a}=e;if(t)i=tt(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(ze(21));return os(a),{predicate:i,type:t,effect:a}},Hv=Ar(e=>{const{type:t,predicate:r,effect:n}=Uv(e);return{id:hx(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(ze(22))}}},{withTypes:()=>Hv}),sf=(e,t)=>{const{type:r,effect:n,predicate:i}=Uv(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===i)&&a.effect===n)},ou=e=>{e.pending.forEach(t=>{ar(t,au)})},_x=e=>()=>{e.forEach(ou),e.clear()},lf=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Yv=Ar(tt(`${$i}/add`),{withTypes:()=>Yv}),kx=tt(`${$i}/removeAll`),Gv=Ar(tt(`${$i}/remove`),{withTypes:()=>Gv}),Mx=(...e)=>{console.error(`${$i}/error`,...e)},mn=(e={})=>{const t=new Map,{extra:r,onError:n=Mx}=e;os(n);const i=s=>(s.unsubscribe=()=>t.delete(s.id),t.set(s.id,s),f=>{s.unsubscribe(),f!=null&&f.cancelActive&&ou(s)}),a=s=>{const f=sf(t,s)??Hv(s);return i(f)};Ar(a,{withTypes:()=>a});const o=s=>{const f=sf(t,s);return f&&(f.unsubscribe(),s.cancelActive&&ou(f)),!!f};Ar(o,{withTypes:()=>o});const u=async(s,f,d,h)=>{const v=new AbortController,p=Cx(a,v.signal),g=[];try{s.pending.add(v),await Promise.resolve(s.effect(f,Ar({},d,{getOriginalState:h,condition:(y,b)=>p(y,b).then(Boolean),take:p,delay:Wv(v.signal),pause:ri(v.signal),extra:r,signal:v.signal,fork:Tx(v.signal,g),unsubscribe:s.unsubscribe,subscribe:()=>{t.set(s.id,s)},cancelActiveListeners:()=>{s.pending.forEach((y,b,x)=>{y!==v&&(ar(y,au),x.delete(y))})},cancel:()=>{ar(v,au),s.pending.delete(v)},throwIfCancelled:()=>{or(v.signal)}})))}catch(y){y instanceof Ni||lf(n,y,{raisedBy:"effect"})}finally{await Promise.all(g),ar(v,Ex),s.pending.delete(v)}},l=_x(t);return{middleware:s=>f=>d=>{if(!Tv(d))return f(d);if(Yv.match(d))return a(d.payload);if(kx.match(d)){l();return}if(Gv.match(d))return o(d.payload);let h=s.getState();const v=()=>{if(h===uf)throw new Error(ze(23));return h};let p;try{if(p=f(d),t.size>0){const g=s.getState(),y=Array.from(t.values());for(const b of y){let x=!1;try{x=b.predicate(d,g,h)}catch(P){x=!1,lf(n,P,{raisedBy:"predicate"})}x&&u(b,d,s,v)}}}finally{h=uf}return p},startListening:a,stopListening:o,clearListeners:l}};function ze(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Dx={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},Vv=nt({name:"chartLayout",initialState:Dx,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top,e.margin.right=t.payload.right,e.margin.bottom=t.payload.bottom,e.margin.left=t.payload.left},setScale(e,t){e.scale=t.payload}}}),{setMargin:Ix,setLayout:Nx,setChartSize:$x,setScale:Rx}=Vv.actions,Lx=Vv.reducer;function cf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ff(e){for(var t=1;te*180/Math.PI,ce=(e,t,r,n)=>({x:e+Math.cos(-ni*n)*r,y:t+Math.sin(-ni*n)*r}),Xv=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},zx=(e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return Math.sqrt((r-i)**2+(n-a)**2)},Wx=(e,t)=>{var{x:r,y:n}=e,{cx:i,cy:a}=t,o=zx({x:r,y:n},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var u=(r-i)/o,l=Math.acos(u);return n>a&&(l=2*Math.PI-l),{radius:o,angle:Fx(l),angleInRadian:l}},Ux=e=>{var{startAngle:t,endAngle:r}=e,n=Math.floor(t/360),i=Math.floor(r/360),a=Math.min(n,i);return{startAngle:t-a*360,endAngle:r-a*360}},Hx=(e,t)=>{var{startAngle:r,endAngle:n}=t,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return e+o*360},Yx=(e,t)=>{var{x:r,y:n}=e,{radius:i,angle:a}=Wx({x:r,y:n},t),{innerRadius:o,outerRadius:u}=t;if(iu||i===0)return null;var{startAngle:l,endAngle:c}=Ux(t),s=a,f;if(l<=c){for(;s>c;)s-=360;for(;s=l&&s<=c}else{for(;s>l;)s-=360;for(;s=c&&s<=l}return f?ff(ff({},t),{},{radius:i,angle:Hx(s,t)}):null};function df(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Qe(e){for(var t=1;t{var a,o=-1,u=(a=t==null?void 0:t.length)!==null&&a!==void 0?a:0;if(u<=1||e==null)return 0;if(n==="angleAxis"&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var l=0;l0?r[l-1].coordinate:r[u-1].coordinate,s=r[l].coordinate,f=l>=u-1?r[0].coordinate:r[l+1].coordinate,d=void 0;if(ge(s-c)!==ge(f-s)){var h=[];if(ge(f-s)===ge(i[1]-i[0])){d=f;var v=s+i[1]-i[0];h[0]=Math.min(v,(v+c)/2),h[1]=Math.max(v,(v+c)/2)}else{d=c;var p=f+i[1]-i[0];h[0]=Math.min(s,(p+s)/2),h[1]=Math.max(s,(p+s)/2)}var g=[Math.min(s,(d+s)/2),Math.max(s,(d+s)/2)];if(e>g[0]&&e<=g[1]||e>=h[0]&&e<=h[1]){({index:o}=r[l]);break}}else{var y=Math.min(c,f),b=Math.max(c,f);if(e>(y+s)/2&&e<=(b+s)/2){({index:o}=r[l]);break}}}else if(t){for(var x=0;x0&&x(t[x].coordinate+t[x-1].coordinate)/2&&e<=(t[x].coordinate+t[x+1].coordinate)/2||x===u-1&&e>(t[x].coordinate+t[x-1].coordinate)/2){({index:o}=t[x]);break}}return o},Jx=(e,t,r)=>{if(t&&r){var{width:n,height:i}=r,{align:a,verticalAlign:o,layout:u}=t;if((u==="vertical"||u==="horizontal"&&o==="middle")&&a!=="center"&&D(e[a]))return Qe(Qe({},e),{},{[a]:e[a]+(n||0)});if((u==="horizontal"||u==="vertical"&&a==="center")&&o!=="middle"&&D(e[o]))return Qe(Qe({},e),{},{[o]:e[o]+(i||0)})}return e},Wt=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",Zv=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,a,o=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(a=!0),u.coordinate));return i||o.push(t),a||o.push(r),o},Jv=(e,t,r)=>{if(!e)return null;var{duplicateDomain:n,type:i,range:a,scale:o,realScaleType:u,isCategorical:l,categoricalDomain:c,tickCount:s,ticks:f,niceTicks:d,axisType:h}=e;if(!o)return null;var v=u==="scaleBand"&&o.bandwidth?o.bandwidth()/2:2,p=i==="category"&&o.bandwidth?o.bandwidth()/v:0;if(p=h==="angleAxis"&&a&&a.length>=2?ge(a[0]-a[1])*2*p:p,f||d){var g=(f||d||[]).map((y,b)=>{var x=n?n.indexOf(y):y;return{coordinate:o(x)+p,value:y,offset:p,index:b}});return g.filter(y=>!We(y.coordinate))}return l&&c?c.map((y,b)=>({coordinate:o(y)+p,value:y,index:b,offset:p})):o.ticks&&s!=null?o.ticks(s).map((y,b)=>({coordinate:o(y)+p,value:y,offset:p,index:b})):o.domain().map((y,b)=>({coordinate:o(y)+p,value:n?n[y]:y,index:b,offset:p}))},hf=1e-4,Qx=e=>{var t=e.domain();if(!(!t||t.length<=2)){var r=t.length,n=e.range(),i=Math.min(n[0],n[1])-hf,a=Math.max(n[0],n[1])+hf,o=e(t[0]),u=e(t[r-1]);(oa||ua)&&e.domain([t[0],t[r-1]])}},ew=(e,t)=>{if(!t||t.length!==2||!D(t[0])||!D(t[1]))return e;var r=Math.min(t[0],t[1]),n=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!D(e[0])||e[0]n)&&(i[1]=n),i[0]>n&&(i[0]=n),i[1]{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[o][r][0]=i,e[o][r][1]=i+u,i=e[o][r][1]):(e[o][r][0]=a,e[o][r][1]=a+u,a=e[o][r][1])}},rw=e=>{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[a][r][0]=i,e[a][r][1]=i+o,i=e[a][r][1]):(e[a][r][0]=0,e[a][r][1]=0)}},nw={sign:tw,expand:$0,none:Er,silhouette:R0,wiggle:L0,positive:rw},iw=(e,t,r)=>{var n=nw[r],i=N0().keys(t).value((a,o)=>+re(a,o,0)).order(Zo).offset(n);return i(e)};function Qv(e){return e==null?void 0:String(e)}function vf(e){var{axis:t,ticks:r,bandSize:n,entry:i,index:a,dataKey:o}=e;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!J(i[t.dataKey])){var u=Gh(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r[a]?r[a].coordinate+n/2:null}var l=re(i,J(o)?t.dataKey:o);return J(l)?null:t.scale(l)}var pf=e=>{var{axis:t,ticks:r,offset:n,bandSize:i,entry:a,index:o}=e;if(t.type==="category")return r[o]?r[o].coordinate+n:null;var u=re(a,t.dataKey,t.scale.domain()[o]);return J(u)?null:t.scale(u)-i/2+n},aw=e=>{var{numericAxis:t}=e,r=t.scale.domain();if(t.type==="number"){var n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return n<=0&&i>=0?0:i<0?i:n}return r[0]},ow=e=>{var t=e.flat(2).filter(D);return[Math.min(...t),Math.max(...t)]},uw=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],sw=(e,t,r)=>{if(e!=null)return uw(Object.keys(e).reduce((n,i)=>{var a=e[i],{stackedData:o}=a,u=o.reduce((l,c)=>{var s=ow(c.slice(t,r+1));return[Math.min(l[0],s[0]),Math.max(l[1],s[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},mf=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,gf=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,nn=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=_i(t,s=>s.coordinate),a=1/0,o=1,u=i.length;o=i.left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height;return a?{x:e,y:t}:null}return n?Yx({x:e,y:t},n):null}var cw=(e,t,r,n)=>{var i=t.find(c=>c&&c.index===r);if(i){if(e==="horizontal")return{x:i.coordinate,y:n.y};if(e==="vertical")return{x:n.x,y:i.coordinate};if(e==="centric"){var a=i.coordinate,{radius:o}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,o,a)),{},{angle:a,radius:o})}var u=i.coordinate,{angle:l}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,u,l)),{},{angle:l,radius:u})}return{x:0,y:0}},fw=(e,t)=>t==="horizontal"?e.x:t==="vertical"?e.y:t==="centric"?e.angle:e.radius,Ct=e=>e.layout.width,_t=e=>e.layout.height,dw=e=>e.layout.scale,ep=e=>e.layout.margin,us=S(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),ss=S(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),tp="data-recharts-item-index",rp="data-recharts-item-data-key",Ri=60;function bf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function It(e){for(var t=1;te.brush.height,ve=S([Ct,_t,ep,mw,us,ss,Sv,Bb],(e,t,r,n,i,a,o,u)=>{var l=a.reduce((v,p)=>{var{orientation:g}=p;if(!p.mirror&&!p.hide){var y=typeof p.width=="number"?p.width:Ri;return It(It({},v),{},{[g]:v[g]+y})}return v},{left:r.left||0,right:r.right||0}),c=i.reduce((v,p)=>{var{orientation:g}=p;return!p.mirror&&!p.hide?It(It({},v),{},{[g]:Kt(v,"".concat(g))+p.height}):v},{top:r.top||0,bottom:r.bottom||0}),s=It(It({},c),l),f=s.bottom;s.bottom+=n,s=Jx(s,o,u);var d=e-s.left-s.right,h=t-s.top-s.bottom;return It(It({brushBottom:f},s),{},{width:Math.max(d,0),height:Math.max(h,0)})}),gw=S(ve,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),np=S(Ct,_t,(e,t)=>({x:0,y:0,width:e,height:t})),yw=m.createContext(null),_e=()=>m.useContext(yw)!=null,Li=e=>e.brush,Bi=S([Li,ve,ep],(e,t,r)=>({height:e.height,x:D(e.x)?e.x:t.left,y:D(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:D(e.width)?e.width:t.width})),ls=()=>{var e,t=_e(),r=$(gw),n=$(Bi),i=(e=$(Li))===null||e===void 0?void 0:e.padding;return!t||!n||!i?r:{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}},bw={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},ip=()=>{var e;return(e=$(ve))!==null&&e!==void 0?e:bw},ap=()=>$(Ct),op=()=>$(_t),Y=e=>e.layout.layoutType,Ki=()=>$(Y),xw={settings:{layout:"horizontal",align:"center",verticalAlign:"middle",itemSorter:"value"},size:{width:0,height:0},payload:[]},up=nt({name:"legend",initialState:xw,reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload(e,t){e.payload.push(t.payload)},removeLegendPayload(e,t){var r=Pt(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)}}}),{setLegendSize:qD,setLegendSettings:FD,addLegendPayload:sp,removeLegendPayload:lp}=up.actions,ww=up.reducer;function uu(){return uu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{separator:t=" : ",contentStyle:r={},itemStyle:n={},labelStyle:i={},payload:a,formatter:o,itemSorter:u,wrapperClassName:l,labelClassName:c,label:s,labelFormatter:f,accessibilityLayer:d=!1}=e,h=()=>{if(a&&a.length){var w={padding:0,margin:0},O=(u?_i(a,u):a).map((A,j)=>{if(A.type==="none")return null;var T=A.formatter||o||Sw,{value:I,name:_}=A,k=I,R=_;if(T){var B=T(I,_,A,j,a);if(Array.isArray(B))[k,R]=B;else if(B!=null)k=B;else return null}var z=co({display:"block",paddingTop:4,paddingBottom:4,color:A.color||"#000"},n);return m.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(j),style:z},dt(R)?m.createElement("span",{className:"recharts-tooltip-item-name"},R):null,dt(R)?m.createElement("span",{className:"recharts-tooltip-item-separator"},t):null,m.createElement("span",{className:"recharts-tooltip-item-value"},k),m.createElement("span",{className:"recharts-tooltip-item-unit"},A.unit||""))});return m.createElement("ul",{className:"recharts-tooltip-item-list",style:w},O)}return null},v=co({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},r),p=co({margin:0},i),g=!J(s),y=g?s:"",b=H("recharts-default-tooltip",l),x=H("recharts-tooltip-label",c);g&&f&&a!==void 0&&a!==null&&(y=f(s,a));var P=d?{role:"status","aria-live":"assertive"}:{};return m.createElement("div",uu({className:b,style:v},P),m.createElement("p",{className:x,style:p},m.isValidElement(y)?y:"".concat(y)),h())},zr="recharts-tooltip-wrapper",jw={visibility:"hidden"};function Tw(e){var{coordinate:t,translateX:r,translateY:n}=e;return H(zr,{["".concat(zr,"-right")]:D(r)&&t&&D(t.x)&&r>=t.x,["".concat(zr,"-left")]:D(r)&&t&&D(t.x)&&r=t.y,["".concat(zr,"-top")]:D(n)&&t&&D(t.y)&&n0?i:0),f=r[n]+i;if(t[n])return o[n]?s:f;var d=l[n];if(d==null)return 0;if(o[n]){var h=s,v=d;return hg?Math.max(s,d):Math.max(f,d)}function Cw(e){var{translateX:t,translateY:r,useTranslate3d:n}=e;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function _w(e){var{allowEscapeViewBox:t,coordinate:r,offsetTopLeft:n,position:i,reverseDirection:a,tooltipBox:o,useTranslate3d:u,viewBox:l}=e,c,s,f;return o.height>0&&o.width>0&&r?(s=wf({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:l,viewBoxDimension:l.width}),f=wf({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:l,viewBoxDimension:l.height}),c=Cw({translateX:s,translateY:f,useTranslate3d:u})):c=jw,{cssProperties:c,cssClasses:Tw({translateX:s,translateY:f,coordinate:r})}}function Pf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function In(e){for(var t=1;t{if(t.key==="Escape"){var r,n,i,a;this.setState({dismissed:!0,dismissedAtCoordinate:{x:(r=(n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==null&&r!==void 0?r:0,y:(i=(a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==null&&i!==void 0?i:0}})}})}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown)}componentDidUpdate(){var t,r;this.state.dismissed&&(((t=this.props.coordinate)===null||t===void 0?void 0:t.x)!==this.state.dismissedAtCoordinate.x||((r=this.props.coordinate)===null||r===void 0?void 0:r.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}render(){var{active:t,allowEscapeViewBox:r,animationDuration:n,animationEasing:i,children:a,coordinate:o,hasPayload:u,isAnimationActive:l,offset:c,position:s,reverseDirection:f,useTranslate3d:d,viewBox:h,wrapperStyle:v,lastBoundingBox:p,innerRef:g,hasPortalFromProps:y}=this.props,{cssClasses:b,cssProperties:x}=_w({allowEscapeViewBox:r,coordinate:o,offsetTopLeft:c,position:s,reverseDirection:f,tooltipBox:{height:p.height,width:p.width},useTranslate3d:d,viewBox:h}),P=y?{}:In(In({transition:l&&t?"transform ".concat(n,"ms ").concat(i):void 0},x),{},{pointerEvents:"none",visibility:!this.state.dismissed&&t&&u?"visible":"hidden",position:"absolute",top:0,left:0}),w=In(In({},P),{},{visibility:!this.state.dismissed&&t&&u?"visible":"hidden"},v);return m.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:b,style:w,ref:g},a)}}var Iw=()=>!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout),vr={isSsr:Iw()},cp=()=>$(e=>e.rootProps.accessibilityLayer);function Ye(e){return Number.isFinite(e)}function Tr(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function lu(){return lu=Object.assign?Object.assign.bind():function(e){for(var t=1;tYe(e.x)&&Ye(e.y),Wr=e=>e.x,Ur=e=>e.y,Lw=(e,t)=>{if(typeof e=="function")return e;var r="curve".concat(vn(e));return(r==="curveMonotone"||r==="curveBump")&&t?Sf["".concat(r).concat(t==="vertical"?"Y":"X")]:Sf[r]||Ti},Bw=e=>{var{type:t="linear",points:r=[],baseLine:n,layout:i,connectNulls:a=!1}=e,o=Lw(t,i),u=a?r.filter(Nn):r,l;if(Array.isArray(n)){var c=a?n.filter(f=>Nn(f)):n,s=u.map((f,d)=>Af(Af({},f),{},{base:c[d]}));return i==="vertical"?l=Cn().y(Ur).x1(Wr).x0(f=>f.base.x):l=Cn().x(Wr).y1(Ur).y0(f=>f.base.y),l.defined(Nn).curve(o),l(s)}return i==="vertical"&&D(n)?l=Cn().y(Ur).x1(Wr).x0(n):D(n)?l=Cn().x(Wr).y1(Ur).y0(n):l=nv().x(Wr).y(Ur),l.defined(Nn).curve(o),l(u)},cs=e=>{var{className:t,points:r,path:n,pathRef:i}=e;if((!r||!r.length)&&!n)return null;var a=r&&r.length?Bw(e):n;return m.createElement("path",lu({},F(e,!1),Hu(e),{className:H("recharts-curve",t),d:a===null?void 0:a,ref:i}))},Kw=["x","y","top","left","width","height","className"];function cu(){return cu=Object.assign?Object.assign.bind():function(e){for(var t=1;t"M".concat(e,",").concat(i,"v").concat(n,"M").concat(a,",").concat(t,"h").concat(r),Gw=e=>{var{x:t=0,y:r=0,top:n=0,left:i=0,width:a=0,height:o=0,className:u}=e,l=Uw(e,Kw),c=qw({x:t,y:r,top:n,left:i,width:a,height:o},l);return!D(t)||!D(r)||!D(a)||!D(o)||!D(n)||!D(i)?null:m.createElement("path",cu({},F(c,!0),{className:H("recharts-cross",u),d:Yw(t,r,a,o,n,i)}))};function Vw(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-i:r.left+.5,y:e==="horizontal"?r.top+.5:t.y-i,width:e==="horizontal"?n:r.width-1,height:e==="horizontal"?r.height-1:n}}function jf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Xw(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}var fo={},ho={},vo={},Tf;function e1(){return Tf||(Tf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){if(!r||typeof r!="object")return!1;const n=Object.getPrototypeOf(r);return n===null||n===Object.prototype||Object.getPrototypeOf(n)===null?Object.prototype.toString.call(r)==="[object Object]":!1}e.isPlainObject=t}(vo)),vo}var Cf;function t1(){return Cf||(Cf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=e1(),r=bv(),n=Qu(),i=es(),a=Zu();function o(c,s,f){return u(c,s,void 0,void 0,void 0,void 0,f)}function u(c,s,f,d,h,v,p){const g=p(c,s,f,d,h,v);if(g!==void 0)return g;if(typeof c==typeof s)switch(typeof c){case"bigint":case"string":case"boolean":case"symbol":case"undefined":return c===s;case"number":return c===s||Object.is(c,s);case"function":return c===s;case"object":return l(c,s,v,p)}return l(c,s,v,p)}function l(c,s,f,d){if(Object.is(c,s))return!0;let h=n.getTag(c),v=n.getTag(s);if(h===i.argumentsTag&&(h=i.objectTag),v===i.argumentsTag&&(v=i.objectTag),h!==v)return!1;switch(h){case i.stringTag:return c.toString()===s.toString();case i.numberTag:{const y=c.valueOf(),b=s.valueOf();return a.eq(y,b)}case i.booleanTag:case i.dateTag:case i.symbolTag:return Object.is(c.valueOf(),s.valueOf());case i.regexpTag:return c.source===s.source&&c.flags===s.flags;case i.functionTag:return c===s}f=f??new Map;const p=f.get(c),g=f.get(s);if(p!=null&&g!=null)return p===s;f.set(c,s),f.set(s,c);try{switch(h){case i.mapTag:{if(c.size!==s.size)return!1;for(const[y,b]of c.entries())if(!s.has(y)||!u(b,s.get(y),y,c,s,f,d))return!1;return!0}case i.setTag:{if(c.size!==s.size)return!1;const y=Array.from(c.values()),b=Array.from(s.values());for(let x=0;xu(P,O,void 0,c,s,f,d));if(w===-1)return!1;b.splice(w,1)}return!0}case i.arrayTag:case i.uint8ArrayTag:case i.uint8ClampedArrayTag:case i.uint16ArrayTag:case i.uint32ArrayTag:case i.bigUint64ArrayTag:case i.int8ArrayTag:case i.int16ArrayTag:case i.int32ArrayTag:case i.bigInt64ArrayTag:case i.float32ArrayTag:case i.float64ArrayTag:{if(typeof Buffer<"u"&&Buffer.isBuffer(c)!==Buffer.isBuffer(s)||c.length!==s.length)return!1;for(let y=0;ynull,n=!1,i=null,a=o=>{if(!n){if(Array.isArray(o)){if(!o.length)return;var u=o,[l,...c]=u;if(typeof l=="number"){i=e.setTimeout(a.bind(null,c),l);return}a(l),i=e.setTimeout(a.bind(null,c));return}typeof o=="object"&&(t=o,r(t)),typeof o=="function"&&o()}};return{stop:()=>{n=!0},start:o=>{n=!1,i&&(i(),i=null),a(o)},subscribe:o=>(r=o,()=>{r=()=>null}),getTimeoutController:()=>e}}var ii=1e-4,fp=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],dp=(e,t)=>e.map((r,n)=>r*t**n).reduce((r,n)=>r+n),Df=(e,t)=>r=>{var n=fp(e,t);return dp(n,r)},s1=(e,t)=>r=>{var n=fp(e,t),i=[...n.map((a,o)=>a*o).slice(1),0];return dp(i,r)},If=function(){for(var t,r,n,i,a=arguments.length,o=new Array(a),u=0;uparseFloat(v)))}}else o.length===4&&([t,n,r,i]=o);var c=Df(t,r),s=Df(n,i),f=s1(t,r),d=v=>v>1?1:v<0?0:v,h=v=>{for(var p=v>1?1:v,g=p,y=0;y<8;++y){var b=c(g)-p,x=f(g);if(Math.abs(b-p)0&&arguments[0]!==void 0?arguments[0]:{},{stiff:r=100,damping:n=8,dt:i=17}=t,a=(o,u,l)=>{var c=-(o-u)*r,s=l*n,f=l+(c-s)*i/1e3,d=l*i/1e3+o;return Math.abs(d-u){if(typeof e=="string")switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return If(e);case"spring":return l1();default:if(e.split("(")[0]==="cubic-bezier")return If(e)}return typeof e=="function"?e:null};function Nf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $f(e){for(var t=1;te.replace(/([A-Z])/g,t=>"-".concat(t.toLowerCase())),p1=(e,t,r)=>e.map(n=>"".concat(v1(n)," ").concat(t,"ms ").concat(r)).join(","),m1=(e,t)=>[Object.keys(e),Object.keys(t)].reduce((r,n)=>r.filter(i=>n.includes(i))),an=(e,t)=>Object.keys(t).reduce((r,n)=>$f($f({},r),{},{[n]:e(n,t[n])}),{});function Rf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Oe(e){for(var t=1;te+(t-e)*r,fu=e=>{var{from:t,to:r}=e;return t!==r},hp=(e,t,r)=>{var n=an((i,a)=>{if(fu(a)){var[o,u]=e(a.from,a.to,a.velocity);return Oe(Oe({},a),{},{from:o,velocity:u})}return a},t);return r<1?an((i,a)=>fu(a)?Oe(Oe({},a),{},{velocity:ai(a.velocity,n[i].velocity,r),from:ai(a.from,n[i].from,r)}):a,t):hp(e,n,r-1)};function x1(e,t,r,n,i,a){var o,u=n.reduce((d,h)=>Oe(Oe({},d),{},{[h]:{from:e[h],velocity:0,to:t[h]}}),{}),l=()=>an((d,h)=>h.from,u),c=()=>!Object.values(u).filter(fu).length,s=null,f=d=>{o||(o=d);var h=d-o,v=h/r.dt;u=hp(r,u,v),i(Oe(Oe(Oe({},e),t),l())),o=d,c()||(s=a.setTimeout(f))};return()=>(s=a.setTimeout(f),()=>{s()})}function w1(e,t,r,n,i,a,o){var u=null,l=i.reduce((f,d)=>Oe(Oe({},f),{},{[d]:[e[d],t[d]]}),{}),c,s=f=>{c||(c=f);var d=(f-c)/n,h=an((p,g)=>ai(...g,r(d)),l);if(a(Oe(Oe(Oe({},e),t),h)),d<1)u=o.setTimeout(s);else{var v=an((p,g)=>ai(...g,r(1)),l);a(Oe(Oe(Oe({},e),t),v))}};return()=>(u=o.setTimeout(s),()=>{u()})}const P1=(e,t,r,n,i,a)=>{var o=m1(e,t);return r.isStepper===!0?x1(e,t,r,o,i,a):w1(e,t,r,n,o,i,a)};class O1{setTimeout(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),i=null,a=o=>{o-n>=r?t(o):typeof requestAnimationFrame=="function"&&(i=requestAnimationFrame(a))};return i=requestAnimationFrame(a),()=>{cancelAnimationFrame(i)}}}var A1=["children","begin","duration","attributeName","easing","isActive","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart","animationManager"];function du(){return du=Object.assign?Object.assign.bind():function(e){for(var t=1;t{this.stopJSAnimation=c()};this.manager.start([l,o,s,i,u])}runAnimation(t){var{begin:r,duration:n,attributeName:i,to:a,easing:o,onAnimationStart:u,onAnimationEnd:l,children:c}=t;if(this.unSubscribe=this.manager.subscribe(this.handleStyleChange),typeof o=="function"||typeof c=="function"||o==="spring"){this.runJSAnimation(t);return}var s=i?{[i]:a}:a,f=p1(Object.keys(s),n,o);this.manager.start([u,r,Nt(Nt({},s),{},{transition:f}),n,l])}render(){var t=this.props,{children:r,begin:n,duration:i,attributeName:a,easing:o,isActive:u,from:l,to:c,canBegin:s,onAnimationEnd:f,shouldReAnimate:d,onAnimationReStart:h,animationManager:v}=t,p=S1(t,A1),g=m.Children.count(r),y=this.state.style;if(typeof r=="function")return r(y);if(!u||g===0||i<=0)return r;var b=x=>{var{style:P={},className:w}=x.props,O=m.cloneElement(x,Nt(Nt({},p),{},{style:Nt(Nt({},P),y),className:w}));return O};return g===1?b(m.Children.only(r)):m.createElement("div",null,m.Children.map(r,x=>b(x)))}}tr(fs,"displayName","Animate");tr(fs,"defaultProps",{begin:0,duration:1e3,attributeName:"",easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}});var _1=m.createContext(null);function qt(e){var t,r,n=m.useContext(_1);return m.createElement(fs,du({},e,{animationManager:(t=(r=e.animationManager)!==null&&r!==void 0?r:n)!==null&&t!==void 0?t:C1()}))}function oi(){return oi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=Math.min(Math.abs(r)/2,Math.abs(n)/2),o=n>=0?1:-1,u=r>=0?1:-1,l=n>=0&&r>=0||n<0&&r<0?1:0,c;if(a>0&&i instanceof Array){for(var s=[0,0,0,0],f=0,d=4;fa?a:i[f];c="M".concat(e,",").concat(t+o*s[0]),s[0]>0&&(c+="A ".concat(s[0],",").concat(s[0],",0,0,").concat(l,",").concat(e+u*s[0],",").concat(t)),c+="L ".concat(e+r-u*s[1],",").concat(t),s[1]>0&&(c+="A ".concat(s[1],",").concat(s[1],",0,0,").concat(l,`, + `).concat(e+r,",").concat(t+o*s[1])),c+="L ".concat(e+r,",").concat(t+n-o*s[2]),s[2]>0&&(c+="A ".concat(s[2],",").concat(s[2],",0,0,").concat(l,`, + `).concat(e+r-u*s[2],",").concat(t+n)),c+="L ".concat(e+u*s[3],",").concat(t+n),s[3]>0&&(c+="A ".concat(s[3],",").concat(s[3],",0,0,").concat(l,`, + `).concat(e,",").concat(t+n-o*s[3])),c+="Z"}else if(a>0&&i===+i&&i>0){var h=Math.min(a,i);c="M ".concat(e,",").concat(t+o*h,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+u*h,",").concat(t,` + L `).concat(e+r-u*h,",").concat(t,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r,",").concat(t+o*h,` + L `).concat(e+r,",").concat(t+n-o*h,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e+r-u*h,",").concat(t+n,` + L `).concat(e+u*h,",").concat(t+n,` + A `).concat(h,",").concat(h,",0,0,").concat(l,",").concat(e,",").concat(t+n-o*h," Z")}else c="M ".concat(e,",").concat(t," h ").concat(r," v ").concat(n," h ").concat(-r," Z");return c},k1={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},vp=e=>{var t=it(e,k1),r=m.useRef(null),[n,i]=m.useState(-1);m.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var y=r.current.getTotalLength();y&&i(y)}catch{}},[]);var{x:a,y:o,width:u,height:l,radius:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isAnimationActive:v,isUpdateAnimationActive:p}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||u===0||l===0)return null;var g=H("recharts-rectangle",s);return p?m.createElement(qt,{canBegin:n>0,from:{width:u,height:l,x:a,y:o},to:{width:u,height:l,x:a,y:o},duration:d,animationEasing:f,isActive:p},y=>{var{width:b,height:x,x:P,y:w}=y;return m.createElement(qt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,isActive:v,easing:f},m.createElement("path",oi({},F(t,!0),{className:g,d:Bf(P,w,b,x,c),ref:r})))}):m.createElement("path",oi({},F(t,!0),{className:g,d:Bf(a,o,u,l,c)}))};function pp(e){var{cx:t,cy:r,radius:n,startAngle:i,endAngle:a}=e,o=ce(t,r,n,i),u=ce(t,r,n,a);return{points:[o,u],cx:t,cy:r,radius:n,startAngle:i,endAngle:a}}function hu(){return hu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=ge(t-e),n=Math.min(Math.abs(t-e),359.999);return r*n},$n=e=>{var{cx:t,cy:r,radius:n,angle:i,sign:a,isExternal:o,cornerRadius:u,cornerIsExternal:l}=e,c=u*(o?1:-1)+n,s=Math.asin(u/c)/ni,f=l?i:i+a*s,d=ce(t,r,c,f),h=ce(t,r,n,f),v=l?i-a*s:i,p=ce(t,r,c*Math.cos(s*ni),v);return{center:d,circleTangency:h,lineTangency:p,theta:s}},mp=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:a,endAngle:o}=e,u=M1(a,o),l=a+u,c=ce(t,r,i,a),s=ce(t,r,i,l),f="M ".concat(c.x,",").concat(c.y,` + A `).concat(i,",").concat(i,`,0, + `).concat(+(Math.abs(u)>180),",").concat(+(a>l),`, + `).concat(s.x,",").concat(s.y,` + `);if(n>0){var d=ce(t,r,n,a),h=ce(t,r,n,l);f+="L ".concat(h.x,",").concat(h.y,` + A `).concat(n,",").concat(n,`,0, + `).concat(+(Math.abs(u)>180),",").concat(+(a<=l),`, + `).concat(d.x,",").concat(d.y," Z")}else f+="L ".concat(t,",").concat(r," Z");return f},D1=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,cornerRadius:a,forceCornerRadius:o,cornerIsExternal:u,startAngle:l,endAngle:c}=e,s=ge(c-l),{circleTangency:f,lineTangency:d,theta:h}=$n({cx:t,cy:r,radius:i,angle:l,sign:s,cornerRadius:a,cornerIsExternal:u}),{circleTangency:v,lineTangency:p,theta:g}=$n({cx:t,cy:r,radius:i,angle:c,sign:-s,cornerRadius:a,cornerIsExternal:u}),y=u?Math.abs(l-c):Math.abs(l-c)-h-g;if(y<0)return o?"M ".concat(d.x,",").concat(d.y,` + a`).concat(a,",").concat(a,",0,0,1,").concat(a*2,`,0 + a`).concat(a,",").concat(a,",0,0,1,").concat(-a*2,`,0 + `):mp({cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:l,endAngle:c});var b="M ".concat(d.x,",").concat(d.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(f.x,",").concat(f.y,` + A`).concat(i,",").concat(i,",0,").concat(+(y>180),",").concat(+(s<0),",").concat(v.x,",").concat(v.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(p.x,",").concat(p.y,` + `);if(n>0){var{circleTangency:x,lineTangency:P,theta:w}=$n({cx:t,cy:r,radius:n,angle:l,sign:s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),{circleTangency:O,lineTangency:A,theta:j}=$n({cx:t,cy:r,radius:n,angle:c,sign:-s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),T=u?Math.abs(l-c):Math.abs(l-c)-w-j;if(T<0&&a===0)return"".concat(b,"L").concat(t,",").concat(r,"Z");b+="L".concat(A.x,",").concat(A.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(O.x,",").concat(O.y,` + A`).concat(n,",").concat(n,",0,").concat(+(T>180),",").concat(+(s>0),",").concat(x.x,",").concat(x.y,` + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(P.x,",").concat(P.y,"Z")}else b+="L".concat(t,",").concat(r,"Z");return b},I1={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},gp=e=>{var t=it(e,I1),{cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:o,forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s,className:f}=t;if(a0&&Math.abs(c-s)<360?p=D1({cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:Math.min(v,h/2),forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s}):p=mp({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:c,endAngle:s}),m.createElement("path",hu({},F(t,!0),{className:d,d:p}))};function N1(e,t,r){var n,i,a,o;if(e==="horizontal")n=t.x,a=n,i=r.top,o=r.top+r.height;else if(e==="vertical")i=t.y,o=i,n=r.left,a=r.left+r.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var{cx:u,cy:l,innerRadius:c,outerRadius:s,angle:f}=t,d=ce(u,l,c,f),h=ce(u,l,s,f);n=d.x,i=d.y,a=h.x,o=h.y}else return pp(t);return[{x:n,y:i},{x:a,y:o}]}var go={},yo={},bo={},Kf;function $1(){return Kf||(Kf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ov();function r(n){return t.isSymbol(n)?NaN:Number(n)}e.toNumber=r}(bo)),bo}var qf;function R1(){return qf||(qf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=$1();function r(n){return n?(n=t.toNumber(n),n===1/0||n===-1/0?(n<0?-1:1)*Number.MAX_VALUE:n===n?n:0):n===0?n:0}e.toFinite=r}(yo)),yo}var Ff;function L1(){return Ff||(Ff=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Av(),r=R1();function n(i,a,o){o&&typeof o!="number"&&t.isIterateeCall(i,a,o)&&(a=o=void 0),i=r.toFinite(i),a===void 0?(a=i,i=0):a=r.toFinite(a),o=o===void 0?it?1:e>=t?0:NaN}function q1(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function ds(e){let t,r,n;e.length!==2?(t=Lt,r=(u,l)=>Lt(e(u),l),n=(u,l)=>e(u)-l):(t=e===Lt||e===q1?e:F1,r=e,n=e);function i(u,l,c=0,s=u.length){if(c>>1;r(u[f],l)<0?c=f+1:s=f}while(c>>1;r(u[f],l)<=0?c=f+1:s=f}while(cc&&n(u[f-1],l)>-n(u[f],l)?f-1:f}return{left:i,center:o,right:a}}function F1(){return 0}function bp(e){return e===null?NaN:+e}function*z1(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const W1=ds(Lt),gn=W1.right;ds(bp).center;class Wf extends Map{constructor(t,r=Y1){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(Uf(this,t))}has(t){return super.has(Uf(this,t))}set(t,r){return super.set(U1(this,t),r)}delete(t){return super.delete(H1(this,t))}}function Uf({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function U1({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function H1({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function Y1(e){return e!==null&&typeof e=="object"?e.valueOf():e}function G1(e=Lt){if(e===Lt)return xp;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function xp(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const V1=Math.sqrt(50),X1=Math.sqrt(10),Z1=Math.sqrt(2);function ui(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=V1?10:a>=X1?5:a>=Z1?2:1;let u,l,c;return i<0?(c=Math.pow(10,-i)/o,u=Math.round(e*c),l=Math.round(t*c),u/ct&&--l,c=-c):(c=Math.pow(10,i)*o,u=Math.round(e/c),l=Math.round(t/c),u*ct&&--l),l0))return[];if(e===t)return[e];const n=t=i))return[];const u=a-i+1,l=new Array(u);if(n)if(o<0)for(let c=0;c=n)&&(r=n);return r}function Yf(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function wp(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?xp:G1(i);n>r;){if(n-r>600){const l=n-r+1,c=t-r+1,s=Math.log(l),f=.5*Math.exp(2*s/3),d=.5*Math.sqrt(s*f*(l-f)/l)*(c-l/2<0?-1:1),h=Math.max(r,Math.floor(t-c*f/l+d)),v=Math.min(n,Math.floor(t+(l-c)*f/l+d));wp(e,t,h,v,i)}const a=e[t];let o=r,u=n;for(Hr(e,r,t),i(e[n],a)>0&&Hr(e,r,n);o0;)--u}i(e[r],a)===0?Hr(e,r,u):(++u,Hr(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function Hr(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function J1(e,t,r){if(e=Float64Array.from(z1(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Yf(e);if(t>=1)return Hf(e);var n,i=(n-1)*t,a=Math.floor(i),o=Hf(wp(e,a).subarray(0,a+1)),u=Yf(e.subarray(a+1));return o+(u-o)*(i-a)}}function Q1(e,t,r=bp){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return o+(u-o)*(i-a)}}function eP(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Rn(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Rn(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=nP.exec(e))?new De(t[1],t[2],t[3],1):(t=iP.exec(e))?new De(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=aP.exec(e))?Rn(t[1],t[2],t[3],t[4]):(t=oP.exec(e))?Rn(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=uP.exec(e))?ed(t[1],t[2]/100,t[3]/100,1):(t=sP.exec(e))?ed(t[1],t[2]/100,t[3]/100,t[4]):Gf.hasOwnProperty(e)?Zf(Gf[e]):e==="transparent"?new De(NaN,NaN,NaN,0):null}function Zf(e){return new De(e>>16&255,e>>8&255,e&255,1)}function Rn(e,t,r,n){return n<=0&&(e=t=r=NaN),new De(e,t,r,n)}function fP(e){return e instanceof yn||(e=sn(e)),e?(e=e.rgb(),new De(e.r,e.g,e.b,e.opacity)):new De}function yu(e,t,r,n){return arguments.length===1?fP(e):new De(e,t,r,n??1)}function De(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}ps(De,yu,Op(yn,{brighter(e){return e=e==null?si:Math.pow(si,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?on:Math.pow(on,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new De(ur(this.r),ur(this.g),ur(this.b),li(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Jf,formatHex:Jf,formatHex8:dP,formatRgb:Qf,toString:Qf}));function Jf(){return`#${rr(this.r)}${rr(this.g)}${rr(this.b)}`}function dP(){return`#${rr(this.r)}${rr(this.g)}${rr(this.b)}${rr((isNaN(this.opacity)?1:this.opacity)*255)}`}function Qf(){const e=li(this.opacity);return`${e===1?"rgb(":"rgba("}${ur(this.r)}, ${ur(this.g)}, ${ur(this.b)}${e===1?")":`, ${e})`}`}function li(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ur(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function rr(e){return e=ur(e),(e<16?"0":"")+e.toString(16)}function ed(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new st(e,t,r,n)}function Ap(e){if(e instanceof st)return new st(e.h,e.s,e.l,e.opacity);if(e instanceof yn||(e=sn(e)),!e)return new st;if(e instanceof st)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,u=a-i,l=(a+i)/2;return u?(t===a?o=(r-n)/u+(r0&&l<1?0:o,new st(o,u,l,e.opacity)}function hP(e,t,r,n){return arguments.length===1?Ap(e):new st(e,t,r,n??1)}function st(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}ps(st,hP,Op(yn,{brighter(e){return e=e==null?si:Math.pow(si,e),new st(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?on:Math.pow(on,e),new st(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new De(wo(e>=240?e-240:e+120,i,n),wo(e,i,n),wo(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new st(td(this.h),Ln(this.s),Ln(this.l),li(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=li(this.opacity);return`${e===1?"hsl(":"hsla("}${td(this.h)}, ${Ln(this.s)*100}%, ${Ln(this.l)*100}%${e===1?")":`, ${e})`}`}}));function td(e){return e=(e||0)%360,e<0?e+360:e}function Ln(e){return Math.max(0,Math.min(1,e||0))}function wo(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const ms=e=>()=>e;function vP(e,t){return function(r){return e+r*t}}function pP(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function mP(e){return(e=+e)==1?Sp:function(t,r){return r-t?pP(t,r,e):ms(isNaN(t)?r:t)}}function Sp(e,t){var r=t-e;return r?vP(e,r):ms(isNaN(e)?t:e)}const rd=function e(t){var r=mP(t);function n(i,a){var o=r((i=yu(i)).r,(a=yu(a)).r),u=r(i.g,a.g),l=r(i.b,a.b),c=Sp(i.opacity,a.opacity);return function(s){return i.r=o(s),i.g=u(s),i.b=l(s),i.opacity=c(s),i+""}}return n.gamma=e,n}(1);function gP(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),u[o]?u[o]+=a:u[++o]=a),(n=n[0])===(i=i[0])?u[o]?u[o]+=i:u[++o]=i:(u[++o]=null,l.push({i:o,x:ci(n,i)})),r=Po.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function TP(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?CP:TP,l=c=null,f}function f(d){return d==null||isNaN(d=+d)?a:(l||(l=u(e.map(n),t,r)))(n(o(d)))}return f.invert=function(d){return o(i((c||(c=u(t,e.map(n),ci)))(d)))},f.domain=function(d){return arguments.length?(e=Array.from(d,fi),s()):e.slice()},f.range=function(d){return arguments.length?(t=Array.from(d),s()):t.slice()},f.rangeRound=function(d){return t=Array.from(d),r=gs,s()},f.clamp=function(d){return arguments.length?(o=d?!0:Te,s()):o!==Te},f.interpolate=function(d){return arguments.length?(r=d,s()):r},f.unknown=function(d){return arguments.length?(a=d,f):a},function(d,h){return n=d,i=h,s()}}function ys(){return qi()(Te,Te)}function _P(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function di(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Cr(e){return e=di(Math.abs(e)),e?e[1]:NaN}function kP(e,t){return function(r,n){for(var i=r.length,a=[],o=0,u=e[0],l=0;i>0&&u>0&&(l+u+1>n&&(u=Math.max(1,n-l)),a.push(r.substring(i-=u,i+u)),!((l+=u+1)>n));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}function MP(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var DP=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function ln(e){if(!(t=DP.exec(e)))throw new Error("invalid format: "+e);var t;return new bs({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}ln.prototype=bs.prototype;function bs(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}bs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function IP(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var Ep;function NP(e,t){var r=di(e,t);if(!r)return e+"";var n=r[0],i=r[1],a=i-(Ep=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+di(e,Math.max(0,t+a-1))[0]}function id(e,t){var r=di(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const ad={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:_P,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>id(e*100,t),r:id,s:NP,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function od(e){return e}var ud=Array.prototype.map,sd=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function $P(e){var t=e.grouping===void 0||e.thousands===void 0?od:kP(ud.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?od:MP(ud.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function c(f){f=ln(f);var d=f.fill,h=f.align,v=f.sign,p=f.symbol,g=f.zero,y=f.width,b=f.comma,x=f.precision,P=f.trim,w=f.type;w==="n"?(b=!0,w="g"):ad[w]||(x===void 0&&(x=12),P=!0,w="g"),(g||d==="0"&&h==="=")&&(g=!0,d="0",h="=");var O=p==="$"?r:p==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",A=p==="$"?n:/[%p]/.test(w)?o:"",j=ad[w],T=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function I(_){var k=O,R=A,B,z,V;if(w==="c")R=j(_)+R,_="";else{_=+_;var K=_<0||1/_<0;if(_=isNaN(_)?l:j(Math.abs(_),x),P&&(_=IP(_)),K&&+_==0&&v!=="+"&&(K=!1),k=(K?v==="("?v:u:v==="-"||v==="("?"":v)+k,R=(w==="s"?sd[8+Ep/3]:"")+R+(K&&v==="("?")":""),T){for(B=-1,z=_.length;++BV||V>57){R=(V===46?i+_.slice(B+1):_.slice(B))+R,_=_.slice(0,B);break}}}b&&!g&&(_=t(_,1/0));var de=k.length+_.length+R.length,oe=de>1)+k+_+R+oe.slice(de);break;default:_=oe+k+_+R;break}return a(_)}return I.toString=function(){return f+""},I}function s(f,d){var h=c((f=ln(f),f.type="f",f)),v=Math.max(-8,Math.min(8,Math.floor(Cr(d)/3)))*3,p=Math.pow(10,-v),g=sd[8+v/3];return function(y){return h(p*y)+g}}return{format:c,formatPrefix:s}}var Bn,xs,jp;RP({thousands:",",grouping:[3],currency:["$",""]});function RP(e){return Bn=$P(e),xs=Bn.format,jp=Bn.formatPrefix,Bn}function LP(e){return Math.max(0,-Cr(Math.abs(e)))}function BP(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Cr(t)/3)))*3-Cr(Math.abs(e)))}function KP(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Cr(t)-Cr(e))+1}function Tp(e,t,r,n){var i=mu(e,t,r),a;switch(n=ln(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=BP(i,o))&&(n.precision=a),jp(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=KP(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=LP(i))&&(n.precision=a-(n.type==="%")*2);break}}return xs(n)}function Ut(e){var t=e.domain;return e.ticks=function(r){var n=t();return vu(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return Tp(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],u=n[a],l,c,s=10;for(u0;){if(c=pu(o,u,r),c===l)return n[i]=o,n[a]=u,t(n);if(c>0)o=Math.floor(o/c)*c,u=Math.ceil(u/c)*c;else if(c<0)o=Math.ceil(o*c)/c,u=Math.floor(u*c)/c;else break;l=c}return e},e}function Cp(){var e=ys();return e.copy=function(){return bn(e,Cp())},at.apply(e,arguments),Ut(e)}function _p(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,fi),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return _p(e).unknown(t)},e=arguments.length?Array.from(e,fi):[0,1],Ut(r)}function kp(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function UP(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function fd(e){return(t,r)=>-e(-t,r)}function ws(e){const t=e(ld,cd),r=t.domain;let n=10,i,a;function o(){return i=UP(n),a=WP(n),r()[0]<0?(i=fd(i),a=fd(a),e(qP,FP)):e(ld,cd),t}return t.base=function(u){return arguments.length?(n=+u,o()):n},t.domain=function(u){return arguments.length?(r(u),o()):r()},t.ticks=u=>{const l=r();let c=l[0],s=l[l.length-1];const f=s0){for(;d<=h;++d)for(v=1;vs)break;y.push(p)}}else for(;d<=h;++d)for(v=n-1;v>=1;--v)if(p=d>0?v/a(-d):v*a(d),!(ps)break;y.push(p)}y.length*2{if(u==null&&(u=10),l==null&&(l=n===10?"s":","),typeof l!="function"&&(!(n%1)&&(l=ln(l)).precision==null&&(l.trim=!0),l=xs(l)),u===1/0)return l;const c=Math.max(1,n*u/t.ticks().length);return s=>{let f=s/a(Math.round(i(s)));return f*nr(kp(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function Mp(){const e=ws(qi()).domain([1,10]);return e.copy=()=>bn(e,Mp()).base(e.base()),at.apply(e,arguments),e}function dd(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function hd(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Ps(e){var t=1,r=e(dd(t),hd(t));return r.constant=function(n){return arguments.length?e(dd(t=+n),hd(t)):t},Ut(r)}function Dp(){var e=Ps(qi());return e.copy=function(){return bn(e,Dp()).constant(e.constant())},at.apply(e,arguments)}function vd(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function HP(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function YP(e){return e<0?-e*e:e*e}function Os(e){var t=e(Te,Te),r=1;function n(){return r===1?e(Te,Te):r===.5?e(HP,YP):e(vd(r),vd(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},Ut(t)}function As(){var e=Os(qi());return e.copy=function(){return bn(e,As()).exponent(e.exponent())},at.apply(e,arguments),e}function GP(){return As.apply(null,arguments).exponent(.5)}function pd(e){return Math.sign(e)*e*e}function VP(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function Ip(){var e=ys(),t=[0,1],r=!1,n;function i(a){var o=VP(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(pd(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,fi)).map(pd)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return Ip(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},at.apply(i,arguments),Ut(i)}function Np(){var e=[],t=[],r=[],n;function i(){var o=0,u=Math.max(1,t.length);for(r=new Array(u-1);++o0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[c-1],n[c]]},o.unknown=function(l){return arguments.length&&(a=l),o},o.thresholds=function(){return n.slice()},o.copy=function(){return $p().domain([e,t]).range(i).unknown(a)},at.apply(Ut(o),arguments)}function Rp(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[gn(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return Rp().domain(e).range(t).unknown(r)},at.apply(i,arguments)}const Oo=new Date,Ao=new Date;function pe(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),u=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,u)=>{const l=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a0))return l;let c;do l.push(c=new Date(+a)),t(a,u),e(a);while(cpe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,u)=>{if(o>=o)if(u<0)for(;++u<=0;)for(;t(o,-1),!a(o););else for(;--u>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(Oo.setTime(+a),Ao.setTime(+o),e(Oo),e(Ao),Math.floor(r(Oo,Ao))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const hi=pe(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);hi.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?pe(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):hi);hi.range;const gt=1e3,et=gt*60,yt=et*60,St=yt*24,Ss=St*7,md=St*30,So=St*365,nr=pe(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*gt)},(e,t)=>(t-e)/gt,e=>e.getUTCSeconds());nr.range;const Es=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getMinutes());Es.range;const js=pe(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getUTCMinutes());js.range;const Ts=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt-e.getMinutes()*et)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getHours());Ts.range;const Cs=pe(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getUTCHours());Cs.range;const xn=pe(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*et)/St,e=>e.getDate()-1);xn.range;const Fi=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/St,e=>e.getUTCDate()-1);Fi.range;const Lp=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/St,e=>Math.floor(e/St));Lp.range;function pr(e){return pe(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*et)/Ss)}const zi=pr(0),vi=pr(1),XP=pr(2),ZP=pr(3),_r=pr(4),JP=pr(5),QP=pr(6);zi.range;vi.range;XP.range;ZP.range;_r.range;JP.range;QP.range;function mr(e){return pe(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Ss)}const Wi=mr(0),pi=mr(1),eO=mr(2),tO=mr(3),kr=mr(4),rO=mr(5),nO=mr(6);Wi.range;pi.range;eO.range;tO.range;kr.range;rO.range;nO.range;const _s=pe(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());_s.range;const ks=pe(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());ks.range;const Et=pe(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Et.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});Et.range;const jt=pe(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());jt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});jt.range;function Bp(e,t,r,n,i,a){const o=[[nr,1,gt],[nr,5,5*gt],[nr,15,15*gt],[nr,30,30*gt],[a,1,et],[a,5,5*et],[a,15,15*et],[a,30,30*et],[i,1,yt],[i,3,3*yt],[i,6,6*yt],[i,12,12*yt],[n,1,St],[n,2,2*St],[r,1,Ss],[t,1,md],[t,3,3*md],[e,1,So]];function u(c,s,f){const d=sg).right(o,d);if(h===o.length)return e.every(mu(c/So,s/So,f));if(h===0)return hi.every(Math.max(mu(c,s,f),1));const[v,p]=o[d/o[h-1][2]53)return null;"w"in C||(C.w=1),"Z"in C?(Q=jo(Yr(C.y,0,1)),Ne=Q.getUTCDay(),Q=Ne>4||Ne===0?pi.ceil(Q):pi(Q),Q=Fi.offset(Q,(C.V-1)*7),C.y=Q.getUTCFullYear(),C.m=Q.getUTCMonth(),C.d=Q.getUTCDate()+(C.w+6)%7):(Q=Eo(Yr(C.y,0,1)),Ne=Q.getDay(),Q=Ne>4||Ne===0?vi.ceil(Q):vi(Q),Q=xn.offset(Q,(C.V-1)*7),C.y=Q.getFullYear(),C.m=Q.getMonth(),C.d=Q.getDate()+(C.w+6)%7)}else("W"in C||"U"in C)&&("w"in C||(C.w="u"in C?C.u%7:"W"in C?1:0),Ne="Z"in C?jo(Yr(C.y,0,1)).getUTCDay():Eo(Yr(C.y,0,1)).getDay(),C.m=0,C.d="W"in C?(C.w+6)%7+C.W*7-(Ne+5)%7:C.w+C.U*7-(Ne+6)%7);return"Z"in C?(C.H+=C.Z/100|0,C.M+=C.Z%100,jo(C)):Eo(C)}}function j(N,q,W,C){for(var ke=0,Q=q.length,Ne=W.length,$e,Xt;ke=Ne)return-1;if($e=q.charCodeAt(ke++),$e===37){if($e=q.charAt(ke++),Xt=w[$e in gd?q.charAt(ke++):$e],!Xt||(C=Xt(N,W,C))<0)return-1}else if($e!=W.charCodeAt(C++))return-1}return C}function T(N,q,W){var C=c.exec(q.slice(W));return C?(N.p=s.get(C[0].toLowerCase()),W+C[0].length):-1}function I(N,q,W){var C=h.exec(q.slice(W));return C?(N.w=v.get(C[0].toLowerCase()),W+C[0].length):-1}function _(N,q,W){var C=f.exec(q.slice(W));return C?(N.w=d.get(C[0].toLowerCase()),W+C[0].length):-1}function k(N,q,W){var C=y.exec(q.slice(W));return C?(N.m=b.get(C[0].toLowerCase()),W+C[0].length):-1}function R(N,q,W){var C=p.exec(q.slice(W));return C?(N.m=g.get(C[0].toLowerCase()),W+C[0].length):-1}function B(N,q,W){return j(N,t,q,W)}function z(N,q,W){return j(N,r,q,W)}function V(N,q,W){return j(N,n,q,W)}function K(N){return o[N.getDay()]}function de(N){return a[N.getDay()]}function oe(N){return l[N.getMonth()]}function Ie(N){return u[N.getMonth()]}function Ge(N){return i[+(N.getHours()>=12)]}function L(N){return 1+~~(N.getMonth()/3)}function we(N){return o[N.getUTCDay()]}function Vt(N){return a[N.getUTCDay()]}function Ve(N){return l[N.getUTCMonth()]}function Sy(N){return u[N.getUTCMonth()]}function Ey(N){return i[+(N.getUTCHours()>=12)]}function jy(N){return 1+~~(N.getUTCMonth()/3)}return{format:function(N){var q=O(N+="",x);return q.toString=function(){return N},q},parse:function(N){var q=A(N+="",!1);return q.toString=function(){return N},q},utcFormat:function(N){var q=O(N+="",P);return q.toString=function(){return N},q},utcParse:function(N){var q=A(N+="",!0);return q.toString=function(){return N},q}}}var gd={"-":"",_:" ",0:"0"},be=/^\s*\d+/,lO=/^%/,cO=/[\\^$*+?|[\]().{}]/g;function U(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function dO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function hO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function vO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function pO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function mO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function yd(e,t,r){var n=be.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function bd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function gO(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function yO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function bO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function xd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function xO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function wd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function wO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function PO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function OO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function AO(e,t,r){var n=be.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function SO(e,t,r){var n=lO.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function EO(e,t,r){var n=be.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function jO(e,t,r){var n=be.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function Pd(e,t){return U(e.getDate(),t,2)}function TO(e,t){return U(e.getHours(),t,2)}function CO(e,t){return U(e.getHours()%12||12,t,2)}function _O(e,t){return U(1+xn.count(Et(e),e),t,3)}function Kp(e,t){return U(e.getMilliseconds(),t,3)}function kO(e,t){return Kp(e,t)+"000"}function MO(e,t){return U(e.getMonth()+1,t,2)}function DO(e,t){return U(e.getMinutes(),t,2)}function IO(e,t){return U(e.getSeconds(),t,2)}function NO(e){var t=e.getDay();return t===0?7:t}function $O(e,t){return U(zi.count(Et(e)-1,e),t,2)}function qp(e){var t=e.getDay();return t>=4||t===0?_r(e):_r.ceil(e)}function RO(e,t){return e=qp(e),U(_r.count(Et(e),e)+(Et(e).getDay()===4),t,2)}function LO(e){return e.getDay()}function BO(e,t){return U(vi.count(Et(e)-1,e),t,2)}function KO(e,t){return U(e.getFullYear()%100,t,2)}function qO(e,t){return e=qp(e),U(e.getFullYear()%100,t,2)}function FO(e,t){return U(e.getFullYear()%1e4,t,4)}function zO(e,t){var r=e.getDay();return e=r>=4||r===0?_r(e):_r.ceil(e),U(e.getFullYear()%1e4,t,4)}function WO(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+U(t/60|0,"0",2)+U(t%60,"0",2)}function Od(e,t){return U(e.getUTCDate(),t,2)}function UO(e,t){return U(e.getUTCHours(),t,2)}function HO(e,t){return U(e.getUTCHours()%12||12,t,2)}function YO(e,t){return U(1+Fi.count(jt(e),e),t,3)}function Fp(e,t){return U(e.getUTCMilliseconds(),t,3)}function GO(e,t){return Fp(e,t)+"000"}function VO(e,t){return U(e.getUTCMonth()+1,t,2)}function XO(e,t){return U(e.getUTCMinutes(),t,2)}function ZO(e,t){return U(e.getUTCSeconds(),t,2)}function JO(e){var t=e.getUTCDay();return t===0?7:t}function QO(e,t){return U(Wi.count(jt(e)-1,e),t,2)}function zp(e){var t=e.getUTCDay();return t>=4||t===0?kr(e):kr.ceil(e)}function eA(e,t){return e=zp(e),U(kr.count(jt(e),e)+(jt(e).getUTCDay()===4),t,2)}function tA(e){return e.getUTCDay()}function rA(e,t){return U(pi.count(jt(e)-1,e),t,2)}function nA(e,t){return U(e.getUTCFullYear()%100,t,2)}function iA(e,t){return e=zp(e),U(e.getUTCFullYear()%100,t,2)}function aA(e,t){return U(e.getUTCFullYear()%1e4,t,4)}function oA(e,t){var r=e.getUTCDay();return e=r>=4||r===0?kr(e):kr.ceil(e),U(e.getUTCFullYear()%1e4,t,4)}function uA(){return"+0000"}function Ad(){return"%"}function Sd(e){return+e}function Ed(e){return Math.floor(+e/1e3)}var xr,Wp,Up;sA({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function sA(e){return xr=sO(e),Wp=xr.format,xr.parse,Up=xr.utcFormat,xr.utcParse,xr}function lA(e){return new Date(e)}function cA(e){return e instanceof Date?+e:+new Date(+e)}function Ms(e,t,r,n,i,a,o,u,l,c){var s=ys(),f=s.invert,d=s.domain,h=c(".%L"),v=c(":%S"),p=c("%I:%M"),g=c("%I %p"),y=c("%a %d"),b=c("%b %d"),x=c("%B"),P=c("%Y");function w(O){return(l(O)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>J1(e,a/n))},r.copy=function(){return Vp(t).domain(e)},kt.apply(r,arguments)}function Hi(){var e=0,t=.5,r=1,n=1,i,a,o,u,l,c=Te,s,f=!1,d;function h(p){return isNaN(p=+p)?d:(p=.5+((p=+s(p))-a)*(n*pe.chartData,Ns=S([gr],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),$s=(e,t,r,n)=>n?Ns(e):gr(e);function Mr(e){if(Array.isArray(e)&&e.length===2){var[t,r]=e;if(Ye(t)&&Ye(r))return!0}return!1}function jd(e,t,r){return r?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function pA(e,t){if(t&&typeof e!="function"&&Array.isArray(e)&&e.length===2){var[r,n]=e,i,a;if(Ye(r))i=r;else if(typeof r=="function")return;if(Ye(n))a=n;else if(typeof n=="function")return;var o=[i,a];if(Mr(o))return o}}function mA(e,t,r){if(!(!r&&t==null)){if(typeof e=="function"&&t!=null)try{var n=e(t,r);if(Mr(n))return jd(n,t,r)}catch{}if(Array.isArray(e)&&e.length===2){var[i,a]=e,o,u;if(i==="auto")t!=null&&(o=Math.min(...t));else if(D(i))o=i;else if(typeof i=="function")try{t!=null&&(o=i(t==null?void 0:t[0]))}catch{}else if(typeof i=="string"&&mf.test(i)){var l=mf.exec(i);if(l==null||t==null)o=void 0;else{var c=+l[1];o=t[0]-c}}else o=t==null?void 0:t[0];if(a==="auto")t!=null&&(u=Math.max(...t));else if(D(a))u=a;else if(typeof a=="function")try{t!=null&&(u=a(t==null?void 0:t[1]))}catch{}else if(typeof a=="string"&&gf.test(a)){var s=gf.exec(a);if(s==null||t==null)u=void 0;else{var f=+s[1];u=t[1]+f}}else u=t==null?void 0:t[1];var d=[o,u];if(Mr(d))return t==null?d:jd(d,t,r)}}}var $r=1e9,gA={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Ls,ne=!0,rt="[DecimalError] ",sr=rt+"Invalid argument: ",Rs=rt+"Exponent out of range: ",Rr=Math.floor,Qt=Math.pow,yA=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Fe,me=1e7,te=7,Qp=9007199254740991,mi=Rr(Qp/te),M={};M.absoluteValue=M.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};M.comparedTo=M.cmp=function(e){var t,r,n,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};M.decimalPlaces=M.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*te;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};M.dividedBy=M.div=function(e){return Ot(this,new this.constructor(e))};M.dividedToIntegerBy=M.idiv=function(e){var t=this,r=t.constructor;return Z(Ot(t,new r(e),0,1),r.precision)};M.equals=M.eq=function(e){return!this.cmp(e)};M.exponent=function(){return fe(this)};M.greaterThan=M.gt=function(e){return this.cmp(e)>0};M.greaterThanOrEqualTo=M.gte=function(e){return this.cmp(e)>=0};M.isInteger=M.isint=function(){return this.e>this.d.length-2};M.isNegative=M.isneg=function(){return this.s<0};M.isPositive=M.ispos=function(){return this.s>0};M.isZero=function(){return this.s===0};M.lessThan=M.lt=function(e){return this.cmp(e)<0};M.lessThanOrEqualTo=M.lte=function(e){return this.cmp(e)<1};M.logarithm=M.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(Fe))throw Error(rt+"NaN");if(r.s<1)throw Error(rt+(r.s?"NaN":"-Infinity"));return r.eq(Fe)?new n(0):(ne=!1,t=Ot(cn(r,a),cn(e,a),a),ne=!0,Z(t,i))};M.minus=M.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?rm(t,e):em(t,(e.s=-e.s,e))};M.modulo=M.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(rt+"NaN");return r.s?(ne=!1,t=Ot(r,e,0,1).times(e),ne=!0,r.minus(t)):Z(new n(r),i)};M.naturalExponential=M.exp=function(){return tm(this)};M.naturalLogarithm=M.ln=function(){return cn(this)};M.negated=M.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};M.plus=M.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?em(t,e):rm(t,(e.s=-e.s,e))};M.precision=M.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(sr+e);if(t=fe(i)+1,n=i.d.length-1,r=n*te+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};M.squareRoot=M.sqrt=function(){var e,t,r,n,i,a,o,u=this,l=u.constructor;if(u.s<1){if(!u.s)return new l(0);throw Error(rt+"NaN")}for(e=fe(u),ne=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=ct(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Rr((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new l(t)):n=new l(i.toString()),r=l.precision,i=o=r+3;;)if(a=n,n=a.plus(Ot(u,a,o+2)).times(.5),ct(a.d).slice(0,o)===(t=ct(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(Z(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;o+=4}return ne=!0,Z(n,r)};M.times=M.mul=function(e){var t,r,n,i,a,o,u,l,c,s=this,f=s.constructor,d=s.d,h=(e=new f(e)).d;if(!s.s||!e.s)return new f(0);for(e.s*=s.s,r=s.e+e.e,l=d.length,c=h.length,l=0;){for(t=0,i=l+n;i>n;)u=a[i]+h[n]*d[i-n-1]+t,a[i--]=u%me|0,t=u/me|0;a[i]=(a[i]+t)%me|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,ne?Z(e,f.precision):e};M.toDecimalPlaces=M.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(ht(e,0,$r),t===void 0?t=n.rounding:ht(t,0,8),Z(r,e+fe(r)+1,t))};M.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=dr(n,!0):(ht(e,0,$r),t===void 0?t=i.rounding:ht(t,0,8),n=Z(new i(n),e+1,t),r=dr(n,!0,e+1)),r};M.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?dr(i):(ht(e,0,$r),t===void 0?t=a.rounding:ht(t,0,8),n=Z(new a(i),e+fe(i)+1,t),r=dr(n.abs(),!1,e+fe(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};M.toInteger=M.toint=function(){var e=this,t=e.constructor;return Z(new t(e),fe(e)+1,t.rounding)};M.toNumber=function(){return+this};M.toPower=M.pow=function(e){var t,r,n,i,a,o,u=this,l=u.constructor,c=12,s=+(e=new l(e));if(!e.s)return new l(Fe);if(u=new l(u),!u.s){if(e.s<1)throw Error(rt+"Infinity");return u}if(u.eq(Fe))return u;if(n=l.precision,e.eq(Fe))return Z(u,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=u.s,o){if((r=s<0?-s:s)<=Qp){for(i=new l(Fe),t=Math.ceil(n/te+4),ne=!1;r%2&&(i=i.times(u),Cd(i.d,t)),r=Rr(r/2),r!==0;)u=u.times(u),Cd(u.d,t);return ne=!0,e.s<0?new l(Fe).div(i):Z(i,n)}}else if(a<0)throw Error(rt+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,ne=!1,i=e.times(cn(u,n+c)),ne=!0,i=tm(i),i.s=a,i};M.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=fe(i),n=dr(i,r<=a.toExpNeg||r>=a.toExpPos)):(ht(e,1,$r),t===void 0?t=a.rounding:ht(t,0,8),i=Z(new a(i),e,t),r=fe(i),n=dr(i,e<=r||r<=a.toExpNeg,e)),n};M.toSignificantDigits=M.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(ht(e,1,$r),t===void 0?t=n.rounding:ht(t,0,8)),Z(new n(r),e,t)};M.toString=M.valueOf=M.val=M.toJSON=M[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=fe(e),r=e.constructor;return dr(e,t<=r.toExpNeg||t>=r.toExpPos)};function em(e,t){var r,n,i,a,o,u,l,c,s=e.constructor,f=s.precision;if(!e.s||!t.s)return t.s||(t=new s(e)),ne?Z(t,f):t;if(l=e.d,c=t.d,o=e.e,i=t.e,l=l.slice(),a=o-i,a){for(a<0?(n=l,a=-a,u=c.length):(n=c,i=o,u=l.length),o=Math.ceil(f/te),u=o>u?o+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=l.length,a=c.length,u-a<0&&(a=u,n=c,c=l,l=n),r=0;a;)r=(l[--a]=l[a]+c[a]+r)/me|0,l[a]%=me;for(r&&(l.unshift(r),++i),u=l.length;l[--u]==0;)l.pop();return t.d=l,t.e=i,ne?Z(t,f):t}function ht(e,t,r){if(e!==~~e||er)throw Error(sr+e)}function ct(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(u=l=0;ui[u]?1:-1;break}return l}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var u,l,c,s,f,d,h,v,p,g,y,b,x,P,w,O,A,j,T=n.constructor,I=n.s==i.s?1:-1,_=n.d,k=i.d;if(!n.s)return new T(n);if(!i.s)throw Error(rt+"Division by zero");for(l=n.e-i.e,A=k.length,w=_.length,h=new T(I),v=h.d=[],c=0;k[c]==(_[c]||0);)++c;if(k[c]>(_[c]||0)&&--l,a==null?b=a=T.precision:o?b=a+(fe(n)-fe(i))+1:b=a,b<0)return new T(0);if(b=b/te+2|0,c=0,A==1)for(s=0,k=k[0],b++;(c1&&(k=e(k,s),_=e(_,s),A=k.length,w=_.length),P=A,p=_.slice(0,A),g=p.length;g=me/2&&++O;do s=0,u=t(k,p,A,g),u<0?(y=p[0],A!=g&&(y=y*me+(p[1]||0)),s=y/O|0,s>1?(s>=me&&(s=me-1),f=e(k,s),d=f.length,g=p.length,u=t(f,p,d,g),u==1&&(s--,r(f,A16)throw Error(Rs+fe(e));if(!e.s)return new s(Fe);for(ne=!1,u=f,o=new s(.03125);e.abs().gte(.1);)e=e.times(o),c+=5;for(n=Math.log(Qt(2,c))/Math.LN10*2+5|0,u+=n,r=i=a=new s(Fe),s.precision=u;;){if(i=Z(i.times(e),u),r=r.times(++l),o=a.plus(Ot(i,r,u)),ct(o.d).slice(0,u)===ct(a.d).slice(0,u)){for(;c--;)a=Z(a.times(a),u);return s.precision=f,t==null?(ne=!0,Z(a,f)):a}a=o}}function fe(e){for(var t=e.e*te,r=e.d[0];r>=10;r/=10)t++;return t}function To(e,t,r){if(t>e.LN10.sd())throw ne=!0,r&&(e.precision=r),Error(rt+"LN10 precision limit exceeded");return Z(new e(e.LN10),t)}function $t(e){for(var t="";e--;)t+="0";return t}function cn(e,t){var r,n,i,a,o,u,l,c,s,f=1,d=10,h=e,v=h.d,p=h.constructor,g=p.precision;if(h.s<1)throw Error(rt+(h.s?"NaN":"-Infinity"));if(h.eq(Fe))return new p(0);if(t==null?(ne=!1,c=g):c=t,h.eq(10))return t==null&&(ne=!0),To(p,c);if(c+=d,p.precision=c,r=ct(v),n=r.charAt(0),a=fe(h),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)h=h.times(e),r=ct(h.d),n=r.charAt(0),f++;a=fe(h),n>1?(h=new p("0."+r),a++):h=new p(n+"."+r.slice(1))}else return l=To(p,c+2,g).times(a+""),h=cn(new p(n+"."+r.slice(1)),c-d).plus(l),p.precision=g,t==null?(ne=!0,Z(h,g)):h;for(u=o=h=Ot(h.minus(Fe),h.plus(Fe),c),s=Z(h.times(h),c),i=3;;){if(o=Z(o.times(s),c),l=u.plus(Ot(o,new p(i),c)),ct(l.d).slice(0,c)===ct(u.d).slice(0,c))return u=u.times(2),a!==0&&(u=u.plus(To(p,c+2,g).times(a+""))),u=Ot(u,new p(f),c),p.precision=g,t==null?(ne=!0,Z(u,g)):u;u=l,i+=2}}function Td(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Rr(r/te),e.d=[],n=(r+1)%te,r<0&&(n+=te),nmi||e.e<-mi))throw Error(Rs+r)}else e.s=0,e.e=0,e.d=[0];return e}function Z(e,t,r){var n,i,a,o,u,l,c,s,f=e.d;for(o=1,a=f[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=te,i=t,c=f[s=0];else{if(s=Math.ceil((n+1)/te),a=f.length,s>=a)return e;for(c=a=f[s],o=1;a>=10;a/=10)o++;n%=te,i=n-te+o}if(r!==void 0&&(a=Qt(10,o-i-1),u=c/a%10|0,l=t<0||f[s+1]!==void 0||c%a,l=r<4?(u||l)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||l||r==6&&(n>0?i>0?c/Qt(10,o-i):0:f[s-1])%10&1||r==(e.s<0?8:7))),t<1||!f[0])return l?(a=fe(e),f.length=1,t=t-a-1,f[0]=Qt(10,(te-t%te)%te),e.e=Rr(-t/te)||0):(f.length=1,f[0]=e.e=e.s=0),e;if(n==0?(f.length=s,a=1,s--):(f.length=s+1,a=Qt(10,te-n),f[s]=i>0?(c/Qt(10,o-i)%Qt(10,i)|0)*a:0),l)for(;;)if(s==0){(f[0]+=a)==me&&(f[0]=1,++e.e);break}else{if(f[s]+=a,f[s]!=me)break;f[s--]=0,a=1}for(n=f.length;f[--n]===0;)f.pop();if(ne&&(e.e>mi||e.e<-mi))throw Error(Rs+fe(e));return e}function rm(e,t){var r,n,i,a,o,u,l,c,s,f,d=e.constructor,h=d.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new d(e),ne?Z(t,h):t;if(l=e.d,f=t.d,n=t.e,c=e.e,l=l.slice(),o=c-n,o){for(s=o<0,s?(r=l,o=-o,u=f.length):(r=f,n=c,u=l.length),i=Math.max(Math.ceil(h/te),u)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=l.length,u=f.length,s=i0;--i)l[u++]=0;for(i=f.length;i>o;){if(l[--i]0?a=a.charAt(0)+"."+a.slice(1)+$t(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+$t(-i-1)+a,r&&(n=r-o)>0&&(a+=$t(n))):i>=o?(a+=$t(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+$t(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=$t(n))),e.s<0?"-"+a:a}function Cd(e,t){if(e.length>t)return e.length=t,!0}function nm(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(sr+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return Td(o,a.toString())}else if(typeof a!="string")throw Error(sr+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,yA.test(a))Td(o,a);else throw Error(sr+a)}if(i.prototype=M,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=nm,i.config=i.set=bA,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(sr+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(sr+r+": "+n);return this}var Ls=nm(gA);Fe=new Ls(1);const G=Ls;var xA=e=>e,im={},am=e=>e===im,_d=e=>function t(){return arguments.length===0||arguments.length===1&&am(arguments.length<=0?void 0:arguments[0])?t:e(...arguments)},om=(e,t)=>e===1?t:_d(function(){for(var r=arguments.length,n=new Array(r),i=0;io!==im).length;return a>=e?t(...n):om(e-a,_d(function(){for(var o=arguments.length,u=new Array(o),l=0;lam(s)?u.shift():s);return t(...c,...u)}))}),Yi=e=>om(e.length,e),wu=(e,t)=>{for(var r=[],n=e;nArray.isArray(t)?t.map(e):Object.keys(t).map(r=>t[r]).map(e)),PA=function(){for(var t=arguments.length,r=new Array(t),n=0;nl(u),a(...arguments))}},Pu=e=>Array.isArray(e)?e.reverse():e.split("").reverse().join(""),um=e=>{var t=null,r=null;return function(){for(var n=arguments.length,i=new Array(n),a=0;a{var l;return o===((l=t)===null||l===void 0?void 0:l[u])})||(t=i,r=e(...i)),r}};function sm(e){var t;return e===0?t=1:t=Math.floor(new G(e).abs().log(10).toNumber())+1,t}function lm(e,t,r){for(var n=new G(e),i=0,a=[];n.lt(t)&&i<1e5;)a.push(n.toNumber()),n=n.add(r),i++;return a}Yi((e,t,r)=>{var n=+e,i=+t;return n+r*(i-n)});Yi((e,t,r)=>{var n=t-+e;return n=n||1/0,(r-e)/n});Yi((e,t,r)=>{var n=t-+e;return n=n||1/0,Math.max(0,Math.min(1,(r-e)/n))});var cm=e=>{var[t,r]=e,[n,i]=[t,r];return t>r&&([n,i]=[r,t]),[n,i]},fm=(e,t,r)=>{if(e.lte(0))return new G(0);var n=sm(e.toNumber()),i=new G(10).pow(n),a=e.div(i),o=n!==1?.05:.1,u=new G(Math.ceil(a.div(o).toNumber())).add(r).mul(o),l=u.mul(i);return t?new G(l.toNumber()):new G(Math.ceil(l.toNumber()))},OA=(e,t,r)=>{var n=new G(1),i=new G(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new G(10).pow(sm(e)-1),i=new G(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new G(Math.floor(e)))}else e===0?i=new G(Math.floor((t-1)/2)):r||(i=new G(Math.floor(e)));var o=Math.floor((t-1)/2),u=PA(wA(l=>i.add(new G(l-o).mul(n)).toNumber()),wu);return u(0,t)},dm=function(t,r,n,i){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((r-t)/(n-1)))return{step:new G(0),tickMin:new G(0),tickMax:new G(0)};var o=fm(new G(r).sub(t).div(n-1),i,a),u;t<=0&&r>=0?u=new G(0):(u=new G(t).add(r).div(2),u=u.sub(new G(u).mod(o)));var l=Math.ceil(u.sub(t).div(o).toNumber()),c=Math.ceil(new G(r).sub(u).div(o).toNumber()),s=l+c+1;return s>n?dm(t,r,n,i,a+1):(s0?c+(n-s):c,l=r>0?l:l+(n-s)),{step:o,tickMin:u.sub(new G(l).mul(o)),tickMax:u.add(new G(c).mul(o))})};function AA(e){var[t,r]=e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Math.max(n,2),[o,u]=cm([t,r]);if(o===-1/0||u===1/0){var l=u===1/0?[o,...wu(0,n-1).map(()=>1/0)]:[...wu(0,n-1).map(()=>-1/0),u];return t>r?Pu(l):l}if(o===u)return OA(o,n,i);var{step:c,tickMin:s,tickMax:f}=dm(o,u,a,i,0),d=lm(s,f.add(new G(.1).mul(c)),c);return t>r?Pu(d):d}function SA(e,t){var[r,n]=e,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,[a,o]=cm([r,n]);if(a===-1/0||o===1/0)return[r,n];if(a===o)return[a];var u=Math.max(t,2),l=fm(new G(o).sub(a).div(u-1),i,0),c=[...lm(new G(a),new G(o),l),o];return i===!1&&(c=c.map(s=>Math.round(s))),r>n?Pu(c):c}var EA=um(AA),jA=um(SA),hm=e=>e.rootProps.maxBarSize,TA=e=>e.rootProps.barGap,vm=e=>e.rootProps.barCategoryGap,CA=e=>e.rootProps.barSize,wn=e=>e.rootProps.stackOffset,Bs=e=>e.options.chartName,Ks=e=>e.rootProps.syncId,pm=e=>e.rootProps.syncMethod,qs=e=>e.options.eventEmitter,pt={allowDuplicatedCategory:!0,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"category"},Be={allowDataOverflow:!1,allowDuplicatedCategory:!0,radiusAxisId:0,scale:"auto",tick:!0,tickCount:5,type:"number"},Gi=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t},_A={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!1,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:pt.reversed,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:pt.type,unit:void 0},kA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:Be.type,unit:void 0},MA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:pt.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:"number",unit:void 0},DA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:"category",unit:void 0},Fs=(e,t)=>e.polarAxis.angleAxis[t]!=null?e.polarAxis.angleAxis[t]:e.layout.layoutType==="radial"?MA:_A,zs=(e,t)=>e.polarAxis.radiusAxis[t]!=null?e.polarAxis.radiusAxis[t]:e.layout.layoutType==="radial"?DA:kA,Vi=e=>e.polarOptions,Ws=S([Ct,_t,ve],Xv),mm=S([Vi,Ws],(e,t)=>{if(e!=null)return Ce(e.innerRadius,t,0)}),gm=S([Vi,Ws],(e,t)=>{if(e!=null)return Ce(e.outerRadius,t,t*.8)}),IA=e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:r}=e;return[t,r]},ym=S([Vi],IA);S([Fs,ym],Gi);var bm=S([Ws,mm,gm],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});S([zs,bm],Gi);var NA=S([Y,Vi,mm,gm,Ct,_t],(e,t,r,n,i,a)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var{cx:o,cy:u,startAngle:l,endAngle:c}=t;return{cx:Ce(o,i,i/2),cy:Ce(u,a,a/2),innerRadius:r,outerRadius:n,startAngle:l,endAngle:c,clockWise:!1}}}),ue=(e,t)=>t,Pn=(e,t,r)=>r;function kd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function gi(e){for(var t=1;t{var r=e.cartesianAxis.xAxis[t];return r??Re},Le={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:Ou,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,width:Ri},Yt=(e,t)=>{var r=e.cartesianAxis.yAxis[t];return r??Le},BA={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},Us=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??BA},se=(e,t,r)=>{switch(t){case"xAxis":return Mt(e,r);case"yAxis":return Yt(e,r);case"zAxis":return Us(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return zs(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},KA=(e,t,r)=>{switch(t){case"xAxis":return Mt(e,r);case"yAxis":return Yt(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},On=(e,t,r)=>{switch(t){case"xAxis":return Mt(e,r);case"yAxis":return Yt(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return zs(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},xm=e=>e.graphicalItems.countOfBars>0;function Hs(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var Xi=e=>e.graphicalItems.cartesianItems,qA=S([ue,Pn],Hs),Ys=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),An=S([Xi,se,qA],Ys),wm=e=>e.filter(t=>t.stackId===void 0),FA=S([An],wm),Gs=e=>e.map(t=>t.data).filter(Boolean).flat(1),zA=S([An],Gs),Vs=(e,t)=>{var{chartData:r=[],dataStartIndex:n,dataEndIndex:i}=t;return e.length>0?e:r.slice(n,i+1)},Zi=S([zA,$s],Vs),Xs=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:re(i,n)}))):e.map(n=>({value:n})),Ji=S([Zi,se,An],Xs);function Pm(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function yr(e){return e.filter(t=>dt(t)||t instanceof Date).map(Number).filter(t=>We(t)===!1)}function WA(e,t,r){return!r||typeof t!="number"||We(t)?[]:r.length?yr(r.flatMap(n=>{var i=re(e,n.dataKey),a,o;if(Array.isArray(i)?[a,o]=i:a=o=i,!(!Ye(a)||!Ye(o)))return[t-a,t+o]})):[]}var Om=(e,t,r)=>{var n={},i=t.reduce((a,o)=>(o.stackId==null||(a[o.stackId]==null&&(a[o.stackId]=[]),a[o.stackId].push(o)),a),n);return Object.fromEntries(Object.entries(i).map(a=>{var[o,u]=a,l=u.map(c=>c.dataKey);return[o,{stackedData:iw(e,l,r),graphicalItems:u}]}))},Au=S([Zi,An,wn],Om),Am=(e,t,r)=>{var{dataStartIndex:n,dataEndIndex:i}=t;if(r!=="zAxis"){var a=sw(e,n,i);if(!(a!=null&&a[0]===0&&a[1]===0))return a}},UA=S([Au,gr,ue],Am),Sm=(e,t,r,n)=>r.length>0?e.flatMap(i=>r.flatMap(a=>{var o,u,l=(o=a.errorBars)===null||o===void 0?void 0:o.filter(s=>Pm(n,s)),c=re(i,(u=t.dataKey)!==null&&u!==void 0?u:a.dataKey);return{value:c,errorDomain:WA(i,c,l)}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(i=>({value:re(i,t.dataKey),errorDomain:[]})):e.map(i=>({value:i,errorDomain:[]})),HA=S(Zi,se,FA,ue,Sm);function YA(e){var{value:t}=e;if(dt(t)||t instanceof Date)return t}var GA=e=>{var t=e.flatMap(n=>[n.value,n.errorDomain]).flat(1),r=yr(t);if(r.length!==0)return[Math.min(...r),Math.max(...r)]},VA=(e,t,r)=>{var n=e.map(YA).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&Yh(n))?yp(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},Zs=e=>{var t;if(e==null||!("domain"in e))return Ou;if(e.domain!=null)return e.domain;if(e.ticks!=null){if(e.type==="number"){var r=yr(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:Ou},Js=function(){for(var t=arguments.length,r=new Array(t),n=0;ne.referenceElements.dots,Lr=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),XA=S([Em,ue,Pn],Lr),jm=e=>e.referenceElements.areas,ZA=S([jm,ue,Pn],Lr),Tm=e=>e.referenceElements.lines,JA=S([Tm,ue,Pn],Lr),Cm=(e,t)=>{var r=yr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},QA=S(XA,ue,Cm),_m=(e,t)=>{var r=yr(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},eS=S([ZA,ue],_m),km=(e,t)=>{var r=yr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},tS=S(JA,ue,km),rS=S(QA,tS,eS,(e,t,r)=>Js(e,r,t)),Mm=S([se],Zs),Qs=(e,t,r,n,i)=>{var a=pA(t,e.allowDataOverflow);return a??mA(t,Js(r,i,GA(n)),e.allowDataOverflow)},nS=S([se,Mm,UA,HA,rS],Qs),iS=[0,1],el=(e,t,r,n,i,a,o)=>{if(!(e==null||r==null||r.length===0)){var{dataKey:u,type:l}=e,c=Wt(t,a);return c&&u==null?yp(0,r.length):l==="category"?VA(n,e,c):i==="expand"?iS:o}},tl=S([se,Y,Zi,Ji,wn,ue,nS],el),Dm=(e,t,r,n,i)=>{if(e!=null){var{scale:a,type:o}=e;if(a==="auto")return t==="radial"&&i==="radiusAxis"?"band":t==="radial"&&i==="angleAxis"?"linear":o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?"point":o==="category"?"band":"linear";if(typeof a=="string"){var u="scale".concat(vn(a));return u in Jr?u:"point"}}},Br=S([se,Y,xm,Bs,ue],Dm);function aS(e){if(e!=null){if(e in Jr)return Jr[e]();var t="scale".concat(vn(e));if(t in Jr)return Jr[t]()}}function rl(e,t,r,n){if(!(r==null||n==null)){if(typeof e.scale=="function")return e.scale.copy().domain(r).range(n);var i=aS(t);if(i!=null){var a=i.domain(r).range(n);return Qx(a),a}}}var nl=(e,t,r)=>{var n=Zs(t);if(!(r!=="auto"&&r!=="linear")){if(t!=null&&t.tickCount&&Array.isArray(n)&&(n[0]==="auto"||n[1]==="auto")&&Mr(e))return EA(e,t.tickCount,t.allowDecimals);if(t!=null&&t.tickCount&&t.type==="number"&&Mr(e))return jA(e,t.tickCount,t.allowDecimals)}},il=S([tl,On,Br],nl),al=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&Mr(t)&&Array.isArray(r)&&r.length>0){var i=t[0],a=r[0],o=t[1],u=r[r.length-1];return[Math.min(i,a),Math.max(o,u)]}return t},oS=S([se,tl,il,ue],al),uS=S(Ji,se,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(yr(e.map(u=>u.value))).sort((u,l)=>u-l);if(n.length<2)return 1/0;var i=n[n.length-1]-n[0];if(i===0)return 1/0;for(var a=0;an,(e,t,r,n,i)=>{if(!Ye(e))return 0;var a=t==="vertical"?n.height:n.width;if(i==="gap")return e*a/2;if(i==="no-gap"){var o=Ce(r,e*a),u=e*a/2;return u-o-(u-o)/a*o}return 0}),sS=(e,t)=>{var r=Mt(e,t);return r==null||typeof r.padding!="string"?0:Im(e,"xAxis",t,r.padding)},lS=(e,t)=>{var r=Yt(e,t);return r==null||typeof r.padding!="string"?0:Im(e,"yAxis",t,r.padding)},cS=S(Mt,sS,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var{padding:i}=e;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),fS=S(Yt,lS,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var{padding:i}=e;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),dS=S([ve,cS,Bi,Li,(e,t,r)=>r],(e,t,r,n,i)=>{var{padding:a}=n;return i?[a.left,r.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),hS=S([ve,Y,fS,Bi,Li,(e,t,r)=>r],(e,t,r,n,i,a)=>{var{padding:o}=i;return a?[n.height-o.bottom,o.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),Sn=(e,t,r,n)=>{var i;switch(t){case"xAxis":return dS(e,r,n);case"yAxis":return hS(e,r,n);case"zAxis":return(i=Us(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return ym(e);case"radiusAxis":return bm(e,r);default:return}},Nm=S([se,Sn],Gi),Kr=S([se,Br,oS,Nm],rl);S(An,ue,(e,t)=>e.flatMap(r=>{var n;return(n=r.errorBars)!==null&&n!==void 0?n:[]}).filter(r=>Pm(t,r)));function $m(e,t){return e.idt.id?1:0}var Qi=(e,t)=>t,ea=(e,t,r)=>r,vS=S(us,Qi,ea,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort($m)),pS=S(ss,Qi,ea,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort($m)),Rm=(e,t)=>({width:e.width,height:t.height}),mS=(e,t)=>{var r=typeof t.width=="number"?t.width:Ri;return{width:r,height:e.height}},Lm=S(ve,Mt,Rm),gS=(e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}},yS=(e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}},bS=S(_t,ve,vS,Qi,ea,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=Rm(t,u);o==null&&(o=gS(t,n,e));var c=n==="top"&&!i||n==="bottom"&&i;a[u.id]=o-Number(c)*l.height,o+=(c?-1:1)*l.height}),a}),xS=S(Ct,ve,pS,Qi,ea,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=mS(t,u);o==null&&(o=yS(t,n,e));var c=n==="left"&&!i||n==="right"&&i;a[u.id]=o-Number(c)*l.width,o+=(c?-1:1)*l.width}),a}),wS=(e,t)=>{var r=ve(e),n=Mt(e,t);if(n!=null){var i=bS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:r.left,y:0}:{x:r.left,y:a}}},PS=(e,t)=>{var r=ve(e),n=Yt(e,t);if(n!=null){var i=xS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:0,y:r.top}:{x:a,y:r.top}}},Bm=S(ve,Yt,(e,t)=>{var r=typeof t.width=="number"?t.width:Ri;return{width:r,height:e.height}}),Md=(e,t,r)=>{switch(t){case"xAxis":return Lm(e,r).width;case"yAxis":return Bm(e,r).height;default:return}},Km=(e,t,r,n)=>{if(r!=null){var{allowDuplicatedCategory:i,type:a,dataKey:o}=r,u=Wt(e,n),l=t.map(c=>c.value);if(o&&u&&a==="category"&&i&&Yh(l))return l}},ol=S([Y,Ji,se,ue],Km),qm=(e,t,r,n)=>{if(!(r==null||r.dataKey==null)){var{type:i,scale:a}=r,o=Wt(e,n);if(o&&(i==="number"||a!=="auto"))return t.map(u=>u.value)}},ul=S([Y,Ji,On,ue],qm),Dd=S([Y,KA,Br,Kr,ol,ul,Sn,il,ue],(e,t,r,n,i,a,o,u,l)=>{if(t==null)return null;var c=Wt(e,l);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:l,categoricalDomain:a,duplicateDomain:i,isCategorical:c,niceTicks:u,range:o,realScaleType:r,scale:n}}),OS=(e,t,r,n,i,a,o,u,l)=>{if(!(t==null||n==null)){var c=Wt(e,l),{type:s,ticks:f,tickCount:d}=t,h=r==="scaleBand"&&typeof n.bandwidth=="function"?n.bandwidth()/2:2,v=s==="category"&&n.bandwidth?n.bandwidth()/h:0;v=l==="angleAxis"&&a!=null&&a.length>=2?ge(a[0]-a[1])*2*v:v;var p=f||i;if(p){var g=p.map((y,b)=>{var x=o?o.indexOf(y):y;return{index:b,coordinate:n(x)+v,value:y,offset:v}});return g.filter(y=>!We(y.coordinate))}return c&&u?u.map((y,b)=>({coordinate:n(y)+v,value:y,index:b,offset:v})):n.ticks?n.ticks(d).map(y=>({coordinate:n(y)+v,value:y,offset:v})):n.domain().map((y,b)=>({coordinate:n(y)+v,value:o?o[y]:y,index:b,offset:v}))}},Fm=S([Y,On,Br,Kr,il,Sn,ol,ul,ue],OS),AS=(e,t,r,n,i,a,o)=>{if(!(t==null||r==null||n==null||n[0]===n[1])){var u=Wt(e,o),{tickCount:l}=t,c=0;return c=o==="angleAxis"&&(n==null?void 0:n.length)>=2?ge(n[0]-n[1])*2*c:c,u&&a?a.map((s,f)=>({coordinate:r(s)+c,value:s,index:f,offset:c})):r.ticks?r.ticks(l).map(s=>({coordinate:r(s)+c,value:s,offset:c})):r.domain().map((s,f)=>({coordinate:r(s)+c,value:i?i[s]:s,index:f,offset:c}))}},Ft=S([Y,On,Kr,Sn,ol,ul,ue],AS),vt=S(se,Kr,(e,t)=>{if(!(e==null||t==null))return gi(gi({},e),{},{scale:t})}),SS=S([se,Br,tl,Nm],rl);S((e,t,r)=>Us(e,r),SS,(e,t)=>{if(!(e==null||t==null))return gi(gi({},e),{},{scale:t})});var ES=S([Y,us,ss],(e,t,r)=>{switch(e){case"horizontal":return t.some(n=>n.reversed)?"right-to-left":"left-to-right";case"vertical":return r.some(n=>n.reversed)?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}}),zm=e=>e.options.defaultTooltipEventType,Wm=e=>e.options.validateTooltipEventTypes;function Um(e,t,r){if(e==null)return t;var n=e?"axis":"item";return r==null?t:r.includes(n)?n:t}function sl(e,t){var r=zm(e),n=Wm(e);return Um(t,r,n)}function jS(e){return $(t=>sl(t,e))}var Hm=(e,t)=>{var r,n=Number(t);if(!(We(n)||t==null))return n>=0?e==null||(r=e[n])===null||r===void 0?void 0:r.value:void 0},TS=e=>e.tooltip.settings,Rt={active:!1,index:null,dataKey:void 0,coordinate:void 0},CS={itemInteraction:{click:Rt,hover:Rt},axisInteraction:{click:Rt,hover:Rt},keyboardInteraction:Rt,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},Ym=nt({name:"tooltip",initialState:CS,reducers:{addTooltipEntrySettings(e,t){e.tooltipItemPayloads.push(t.payload)},removeTooltipEntrySettings(e,t){var r=Pt(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate,e.keyboardInteraction.dataKey=t.payload.activeDataKey}}}),{addTooltipEntrySettings:_S,removeTooltipEntrySettings:kS,setTooltipSettingsState:MS,setActiveMouseOverItemIndex:Gm,mouseLeaveItem:DS,mouseLeaveChart:Vm,setActiveClickItemIndex:IS,setMouseOverAxisIndex:Xm,setMouseClickAxisIndex:NS,setSyncInteraction:Su,setKeyboardInteraction:Eu}=Ym.actions,$S=Ym.reducer;function Id(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Kn(e){for(var t=1;t{if(t==null)return Rt;var i=KS(e,t,r);if(i==null)return Rt;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var a=e.settings.active===!0;if(qS(i)){if(a)return Kn(Kn({},i),{},{active:!0})}else if(n!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:n};return Kn(Kn({},Rt),{},{coordinate:i.coordinate})},ll=(e,t)=>{var r=e==null?void 0:e.index;if(r==null)return null;var n=Number(r);if(!Ye(n))return r;var i=0,a=1/0;return t.length>0&&(a=t.length-1),String(Math.max(i,Math.min(n,a)))},Jm=(e,t,r,n,i,a,o,u)=>{if(!(a==null||u==null)){var l=o[0],c=l==null?void 0:u(l.positions,a);if(c!=null)return c;var s=i==null?void 0:i[Number(a)];if(s)switch(r){case"horizontal":return{x:s.coordinate,y:(n.top+t)/2};default:return{x:(n.left+e)/2,y:s.coordinate}}}},Qm=(e,t,r,n)=>{if(t==="axis")return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i;return r==="hover"?i=e.itemInteraction.hover.dataKey:i=e.itemInteraction.click.dataKey,i==null&&n!=null?[e.tooltipItemPayloads[0]]:e.tooltipItemPayloads.filter(a=>{var o;return((o=a.settings)===null||o===void 0?void 0:o.dataKey)===i})},En=e=>e.options.tooltipPayloadSearcher,qr=e=>e.tooltip;function Nd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $d(e){for(var t=1;t{if(!(t==null||a==null)){var{chartData:u,computedData:l,dataStartIndex:c,dataEndIndex:s}=r,f=[];return e.reduce((d,h)=>{var v,{dataDefinedOnItem:p,settings:g}=h,y=HS(p,u),b=US(y,c,s),x=(v=g==null?void 0:g.dataKey)!==null&&v!==void 0?v:n==null?void 0:n.dataKey,P=g==null?void 0:g.nameKey,w;if(n!=null&&n.dataKey&&Array.isArray(b)&&!Array.isArray(b[0])&&o==="axis"?w=Gh(b,n.dataKey,i):w=a(b,t,l,P),Array.isArray(w))w.forEach(A=>{var j=$d($d({},g),{},{name:A.name,unit:A.unit,color:void 0,fill:void 0});d.push(yf({tooltipEntrySettings:j,dataKey:A.dataKey,payload:A.payload,value:re(A.payload,A.dataKey),name:A.name}))});else{var O;d.push(yf({tooltipEntrySettings:g,dataKey:x,payload:w,value:re(w,x),name:(O=re(w,P))!==null&&O!==void 0?O:g==null?void 0:g.name}))}return d},f)}},xe=e=>{var t=Y(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},Fr=e=>e.tooltip.settings.axisId,Ae=e=>{var t=xe(e),r=Fr(e);return On(e,t,r)},cl=S([Ae,Y,xm,Bs,xe],Dm),YS=S([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),GS=S([xe,Fr],Hs),ta=S([YS,Ae,GS],Ys),VS=S([ta],Gs),br=S([VS,gr],Vs),fl=S([br,Ae,ta],Xs),XS=S([Ae],Zs),ZS=S([br,ta,wn],Om),JS=S([ZS,gr,xe],Am),QS=S([ta],wm),eE=S([br,Ae,QS,xe],Sm),tE=S([Em,xe,Fr],Lr),rE=S([tE,xe],Cm),nE=S([jm,xe,Fr],Lr),iE=S([nE,xe],_m),aE=S([Tm,xe,Fr],Lr),oE=S([aE,xe],km),uE=S([rE,oE,iE],Js),sE=S([Ae,XS,JS,eE,uE],Qs),tg=S([Ae,Y,br,fl,wn,xe,sE],el),lE=S([tg,Ae,cl],nl),cE=S([Ae,tg,lE,xe],al),rg=e=>{var t=xe(e),r=Fr(e),n=!1;return Sn(e,t,r,n)},ng=S([Ae,rg],Gi),ig=S([Ae,cl,cE,ng],rl),fE=S([Y,fl,Ae,xe],Km),dE=S([Y,fl,Ae,xe],qm),hE=(e,t,r,n,i,a,o,u)=>{if(t){var{type:l}=t,c=Wt(e,u);if(n){var s=r==="scaleBand"&&n.bandwidth?n.bandwidth()/2:2,f=l==="category"&&n.bandwidth?n.bandwidth()/s:0;return f=u==="angleAxis"&&i!=null&&(i==null?void 0:i.length)>=2?ge(i[0]-i[1])*2*f:f,c&&o?o.map((d,h)=>({coordinate:n(d)+f,value:d,index:h,offset:f})):n.domain().map((d,h)=>({coordinate:n(d)+f,value:a?a[d]:d,index:h,offset:f}))}}},Dt=S([Y,Ae,cl,ig,rg,fE,dE,xe],hE),dl=S([zm,Wm,TS],(e,t,r)=>Um(r.shared,e,t)),ag=e=>e.tooltip.settings.trigger,hl=e=>e.tooltip.settings.defaultIndex,ra=S([qr,dl,ag,hl],Zm),zt=S([ra,br],ll),og=S([Dt,zt],Hm),ug=S([ra],e=>{if(e)return e.dataKey}),sg=S([qr,dl,ag,hl],Qm),vE=S([Ct,_t,Y,ve,Dt,hl,sg,En],Jm),pE=S([ra,vE],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),mE=S([ra],e=>e.active),gE=S([sg,zt,gr,Ae,og,En,dl],eg),yE=S([gE],e=>{if(e!=null){var t=e.map(r=>r.payload).filter(r=>r!=null);return Array.from(new Set(t))}});function Rd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ld(e){for(var t=1;t$(Ae),OE=()=>{var e=PE(),t=$(Dt),r=$(ig);return nn(Ld(Ld({},e),{},{scale:r}),t)},AE=()=>$(Bs),vl=(e,t)=>t,lg=(e,t,r)=>r,pl=(e,t,r,n)=>n,SE=S(Dt,e=>_i(e,t=>t.coordinate)),ml=S([qr,vl,lg,pl],Zm),cg=S([ml,br],ll),EE=(e,t,r)=>{if(t!=null){var n=qr(e);return t==="axis"?r==="hover"?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:r==="hover"?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},fg=S([qr,vl,lg,pl],Qm),yi=S([Ct,_t,Y,ve,Dt,pl,fg,En],Jm),jE=S([ml,yi],(e,t)=>{var r;return(r=e.coordinate)!==null&&r!==void 0?r:t}),dg=S(Dt,cg,Hm),TE=S([fg,cg,gr,Ae,dg,En,vl],eg),CE=S([ml],e=>({isActive:e.active,activeIndex:e.index})),_E=(e,t,r,n,i,a,o,u)=>{if(!(!e||!t||!n||!i||!a)){var l=lw(e.chartX,e.chartY,t,r,u);if(l){var c=fw(l,t),s=Zx(c,o,a,n,i),f=cw(t,a,s,l);return{activeIndex:String(s),activeCoordinate:f}}}};function ju(){return ju=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.useContext(hg),Co={exports:{}},Kd;function RE(){return Kd||(Kd=1,function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(r=!1));function i(l,c,s){this.fn=l,this.context=c,this.once=s||!1}function a(l,c,s,f,d){if(typeof s!="function")throw new TypeError("The listener must be a function");var h=new i(s,f||l,d),v=r?r+c:c;return l._events[v]?l._events[v].fn?l._events[v]=[l._events[v],h]:l._events[v].push(h):(l._events[v]=h,l._eventsCount++),l}function o(l,c){--l._eventsCount===0?l._events=new n:delete l._events[c]}function u(){this._events=new n,this._eventsCount=0}u.prototype.eventNames=function(){var c=[],s,f;if(this._eventsCount===0)return c;for(f in s=this._events)t.call(s,f)&&c.push(r?f.slice(1):f);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(s)):c},u.prototype.listeners=function(c){var s=r?r+c:c,f=this._events[s];if(!f)return[];if(f.fn)return[f.fn];for(var d=0,h=f.length,v=new Array(h);d{e.eventEmitter==null&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),qE=vg.reducer,{createEventEmitter:FE}=vg.actions;function zE(e){return e.tooltip.syncInteraction}var WE={chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},pg=nt({name:"chartData",initialState:WE,reducers:{setChartData(e,t){if(e.chartData=t.payload,t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var{startIndex:r,endIndex:n}=t.payload;r!=null&&(e.dataStartIndex=r),n!=null&&(e.dataEndIndex=n)}}}),{setChartData:Fd,setDataStartEndIndexes:UE,setComputedData:zD}=pg.actions,HE=pg.reducer,mg=()=>{};function YE(){var e=$(Ks),t=$(qs),r=ae(),n=$(pm),i=$(Dt),a=Ki(),o=ls(),u=$(l=>l.rootProps.className);m.useEffect(()=>{if(e==null)return mg;var l=(c,s,f)=>{if(t!==f&&e===c){if(n==="index"){r(s);return}if(i!=null){var d;if(typeof n=="function"){var h={activeTooltipIndex:s.payload.index==null?void 0:Number(s.payload.index),isTooltipActive:s.payload.active,activeIndex:s.payload.index==null?void 0:Number(s.payload.index),activeLabel:s.payload.label,activeDataKey:s.payload.dataKey,activeCoordinate:s.payload.coordinate},v=n(i,h);d=i[v]}else n==="value"&&(d=i.find(O=>String(O.value)===s.payload.label));var{coordinate:p}=s.payload;if(d==null||s.payload.active===!1||p==null||o==null){r(Su({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0}));return}var{x:g,y}=p,b=Math.min(g,o.x+o.width),x=Math.min(y,o.y+o.height),P={x:a==="horizontal"?d.coordinate:b,y:a==="horizontal"?x:d.coordinate},w=Su({active:s.payload.active,coordinate:P,dataKey:s.payload.dataKey,index:String(d.index),label:s.payload.label});r(w)}}};return fn.on(Tu,l),()=>{fn.off(Tu,l)}},[u,r,t,e,n,i,a,o])}function GE(){var e=$(Ks),t=$(qs),r=ae();m.useEffect(()=>{if(e==null)return mg;var n=(i,a,o)=>{t!==o&&e===i&&r(UE(a))};return fn.on(qd,n),()=>{fn.off(qd,n)}},[r,t,e])}function VE(){var e=ae();m.useEffect(()=>{e(FE())},[e]),YE(),GE()}function XE(e,t,r,n,i,a){var o=$(d=>EE(d,e,t)),u=$(qs),l=$(Ks),c=$(pm),s=$(zE),f=s==null?void 0:s.active;m.useEffect(()=>{if(!f&&l!=null&&u!=null){var d=Su({active:a,coordinate:r,dataKey:o,index:i,label:typeof n=="number"?String(n):n});fn.emit(Tu,l,d,u)}},[f,r,o,i,n,u,l,c,a])}function zd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Wd(e){for(var t=1;t{w(MS({shared:g,trigger:y,axisId:P,active:r,defaultIndex:O}))},[w,g,y,P,r,O]);var A=ls(),j=cp(),T=jS(g),{activeIndex:I,isActive:_}=$(Ve=>CE(Ve,T,y,O)),k=$(Ve=>TE(Ve,T,y,O)),R=$(Ve=>dg(Ve,T,y,O)),B=$(Ve=>jE(Ve,T,y,O)),z=k,V=$E(),K=r??_,[de,oe]=qb([z,K]),Ie=T==="axis"?R:void 0;XE(T,y,B,Ie,I,K);var Ge=x??V;if(Ge==null)return null;var L=z??Ud;K||(L=Ud),u&&L.length&&(L=hb(z.filter(Ve=>Ve.value!=null&&(Ve.hide!==!0||t.includeHidden)),s,ej));var we=L.length>0,Vt=m.createElement(Dw,{allowEscapeViewBox:n,animationDuration:i,animationEasing:a,isAnimationActive:l,active:K,coordinate:B,hasPayload:we,offset:c,position:f,reverseDirection:d,useTranslate3d:h,viewBox:A,wrapperStyle:v,lastBoundingBox:de,innerRef:oe,hasPortalFromProps:!!x},tj(o,Wd(Wd({},t),{},{payload:L,label:Ie,active:K,coordinate:B,accessibilityLayer:j})));return m.createElement(m.Fragment,null,ky.createPortal(Vt,Ge),K&&m.createElement(NE,{cursor:p,tooltipEventType:T,coordinate:B,payload:z,index:I}))}var _o={},ko={},Hd;function nj(){return Hd||(Hd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=0,i={}){typeof i!="object"&&(i={});let a=null,o=null,u=null,l=0,c=null,s;const{leading:f=!1,trailing:d=!0,maxWait:h}=i,v="maxWait"in i,p=v?Math.max(Number(h)||0,n):0,g=A=>(a!==null&&(s=r.apply(o,a)),a=o=null,l=A,s),y=A=>(l=A,c=setTimeout(w,n),f&&a!==null?g(A):s),b=A=>(c=null,d&&a!==null?g(A):s),x=A=>{if(u===null)return!0;const j=A-u,T=j>=n||j<0,I=v&&A-l>=p;return T||I},P=A=>{const j=u===null?0:A-u,T=n-j,I=p-(A-l);return v?Math.min(T,I):T},w=()=>{const A=Date.now();if(x(A))return b(A);c=setTimeout(w,P(A))},O=function(...A){const j=Date.now(),T=x(j);if(a=A,o=this,u=j,T){if(c===null)return y(j);if(v)return clearTimeout(c),c=setTimeout(w,n),g(j)}return c===null&&(c=setTimeout(w,n)),s};return O.cancel=()=>{c!==null&&clearTimeout(c),l=0,u=a=o=c=null},O.flush=()=>c===null?s:b(Date.now()),O}e.debounce=t}(ko)),ko}var Yd;function ij(){return Yd||(Yd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=nj();function r(n,i=0,a={}){const{leading:o=!0,trailing:u=!0}=a;return t.debounce(n,i,{leading:o,maxWait:i,trailing:u})}e.throttle=r}(_o)),_o}var Mo,Gd;function aj(){return Gd||(Gd=1,Mo=ij().throttle),Mo}var oj=aj();const uj=Tt(oj);var Qr=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;a{var{aspect:r,initialDimension:n={width:-1,height:-1},width:i="100%",height:a="100%",minWidth:o=0,minHeight:u,maxHeight:l,children:c,debounce:s=0,id:f,className:d,onResize:h,style:v={}}=e,p=m.useRef(null),g=m.useRef();g.current=h,m.useImperativeHandle(t,()=>p.current);var[y,b]=m.useState({containerWidth:n.width,containerHeight:n.height}),x=m.useCallback((w,O)=>{b(A=>{var j=Math.round(w),T=Math.round(O);return A.containerWidth===j&&A.containerHeight===T?A:{containerWidth:j,containerHeight:T}})},[]);m.useEffect(()=>{var w=T=>{var I,{width:_,height:k}=T[0].contentRect;x(_,k),(I=g.current)===null||I===void 0||I.call(g,_,k)};s>0&&(w=uj(w,s,{trailing:!0,leading:!1}));var O=new ResizeObserver(w),{width:A,height:j}=p.current.getBoundingClientRect();return x(A,j),O.observe(p.current),()=>{O.disconnect()}},[x,s]);var P=m.useMemo(()=>{var{containerWidth:w,containerHeight:O}=y;if(w<0||O<0)return null;Qr(er(i)||er(a),`The width(%s) and height(%s) are both fixed numbers, + maybe you don't need to use a ResponsiveContainer.`,i,a),Qr(!r||r>0,"The aspect(%s) must be greater than zero.",r);var A=er(i)?w:i,j=er(a)?O:a;return r&&r>0&&(A?j=A/r:j&&(A=j*r),l&&j>l&&(j=l)),Qr(A>0||j>0,`The width(%s) and height(%s) of chart should be greater than 0, + please check the style of container, or the props width(%s) and height(%s), + or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the + height and width.`,A,j,i,a,o,u,r),m.Children.map(c,T=>m.cloneElement(T,{width:A,height:j,style:Do({width:A,height:j},T.props.style)}))},[r,c,a,l,u,o,y,i]);return m.createElement("div",{id:f?"".concat(f):void 0,className:H("recharts-responsive-container",d),style:Do(Do({},v),{},{width:i,height:a,minWidth:o,minHeight:u,maxHeight:l}),ref:p},m.createElement("div",{style:{width:0,height:0,overflow:"visible"}},P))}),jn=e=>null;jn.displayName="Cell";function Xd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Cu(e){for(var t=1;t{t[r]||delete t[r]}),t}var en=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||vr.isSsr)return{width:0,height:0};var n=mj(r),i=JSON.stringify({text:t,copyStyle:n});if(wr.widthCache[i])return wr.widthCache[i];try{var a=document.getElementById(Zd);a||(a=document.createElement("span"),a.setAttribute("id",Zd),a.setAttribute("aria-hidden","true"),document.body.appendChild(a));var o=Cu(Cu({},pj),n);Object.assign(a.style,o),a.textContent="".concat(t);var u=a.getBoundingClientRect(),l={width:u.width,height:u.height};return wr.widthCache[i]=l,++wr.cacheCount>vj&&(wr.cacheCount=0,wr.widthCache={}),l}catch{return{width:0,height:0}}},Jd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,Qd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,gj=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,yj=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,gg={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},bj=Object.keys(gg),Pr="NaN";function xj(e,t){return e*gg[t]}class Me{static parse(t){var r,[,n,i]=(r=yj.exec(t))!==null&&r!==void 0?r:[];return new Me(parseFloat(n),i??"")}constructor(t,r){this.num=t,this.unit=r,this.num=t,this.unit=r,We(t)&&(this.unit=""),r!==""&&!gj.test(r)&&(this.num=NaN,this.unit=""),bj.includes(r)&&(this.num=xj(t,r),this.unit="px")}add(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num+t.num,this.unit)}subtract(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num-t.num,this.unit)}multiply(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num*t.num,this.unit||t.unit)}divide(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num/t.num,this.unit||t.unit)}toString(){return"".concat(this.num).concat(this.unit)}isNaN(){return We(this.num)}}function yg(e){if(e.includes(Pr))return Pr;for(var t=e;t.includes("*")||t.includes("/");){var r,[,n,i,a]=(r=Jd.exec(t))!==null&&r!==void 0?r:[],o=Me.parse(n??""),u=Me.parse(a??""),l=i==="*"?o.multiply(u):o.divide(u);if(l.isNaN())return Pr;t=t.replace(Jd,l.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,[,s,f,d]=(c=Qd.exec(t))!==null&&c!==void 0?c:[],h=Me.parse(s??""),v=Me.parse(d??""),p=f==="+"?h.add(v):h.subtract(v);if(p.isNaN())return Pr;t=t.replace(Qd,p.toString())}return t}var eh=/\(([^()]*)\)/;function wj(e){for(var t=e,r;(r=eh.exec(t))!=null;){var[,n]=r;t=t.replace(eh,yg(n))}return t}function Pj(e){var t=e.replace(/\s+/g,"");return t=wj(t),t=yg(t),t}function Oj(e){try{return Pj(e)}catch{return Pr}}function Io(e){var t=Oj(e.slice(5,-1));return t===Pr?"":t}var Aj=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],Sj=["dx","dy","angle","className","breakAll"];function _u(){return _u=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:t,breakAll:r,style:n}=e;try{var i=[];J(t)||(r?i=t.toString().split(""):i=t.toString().split(bg));var a=i.map(u=>({word:u,width:en(u,n).width})),o=r?0:en(" ",n).width;return{wordsWithComputedWidth:a,spaceWidth:o}}catch{return null}},jj=(e,t,r,n,i)=>{var{maxLines:a,children:o,style:u,breakAll:l}=e,c=D(a),s=o,f=function(){var _=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return _.reduce((k,R)=>{var{word:B,width:z}=R,V=k[k.length-1];if(V&&(n==null||i||V.width+z+rI.reduce((_,k)=>_.width>k.width?_:k);if(!c||i)return d;var v=d.length>a||h(d).width>Number(n);if(!v)return d;for(var p="…",g=I=>{var _=s.slice(0,I),k=xg({breakAll:l,style:u,children:_+p}).wordsWithComputedWidth,R=f(k),B=R.length>a||h(R).width>Number(n);return[B,R]},y=0,b=s.length-1,x=0,P;y<=b&&x<=s.length-1;){var w=Math.floor((y+b)/2),O=w-1,[A,j]=g(O),[T]=g(w);if(!A&&!T&&(y=w+1),A&&T&&(b=w-1),!A&&T){P=j;break}x++}return P||d},rh=e=>{var t=J(e)?[]:e.toString().split(bg);return[{words:t}]},Tj=e=>{var{width:t,scaleToFit:r,children:n,style:i,breakAll:a,maxLines:o}=e;if((t||r)&&!vr.isSsr){var u,l,c=xg({breakAll:a,children:n,style:i});if(c){var{wordsWithComputedWidth:s,spaceWidth:f}=c;u=s,l=f}else return rh(n);return jj({breakAll:a,children:n,maxLines:o,style:i},u,l,t,r)}return rh(n)},nh="#808080",na=m.forwardRef((e,t)=>{var{x:r=0,y:n=0,lineHeight:i="1em",capHeight:a="0.71em",scaleToFit:o=!1,textAnchor:u="start",verticalAnchor:l="end",fill:c=nh}=e,s=th(e,Aj),f=m.useMemo(()=>Tj({breakAll:s.breakAll,children:s.children,maxLines:s.maxLines,scaleToFit:o,style:s.style,width:s.width}),[s.breakAll,s.children,s.maxLines,o,s.style,s.width]),{dx:d,dy:h,angle:v,className:p,breakAll:g}=s,y=th(s,Sj);if(!dt(r)||!dt(n))return null;var b=r+(D(d)?d:0),x=n+(D(h)?h:0),P;switch(l){case"start":P=Io("calc(".concat(a,")"));break;case"middle":P=Io("calc(".concat((f.length-1)/2," * -").concat(i," + (").concat(a," / 2))"));break;default:P=Io("calc(".concat(f.length-1," * -").concat(i,")"));break}var w=[];if(o){var O=f[0].width,{width:A}=s;w.push("scale(".concat(D(A)?A/O:1,")"))}return v&&w.push("rotate(".concat(v,", ").concat(b,", ").concat(x,")")),w.length&&(y.transform=w.join(" ")),m.createElement("text",_u({},F(y,!0),{ref:t,x:b,y:x,className:H("recharts-text",p),textAnchor:u,fill:c.includes("url")?nh:c}),f.map((j,T)=>{var I=j.words.join(g?"":" ");return m.createElement("tspan",{x:b,dy:T===0?P:i,key:"".concat(I,"-").concat(T)},I)}))});na.displayName="Text";var Cj=["offset"],_j=["labelRef"];function ih(e,t){if(e==null)return{};var r,n,i=kj(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{value:t,formatter:r}=e,n=J(e.children)?t:e.children;return typeof r=="function"?r(n):n},xl=e=>e!=null&&typeof e=="function",$j=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},Rj=(e,t,r)=>{var{position:n,viewBox:i,offset:a,className:o}=e,{cx:u,cy:l,innerRadius:c,outerRadius:s,startAngle:f,endAngle:d,clockWise:h}=i,v=(c+s)/2,p=$j(f,d),g=p>=0?1:-1,y,b;n==="insideStart"?(y=f+g*a,b=h):n==="insideEnd"?(y=d-g*a,b=!h):n==="end"&&(y=d+g*a,b=h),b=p<=0?b:!b;var x=ce(u,l,v,y),P=ce(u,l,v,y+(b?1:-1)*359),w="M".concat(x.x,",").concat(x.y,` + A`).concat(v,",").concat(v,",0,1,").concat(b?0:1,`, + `).concat(P.x,",").concat(P.y),O=J(e.id)?lr("recharts-radial-line-"):e.id;return m.createElement("text",mt({},r,{dominantBaseline:"central",className:H("recharts-radial-bar-label",o)}),m.createElement("defs",null,m.createElement("path",{id:O,d:w})),m.createElement("textPath",{xlinkHref:"#".concat(O)},t))},Lj=e=>{var{viewBox:t,offset:r,position:n}=e,{cx:i,cy:a,innerRadius:o,outerRadius:u,startAngle:l,endAngle:c}=t,s=(l+c)/2;if(n==="outside"){var{x:f,y:d}=ce(i,a,u+r,s);return{x:f,y:d,textAnchor:f>=i?"start":"end",verticalAnchor:"middle"}}if(n==="center")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"middle"};if(n==="centerTop")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"start"};if(n==="centerBottom")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"end"};var h=(o+u)/2,{x:v,y:p}=ce(i,a,h,s);return{x:v,y:p,textAnchor:"middle",verticalAnchor:"middle"}},Bj=(e,t)=>{var{parentViewBox:r,offset:n,position:i}=e,{x:a,y:o,width:u,height:l}=t,c=l>=0?1:-1,s=c*n,f=c>0?"end":"start",d=c>0?"start":"end",h=u>=0?1:-1,v=h*n,p=h>0?"end":"start",g=h>0?"start":"end";if(i==="top"){var y={x:a+u/2,y:o-c*n,textAnchor:"middle",verticalAnchor:f};return le(le({},y),r?{height:Math.max(o-r.y,0),width:u}:{})}if(i==="bottom"){var b={x:a+u/2,y:o+l+s,textAnchor:"middle",verticalAnchor:d};return le(le({},b),r?{height:Math.max(r.y+r.height-(o+l),0),width:u}:{})}if(i==="left"){var x={x:a-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"};return le(le({},x),r?{width:Math.max(x.x-r.x,0),height:l}:{})}if(i==="right"){var P={x:a+u+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"};return le(le({},P),r?{width:Math.max(r.x+r.width-P.x,0),height:l}:{})}var w=r?{width:u,height:l}:{};return i==="insideLeft"?le({x:a+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"},w):i==="insideRight"?le({x:a+u-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"},w):i==="insideTop"?le({x:a+u/2,y:o+s,textAnchor:"middle",verticalAnchor:d},w):i==="insideBottom"?le({x:a+u/2,y:o+l-s,textAnchor:"middle",verticalAnchor:f},w):i==="insideTopLeft"?le({x:a+v,y:o+s,textAnchor:g,verticalAnchor:d},w):i==="insideTopRight"?le({x:a+u-v,y:o+s,textAnchor:p,verticalAnchor:d},w):i==="insideBottomLeft"?le({x:a+v,y:o+l-s,textAnchor:g,verticalAnchor:f},w):i==="insideBottomRight"?le({x:a+u-v,y:o+l-s,textAnchor:p,verticalAnchor:f},w):i&&typeof i=="object"&&(D(i.x)||er(i.x))&&(D(i.y)||er(i.y))?le({x:a+Ce(i.x,u),y:o+Ce(i.y,l),textAnchor:"end",verticalAnchor:"end"},w):le({x:a+u/2,y:o+l/2,textAnchor:"middle",verticalAnchor:"middle"},w)},Kj=e=>"cx"in e&&D(e.cx);function qe(e){var{offset:t=5}=e,r=ih(e,Cj),n=le({offset:t},r),{viewBox:i,position:a,value:o,children:u,content:l,className:c="",textBreakAll:s,labelRef:f}=n,d=ls(),h=i||d;if(!h||J(o)&&J(u)&&!m.isValidElement(l)&&typeof l!="function")return null;if(m.isValidElement(l)){var{labelRef:v}=n,p=ih(n,_j);return m.cloneElement(l,p)}var g;if(typeof l=="function"){if(g=m.createElement(l,n),m.isValidElement(g))return g}else g=Nj(n);var y=Kj(h),b=F(n,!0);if(y&&(a==="insideStart"||a==="insideEnd"||a==="end"))return Rj(n,g,b);var x=y?Lj(n):Bj(n,h);return m.createElement(na,mt({ref:f,className:H("recharts-label",c)},b,x,{breakAll:s}),g)}qe.displayName="Label";var wg=e=>{var{cx:t,cy:r,angle:n,startAngle:i,endAngle:a,r:o,radius:u,innerRadius:l,outerRadius:c,x:s,y:f,top:d,left:h,width:v,height:p,clockWise:g,labelViewBox:y}=e;if(y)return y;if(D(v)&&D(p)){if(D(s)&&D(f))return{x:s,y:f,width:v,height:p};if(D(d)&&D(h))return{x:d,y:h,width:v,height:p}}if(D(s)&&D(f))return{x:s,y:f,width:0,height:0};if(D(t)&&D(r))return{cx:t,cy:r,startAngle:i||n||0,endAngle:a||n||0,innerRadius:l||0,outerRadius:c||u||o||0,clockWise:g};if(e.viewBox)return e.viewBox},qj=(e,t,r)=>{if(!e)return null;var n={viewBox:t,labelRef:r};return e===!0?m.createElement(qe,mt({key:"label-implicit"},n)):dt(e)?m.createElement(qe,mt({key:"label-implicit",value:e},n)):m.isValidElement(e)?e.type===qe?m.cloneElement(e,le({key:"label-implicit"},n)):m.createElement(qe,mt({key:"label-implicit",content:e},n)):xl(e)?m.createElement(qe,mt({key:"label-implicit",content:e},n)):e&&typeof e=="object"?m.createElement(qe,mt({},e,{key:"label-implicit"},n)):null},Fj=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var{children:i,labelRef:a}=t,o=wg(t),u=pn(i,qe).map((c,s)=>m.cloneElement(c,{viewBox:r||o,key:"label-".concat(s)}));if(!n)return u;var l=qj(t.label,r||o,a);return[l,...u]};qe.parseViewBox=wg;qe.renderCallByParent=Fj;var No={},$o={},oh;function zj(){return oh||(oh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r[r.length-1]}e.last=t}($o)),$o}var Ro={},uh;function Wj(){return uh||(uh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Array.isArray(r)?r:Array.from(r)}e.toArray=t}(Ro)),Ro}var sh;function Uj(){return sh||(sh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=zj(),r=Wj(),n=Xu();function i(a){if(n.isArrayLike(a))return t.last(r.toArray(a))}e.last=i}(No)),No}var Lo,lh;function Hj(){return lh||(lh=1,Lo=Uj().last),Lo}var Yj=Hj();const Gj=Tt(Yj);var Vj=["valueAccessor"],Xj=["data","dataKey","clockWise","id","textBreakAll"];function bi(){return bi=Object.assign?Object.assign.bind():function(e){for(var t=1;tArray.isArray(e.value)?Gj(e.value):e.value;function Bt(e){var{valueAccessor:t=tT}=e,r=dh(e,Vj),{data:n,dataKey:i,clockWise:a,id:o,textBreakAll:u}=r,l=dh(r,Xj);return!n||!n.length?null:m.createElement(ye,{className:"recharts-label-list"},n.map((c,s)=>{var f=J(i)?t(c,s):re(c&&c.payload,i),d=J(o)?{}:{id:"".concat(o,"-").concat(s)};return m.createElement(qe,bi({},F(c,!0),l,d,{parentViewBox:c.parentViewBox,value:f,textBreakAll:u,viewBox:qe.parseViewBox(J(a)?c:fh(fh({},c),{},{clockWise:a})),key:"label-".concat(s),index:s}))}))}Bt.displayName="LabelList";function rT(e,t){return e?e===!0?m.createElement(Bt,{key:"labelList-implicit",data:t}):m.isValidElement(e)||xl(e)?m.createElement(Bt,{key:"labelList-implicit",data:t,content:e}):typeof e=="object"?m.createElement(Bt,bi({data:t},e,{key:"labelList-implicit"})):null:null}function nT(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var{children:n}=e,i=pn(n,Bt).map((o,u)=>m.cloneElement(o,{data:t,key:"labelList-".concat(u)}));if(!r)return i;var a=rT(e.label,t);return[a,...i]}Bt.renderCallByParent=nT;function ku(){return ku=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{cx:t,cy:r,r:n,className:i}=e,a=H("recharts-dot",i);return t===+t&&r===+r&&n===+n?m.createElement("circle",ku({},F(e,!1),Hu(e),{className:a,cx:t,cy:r,r:n})):null},Og=e=>e.graphicalItems.polarItems,iT=S([ue,Pn],Hs),wl=S([Og,se,iT],Ys),aT=S([wl],Gs),Pl=S([aT,Ns],Vs),oT=S([Pl,se,wl],Xs),uT=S([Pl,se,wl],(e,t,r)=>r.length>0?e.flatMap(n=>r.flatMap(i=>{var a,o=re(n,(a=t.dataKey)!==null&&a!==void 0?a:i.dataKey);return{value:o,errorDomain:[]}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey),errorDomain:[]})):e.map(n=>({value:n,errorDomain:[]}))),hh=()=>{},sT=S([se,Mm,hh,uT,hh],Qs),Ag=S([se,Y,Pl,oT,wn,ue,sT],el),lT=S([Ag,se,Br],nl);S([se,Ag,lT,ue],al);var cT={radiusAxis:{},angleAxis:{}},Sg=nt({name:"polarAxis",initialState:cT,reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),{addRadiusAxis:WD,removeRadiusAxis:UD,addAngleAxis:HD,removeAngleAxis:YD}=Sg.actions,fT=Sg.reducer;function vh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ph(e){for(var t=1;tt,pT=[],Al=(e,t,r)=>(r==null?void 0:r.length)===0?pT:r,Eg=S([Ns,Ol,Al],(e,t,r)=>{var{chartData:n}=e,i;if((t==null?void 0:t.data)!=null&&t.data.length>0?i=t.data:i=n,(!i||!i.length)&&r!=null&&(i=r.map(a=>ph(ph({},t.presentationProps),a.props))),i!=null)return i}),mT=S([Eg,Ol,Al],(e,t,r)=>{if(e!=null)return e.map((n,i)=>{var a,o=re(n,t.nameKey,t.name),u;return r!=null&&(a=r[i])!==null&&a!==void 0&&(a=a.props)!==null&&a!==void 0&&a.fill?u=r[i].props.fill:typeof n=="object"&&n!=null&&"fill"in n?u=n.fill:u=t.fill,{value:Ir(o,t.dataKey),color:u,payload:n,type:t.legendType}})}),gT=S([Og,Ol],(e,t)=>{if(e.some(r=>r.type==="pie"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),yT=S([Eg,gT,Al,ve],(e,t,r,n)=>{if(!(t==null||e==null))return lC({offset:n,pieSettings:t,displayedData:e,cells:r})}),bT={countOfBars:0,cartesianItems:[],polarItems:[]},jg=nt({name:"graphicalItems",initialState:bT,reducers:{addBar(e){e.countOfBars+=1},removeBar(e){e.countOfBars-=1},addCartesianGraphicalItem(e,t){e.cartesianItems.push(t.payload)},replaceCartesianGraphicalItem(e,t){var{prev:r,next:n}=t.payload,i=Pt(e).cartesianItems.indexOf(r);i>-1&&(e.cartesianItems[i]=n)},removeCartesianGraphicalItem(e,t){var r=Pt(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},addPolarGraphicalItem(e,t){e.polarItems.push(t.payload)},removePolarGraphicalItem(e,t){var r=Pt(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)}}}),{addBar:xT,removeBar:wT,addCartesianGraphicalItem:PT,replaceCartesianGraphicalItem:OT,removeCartesianGraphicalItem:AT,addPolarGraphicalItem:ST,removePolarGraphicalItem:ET}=jg.actions,jT=jg.reducer;function mh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function gh(e){for(var t=1;t{var n=gh(gh({},e),{},{stackId:Qv(e.stackId)});r.current===null?t(PT(n)):r.current!==n&&t(OT({prev:r.current,next:n})),r.current=n},[t,e]),m.useEffect(()=>()=>{r.current&&(t(AT(r.current)),r.current=null)},[t]),null}function MT(e){var t=ae();return m.useEffect(()=>(t(ST(e)),()=>{t(ET(e))}),[t,e]),null}var Bo={},yh;function DT(){return yh||(yh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var i;if(typeof r!="object"||r==null)return!1;if(Object.getPrototypeOf(r)===null)return!0;if(Object.prototype.toString.call(r)!=="[object Object]"){const a=r[Symbol.toStringTag];return a==null||!((i=Object.getOwnPropertyDescriptor(r,Symbol.toStringTag))!=null&&i.writable)?!1:r.toString()===`[object ${a}]`}let n=r;for(;Object.getPrototypeOf(n)!==null;)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(r)===n}e.isPlainObject=t}(Bo)),Bo}var Ko,bh;function IT(){return bh||(bh=1,Ko=DT().isPlainObject),Ko}var NT=IT();const $T=Tt(NT);function xi(){return xi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=r-n,o;return o="M ".concat(e,",").concat(t),o+="L ".concat(e+r,",").concat(t),o+="L ".concat(e+r-a/2,",").concat(t+i),o+="L ".concat(e+r-a/2-n,",").concat(t+i),o+="L ".concat(e,",").concat(t," Z"),o},RT={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},LT=e=>{var t=it(e,RT),r=m.useRef(),[n,i]=m.useState(-1);m.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var g=r.current.getTotalLength();g&&i(g)}catch{}},[]);var{x:a,y:o,upperWidth:u,lowerWidth:l,height:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isUpdateAnimationActive:v}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||c!==+c||u===0&&l===0||c===0)return null;var p=H("recharts-trapezoid",s);return v?m.createElement(qt,{canBegin:n>0,from:{upperWidth:0,lowerWidth:0,height:c,x:a,y:o},to:{upperWidth:u,lowerWidth:l,height:c,x:a,y:o},duration:d,animationEasing:f,isActive:v},g=>{var{upperWidth:y,lowerWidth:b,height:x,x:P,y:w}=g;return m.createElement(qt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,easing:f},m.createElement("path",xi({},F(t,!0),{className:p,d:xh(P,w,y,b,x),ref:r})))}):m.createElement("g",null,m.createElement("path",xi({},F(t,!0),{className:p,d:xh(a,o,u,l,c)})))},BT=["option","shapeType","propTransformer","activeClassName","isActive"];function KT(e,t){if(e==null)return{};var r,n,i=qT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(Gm({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}},El=e=>{var t=ae();return(r,n)=>i=>{e==null||e(r,n,i),t(DS())}},jl=(e,t)=>{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(IS({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}};function Tl(e){var{fn:t,args:r}=e,n=ae(),i=_e();return m.useEffect(()=>{if(!i){var a=t(r);return n(_S(a)),()=>{n(kS(a))}}},[t,r,n,i]),null}var Cg=()=>{};function _g(e){var{legendPayload:t}=e,r=ae(),n=_e();return m.useEffect(()=>n?Cg:(r(sp(t)),()=>{r(lp(t))}),[r,n,t]),null}function GT(e){var{legendPayload:t}=e,r=ae(),n=$(Y);return m.useEffect(()=>n!=="centric"&&n!=="radial"?Cg:(r(sp(t)),()=>{r(lp(t))}),[r,n,t]),null}function Cl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"animation-",r=m.useRef(lr(t)),n=m.useRef(e);return n.current!==e&&(r.current=lr(t),n.current=e),r.current}var VT=["onMouseEnter","onClick","onMouseLeave"];function XT(e,t){if(e==null)return{};var r,n,i=ZT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;nF(e,!1),[e]),r=m.useMemo(()=>pn(e.children,jn),[e.children]),n=m.useMemo(()=>({name:e.name,nameKey:e.nameKey,tooltipType:e.tooltipType,data:e.data,dataKey:e.dataKey,cx:e.cx,cy:e.cy,startAngle:e.startAngle,endAngle:e.endAngle,minAngle:e.minAngle,paddingAngle:e.paddingAngle,innerRadius:e.innerRadius,outerRadius:e.outerRadius,cornerRadius:e.cornerRadius,legendType:e.legendType,fill:e.fill,presentationProps:t}),[e.cornerRadius,e.cx,e.cy,e.data,e.dataKey,e.endAngle,e.innerRadius,e.minAngle,e.name,e.nameKey,e.outerRadius,e.paddingAngle,e.startAngle,e.tooltipType,e.legendType,e.fill,t]),i=$(a=>mT(a,n,r));return m.createElement(GT,{legendPayload:i})}function tC(e){var{dataKey:t,nameKey:r,sectors:n,stroke:i,strokeWidth:a,fill:o,name:u,hide:l,tooltipType:c}=e;return{dataDefinedOnItem:n==null?void 0:n.map(s=>s.tooltipPayload),positions:n==null?void 0:n.map(s=>s.tooltipPosition),settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:r,name:Ir(u,t),hide:l,type:c,color:o,unit:""}}}var rC=(e,t)=>e>t?"start":etypeof t=="function"?t(e):Ce(t,r,r*.8),iC=(e,t,r)=>{var{top:n,left:i,width:a,height:o}=t,u=Xv(a,o),l=i+Ce(e.cx,a,a/2),c=n+Ce(e.cy,o,o/2),s=Ce(e.innerRadius,u,0),f=nC(r,e.outerRadius,u),d=e.maxRadius||Math.sqrt(a*a+o*o)/2;return{cx:l,cy:c,innerRadius:s,outerRadius:f,maxRadius:d}},aC=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},oC=(e,t)=>{if(m.isValidElement(e))return m.cloneElement(e,t);if(typeof e=="function")return e(t);var r=H("recharts-pie-label-line",typeof e!="boolean"?e.className:"");return m.createElement(cs,hr({},t,{type:"linear",className:r}))},uC=(e,t,r)=>{if(m.isValidElement(e))return m.cloneElement(e,t);var n=r;if(typeof e=="function"&&(n=e(t),m.isValidElement(n)))return n;var i=H("recharts-pie-label-text",typeof e!="boolean"&&typeof e!="function"?e.className:"");return m.createElement(na,hr({},t,{alignmentBaseline:"middle",className:i}),n)};function sC(e){var{sectors:t,props:r,showLabels:n}=e,{label:i,labelLine:a,dataKey:o}=r;if(!n||!i||!t)return null;var u=F(r,!1),l=F(i,!1),c=F(a,!1),s=typeof i=="object"&&"offsetRadius"in i&&i.offsetRadius||20,f=t.map((d,h)=>{var v=(d.startAngle+d.endAngle)/2,p=ce(d.cx,d.cy,d.outerRadius+s,v),g=ie(ie(ie(ie({},u),d),{},{stroke:"none"},l),{},{index:h,textAnchor:rC(p.x,d.cx)},p),y=ie(ie(ie(ie({},u),d),{},{fill:"none",stroke:d.fill},c),{},{index:h,points:[ce(d.cx,d.cy,d.outerRadius,v),p],key:"line"});return m.createElement(ye,{key:"label-".concat(d.startAngle,"-").concat(d.endAngle,"-").concat(d.midAngle,"-").concat(h)},a&&oC(a,y),uC(i,g,re(d,o)))});return m.createElement(ye,{className:"recharts-pie-labels"},f)}function kg(e){var{sectors:t,activeShape:r,inactiveShape:n,allOtherPieProps:i,showLabels:a}=e,o=$(zt),{onMouseEnter:u,onClick:l,onMouseLeave:c}=i,s=XT(i,VT),f=Sl(u,i.dataKey),d=El(c),h=jl(l,i.dataKey);return t==null?null:m.createElement(m.Fragment,null,t.map((v,p)=>{if((v==null?void 0:v.startAngle)===0&&(v==null?void 0:v.endAngle)===0&&t.length!==1)return null;var g=r&&String(p)===o,y=o?n:null,b=g?r:y,x=ie(ie({},v),{},{stroke:v.stroke,tabIndex:-1,[tp]:p,[rp]:i.dataKey});return m.createElement(ye,hr({tabIndex:-1,className:"recharts-pie-sector"},Ei(s,v,p),{onMouseEnter:f(v,p),onMouseLeave:d(v,p),onClick:h(v,p),key:"sector-".concat(v==null?void 0:v.startAngle,"-").concat(v==null?void 0:v.endAngle,"-").concat(v.midAngle,"-").concat(p)}),m.createElement(Tg,hr({option:b,isActive:g,shapeType:"sector"},x)))}),m.createElement(sC,{sectors:t,props:i,showLabels:a}))}function lC(e){var t,{pieSettings:r,displayedData:n,cells:i,offset:a}=e,{cornerRadius:o,startAngle:u,endAngle:l,dataKey:c,nameKey:s,tooltipType:f}=r,d=Math.abs(r.minAngle),h=aC(u,l),v=Math.abs(h),p=n.length<=1?0:(t=r.paddingAngle)!==null&&t!==void 0?t:0,g=n.filter(O=>re(O,c,0)!==0).length,y=(v>=360?g:g-1)*p,b=v-g*d-y,x=n.reduce((O,A)=>{var j=re(A,c,0);return O+(D(j)?j:0)},0),P;if(x>0){var w;P=n.map((O,A)=>{var j=re(O,c,0),T=re(O,s,A),I=iC(r,a,O),_=(D(j)?j:0)/x,k,R=ie(ie({},O),i&&i[A]&&i[A].props);A?k=w.endAngle+ge(h)*p*(j!==0?1:0):k=u;var B=k+ge(h)*((j!==0?d:0)+_*b),z=(k+B)/2,V=(I.innerRadius+I.outerRadius)/2,K=[{name:T,value:j,payload:R,dataKey:c,type:f}],de=ce(I.cx,I.cy,V,z);return w=ie(ie(ie(ie({},r.presentationProps),{},{percent:_,cornerRadius:o,name:T,tooltipPayload:K,midAngle:z,middleRadius:V,tooltipPosition:de},R),I),{},{value:re(O,c),startAngle:k,endAngle:B,payload:R,paddingAngle:ge(h)*p}),w})}return P}function cC(e){var{props:t,previousSectorsRef:r}=e,{sectors:n,isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:u,activeShape:l,inactiveShape:c,onAnimationStart:s,onAnimationEnd:f}=t,d=Cl(t,"recharts-pie-"),h=r.current,[v,p]=m.useState(!0),g=m.useCallback(()=>{typeof f=="function"&&f(),p(!1)},[f]),y=m.useCallback(()=>{typeof s=="function"&&s(),p(!0)},[s]);return m.createElement(qt,{begin:a,duration:o,isActive:i,easing:u,from:{t:0},to:{t:1},onAnimationStart:y,onAnimationEnd:g,key:d},b=>{var{t:x}=b,P=[],w=n&&n[0],O=w.startAngle;return n.forEach((A,j)=>{var T=h&&h[j],I=j>0?Kt(A,"paddingAngle",0):0;if(T){var _=Ke(T.endAngle-T.startAngle,A.endAngle-A.startAngle),k=ie(ie({},A),{},{startAngle:O+I,endAngle:O+_(x)+I});P.push(k),O=k.endAngle}else{var{endAngle:R,startAngle:B}=A,z=Ke(0,R-B),V=z(x),K=ie(ie({},A),{},{startAngle:O+I,endAngle:O+V+I});P.push(K),O=K.endAngle}}),r.current=P,m.createElement(ye,null,m.createElement(kg,{sectors:P,activeShape:l,inactiveShape:c,allOtherPieProps:t,showLabels:!v}))})}function fC(e){var{sectors:t,isAnimationActive:r,activeShape:n,inactiveShape:i}=e,a=m.useRef(null),o=a.current;return r&&t&&t.length&&(!o||o!==t)?m.createElement(cC,{props:e,previousSectorsRef:a}):m.createElement(kg,{sectors:t,activeShape:n,inactiveShape:i,allOtherPieProps:e,showLabels:!0})}function dC(e){var{hide:t,className:r,rootTabIndex:n}=e,i=H("recharts-pie",r);return t?null:m.createElement(ye,{tabIndex:n,className:i},m.createElement(fC,e))}var Mg={animationBegin:400,animationDuration:1500,animationEasing:"ease",cx:"50%",cy:"50%",dataKey:"value",endAngle:360,fill:"#808080",hide:!1,innerRadius:0,isAnimationActive:!vr.isSsr,labelLine:!0,legendType:"rect",minAngle:0,nameKey:"name",outerRadius:"80%",paddingAngle:0,rootTabIndex:0,startAngle:0,stroke:"#fff"};function hC(e){var t=it(e,Mg),r=m.useMemo(()=>pn(e.children,jn),[e.children]),n=F(t,!1),i=m.useMemo(()=>({name:t.name,nameKey:t.nameKey,tooltipType:t.tooltipType,data:t.data,dataKey:t.dataKey,cx:t.cx,cy:t.cy,startAngle:t.startAngle,endAngle:t.endAngle,minAngle:t.minAngle,paddingAngle:t.paddingAngle,innerRadius:t.innerRadius,outerRadius:t.outerRadius,cornerRadius:t.cornerRadius,legendType:t.legendType,fill:t.fill,presentationProps:n}),[t.cornerRadius,t.cx,t.cy,t.data,t.dataKey,t.endAngle,t.innerRadius,t.minAngle,t.name,t.nameKey,t.outerRadius,t.paddingAngle,t.startAngle,t.tooltipType,t.legendType,t.fill,n]),a=$(o=>yT(o,i,r));return m.createElement(m.Fragment,null,m.createElement(Tl,{fn:tC,args:ie(ie({},t),{},{sectors:a})}),m.createElement(dC,hr({},t,{sectors:a})))}class _l extends m.PureComponent{constructor(){super(...arguments),ia(this,"id",lr("recharts-pie-"))}render(){return m.createElement(m.Fragment,null,m.createElement(MT,{data:this.props.data,dataKey:this.props.dataKey,hide:this.props.hide,angleAxisId:0,radiusAxisId:0,stackId:void 0,barSize:void 0,type:"pie"}),m.createElement(eC,this.props),m.createElement(hC,this.props),this.props.children)}}ia(_l,"displayName","Pie");ia(_l,"defaultProps",Mg);var vC=S([ve],e=>{if(e)return{top:e.top,bottom:e.bottom,left:e.left,right:e.right}}),pC=S([vC,Ct,_t],(e,t,r)=>{if(!(!e||t==null||r==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}}),mC=e=>{var t=_e();return $(r=>vt(r,"xAxis",e,t))},gC=e=>{var t=_e();return $(r=>vt(r,"yAxis",e,t))},kl=()=>$(pC),yC=()=>$(yE);function Ah(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Sh(e){for(var t=1;t{var{point:t,childIndex:r,mainColor:n,activeDot:i,dataKey:a}=e;if(i===!1||t.x==null||t.y==null)return null;var o=Sh(Sh({index:r,dataKey:a,cx:t.x,cy:t.y,r:4,fill:n??"none",strokeWidth:2,stroke:"#fff",payload:t.payload,value:t.value},F(i,!1)),Hu(i)),u;return m.isValidElement(i)?u=m.cloneElement(i,o):typeof i=="function"?u=i(o):u=m.createElement(Pg,o),m.createElement(ye,{className:"recharts-active-dot"},u)};function OC(e){var{points:t,mainColor:r,activeDot:n,itemDataKey:i}=e,a=$(zt),o=yC();if(t==null||o==null)return null;var u=t.find(l=>o.includes(l.payload));return J(u)?null:PC({point:u,childIndex:Number(a),mainColor:r,dataKey:i,activeDot:n})}var AC=()=>{var e=ae();return m.useEffect(()=>(e(xT()),()=>{e(wT())})),null},SC=["children"];function EC(e,t){if(e==null)return{};var r,n,i=jC(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{},Dg=m.createContext({addErrorBar:Eh,removeErrorBar:Eh}),TC={data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0},Ig=m.createContext(TC);function Ng(e){var{children:t}=e,r=EC(e,SC);return m.createElement(Ig.Provider,{value:r},t)}var CC=()=>m.useContext(Ig),$g=e=>{var{children:t,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,data:o,stackId:u,hide:l,type:c,barSize:s}=e,[f,d]=m.useState([]),h=m.useCallback(g=>{d(y=>[...y,g])},[d]),v=m.useCallback(g=>{d(y=>y.filter(b=>b!==g))},[d]),p=_e();return m.createElement(Dg.Provider,{value:{addErrorBar:h,removeErrorBar:v}},m.createElement(kT,{type:c,data:o,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,errorBars:f,stackId:u,hide:l,barSize:s,isPanorama:p}),t)};function _C(e){var{addErrorBar:t,removeErrorBar:r}=m.useContext(Dg);return m.useEffect(()=>(t(e),()=>{r(e)}),[t,r,e]),null}var kC=["direction","width","dataKey","isAnimationActive","animationBegin","animationDuration","animationEasing"];function Rg(e,t,r){return(t=MC(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function MC(e){var t=DC(e,"string");return typeof t=="symbol"?t:t+""}function DC(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function dn(){return dn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{x,y:P,value:w,errorVal:O}=f(b,n,t);if(!O)return null;var A=[],j,T;if(Array.isArray(O)?[j,T]=O:j=T=O,t==="x"){var{scale:I}=p,_=P+v,k=_+r,R=_-r,B=I(w-j),z=I(w+T);A.push({x1:z,y1:k,x2:z,y2:R}),A.push({x1:B,y1:_,x2:z,y2:_}),A.push({x1:B,y1:k,x2:B,y2:R})}else if(t==="y"){var{scale:V}=g,K=x+v,de=K-r,oe=K+r,Ie=V(w-j),Ge=V(w+T);A.push({x1:de,y1:Ge,x2:oe,y2:Ge}),A.push({x1:K,y1:Ie,x2:K,y2:Ge}),A.push({x1:de,y1:Ie,x2:oe,y2:Ie})}var L="".concat(x+v,"px ").concat(P+v,"px");return m.createElement(ye,dn({className:"recharts-errorBar",key:"bar-".concat(A.map(we=>"".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2)))},c),A.map(we=>{var Vt=i?{transformOrigin:"".concat(we.x1-5,"px")}:void 0;return m.createElement(qt,{from:{transform:"scaleY(0)",transformOrigin:L},to:{transform:"scaleY(1)",transformOrigin:L},begin:a,easing:u,isActive:i,duration:o,key:"line-".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2),style:{transformOrigin:L}},m.createElement("line",dn({},we,{style:Vt})))}))});return m.createElement(ye,{className:"recharts-errorBars"},y)}var Lg=m.createContext(void 0);function RC(e){var t=m.useContext(Lg);return e??t??"x"}function Bg(e){var{direction:t,children:r}=e;return m.createElement(Lg.Provider,{value:t},r)}var Kg={stroke:"black",strokeWidth:1.5,width:5,offset:0,isAnimationActive:!0,animationBegin:0,animationDuration:400,animationEasing:"ease-in-out"};function LC(e){var t=RC(e.direction),{width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o}=it(e,Kg);return m.createElement(m.Fragment,null,m.createElement(_C,{dataKey:e.dataKey,direction:t}),m.createElement($C,dn({},e,{direction:t,width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o})))}class qg extends m.Component{render(){return m.createElement(LC,this.props)}}Rg(qg,"defaultProps",Kg);Rg(qg,"displayName","ErrorBar");var BC="Invariant failed";function KC(e,t){throw new Error(BC)}var qC=["x","y"];function Mu(){return Mu=Object.assign?Object.assign.bind():function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:0;return(n,i)=>{if(D(t))return t;var a=D(n)||J(n);return a?t(n,i):(a||KC(),r)}};function Ml(e,t){var r,n,i=$(c=>Mt(c,e)),a=$(c=>Yt(c,t)),o=(r=i==null?void 0:i.allowDataOverflow)!==null&&r!==void 0?r:Re.allowDataOverflow,u=(n=a==null?void 0:a.allowDataOverflow)!==null&&n!==void 0?n:Le.allowDataOverflow,l=o||u;return{needClip:l,needClipX:o,needClipY:u}}function zg(e){var{xAxisId:t,yAxisId:r,clipPathId:n}=e,i=kl(),{needClipX:a,needClipY:o,needClip:u}=Ml(t,r);if(!u)return null;var{x:l,y:c,width:s,height:f}=i;return m.createElement("clipPath",{id:"clipPath-".concat(n)},m.createElement("rect",{x:a?l:l-s/2,y:o?c:c-f/2,width:a?s:s*2,height:o?f:f*2}))}var VC=["onMouseEnter","onMouseLeave","onClick"],XC=["value","background","tooltipPosition"],ZC=["onMouseEnter","onClick","onMouseLeave"];function hn(){return hn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:r,fill:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Ir(r,t),payload:e}]};function r_(e){var{dataKey:t,stroke:r,strokeWidth:n,fill:i,name:a,hide:o,unit:u}=e;return{dataDefinedOnItem:void 0,positions:void 0,settings:{stroke:r,strokeWidth:n,fill:i,dataKey:t,nameKey:void 0,name:Ir(a,t),hide:o,type:e.tooltipType,color:e.fill,unit:u}}}function n_(e){var t=$(zt),{data:r,dataKey:n,background:i,allOtherBarProps:a}=e,{onMouseEnter:o,onMouseLeave:u,onClick:l}=a,c=Du(a,VC),s=Sl(o,n),f=El(u),d=jl(l,n);if(!i||r==null)return null;var h=F(i,!1);return m.createElement(m.Fragment,null,r.map((v,p)=>{var{value:g,background:y,tooltipPosition:b}=v,x=Du(v,XC);if(!y)return null;var P=s(v,p),w=f(v,p),O=d(v,p),A=Ee(Ee(Ee(Ee(Ee({option:i,isActive:String(p)===t},x),{},{fill:"#eee"},y),h),Ei(c,v,p)),{},{onMouseEnter:P,onMouseLeave:w,onClick:O,dataKey:n,index:p,className:"recharts-bar-background-rectangle"});return m.createElement(Fg,hn({key:"background-bar-".concat(p)},A))}))}function Wg(e){var{data:t,props:r,showLabels:n}=e,i=F(r,!1),{shape:a,dataKey:o,activeBar:u}=r,l=$(zt),c=$(ug),{onMouseEnter:s,onClick:f,onMouseLeave:d}=r,h=Du(r,ZC),v=Sl(s,o),p=El(d),g=jl(f,o);return t?m.createElement(m.Fragment,null,t.map((y,b)=>{var x=u&&String(b)===l&&(c==null||o===c),P=x?u:a,w=Ee(Ee(Ee({},i),y),{},{isActive:x,option:P,index:b,dataKey:o});return m.createElement(ye,hn({className:"recharts-bar-rectangle"},Ei(h,y,b),{onMouseEnter:v(y,b),onMouseLeave:p(y,b),onClick:g(y,b),key:"rectangle-".concat(y==null?void 0:y.x,"-").concat(y==null?void 0:y.y,"-").concat(y==null?void 0:y.value,"-").concat(b)}),m.createElement(Fg,w))}),n&&Bt.renderCallByParent(r,t)):null}function i_(e){var{props:t,previousRectanglesRef:r}=e,{data:n,layout:i,isAnimationActive:a,animationBegin:o,animationDuration:u,animationEasing:l,onAnimationEnd:c,onAnimationStart:s}=t,f=r.current,d=Cl(t,"recharts-bar-"),[h,v]=m.useState(!1),p=m.useCallback(()=>{typeof c=="function"&&c(),v(!1)},[c]),g=m.useCallback(()=>{typeof s=="function"&&s(),v(!0)},[s]);return m.createElement(qt,{begin:o,duration:u,isActive:a,easing:l,from:{t:0},to:{t:1},onAnimationEnd:p,onAnimationStart:g,key:d},y=>{var{t:b}=y,x=b===1?n:n.map((P,w)=>{var O=f&&f[w];if(O){var A=Ke(O.x,P.x),j=Ke(O.y,P.y),T=Ke(O.width,P.width),I=Ke(O.height,P.height);return Ee(Ee({},P),{},{x:A(b),y:j(b),width:T(b),height:I(b)})}if(i==="horizontal"){var _=Ke(0,P.height),k=_(b);return Ee(Ee({},P),{},{y:P.y+P.height-k,height:k})}var R=Ke(0,P.width),B=R(b);return Ee(Ee({},P),{},{width:B})});return b>0&&(r.current=x),m.createElement(ye,null,m.createElement(Wg,{props:t,data:x,showLabels:!h}))})}function a_(e){var{data:t,isAnimationActive:r}=e,n=m.useRef(null);return r&&t&&t.length&&(n.current==null||n.current!==t)?m.createElement(i_,{previousRectanglesRef:n,props:e}):m.createElement(Wg,{props:e,data:t,showLabels:!0})}var Ug=0,o_=(e,t)=>{var r=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:r,errorVal:re(e,t)}};class u_ extends m.PureComponent{constructor(){super(...arguments),aa(this,"id",lr("recharts-bar-"))}render(){var{hide:t,data:r,dataKey:n,className:i,xAxisId:a,yAxisId:o,needClip:u,background:l,id:c,layout:s}=this.props;if(t)return null;var f=H("recharts-bar",i),d=J(c)?this.id:c;return m.createElement(ye,{className:f},u&&m.createElement("defs",null,m.createElement(zg,{clipPathId:d,xAxisId:a,yAxisId:o})),m.createElement(ye,{className:"recharts-bar-rectangles",clipPath:u?"url(#clipPath-".concat(d,")"):null},m.createElement(n_,{data:r,dataKey:n,background:l,allOtherBarProps:this.props}),m.createElement(a_,this.props)),m.createElement(Bg,{direction:s==="horizontal"?"y":"x"},this.props.children))}}var Hg={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",hide:!1,isAnimationActive:!vr.isSsr,legendType:"rect",minPointSize:Ug,xAxisId:0,yAxisId:0};function s_(e){var{xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s}=it(e,Hg),{needClip:f}=Ml(t,r),d=Ki(),h=_e(),v=m.useMemo(()=>({barSize:e.barSize,data:void 0,dataKey:e.dataKey,maxBarSize:e.maxBarSize,minPointSize:a,stackId:Qv(e.stackId)}),[e.barSize,e.dataKey,e.maxBarSize,a,e.stackId]),p=pn(e.children,jn),g=$(x=>$_(x,t,r,h,v,p));if(d!=="vertical"&&d!=="horizontal")return null;var y,b=g==null?void 0:g[0];return b==null||b.height==null||b.width==null?y=0:y=d==="vertical"?b.height/2:b.width/2,m.createElement(Ng,{xAxisId:t,yAxisId:r,data:g,dataPointFormatter:o_,errorBarOffset:y},m.createElement(u_,hn({},e,{layout:d,needClip:f,data:g,xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s})))}function l_(e){var{layout:t,barSettings:{dataKey:r,minPointSize:n},pos:i,bandSize:a,xAxis:o,yAxis:u,xAxisTicks:l,yAxisTicks:c,stackedData:s,displayedData:f,offset:d,cells:h}=e,v=t==="horizontal"?u:o,p=s?v.scale.domain():null,g=aw({numericAxis:v});return f.map((y,b)=>{var x,P,w,O,A,j;s?x=ew(s[b],p):(x=re(y,r),Array.isArray(x)||(x=[g,x]));var T=GC(n,Ug)(x[1],b);if(t==="horizontal"){var I,[_,k]=[u.scale(x[0]),u.scale(x[1])];P=pf({axis:o,ticks:l,bandSize:a,offset:i.offset,entry:y,index:b}),w=(I=k??_)!==null&&I!==void 0?I:void 0,O=i.size;var R=_-k;if(A=We(R)?0:R,j={x:P,y:d.top,width:O,height:d.height},Math.abs(T)>0&&Math.abs(A)0&&Math.abs(O)t,v_=(e,t,r)=>r,p_=(e,t,r,n)=>n,Il=(e,t,r,n,i)=>i,m_=(e,t,r,n,i)=>i.maxBarSize,g_=(e,t,r,n,i,a)=>a,_h=(e,t,r)=>{var n=r??e;if(!J(n))return Ce(n,t,0)},y_=S([Y,Xi,h_,v_,p_],(e,t,r,n,i)=>t.filter(a=>e==="horizontal"?a.xAxisId===r:a.yAxisId===n).filter(a=>a.isPanorama===i).filter(a=>a.hide===!1).filter(a=>a.type==="bar")),b_=(e,t,r,n)=>{var i=Y(e);return i==="horizontal"?Au(e,"yAxis",r,n):Au(e,"xAxis",t,n)},x_=(e,t,r)=>{var n=Y(e);return n==="horizontal"?Md(e,"xAxis",t):Md(e,"yAxis",r)};function w_(e){return e.stackId!=null&&e.dataKey!=null}var P_=(e,t,r)=>{var n={},i=e.filter(w_),a=e.filter(c=>c.stackId==null),o=i.reduce((c,s)=>(c[s.stackId]||(c[s.stackId]=[]),c[s.stackId].push(s),c),n),u=Object.entries(o).map(c=>{var[s,f]=c,d=f.map(v=>v.dataKey),h=_h(t,r,f[0].barSize);return{stackId:s,dataKeys:d,barSize:h}}),l=a.map(c=>{var s=[c.dataKey].filter(d=>d!=null),f=_h(t,r,c.barSize);return{stackId:void 0,dataKeys:s,barSize:f}});return[...u,...l]},O_=S([y_,CA,x_],P_),A_=(e,t,r,n,i)=>{var a,o,u=Y(e),l=hm(e),{maxBarSize:c}=i,s=J(c)?l:c,f,d;return u==="horizontal"?(f=vt(e,"xAxis",t,n),d=Ft(e,"xAxis",t,n)):(f=vt(e,"yAxis",r,n),d=Ft(e,"yAxis",r,n)),(a=(o=nn(f,d,!0))!==null&&o!==void 0?o:s)!==null&&a!==void 0?a:0},Yg=(e,t,r,n)=>{var i=Y(e),a,o;return i==="horizontal"?(a=vt(e,"xAxis",t,n),o=Ft(e,"xAxis",t,n)):(a=vt(e,"yAxis",r,n),o=Ft(e,"yAxis",r,n)),nn(a,o)};function S_(e,t,r,n,i){var a=n.length;if(!(a<1)){var o=Ce(e,r,0,!0),u,l=[];if(Ye(n[0].barSize)){var c=!1,s=r/a,f=n.reduce((y,b)=>y+(b.barSize||0),0);f+=(a-1)*o,f>=r&&(f-=(a-1)*o,o=0),f>=r&&s>0&&(c=!0,s*=.9,f=a*s);var d=(r-f)/2>>0,h={offset:d-o,size:0};u=n.reduce((y,b)=>{var x,P={stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:h.offset+h.size+o,size:c?s:(x=b.barSize)!==null&&x!==void 0?x:0}},w=[...y,P];return h=w[w.length-1].position,w},l)}else{var v=Ce(t,r,0,!0);r-2*v-(a-1)*o<=0&&(o=0);var p=(r-2*v-(a-1)*o)/a;p>1&&(p>>=0);var g=Ye(i)?Math.min(p,i):p;u=n.reduce((y,b,x)=>[...y,{stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:v+(p+o)*x+(p-g)/2,size:g}}],l)}return u}}var E_=(e,t,r,n,i,a,o)=>{var u=J(o)?t:o,l=S_(r,n,i!==a?i:a,e,u);return i!==a&&l!=null&&(l=l.map(c=>Fn(Fn({},c),{},{position:Fn(Fn({},c.position),{},{offset:c.position.offset-i/2})}))),l},j_=S([O_,hm,TA,vm,A_,Yg,m_],E_),T_=(e,t,r,n)=>vt(e,"xAxis",t,n),C_=(e,t,r,n)=>vt(e,"yAxis",r,n),__=(e,t,r,n)=>Ft(e,"xAxis",t,n),k_=(e,t,r,n)=>Ft(e,"yAxis",r,n),M_=S([j_,Il],(e,t)=>{if(e!=null){var r=e.find(n=>n.stackId===t.stackId&&n.dataKeys.includes(t.dataKey));if(r!=null)return r.position}}),D_=(e,t)=>{if(!(!e||(t==null?void 0:t.dataKey)==null)){var{stackId:r}=t;if(r!=null){var n=e[r];if(n){var{stackedData:i}=n;if(i){var a=i.find(o=>o.key===t.dataKey);return a}}}}},I_=S([Xi,Il],(e,t)=>{if(e.some(r=>r.type==="bar"&&t.dataKey===r.dataKey&&t.stackId===r.stackId&&t.stackId===r.stackId))return t}),N_=S([b_,Il],D_),$_=S([ve,T_,C_,__,k_,M_,Y,$s,Yg,N_,I_,g_],(e,t,r,n,i,a,o,u,l,c,s,f)=>{var{chartData:d,dataStartIndex:h,dataEndIndex:v}=u;if(!(s==null||a==null||o!=="horizontal"&&o!=="vertical"||t==null||r==null||n==null||i==null||l==null)){var{data:p}=s,g;if(p!=null&&p.length>0?g=p:g=d==null?void 0:d.slice(h,v+1),g!=null)return l_({layout:o,barSettings:s,pos:a,bandSize:l,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,stackedData:c,displayedData:g,offset:e,cells:f})}}),Gg=e=>{var{chartData:t}=e,r=ae(),n=_e();return m.useEffect(()=>n?()=>{}:(r(Fd(t)),()=>{r(Fd(void 0))}),[t,r,n]),null},kh={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},Vg=nt({name:"brush",initialState:kh,reducers:{setBrushSettings(e,t){return t.payload==null?kh:t.payload}}}),{setBrushSettings:GD}=Vg.actions,R_=Vg.reducer;function L_(e,t,r){return(t=B_(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function B_(e){var t=K_(e,"string");return typeof t=="symbol"?t:t+""}function K_(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}class Nl{static create(t){return new Nl(t)}constructor(t){this.scale=t}get domain(){return this.scale.domain}get range(){return this.scale.range}get rangeMin(){return this.range()[0]}get rangeMax(){return this.range()[1]}get bandwidth(){return this.scale.bandwidth}apply(t){var{bandAware:r,position:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t!==void 0){if(n)switch(n){case"start":return this.scale(t);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+i}case"end":{var a=this.bandwidth?this.bandwidth():0;return this.scale(t)+a}default:return this.scale(t)}if(r){var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+o}return this.scale(t)}}isInRange(t){var r=this.range(),n=r[0],i=r[r.length-1];return n<=i?t>=n&&t<=i:t>=i&&t<=n}}L_(Nl,"EPS",1e-4);function q_(e){return(e%180+180)%180}var F_=function(t){var{width:r,height:n}=t,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=q_(i),o=a*Math.PI/180,u=Math.atan(n/r),l=o>u&&o{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=Pt(e).dots.findIndex(n=>n===t.payload);r!==-1&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=Pt(e).areas.findIndex(n=>n===t.payload);r!==-1&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=Pt(e).lines.findIndex(n=>n===t.payload);r!==-1&&e.lines.splice(r,1)}}}),{addDot:VD,removeDot:XD,addArea:ZD,removeArea:JD,addLine:QD,removeLine:eI}=Xg.actions,W_=Xg.reducer,U_=m.createContext(void 0),H_=e=>{var{children:t}=e,[r]=m.useState("".concat(lr("recharts"),"-clip")),n=kl();if(n==null)return null;var{x:i,y:a,width:o,height:u}=n;return m.createElement(U_.Provider,{value:r},m.createElement("defs",null,m.createElement("clipPath",{id:r},m.createElement("rect",{x:i,y:a,height:u,width:o}))),t)};function qo(e,t){for(var r in e)if({}.hasOwnProperty.call(e,r)&&(!{}.hasOwnProperty.call(t,r)||e[r]!==t[r]))return!1;for(var n in t)if({}.hasOwnProperty.call(t,n)&&!{}.hasOwnProperty.call(e,n))return!1;return!0}function Zg(e,t,r){if(t<1)return[];if(t===1&&r===void 0)return e;for(var n=[],i=0;ie*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function V_(e,t){return Zg(e,t+1)}function X_(e,t,r,n,i){for(var a=(n||[]).slice(),{start:o,end:u}=t,l=0,c=1,s=o,f=function(){var v=n==null?void 0:n[l];if(v===void 0)return{v:Zg(n,c)};var p=l,g,y=()=>(g===void 0&&(g=r(v,p)),g),b=v.coordinate,x=l===0||Pi(e,b,y,s,u);x||(l=0,s=o,c+=1),x&&(s=b+e*(y()/2+i),l+=c)},d;c<=a.length;)if(d=f(),d)return d.v;return[]}function Mh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t(v===void 0&&(v=r(h,d)),v);if(d===o-1){var g=e*(h.coordinate+e*p()/2-l);a[d]=h=Se(Se({},h),{},{tickCoord:g>0?h.coordinate-g*e:h.coordinate})}else a[d]=h=Se(Se({},h),{},{tickCoord:h.coordinate});var y=Pi(e,h.tickCoord,p,u,l);y&&(l=h.tickCoord-e*(p()/2+i),a[d]=Se(Se({},h),{},{isShow:!0}))},s=o-1;s>=0;s--)c(s);return a}function tk(e,t,r,n,i,a){var o=(n||[]).slice(),u=o.length,{start:l,end:c}=t;if(a){var s=n[u-1],f=r(s,u-1),d=e*(s.coordinate+e*f/2-c);o[u-1]=s=Se(Se({},s),{},{tickCoord:d>0?s.coordinate-d*e:s.coordinate});var h=Pi(e,s.tickCoord,()=>f,l,c);h&&(c=s.tickCoord-e*(f/2+i),o[u-1]=Se(Se({},s),{},{isShow:!0}))}for(var v=a?u-1:u,p=function(b){var x=o[b],P,w=()=>(P===void 0&&(P=r(x,b)),P);if(b===0){var O=e*(x.coordinate-e*w()/2-l);o[b]=x=Se(Se({},x),{},{tickCoord:O<0?x.coordinate-O*e:x.coordinate})}else o[b]=x=Se(Se({},x),{},{tickCoord:x.coordinate});var A=Pi(e,x.tickCoord,w,l,c);A&&(l=x.tickCoord+e*(w()/2+i),o[b]=Se(Se({},x),{},{isShow:!0}))},g=0;g{var w=typeof c=="function"?c(x.value,P):x.value;return v==="width"?Y_(en(w,{fontSize:t,letterSpacing:r}),p,f):en(w,{fontSize:t,letterSpacing:r})[v]},y=i.length>=2?ge(i[1].coordinate-i[0].coordinate):1,b=G_(a,y,v);return l==="equidistantPreserveStart"?X_(y,b,g,i,o):(l==="preserveStart"||l==="preserveStartEnd"?h=tk(y,b,g,i,o,l==="preserveStartEnd"):h=ek(y,b,g,i,o),h.filter(x=>x.isShow))}var rk=["viewBox"],nk=["viewBox"];function Or(){return Or=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:[],{tickLine:i,stroke:a,tick:o,tickFormatter:u,unit:l}=this.props,c=$l(he(he({},this.props),{},{ticks:n}),t,r),s=this.getTickTextAnchor(),f=this.getTickVerticalAnchor(),d=F(this.props,!1),h=F(o,!1),v=he(he({},d),{},{fill:"none"},F(i,!1)),p=c.map((g,y)=>{var{line:b,tick:x}=this.getTickLineCoord(g),P=he(he(he(he({textAnchor:s,verticalAnchor:f},d),{},{stroke:"none",fill:a},h),x),{},{index:y,payload:g,visibleTicksCount:c.length,tickFormatter:u});return m.createElement(ye,Or({className:"recharts-cartesian-axis-tick",key:"tick-".concat(g.value,"-").concat(g.coordinate,"-").concat(g.tickCoord)},Ei(this.props,g,y)),i&&m.createElement("line",Or({},v,b,{className:H("recharts-cartesian-axis-tick-line",Kt(i,"className"))})),o&&Gt.renderTickItem(o,P,"".concat(typeof u=="function"?u(g.value,y):g.value).concat(l||"")))});return p.length>0?m.createElement("g",{className:"recharts-cartesian-axis-ticks"},p):null}render(){var{axisLine:t,width:r,height:n,className:i,hide:a}=this.props;if(a)return null;var{ticks:o}=this.props;return r!=null&&r<=0||n!=null&&n<=0?null:m.createElement(ye,{className:H("recharts-cartesian-axis",i),ref:u=>{if(u){var l=u.getElementsByClassName("recharts-cartesian-axis-tick-value");this.tickRefs.current=Array.from(l);var c=l[0];if(c){var s=window.getComputedStyle(c).fontSize,f=window.getComputedStyle(c).letterSpacing;(s!==this.state.fontSize||f!==this.state.letterSpacing)&&this.setState({fontSize:window.getComputedStyle(c).fontSize,letterSpacing:window.getComputedStyle(c).letterSpacing})}}}},t&&this.renderAxisLine(),this.renderTicks(this.state.fontSize,this.state.letterSpacing,o),qe.renderCallByParent(this.props))}}Rl(Gt,"displayName","CartesianAxis");Rl(Gt,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var uk=["x1","y1","x2","y2","key"],sk=["offset"],lk=["xAxisId","yAxisId"],ck=["xAxisId","yAxisId"];function Nh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function je(e){for(var t=1;t{var{fill:t}=e;if(!t||t==="none")return null;var{fillOpacity:r,x:n,y:i,width:a,height:o,ry:u}=e;return m.createElement("rect",{x:n,y:i,ry:u,width:a,height:o,stroke:"none",fill:t,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function Jg(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var{x1:n,y1:i,x2:a,y2:o,key:u}=t,l=Oi(t,uk),c=F(l,!1),{offset:s}=c,f=Oi(c,sk);r=m.createElement("line",ir({},f,{x1:n,y1:i,x2:a,y2:o,fill:"none",key:u}))}return r}function mk(e){var{x:t,width:r,horizontal:n=!0,horizontalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Oi(e,lk),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:t,y1:c,x2:t+r,y2:c,key:"line-".concat(s),index:s});return Jg(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-horizontal"},l)}function gk(e){var{y:t,height:r,vertical:n=!0,verticalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Oi(e,ck),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:c,y1:t,x2:c,y2:t+r,key:"line-".concat(s),index:s});return Jg(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-vertical"},l)}function yk(e){var{horizontalFill:t,fillOpacity:r,x:n,y:i,width:a,height:o,horizontalPoints:u,horizontal:l=!0}=e;if(!l||!t||!t.length)return null;var c=u.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%t.length;return m.createElement("rect",{key:"react-".concat(d),y:f,x:n,height:v,width:a,stroke:"none",fill:t[p],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},s)}function bk(e){var{vertical:t=!0,verticalFill:r,fillOpacity:n,x:i,y:a,width:o,height:u,verticalPoints:l}=e;if(!t||!r||!r.length)return null;var c=l.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%r.length;return m.createElement("rect",{key:"react-".concat(d),x:f,y:a,width:v,height:u,stroke:"none",fill:r[p],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},s)}var xk=(e,t)=>{var{xAxis:r,width:n,height:i,offset:a}=e;return Zv($l(je(je(je({},Gt.defaultProps),r),{},{ticks:Jv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.left,a.left+a.width,t)},wk=(e,t)=>{var{yAxis:r,width:n,height:i,offset:a}=e;return Zv($l(je(je(je({},Gt.defaultProps),r),{},{ticks:Jv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.top,a.top+a.height,t)},Pk={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0};function Ll(e){var t=ap(),r=op(),n=ip(),i=je(je({},it(e,Pk)),{},{x:D(e.x)?e.x:n.left,y:D(e.y)?e.y:n.top,width:D(e.width)?e.width:n.width,height:D(e.height)?e.height:n.height}),{xAxisId:a,yAxisId:o,x:u,y:l,width:c,height:s,syncWithTicks:f,horizontalValues:d,verticalValues:h}=i,v=_e(),p=$(T=>Dd(T,"xAxis",a,v)),g=$(T=>Dd(T,"yAxis",o,v));if(!D(c)||c<=0||!D(s)||s<=0||!D(u)||u!==+u||!D(l)||l!==+l)return null;var y=i.verticalCoordinatesGenerator||xk,b=i.horizontalCoordinatesGenerator||wk,{horizontalPoints:x,verticalPoints:P}=i;if((!x||!x.length)&&typeof b=="function"){var w=d&&d.length,O=b({yAxis:g?je(je({},g),{},{ticks:w?d:g.ticks}):void 0,width:t,height:r,offset:n},w?!0:f);Qr(Array.isArray(O),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof O,"]")),Array.isArray(O)&&(x=O)}if((!P||!P.length)&&typeof y=="function"){var A=h&&h.length,j=y({xAxis:p?je(je({},p),{},{ticks:A?h:p.ticks}):void 0,width:t,height:r,offset:n},A?!0:f);Qr(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(P=j)}return m.createElement("g",{className:"recharts-cartesian-grid"},m.createElement(pk,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),m.createElement(yk,ir({},i,{horizontalPoints:x})),m.createElement(bk,ir({},i,{verticalPoints:P})),m.createElement(mk,ir({},i,{offset:n,horizontalPoints:x,xAxis:p,yAxis:g})),m.createElement(gk,ir({},i,{offset:n,verticalPoints:P,xAxis:p,yAxis:g})))}Ll.displayName="CartesianGrid";var Qg=(e,t,r,n)=>vt(e,"xAxis",t,n),ey=(e,t,r,n)=>Ft(e,"xAxis",t,n),ty=(e,t,r,n)=>vt(e,"yAxis",r,n),ry=(e,t,r,n)=>Ft(e,"yAxis",r,n),Ok=S([Y,Qg,ty,ey,ry],(e,t,r,n,i)=>Wt(e,"xAxis")?nn(t,n,!1):nn(r,i,!1)),Ak=(e,t,r,n,i)=>i,Sk=S([Xi,Ak],(e,t)=>{if(e.some(r=>r.type==="line"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),Ek=S([Y,Qg,ty,ey,ry,Sk,Ok,$s],(e,t,r,n,i,a,o,u)=>{var{chartData:l,dataStartIndex:c,dataEndIndex:s}=u;if(!(a==null||t==null||r==null||n==null||i==null||n.length===0||i.length===0||o==null)){var{dataKey:f,data:d}=a,h;if(d!=null&&d.length>0?h=d:h=l==null?void 0:l.slice(c,s+1),h!=null)return Uk({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataKey:f,bandSize:o,displayedData:h})}}),jk=["type","layout","connectNulls","needClip"],Tk=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId"];function ny(e,t){if(e==null)return{};var r,n,i=Ck(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{dataKey:t,name:r,stroke:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Ir(r,t),payload:e}]};function Dk(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:u,unit:l}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:Ir(o,t),hide:u,type:e.tooltipType,color:e.stroke,unit:l}}}var iy=(e,t)=>"".concat(t,"px ").concat(e-t,"px");function Ik(e,t){for(var r=e.length%2!==0?[...e,0]:e,n=[],i=0;i{var n=r.reduce((f,d)=>f+d);if(!n)return iy(t,e);for(var i=Math.floor(e/n),a=e%n,o=t-e,u=[],l=0,c=0;la){u=[...r.slice(0,l),a-c];break}var s=u.length%2===0?[0,o]:[o];return[...Ik(r,i),...u,...s].map(f=>"".concat(f,"px")).join(", ")};function $k(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var n=H("recharts-line-dot",typeof e!="boolean"?e.className:"");r=m.createElement(Pg,Dr({},t,{className:n}))}return r}function Rk(e,t){return e==null?!1:t?!0:e.length===1}function Lk(e){var{clipPathId:t,points:r,props:n}=e,{dot:i,dataKey:a,needClip:o}=n;if(!Rk(r,i))return null;var u=Xh(i),l=F(n,!1),c=F(i,!0),s=r.map((d,h)=>{var v=ot(ot(ot({key:"dot-".concat(h),r:3},l),c),{},{index:h,cx:d.x,cy:d.y,dataKey:a,value:d.value,payload:d.payload,points:r});return $k(i,v)}),f={clipPath:o?"url(#clipPath-".concat(u?"":"dots-").concat(t,")"):null};return m.createElement(ye,Dr({className:"recharts-line-dots",key:"dots"},f),s)}function Iu(e){var{clipPathId:t,pathRef:r,points:n,strokeDasharray:i,props:a,showLabels:o}=e,{type:u,layout:l,connectNulls:c,needClip:s}=a,f=ny(a,jk),d=ot(ot({},F(f,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:s?"url(#clipPath-".concat(t,")"):null,points:n,type:u,layout:l,connectNulls:c,strokeDasharray:i??a.strokeDasharray});return m.createElement(m.Fragment,null,(n==null?void 0:n.length)>1&&m.createElement(cs,Dr({},d,{pathRef:r})),m.createElement(Lk,{points:n,clipPathId:t,props:a}),o&&Bt.renderCallByParent(a,n))}function Bk(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function Kk(e){var{clipPathId:t,props:r,pathRef:n,previousPointsRef:i,longestAnimatedLengthRef:a}=e,{points:o,strokeDasharray:u,isAnimationActive:l,animationBegin:c,animationDuration:s,animationEasing:f,animateNewValues:d,width:h,height:v,onAnimationEnd:p,onAnimationStart:g}=r,y=i.current,b=Cl(r,"recharts-line-"),[x,P]=m.useState(!1),w=m.useCallback(()=>{typeof p=="function"&&p(),P(!1)},[p]),O=m.useCallback(()=>{typeof g=="function"&&g(),P(!0)},[g]),A=Bk(n.current),j=a.current;return m.createElement(qt,{begin:c,duration:s,isActive:l,easing:f,from:{t:0},to:{t:1},onAnimationEnd:w,onAnimationStart:O,key:b},T=>{var{t:I}=T,_=Ke(j,A+j),k=Math.min(_(I),A),R;if(u){var B="".concat(u).split(/[,\s]+/gim).map(K=>parseFloat(K));R=Nk(k,A,B)}else R=iy(A,k);if(y){var z=y.length/o.length,V=I===1?o:o.map((K,de)=>{var oe=Math.floor(de*z);if(y[oe]){var Ie=y[oe],Ge=Ke(Ie.x,K.x),L=Ke(Ie.y,K.y);return ot(ot({},K),{},{x:Ge(I),y:L(I)})}if(d){var we=Ke(h*2,K.x),Vt=Ke(v/2,K.y);return ot(ot({},K),{},{x:we(I),y:Vt(I)})}return ot(ot({},K),{},{x:K.x,y:K.y})});return i.current=V,m.createElement(Iu,{props:r,points:V,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})}return I>0&&A>0&&(i.current=o,a.current=k),m.createElement(Iu,{props:r,points:o,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})})}function qk(e){var{clipPathId:t,props:r}=e,{points:n,isAnimationActive:i}=r,a=m.useRef(null),o=m.useRef(0),u=m.useRef(null),l=a.current;return i&&n&&n.length&&l!==n?m.createElement(Kk,{props:r,clipPathId:t,previousPointsRef:a,longestAnimatedLengthRef:o,pathRef:u}):m.createElement(Iu,{props:r,points:n,clipPathId:t,pathRef:u,showLabels:!0})}var Fk=(e,t)=>({x:e.x,y:e.y,value:e.value,errorVal:re(e.payload,t)});class zk extends m.Component{constructor(){super(...arguments),oa(this,"id",lr("recharts-line-"))}render(){var t,{hide:r,dot:n,points:i,className:a,xAxisId:o,yAxisId:u,top:l,left:c,width:s,height:f,id:d,needClip:h,layout:v}=this.props;if(r)return null;var p=H("recharts-line",a),g=J(d)?this.id:d,{r:y=3,strokeWidth:b=2}=(t=F(n,!1))!==null&&t!==void 0?t:{r:3,strokeWidth:2},x=Xh(n),P=y*2+b;return m.createElement(m.Fragment,null,m.createElement(ye,{className:p},h&&m.createElement("defs",null,m.createElement(zg,{clipPathId:g,xAxisId:o,yAxisId:u}),!x&&m.createElement("clipPath",{id:"clipPath-dots-".concat(g)},m.createElement("rect",{x:c-P/2,y:l-P/2,width:s+P,height:f+P}))),m.createElement(qk,{props:this.props,clipPathId:g}),m.createElement(Bg,{direction:v==="horizontal"?"y":"x"},m.createElement(Ng,{xAxisId:o,yAxisId:u,data:i,dataPointFormatter:Fk,errorBarOffset:0},this.props.children))),m.createElement(OC,{activeDot:this.props.activeDot,points:i,mainColor:this.props.stroke,itemDataKey:this.props.dataKey}))}}var ay={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:!vr.isSsr,label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0};function Wk(e){var t=it(e,ay),{activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,connectNulls:u,dot:l,hide:c,isAnimationActive:s,label:f,legendType:d,xAxisId:h,yAxisId:v}=t,p=ny(t,Tk),{needClip:g}=Ml(h,v),{height:y,width:b,x,y:P}=kl(),w=Ki(),O=_e(),A=m.useMemo(()=>({dataKey:e.dataKey,data:e.data}),[e.dataKey,e.data]),j=$(T=>Ek(T,h,v,O,A));return w!=="horizontal"&&w!=="vertical"?null:m.createElement(zk,Dr({},p,{connectNulls:u,dot:l,activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:s,hide:c,label:f,legendType:d,xAxisId:h,yAxisId:v,points:j,layout:w,height:y,width:b,left:x,top:P,needClip:g}))}function Uk(e){var{layout:t,xAxis:r,yAxis:n,xAxisTicks:i,yAxisTicks:a,dataKey:o,bandSize:u,displayedData:l}=e;return l.map((c,s)=>{var f=re(c,o);return t==="horizontal"?{x:vf({axis:r,ticks:i,bandSize:u,entry:c,index:s}),y:J(f)?null:n.scale(f),value:f,payload:c}:{x:J(f)?null:r.scale(f),y:vf({axis:n,ticks:a,bandSize:u,entry:c,index:s}),value:f,payload:c}})}class Bl extends m.PureComponent{render(){return m.createElement($g,{type:"line",data:this.props.data,xAxisId:this.props.xAxisId,yAxisId:this.props.yAxisId,zAxisId:0,dataKey:this.props.dataKey,stackId:void 0,hide:this.props.hide,barSize:void 0},m.createElement(_g,{legendPayload:Mk(this.props)}),m.createElement(Tl,{fn:Dk,args:this.props}),m.createElement(Wk,this.props))}}oa(Bl,"displayName","Line");oa(Bl,"defaultProps",ay);function Rh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Lh(e){for(var t=1;t{var{children:a}=e,o=sy(e,rM);return o},[e]),n=$(a=>Mt(a,r.id)),i=r===n;return m.useEffect(()=>(t(Xk(r)),()=>{t(Zk(r))}),[r,t]),i?e.children:null}var sM=e=>{var{xAxisId:t,className:r}=e,n=$(np),i=_e(),a="xAxis",o=$(h=>Kr(h,a,t,i)),u=$(h=>Fm(h,a,t,i)),l=$(h=>Lm(h,t)),c=$(h=>wS(h,t));if(l==null||c==null)return null;var{dangerouslySetInnerHTML:s,ticks:f}=e,d=sy(e,nM);return m.createElement(Gt,Nu({},d,{scale:o,x:c.x,y:c.y,width:l.width,height:l.height,className:H("recharts-".concat(a," ").concat(a),r),viewBox:n,ticks:u}))},lM=e=>{var t,r,n,i,a;return m.createElement(uM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.xAxisId,scale:e.scale,type:e.type,padding:e.padding,allowDataOverflow:e.allowDataOverflow,domain:e.domain,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,height:e.height,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter},m.createElement(sM,e))};class ua extends m.Component{render(){return m.createElement(lM,this.props)}}uy(ua,"displayName","XAxis");uy(ua,"defaultProps",{allowDataOverflow:Re.allowDataOverflow,allowDecimals:Re.allowDecimals,allowDuplicatedCategory:Re.allowDuplicatedCategory,height:Re.height,hide:!1,mirror:Re.mirror,orientation:Re.orientation,padding:Re.padding,reversed:Re.reversed,scale:Re.scale,tickCount:Re.tickCount,type:Re.type,xAxisId:0});var cM=e=>{var{ticks:t,label:r,labelGapWithTick:n=5,tickSize:i=0,tickMargin:a=0}=e,o=0;if(t){t.forEach(s=>{if(s){var f=s.getBoundingClientRect();f.width>o&&(o=f.width)}});var u=r?r.getBoundingClientRect().width:0,l=i+a,c=o+l+u+(r?n:0);return Math.round(c)}return 0},fM=["dangerouslySetInnerHTML","ticks"];function ly(e,t,r){return(t=dM(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dM(e){var t=hM(e,"string");return typeof t=="symbol"?t:t+""}function hM(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function $u(){return $u=Object.assign?Object.assign.bind():function(e){for(var t=1;t(t(Jk(e)),()=>{t(Qk(e))}),[e,t]),null}var gM=e=>{var t,{yAxisId:r,className:n,width:i,label:a}=e,o=m.useRef(null),u=m.useRef(null),l=$(np),c=_e(),s=ae(),f="yAxis",d=$(x=>Kr(x,f,r,c)),h=$(x=>Bm(x,r)),v=$(x=>PS(x,r)),p=$(x=>Fm(x,f,r,c));if(m.useLayoutEffect(()=>{var x;if(!(i!=="auto"||!h||xl(a)||m.isValidElement(a))){var P=o.current,w=P==null||(x=P.tickRefs)===null||x===void 0?void 0:x.current,{tickSize:O,tickMargin:A}=P.props,j=cM({ticks:w,label:u.current,labelGapWithTick:5,tickSize:O,tickMargin:A});Math.round(h.width)!==Math.round(j)&&s(eM({id:r,width:j}))}},[o,o==null||(t=o.current)===null||t===void 0||(t=t.tickRefs)===null||t===void 0?void 0:t.current,h==null?void 0:h.width,h,s,a,r,i]),h==null||v==null)return null;var{dangerouslySetInnerHTML:g,ticks:y}=e,b=vM(e,fM);return m.createElement(Gt,$u({},b,{ref:o,labelRef:u,scale:d,x:v.x,y:v.y,width:h.width,height:h.height,className:H("recharts-".concat(f," ").concat(f),n),viewBox:l,ticks:p}))},yM=e=>{var t,r,n,i,a;return m.createElement(m.Fragment,null,m.createElement(mM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.yAxisId,scale:e.scale,type:e.type,domain:e.domain,allowDataOverflow:e.allowDataOverflow,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,padding:e.padding,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,width:e.width,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter}),m.createElement(gM,e))},bM={allowDataOverflow:Le.allowDataOverflow,allowDecimals:Le.allowDecimals,allowDuplicatedCategory:Le.allowDuplicatedCategory,hide:!1,mirror:Le.mirror,orientation:Le.orientation,padding:Le.padding,reversed:Le.reversed,scale:Le.scale,tickCount:Le.tickCount,type:Le.type,width:Le.width,yAxisId:0};class sa extends m.Component{render(){return m.createElement(yM,this.props)}}ly(sa,"displayName","YAxis");ly(sa,"defaultProps",bM);var Fo={exports:{}},zo={};/** + * @license React + * use-sync-external-store-with-selector.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Bh;function xM(){if(Bh)return zo;Bh=1;var e=qu();function t(l,c){return l===c&&(l!==0||1/l===1/c)||l!==l&&c!==c}var r=typeof Object.is=="function"?Object.is:t,n=e.useSyncExternalStore,i=e.useRef,a=e.useEffect,o=e.useMemo,u=e.useDebugValue;return zo.useSyncExternalStoreWithSelector=function(l,c,s,f,d){var h=i(null);if(h.current===null){var v={hasValue:!1,value:null};h.current=v}else v=h.current;h=o(function(){function g(w){if(!y){if(y=!0,b=w,w=f(w),d!==void 0&&v.hasValue){var O=v.value;if(d(O,w))return x=O}return x=w}if(O=x,r(b,w))return O;var A=f(w);return d!==void 0&&d(O,A)?(b=w,O):(b=w,x=A)}var y=!1,b,x,P=s===void 0?null:s;return[function(){return g(c())},P===null?void 0:function(){return g(P())}]},[c,s,f,d]);var p=n(l,h[0],h[1]);return a(function(){v.hasValue=!0,v.value=p},[p]),u(p),p},zo}var Kh;function wM(){return Kh||(Kh=1,Fo.exports=xM()),Fo.exports}wM();function PM(e){e()}function OM(){let e=null,t=null;return{clear(){e=null,t=null},notify(){PM(()=>{let r=e;for(;r;)r.callback(),r=r.next})},get(){const r=[];let n=e;for(;n;)r.push(n),n=n.next;return r},subscribe(r){let n=!0;const i=t={callback:r,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!n||e===null||(n=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var qh={notify(){},get:()=>[]};function AM(e,t){let r,n=qh,i=0,a=!1;function o(p){s();const g=n.subscribe(p);let y=!1;return()=>{y||(y=!0,g(),f())}}function u(){n.notify()}function l(){v.onStateChange&&v.onStateChange()}function c(){return a}function s(){i++,r||(r=e.subscribe(l),n=OM())}function f(){i--,r&&i===0&&(r(),r=void 0,n.clear(),n=qh)}function d(){a||(a=!0,s())}function h(){a&&(a=!1,f())}const v={addNestedSub:o,notifyNestedSubs:u,handleChangeWrapper:l,isSubscribed:c,trySubscribe:d,tryUnsubscribe:h,getListeners:()=>n};return v}var SM=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",EM=SM(),jM=()=>typeof navigator<"u"&&navigator.product==="ReactNative",TM=jM(),CM=()=>EM||TM?m.useLayoutEffect:m.useEffect,_M=CM(),Wo=Symbol.for("react-redux-context"),Uo=typeof globalThis<"u"?globalThis:{};function kM(){if(!m.createContext)return{};const e=Uo[Wo]??(Uo[Wo]=new Map);let t=e.get(m.createContext);return t||(t=m.createContext(null),e.set(m.createContext,t)),t}var MM=kM();function DM(e){const{children:t,context:r,serverState:n,store:i}=e,a=m.useMemo(()=>{const l=AM(i);return{store:i,subscription:l,getServerState:n?()=>n:void 0}},[i,n]),o=m.useMemo(()=>i.getState(),[i]);_M(()=>{const{subscription:l}=a;return l.onStateChange=l.notifyNestedSubs,l.trySubscribe(),o!==i.getState()&&l.notifyNestedSubs(),()=>{l.tryUnsubscribe(),l.onStateChange=void 0}},[a,o]);const u=r||MM;return m.createElement(u.Provider,{value:a},t)}var IM=DM,NM=(e,t)=>t,Kl=S([NM,Y,NA,xe,ng,Dt,SE,ve],_E),ql=e=>{var t=e.currentTarget.getBoundingClientRect(),r=t.width/e.currentTarget.offsetWidth,n=t.height/e.currentTarget.offsetHeight;return{chartX:Math.round((e.clientX-t.left)/r),chartY:Math.round((e.clientY-t.top)/n)}},cy=tt("mouseClick"),fy=mn();fy.startListening({actionCreator:cy,effect:(e,t)=>{var r=e.payload,n=Kl(t.getState(),ql(r));(n==null?void 0:n.activeIndex)!=null&&t.dispatch(NS({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var Ru=tt("mouseMove"),dy=mn();dy.startListening({actionCreator:Ru,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=sl(n,n.tooltip.settings.shared),a=Kl(n,ql(r));i==="axis"&&((a==null?void 0:a.activeIndex)!=null?t.dispatch(Xm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate})):t.dispatch(Vm()))}});function $M(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":t}var Fh={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index"},hy=nt({name:"rootProps",initialState:Fh,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=(r=t.payload.barGap)!==null&&r!==void 0?r:Fh.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className}}}),RM=hy.reducer,{updateOptions:LM}=hy.actions,vy=nt({name:"polarOptions",initialState:null,reducers:{updatePolarOptions:(e,t)=>t.payload}}),{updatePolarOptions:BM}=vy.actions,KM=vy.reducer,py=tt("keyDown"),my=tt("focus"),Fl=mn();Fl.startListening({actionCreator:py,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip,a=e.payload;if(!(a!=="ArrowRight"&&a!=="ArrowLeft"&&a!=="Enter")){var o=Number(ll(i,br(r))),u=Dt(r);if(a==="Enter"){var l=yi(r,"axis","hover",String(i.index));t.dispatch(Eu({active:!i.active,activeIndex:i.index,activeDataKey:i.dataKey,activeCoordinate:l}));return}var c=ES(r),s=c==="left-to-right"?1:-1,f=a==="ArrowRight"?1:-1,d=o+f*s;if(!(u==null||d>=u.length||d<0)){var h=yi(r,"axis","hover",String(d));t.dispatch(Eu({active:!0,activeIndex:d.toString(),activeDataKey:void 0,activeCoordinate:h}))}}}}});Fl.startListening({actionCreator:my,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip;if(!i.active&&i.index==null){var a="0",o=yi(r,"axis","hover",String(a));t.dispatch(Eu({activeDataKey:void 0,active:!0,activeIndex:a,activeCoordinate:o}))}}}});var Je=tt("externalEvent"),gy=mn();gy.startListening({actionCreator:Je,effect:(e,t)=>{if(e.payload.handler!=null){var r=t.getState(),n={activeCoordinate:pE(r),activeDataKey:ug(r),activeIndex:zt(r),activeLabel:og(r),activeTooltipIndex:zt(r),isTooltipActive:mE(r)};e.payload.handler(n,e.payload.reactEvent)}}});var qM=S([qr],e=>e.tooltipItemPayloads),FM=S([qM,En,(e,t,r)=>t,(e,t,r)=>r],(e,t,r,n)=>{var i=e.find(u=>u.settings.dataKey===n);if(i!=null){var{positions:a}=i;if(a!=null){var o=t(a,r);return o}}}),yy=tt("touchMove"),by=mn();by.startListening({actionCreator:yy,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=sl(n,n.tooltip.settings.shared);if(i==="axis"){var a=Kl(n,ql({clientX:r.touches[0].clientX,clientY:r.touches[0].clientY,currentTarget:r.currentTarget}));(a==null?void 0:a.activeIndex)!=null&&t.dispatch(Xm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate}))}else if(i==="item"){var o,u=r.touches[0],l=document.elementFromPoint(u.clientX,u.clientY);if(!l||!l.getAttribute)return;var c=l.getAttribute(tp),s=(o=l.getAttribute(rp))!==null&&o!==void 0?o:void 0,f=FM(t.getState(),c,s);t.dispatch(Gm({activeDataKey:s,activeIndex:c,activeCoordinate:f}))}}});var zM=jv({brush:R_,cartesianAxis:tM,chartData:HE,graphicalItems:jT,layout:Lx,legend:ww,options:qE,polarAxis:fT,polarOptions:KM,referenceElements:W_,rootProps:RM,tooltip:$S}),WM=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Chart";return lx({reducer:zM,preloadedState:t,middleware:n=>n({serializableCheck:!1}).concat([fy.middleware,dy.middleware,Fl.middleware,gy.middleware,by.middleware]),devTools:{serialize:{replacer:$M},name:"recharts-".concat(r)}})};function xy(e){var{preloadedState:t,children:r,reduxStoreName:n}=e,i=_e(),a=m.useRef(null);if(i)return r;a.current==null&&(a.current=WM(t,n));var o=ts;return m.createElement(IM,{context:o,store:a.current},r)}function wy(e){var{layout:t,width:r,height:n,margin:i}=e,a=ae(),o=_e();return m.useEffect(()=>{o||(a(Nx(t)),a($x({width:r,height:n})),a(Ix(i)))},[a,o,t,r,n,i]),null}function Py(e){var t=ae();return m.useEffect(()=>{t(LM(e))},[t,e]),null}var UM=["children"];function HM(e,t){if(e==null)return{};var r,n,i=YM(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ap(),n=op(),i=cp();if(!Tr(r)||!Tr(n))return null;var{children:a,otherAttributes:o,title:u,desc:l}=e,c,s;return typeof o.tabIndex=="number"?c=o.tabIndex:c=i?0:void 0,typeof o.role=="string"?s=o.role:s=i?"application":void 0,m.createElement(Zh,Ai({},o,{title:u,desc:l,role:s,tabIndex:c,width:r,height:n,style:GM,ref:t}),a)}),XM=e=>{var{children:t}=e,r=$(Bi);if(!r)return null;var{width:n,height:i,y:a,x:o}=r;return m.createElement(Zh,{width:n,height:i,x:o,y:a},t)},zh=m.forwardRef((e,t)=>{var{children:r}=e,n=HM(e,UM),i=_e();return i?m.createElement(XM,null,r):m.createElement(VM,Ai({ref:t},n),r)});function ZM(){var e=ae(),[t,r]=m.useState(null),n=$(dw);return m.useEffect(()=>{if(t!=null){var i=t.getBoundingClientRect(),a=i.width/t.offsetWidth;Ye(a)&&a!==n&&e(Rx(a))}},[t,e,n]),r}function Wh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function JM(e){for(var t=1;t{var{children:r,className:n,height:i,onClick:a,onContextMenu:o,onDoubleClick:u,onMouseDown:l,onMouseEnter:c,onMouseLeave:s,onMouseMove:f,onMouseUp:d,onTouchEnd:h,onTouchMove:v,onTouchStart:p,style:g,width:y}=e,b=ae(),[x,P]=m.useState(null),[w,O]=m.useState(null);VE();var A=ZM(),j=m.useCallback(L=>{A(L),typeof t=="function"&&t(L),P(L),O(L)},[A,t,P,O]),T=m.useCallback(L=>{b(cy(L)),b(Je({handler:a,reactEvent:L}))},[b,a]),I=m.useCallback(L=>{b(Ru(L)),b(Je({handler:c,reactEvent:L}))},[b,c]),_=m.useCallback(L=>{b(Vm()),b(Je({handler:s,reactEvent:L}))},[b,s]),k=m.useCallback(L=>{b(Ru(L)),b(Je({handler:f,reactEvent:L}))},[b,f]),R=m.useCallback(()=>{b(my())},[b]),B=m.useCallback(L=>{b(py(L.key))},[b]),z=m.useCallback(L=>{b(Je({handler:o,reactEvent:L}))},[b,o]),V=m.useCallback(L=>{b(Je({handler:u,reactEvent:L}))},[b,u]),K=m.useCallback(L=>{b(Je({handler:l,reactEvent:L}))},[b,l]),de=m.useCallback(L=>{b(Je({handler:d,reactEvent:L}))},[b,d]),oe=m.useCallback(L=>{b(Je({handler:p,reactEvent:L}))},[b,p]),Ie=m.useCallback(L=>{b(yy(L)),b(Je({handler:v,reactEvent:L}))},[b,v]),Ge=m.useCallback(L=>{b(Je({handler:h,reactEvent:L}))},[b,h]);return m.createElement(hg.Provider,{value:x},m.createElement(a0.Provider,{value:w},m.createElement("div",{className:H("recharts-wrapper",n),style:JM({position:"relative",cursor:"default",width:y,height:i},g),onClick:T,onContextMenu:z,onDoubleClick:V,onFocus:R,onKeyDown:B,onMouseDown:K,onMouseEnter:I,onMouseLeave:_,onMouseMove:k,onMouseUp:de,onTouchEnd:Ge,onTouchMove:Ie,onTouchStart:oe,ref:j},r)))}),nD=["children","className","width","height","style","compact","title","desc"];function iD(e,t){if(e==null)return{};var r,n,i=aD(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{children:r,className:n,width:i,height:a,style:o,compact:u,title:l,desc:c}=e,s=iD(e,nD),f=F(s,!1);return u?m.createElement(zh,{otherAttributes:f,title:l,desc:c},r):m.createElement(rD,{className:n,style:o,width:i,height:a,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},m.createElement(zh,{otherAttributes:f,title:l,desc:c,ref:t},m.createElement(H_,null,r)))}),oD=["width","height"];function Lu(){return Lu=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.createElement(Ay,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:fD,tooltipPayloadSearcher:gl,categoricalChartProps:e,ref:t})),hD=["axis","item"],vD=m.forwardRef((e,t)=>m.createElement(Ay,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:hD,tooltipPayloadSearcher:gl,categoricalChartProps:e,ref:t}));function pD(e){var t=ae();return m.useEffect(()=>{t(BM(e))},[t,e]),null}var mD=["width","height","layout"];function Bu(){return Bu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=it(e,OD);return m.createElement(wD,{chartName:"PieChart",defaultTooltipEventType:"item",validateTooltipEventTypes:PD,tooltipPayloadSearcher:gl,categoricalChartProps:r,ref:t})});const zl=(e="line")=>m.useMemo(()=>({...{margin:{top:5,right:30,left:20,bottom:5},gridProps:{strokeDasharray:"3 3",stroke:"#f3f4f6"},axisProps:{stroke:"#6b7280",fontSize:12}},...{line:{strokeWidth:3,dot:{strokeWidth:2,r:4},activeDot:{r:6,strokeWidth:2}},bar:{radius:[4,4,0,0]},pie:{innerRadius:60,outerRadius:80,paddingAngle:5}}[e]}),[e]),Wl=(e,t={})=>{const[r,n]=m.useState(null),[i,a]=m.useState(!0),[o,u]=m.useState(null),l=m.useMemo(()=>t,[t==null?void 0:t.forestId,t==null?void 0:t.startDate,t==null?void 0:t.endDate,t==null?void 0:t.species]),c=m.useCallback(async()=>{try{a(!0),u(null);const f=await e(l);n(f.data)}catch(f){console.error("Error fetching chart data:",f),u(f.message||"Failed to fetch chart data")}finally{a(!1)}},[e,l]);m.useEffect(()=>{c()},[c]);const s=m.useCallback(()=>{c()},[c]);return{data:r,loading:i,error:o,refresh:s}},SD=(e={})=>Wl(Fu.getSurvivalRate,e),ED=(e={})=>Wl(Fu.getHeightGrowth,e),jD=(e={})=>Wl(Fu.getCO2Absorption,e),TD=({filters:e={}})=>{var l,c;const{data:t,loading:r,error:n}=SD(e),i=((l=t==null?void 0:t.chartData)==null?void 0:l.length)>0&&((c=t.chartData[t.chartData.length-1])==null?void 0:c.survivalRate)||0,a={survived:i,lost:100-i},o=zl("pie"),u=[{name:"Survived",value:a.survived,color:"#10b981"},{name:"Lost",value:a.lost,color:"#ef4444"}];return r?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Tree Survival Rate"})}),E.jsx("div",{className:"flex justify-center items-center h-48",children:E.jsx(Si,{size:"32px",text:"Loading chart data..."})})]}):n?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Tree Survival Rate"})}),E.jsx("div",{className:"flex justify-center items-center h-48",children:E.jsxs("div",{className:"text-center",children:[E.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),E.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Tree Survival Rate"})}),E.jsx(My,{value:a.survived,label:"Survival Rate"}),E.jsx(bl,{width:"100%",height:200,children:E.jsxs(AD,{children:[E.jsx(_l,{data:u,cx:"50%",cy:"50%",innerRadius:o.innerRadius,outerRadius:o.outerRadius,paddingAngle:o.paddingAngle,dataKey:"value",children:u.map((s,f)=>E.jsx(jn,{fill:s.color},`cell-${f}`))}),E.jsx(yl,{content:E.jsx(Ku,{valueFormatter:s=>`${s.toFixed(1)}%`})})]})}),E.jsx(Dy,{data:u})]})},CD=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=ED(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>{var l,c;return{period:u.period,height:((l=u.species)==null?void 0:l.reduce((s,f)=>s+f.avgHeight,0))/(((c=u.species)==null?void 0:c.length)||1)||0}}))||[],a=zl("line");return r?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Average Tree Height Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsx(Si,{size:"32px",text:"Loading chart data..."})})]}):n?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Average Tree Height Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsxs("div",{className:"text-center",children:[E.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),E.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Average Tree Height Over Time"})}),E.jsx(bl,{width:"100%",height:300,children:E.jsxs(dD,{data:i,margin:a.margin,children:[E.jsx(Ll,{...a.gridProps}),E.jsx(ua,{dataKey:"period",...a.axisProps}),E.jsx(sa,{...a.axisProps,label:{value:"Height (m)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(yl,{content:E.jsx(Ku,{valueFormatter:u=>`Average Height: ${u.toFixed(1)}m`})}),E.jsx(Bl,{type:"monotone",dataKey:"height",stroke:"#10b981",strokeWidth:a.strokeWidth,dot:{fill:"#10b981",...a.dot},activeDot:{r:6,stroke:"#10b981",...a.activeDot}})]})})]})},_D=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=jD(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>({period:u.period,co2:u.totalCO2||0})))||[],a=zl("bar");return r?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"CO₂ Absorption Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsx(Si,{size:"32px",text:"Loading chart data..."})})]}):n?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"CO₂ Absorption Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsxs("div",{className:"text-center",children:[E.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),E.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"CO₂ Absorption Over Time"})}),E.jsx(bl,{width:"100%",height:300,children:E.jsxs(vD,{data:i,margin:a.margin,children:[E.jsx(Ll,{...a.gridProps}),E.jsx(ua,{dataKey:"period",...a.axisProps}),E.jsx(sa,{...a.axisProps,label:{value:"CO₂ (tons)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(yl,{content:E.jsx(Ku,{valueFormatter:u=>`CO₂ Absorption: ${u.toFixed(1)} tons`})}),E.jsx(Dl,{dataKey:"co2",fill:"#8b5cf6",radius:a.radius})]})})]})},kD=(e={})=>{const[t,r]=m.useState(null),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useMemo(()=>e,[e==null?void 0:e.forestId,e==null?void 0:e.startDate,e==null?void 0:e.endDate,e==null?void 0:e.species]),l=m.useCallback(async()=>{try{i(!0),o(null);const s=await Ky.getStats(u);r(s.data)}catch(s){console.error("Error fetching dashboard stats:",s),o(s.message||"Failed to fetch dashboard statistics")}finally{i(!1)}},[u]);m.useEffect(()=>{l()},[l]);const c=m.useCallback(()=>{l()},[l]);return{stats:t,loading:n,error:a,refresh:c}},MD=(e={})=>{const[t,r]=m.useState([]),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useMemo(()=>e,[e==null?void 0:e.forestId,e==null?void 0:e.startDate,e==null?void 0:e.endDate,e==null?void 0:e.species,e==null?void 0:e.page,e==null?void 0:e.limit]),l=m.useCallback(async()=>{try{i(!0),o(null);const s=await Iy.getAll(u);r(s.data||[])}catch(s){console.error("Error fetching tree data:",s),o(s.message||"Failed to fetch tree data")}finally{i(!1)}},[u]);m.useEffect(()=>{l()},[l]);const c=m.useCallback(()=>{l()},[l]);return{trees:t,loading:n,error:a,refresh:c}},nI=()=>{var y,b,x,P;const{sidebarOpen:e,toggleSidebar:t,closeSidebar:r}=Ny(),[n,i]=m.useState({}),{stats:a,loading:o,error:u,refresh:l}=kD(n);MD(n);const c=m.useCallback(w=>{i(w)},[]),s=w=>w?w.toLocaleString():"0",f=w=>w?`${w.toFixed(1)}%`:"0%",d=w=>w?`${w.toFixed(1)}m`:"0m",h=w=>w?`${w.toFixed(1)}t`:"0t",v=()=>{console.log("Export started")},p=(w,O)=>{console.log(`Export completed: ${w} with ${O} records`)},g=w=>{console.error("Export error:",w)};return E.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[E.jsx($y,{onToggleSidebar:t}),E.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[E.jsx(Ry,{isOpen:e,onClose:r}),E.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:E.jsxs("div",{className:"max-w-7xl mx-auto",children:[E.jsx("div",{className:"mb-8",children:E.jsxs("div",{className:"flex justify-between items-center mb-4",children:[E.jsxs("div",{children:[E.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome to Nanwa"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Monitor your forests and track tree growth with real-time insights."})]}),E.jsx("div",{className:"flex items-center space-x-4",children:E.jsx(By,{filters:n,onExportStart:v,onExportComplete:p,onExportError:g})})]})}),E.jsx(Ly,{onFiltersChange:c}),o?E.jsx("div",{className:"flex justify-center items-center py-12",children:E.jsx(Si,{text:"Loading dashboard statistics..."})}):u?E.jsxs("div",{className:"bg-red-50 border border-red-200 rounded-lg p-4 mb-8",children:[E.jsxs("p",{className:"text-red-600",children:["Error loading dashboard statistics: ",u]}),E.jsx("button",{onClick:l,className:"mt-2 text-red-600 hover:text-red-800 underline",children:"Try again"})]}):E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:[E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),title:"Total Trees",value:s((y=a==null?void 0:a.overview)==null?void 0:y.totalTrees),color:"green"}),E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Survival Rate",value:f((b=a==null?void 0:a.overview)==null?void 0:b.survivalRate),color:"blue"}),E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"})}),title:"Avg Height",value:d((x=a==null?void 0:a.height)==null?void 0:x.average),color:"yellow"}),E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),title:"CO₂ Absorbed",value:h((P=a==null?void 0:a.co2)==null?void 0:P.totalAbsorption),color:"purple"})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6 mb-8",children:[E.jsx("div",{className:"lg:col-span-1",children:E.jsx(TD,{filters:n})}),E.jsx("div",{className:"lg:col-span-1 xl:col-span-2",children:E.jsx(CD,{filters:n})}),E.jsx("div",{className:"lg:col-span-2 xl:col-span-3",children:E.jsx(_D,{filters:n})})]}),E.jsx(qy,{})]})})]})]})};export{nI as DashboardPage}; diff --git a/frontend/dist/assets/ErrorPages-CFbRbfCl.js b/frontend/dist/assets/ErrorPages-CFbRbfCl.js new file mode 100644 index 0000000000..e1f4bf8310 --- /dev/null +++ b/frontend/dist/assets/ErrorPages-CFbRbfCl.js @@ -0,0 +1 @@ +import{j as e,l as n,a as k,B as g,o as s}from"./index-CGkKx7Xv.js";import"./IconButton-vDjz_WRZ.js";import{B as p}from"./MapSidebar-jstr5dKK.js";import"./ExportButton-BryKwkQ4.js";import"./FormElements-BsiOcVAQ.js";import"./Table-CfKObwuM.js";import"./ChartComponents-DOzzJtP4.js";import"./TreeDetailModal-DPmuOlrX.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-Bh0nMcUg.js";const v=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"9,22 9,12 15,12 15,22"})]}),L=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"23,4 23,10 17,10"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"1,20 1,14 7,14"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.49,9A9,9,0,0,0,5.64,5.64L1,10"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3.51,15A9,9,0,0,0,18.36,18.36L23,14"})]}),w=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("circle",{cx:"11",cy:"11",r:"8",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 21l-4.35-4.35"})]}),y=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6v6"}),e.jsx("circle",{cx:"12",cy:"16",r:"1",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2})]}),f=({className:r,children:o,...t})=>e.jsx("div",{className:n("min-h-screen flex items-center justify-center p-8 bg-gradient-to-br from-blue-500 to-purple-600",r),...t,children:o}),B=({className:r,children:o,...t})=>e.jsx("div",{className:n("bg-white rounded-2xl p-12 max-w-lg w-full text-center shadow-2xl","md:p-8 md:mx-4",r),...t,children:o}),N=({className:r,children:o,...t})=>e.jsx("div",{className:n("mb-8 [&>svg]:w-30 [&>svg]:h-30 [&>svg]:opacity-70","md:[&>svg]:w-20 md:[&>svg]:h-20",r),...t,children:o}),W=({className:r,children:o,...t})=>e.jsx("h1",{className:n("text-6xl font-extrabold text-red-500 m-0 leading-none","md:text-4xl",r),...t,children:o}),E=({className:r,children:o,...t})=>e.jsx("h2",{className:n("text-2xl font-semibold text-gray-800 my-4","md:text-xl",r),...t,children:o}),P=({className:r,children:o,...t})=>e.jsx("p",{className:n("text-lg text-gray-600 leading-relaxed my-6 mb-8",r),...t,children:o}),C=()=>{const r=k();return{goBack:()=>{r(-1)},goHome:()=>{r("/")},reload:()=>{window.location.reload()}}},a=({code:r,title:o,message:t,illustration:i,showBackButton:d=!0,showHomeButton:l=!0,showReloadButton:c=!1,className:x,...u})=>{const{goBack:h,goHome:j,reload:m}=C();return e.jsx(f,{className:x,...u,children:e.jsxs(B,{children:[e.jsx(N,{children:i}),e.jsx(W,{children:r}),e.jsx(E,{children:o}),e.jsx(P,{children:t}),e.jsxs(g,{className:"flex justify-center gap-4 flex-wrap mt-8",children:[d&&e.jsxs(s,{onClick:h,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(p,{className:"w-4 h-4"}),"Go Back"]}),c&&e.jsxs(s,{onClick:m,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(L,{className:"w-4 h-4"}),"Try Again"]}),l&&e.jsxs(s,{onClick:j,variant:"secondary",className:"flex items-center gap-2",children:[e.jsx(v,{className:"w-4 h-4"}),"Go Home"]})]})]})})},b=({className:r="",...o})=>e.jsxs("div",{className:r,...o,children:[e.jsx(w,{className:"text-gray-400"}),e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",className:"absolute inset-0 text-red-500",style:{width:"100%",height:"100%"},children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 8l-8 8"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 8l8 8"})]})]}),I=({className:r="",...o})=>e.jsx("div",{className:r,...o,children:e.jsx(y,{className:"text-gray-400"})}),q=()=>e.jsx(a,{code:"404",title:"Page Not Found",message:"The page you're looking for doesn't exist. It might have been moved, deleted, or you entered the wrong URL.",illustration:e.jsx(b,{}),showBackButton:!0,showHomeButton:!0,showReloadButton:!1}),D=()=>e.jsx(a,{code:"500",title:"Internal Server Error",message:"Something went wrong on our end. We're working to fix it. Please try again in a few moments.",illustration:e.jsx(I,{}),showBackButton:!1,showHomeButton:!0,showReloadButton:!0});export{q as NotFoundPage,D as ServerErrorPage}; diff --git a/frontend/dist/assets/ErrorPages-pitdcj5q.js b/frontend/dist/assets/ErrorPages-pitdcj5q.js deleted file mode 100644 index c1ce5e3b0d..0000000000 --- a/frontend/dist/assets/ErrorPages-pitdcj5q.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,g as n,a as k,B as g,o as s}from"./index-Dzr7PBfw.js";import"./IconButton-CsSKj4cW.js";import{B as p}from"./TreeDetailLayout-Cc_P7nbu.js";import"./ExportButton-BvRt6B34.js";import"./FormElements-RQ7qOmSO.js";import"./Table-CZfmBv9T.js";import"./ChartComponents-CUdy75Zt.js";import"./MapSidebar-DZT3HTLm.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BRnXQ3uS.js";const v=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"9,22 9,12 15,12 15,22"})]}),L=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"23,4 23,10 17,10"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"1,20 1,14 7,14"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.49,9A9,9,0,0,0,5.64,5.64L1,10"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3.51,15A9,9,0,0,0,18.36,18.36L23,14"})]}),w=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("circle",{cx:"11",cy:"11",r:"8",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 21l-4.35-4.35"})]}),y=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6v6"}),e.jsx("circle",{cx:"12",cy:"16",r:"1",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2})]}),f=({className:r,children:o,...t})=>e.jsx("div",{className:n("min-h-screen flex items-center justify-center p-8 bg-gradient-to-br from-blue-500 to-purple-600",r),...t,children:o}),B=({className:r,children:o,...t})=>e.jsx("div",{className:n("bg-white rounded-2xl p-12 max-w-lg w-full text-center shadow-2xl","md:p-8 md:mx-4",r),...t,children:o}),N=({className:r,children:o,...t})=>e.jsx("div",{className:n("mb-8 [&>svg]:w-30 [&>svg]:h-30 [&>svg]:opacity-70","md:[&>svg]:w-20 md:[&>svg]:h-20",r),...t,children:o}),W=({className:r,children:o,...t})=>e.jsx("h1",{className:n("text-6xl font-extrabold text-red-500 m-0 leading-none","md:text-4xl",r),...t,children:o}),E=({className:r,children:o,...t})=>e.jsx("h2",{className:n("text-2xl font-semibold text-gray-800 my-4","md:text-xl",r),...t,children:o}),P=({className:r,children:o,...t})=>e.jsx("p",{className:n("text-lg text-gray-600 leading-relaxed my-6 mb-8",r),...t,children:o}),C=()=>{const r=k();return{goBack:()=>{r(-1)},goHome:()=>{r("/")},reload:()=>{window.location.reload()}}},a=({code:r,title:o,message:t,illustration:i,showBackButton:d=!0,showHomeButton:l=!0,showReloadButton:c=!1,className:x,...u})=>{const{goBack:h,goHome:j,reload:m}=C();return e.jsx(f,{className:x,...u,children:e.jsxs(B,{children:[e.jsx(N,{children:i}),e.jsx(W,{children:r}),e.jsx(E,{children:o}),e.jsx(P,{children:t}),e.jsxs(g,{className:"flex justify-center gap-4 flex-wrap mt-8",children:[d&&e.jsxs(s,{onClick:h,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(p,{className:"w-4 h-4"}),"Go Back"]}),c&&e.jsxs(s,{onClick:m,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(L,{className:"w-4 h-4"}),"Try Again"]}),l&&e.jsxs(s,{onClick:j,variant:"secondary",className:"flex items-center gap-2",children:[e.jsx(v,{className:"w-4 h-4"}),"Go Home"]})]})]})})},b=({className:r="",...o})=>e.jsxs("div",{className:r,...o,children:[e.jsx(w,{className:"text-gray-400"}),e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",className:"absolute inset-0 text-red-500",style:{width:"100%",height:"100%"},children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 8l-8 8"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 8l8 8"})]})]}),I=({className:r="",...o})=>e.jsx("div",{className:r,...o,children:e.jsx(y,{className:"text-gray-400"})}),q=()=>e.jsx(a,{code:"404",title:"Page Not Found",message:"The page you're looking for doesn't exist. It might have been moved, deleted, or you entered the wrong URL.",illustration:e.jsx(b,{}),showBackButton:!0,showHomeButton:!0,showReloadButton:!1}),D=()=>e.jsx(a,{code:"500",title:"Internal Server Error",message:"Something went wrong on our end. We're working to fix it. Please try again in a few moments.",illustration:e.jsx(I,{}),showBackButton:!1,showHomeButton:!0,showReloadButton:!0});export{q as NotFoundPage,D as ServerErrorPage}; diff --git a/frontend/dist/assets/ExportButton-BryKwkQ4.js b/frontend/dist/assets/ExportButton-BryKwkQ4.js new file mode 100644 index 0000000000..f75e4c59cf --- /dev/null +++ b/frontend/dist/assets/ExportButton-BryKwkQ4.js @@ -0,0 +1,107 @@ +import{A as C,r as m,j as e,d as o,i as x}from"./index-CGkKx7Xv.js";const f=new C,k={exportTreesCSV:(t={},r="trees_export.csv")=>f.downloadFile("/exports/trees/csv",t,r),exportTreesXLSX:(t={},r="trees_export.xlsx")=>f.downloadFile("/exports/trees/xlsx",t,r),exportForestAnalytics:(t={},r="forest_analytics.xlsx")=>f.downloadFile("/exports/forest-analytics",t,r)},L=o.div` + position: relative; + display: inline-block; +`,X=o.button` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1.5rem; + background: #10b981; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #059669; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:disabled { + opacity: 0.6; + cursor: not-allowed; + } +`,V=o.div` + position: absolute; + top: 100%; + left: 0; + right: 0; + background: white; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + z-index: 50; + margin-top: 0.5rem; + overflow: hidden; +`,j=o.button` + width: 100%; + padding: 0.75rem 1rem; + text-align: left; + background: none; + border: none; + cursor: pointer; + transition: background-color 0.2s; + display: flex; + align-items: center; + gap: 0.5rem; + + &:hover { + background: #f9fafb; + } + + &:focus { + outline: none; + background: #f0fdf4; + } +`;o.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + display: flex; + align-items: center; + justify-content: center; + border-radius: 0.5rem; +`;const D=o.div` + width: 20px; + height: 20px; + border: 2px solid #f3f4f6; + border-top: 2px solid #10b981; + border-radius: 50%; + animation: spin 1s linear infinite; + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } +`,F=o.div` + position: absolute; + top: 100%; + left: 0; + right: 0; + padding: 0.5rem; + margin-top: 0.5rem; + border-radius: 0.5rem; + font-size: 0.875rem; + z-index: 50; + + ${t=>t.type==="success"&&` + background: #d1fae5; + color: #065f46; + border: 1px solid #a7f3d0; + `} + + ${t=>t.type==="error"&&` + background: #fee2e2; + color: #991b1b; + border: 1px solid #fecaca; + `} +`,_=({filters:t={},onExportStart:r,onExportComplete:n,onExportError:i})=>{const[p,d]=m.useState(!1),[u,l]=m.useState(!1),[h,g]=m.useState(null),b=()=>{const s={};return t.selectedForests&&t.selectedForests.length>0&&(s.forestIds=t.selectedForests.join(",")),t.dateRange&&(s.startDate=x(t.dateRange.startDate),s.endDate=x(t.dateRange.endDate)),t.species&&(s.species=t.species),t.health&&(s.health=t.health),s},c=(s,a)=>{g({message:s,type:a}),setTimeout(()=>g(null),3e3)},w=async()=>{d(!1),l(!0);try{r&&r();const s=b(),a=`nanwa_trees_export_${x(new Date)}.csv`;await k.exportTreesCSV(s,a),c("CSV exported successfully","success"),n&&n("csv")}catch(s){console.error("CSV export error:",s),c(s.message||"CSV export failed","error"),i&&i(s)}finally{l(!1)}},y=async()=>{d(!1),l(!0);try{r&&r();const s=b(),a=`nanwa_trees_export_${x(new Date)}.xlsx`;await k.exportTreesXLSX(s,a),c("XLSX exported successfully","success"),n&&n("xlsx")}catch(s){console.error("XLSX export error:",s),c(s.message||"XLSX export failed","error"),i&&i(s)}finally{l(!1)}},S=()=>{u||d(!p)},v=s=>{s.target.closest(".export-container")||d(!1)};return p?document.addEventListener("click",v):document.removeEventListener("click",v),e.jsxs(L,{className:"export-container",children:[e.jsx(X,{onClick:S,disabled:u,children:u?e.jsxs(e.Fragment,{children:[e.jsx(D,{}),"Exporting..."]}):e.jsxs(e.Fragment,{children:[e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Export Data",e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})}),p&&e.jsxs(V,{children:[e.jsxs(j,{onClick:w,children:[e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium",children:"Export as CSV"}),e.jsx("div",{className:"text-xs text-gray-500",children:"Comma-separated values"})]})]}),e.jsxs(j,{onClick:y,children:[e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),e.jsxs("div",{children:[e.jsx("div",{className:"font-medium",children:"Export as XLSX"}),e.jsx("div",{className:"text-xs text-gray-500",children:"Excel spreadsheet"})]})]})]}),h&&e.jsx(F,{type:h.type,children:h.message})]})};export{_ as E}; diff --git a/frontend/dist/assets/ExportButton-BvRt6B34.js b/frontend/dist/assets/ExportButton-BvRt6B34.js deleted file mode 100644 index f6517ea569..0000000000 --- a/frontend/dist/assets/ExportButton-BvRt6B34.js +++ /dev/null @@ -1,215 +0,0 @@ -import{r as Rn,j as Ne,d as et,l as $t}from"./index-Dzr7PBfw.js";import{g as Za}from"./vendor-BtP0CW_r.js";var nn={exports:{}};/* @license -Papa Parse -v5.5.3 -https://github.com/mholt/PapaParse -License: MIT -*/var Qa=nn.exports,p0;function es(){return p0||(p0=1,function(e,t){((r,n)=>{e.exports=n()})(Qa,function r(){var n=typeof self<"u"?self:typeof window<"u"?window:n!==void 0?n:{},i,a=!n.document&&!!n.postMessage,s=n.IS_PAPA_WORKER||!1,f={},l=0,o={};function h(T){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},(function(g){var y=z(g);y.chunkSize=parseInt(y.chunkSize),g.step||g.chunk||(y.chunkSize=null),this._handle=new c(y),(this._handle.streamer=this)._config=y}).call(this,T),this.parseChunk=function(g,y){var L=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview),s)n.postMessage({results:P,workerId:o.WORKER_ID,finished:L});else if(k(this._config.chunk)&&!y){if(this._config.chunk(P,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=P=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(P.data),this._completeResults.errors=this._completeResults.errors.concat(P.errors),this._completeResults.meta=P.meta),this._completed||!L||!k(this._config.complete)||P&&P.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),L||P&&P.meta.paused||this._nextChunk(),P}this._halted=!0},this._sendError=function(g){k(this._config.error)?this._config.error(g):s&&this._config.error&&n.postMessage({workerId:o.WORKER_ID,error:g,finished:!1})}}function p(T){var g;(T=T||{}).chunkSize||(T.chunkSize=o.RemoteChunkSize),h.call(this,T),this._nextChunk=a?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(y){this._input=y,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(g=new XMLHttpRequest,this._config.withCredentials&&(g.withCredentials=this._config.withCredentials),a||(g.onload=re(this._chunkLoaded,this),g.onerror=re(this._chunkError,this)),g.open(this._config.downloadRequestBody?"POST":"GET",this._input,!a),this._config.downloadRequestHeaders){var y,L=this._config.downloadRequestHeaders;for(y in L)g.setRequestHeader(y,L[y])}var P;this._config.chunkSize&&(P=this._start+this._config.chunkSize-1,g.setRequestHeader("Range","bytes="+this._start+"-"+P));try{g.send(this._config.downloadRequestBody)}catch(X){this._chunkError(X.message)}a&&g.status===0&&this._chunkError()}},this._chunkLoaded=function(){g.readyState===4&&(g.status<200||400<=g.status?this._chunkError():(this._start+=this._config.chunkSize||g.responseText.length,this._finished=!this._config.chunkSize||this._start>=(y=>(y=y.getResponseHeader("Content-Range"))!==null?parseInt(y.substring(y.lastIndexOf("/")+1)):-1)(g),this.parseChunk(g.responseText)))},this._chunkError=function(y){y=g.statusText||y,this._sendError(new Error(y))}}function x(T){(T=T||{}).chunkSize||(T.chunkSize=o.LocalChunkSize),h.call(this,T);var g,y,L=typeof FileReader<"u";this.stream=function(P){this._input=P,y=P.slice||P.webkitSlice||P.mozSlice,L?((g=new FileReader).onload=re(this._chunkLoaded,this),g.onerror=re(this._chunkError,this)):g=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(P.target.result)},this._chunkError=function(){this._sendError(g.error)}}function d(T){var g;h.call(this,T=T||{}),this.stream=function(y){return g=y,this._nextChunk()},this._nextChunk=function(){var y,L;if(!this._finished)return y=this._config.chunkSize,g=y?(L=g.substring(0,y),g.substring(y)):(L=g,""),this._finished=!g,this.parseChunk(L)}}function E(T){h.call(this,T=T||{});var g=[],y=!0,L=!1;this.pause=function(){h.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){h.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(P){this._input=P,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){L&&g.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),g.length?this.parseChunk(g.shift()):y=!0},this._streamData=re(function(P){try{g.push(typeof P=="string"?P:P.toString(this._config.encoding)),y&&(y=!1,this._checkIsFinished(),this.parseChunk(g.shift()))}catch(X){this._streamError(X)}},this),this._streamError=re(function(P){this._streamCleanUp(),this._sendError(P)},this),this._streamEnd=re(function(){this._streamCleanUp(),L=!0,this._streamData("")},this),this._streamCleanUp=re(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function c(T){var g,y,L,P,X=Math.pow(2,53),ve=-X,xe=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,Fe=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,le=this,Ee=0,oe=0,ye=!1,de=!1,F=[],O={data:[],errors:[],meta:{}};function R(q){return T.skipEmptyLines==="greedy"?q.join("").trim()==="":q.length===1&&q[0].length===0}function C(){if(O&&L&&(ie("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+o.DefaultDelimiter+"'"),L=!1),T.skipEmptyLines&&(O.data=O.data.filter(function(ae){return!R(ae)})),V()){let ae=function(ue,Te){k(T.transformHeader)&&(ue=T.transformHeader(ue,Te)),F.push(ue)};if(O)if(Array.isArray(O.data[0])){for(var q=0;V()&&q(we=>(T.dynamicTypingFunction&&T.dynamicTyping[we]===void 0&&(T.dynamicTyping[we]=T.dynamicTypingFunction(we)),(T.dynamicTyping[we]||T.dynamicTyping)===!0))(ne)?pe==="true"||pe==="TRUE"||pe!=="false"&&pe!=="FALSE"&&((we=>{if(xe.test(we)&&(we=parseFloat(we),ve=F.length?"__parsed_extra":F[he]:_e,ce=T.transform?T.transform(ce,_e):ce);_e==="__parsed_extra"?(Te[_e]=Te[_e]||[],Te[_e].push(ce)):Te[_e]=ce}return T.header&&(he>F.length?ie("FieldMismatch","TooManyFields","Too many fields: expected "+F.length+" fields but parsed "+he,oe+ue):heT.preview?y.abort():(O.data=O.data[0],P(O,le))))}),this.parse=function(q,Y,K){var ae=T.quoteChar||'"',ae=(T.newline||(T.newline=this.guessLineEndings(q,ae)),L=!1,T.delimiter?k(T.delimiter)&&(T.delimiter=T.delimiter(q),O.meta.delimiter=T.delimiter):((ae=((ue,Te,he,_e,ce)=>{var ne,pe,we,rr;ce=ce||[","," ","|",";",o.RECORD_SEP,o.UNIT_SEP];for(var ur=0;ur=K.length/2?`\r -`:"\r"}}function _(T){return T.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function N(T){var g=(T=T||{}).delimiter,y=T.newline,L=T.comments,P=T.step,X=T.preview,ve=T.fastMode,xe=null,Fe=!1,le=T.quoteChar==null?'"':T.quoteChar,Ee=le;if(T.escapeChar!==void 0&&(Ee=T.escapeChar),(typeof g!="string"||-1=X)return Ie(!0);break}K.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:Y.length,index:oe}),pe++}}else if(L&&ae.length===0&&de.substring(oe,oe+ie)===L){if(ce===-1)return Ie();oe=ce+V,ce=de.indexOf(y,oe),_e=de.indexOf(g,oe)}else if(_e!==-1&&(_e=X)return Ie(!0)}return xr();function rr(Be){Y.push(Be),ue=oe}function ur(Be){var Xe=0;return Xe=Be!==-1&&(Be=de.substring(pe+1,Be))&&Be.trim()===""?Be.length:Xe}function xr(Be){return O||(Be===void 0&&(Be=de.substring(oe)),ae.push(Be),oe=R,rr(ae),q&&ar()),Ie()}function Dr(Be){oe=Be,rr(ae),ae=[],ce=de.indexOf(y,oe)}function Ie(Be){if(T.header&&!F&&Y.length&&!Fe){var Xe=Y[0],$e=Object.create(null),Tt=new Set(Xe);let Et=!1;for(let Ir=0;IrL.charCodeAt(0)!==65279?L:L.slice(1))(T),y=new(g.download?p:d)(g)):T.readable===!0&&k(T.read)&&k(T.on)?y=new E(g):(n.File&&T instanceof File||T instanceof Object)&&(y=new x(g)),y.stream(T);(y=(()=>{var L;return!!o.WORKERS_SUPPORTED&&(L=(()=>{var P=n.URL||n.webkitURL||null,X=r.toString();return o.BLOB_URL||(o.BLOB_URL=P.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",X,")();"],{type:"text/javascript"})))})(),(L=new n.Worker(L)).onmessage=I,L.id=l++,f[L.id]=L)})()).userStep=g.step,y.userChunk=g.chunk,y.userComplete=g.complete,y.userError=g.error,g.step=k(g.step),g.chunk=k(g.chunk),g.complete=k(g.complete),g.error=k(g.error),delete g.worker,y.postMessage({input:T,config:g,workerId:y.id})},o.unparse=function(T,g){var y=!1,L=!0,P=",",X=`\r -`,ve='"',xe=ve+ve,Fe=!1,le=null,Ee=!1,oe=((()=>{if(typeof g=="object"){if(typeof g.delimiter!="string"||o.BAD_DELIMITERS.filter(function(F){return g.delimiter.indexOf(F)!==-1}).length||(P=g.delimiter),typeof g.quotes!="boolean"&&typeof g.quotes!="function"&&!Array.isArray(g.quotes)||(y=g.quotes),typeof g.skipEmptyLines!="boolean"&&typeof g.skipEmptyLines!="string"||(Fe=g.skipEmptyLines),typeof g.newline=="string"&&(X=g.newline),typeof g.quoteChar=="string"&&(ve=g.quoteChar),typeof g.header=="boolean"&&(L=g.header),Array.isArray(g.columns)){if(g.columns.length===0)throw new Error("Option columns is empty");le=g.columns}g.escapeChar!==void 0&&(xe=g.escapeChar+ve),g.escapeFormulae instanceof RegExp?Ee=g.escapeFormulae:typeof g.escapeFormulae=="boolean"&&g.escapeFormulae&&(Ee=/^[=+\-@\t\r].*$/)}})(),new RegExp(_(ve),"g"));if(typeof T=="string"&&(T=JSON.parse(T)),Array.isArray(T)){if(!T.length||Array.isArray(T[0]))return ye(null,T,Fe);if(typeof T[0]=="object")return ye(le||Object.keys(T[0]),T,Fe)}else if(typeof T=="object")return typeof T.data=="string"&&(T.data=JSON.parse(T.data)),Array.isArray(T.data)&&(T.fields||(T.fields=T.meta&&T.meta.fields||le),T.fields||(T.fields=Array.isArray(T.data[0])?T.fields:typeof T.data[0]=="object"?Object.keys(T.data[0]):[]),Array.isArray(T.data[0])||typeof T.data[0]=="object"||(T.data=[T.data])),ye(T.fields||[],T.data||[],Fe);throw new Error("Unable to serialize unrecognized input");function ye(F,O,R){var C="",V=(typeof F=="string"&&(F=JSON.parse(F)),typeof O=="string"&&(O=JSON.parse(O)),Array.isArray(F)&&0{for(var q=0;q>2,n=e.charCodeAt(o++),s=(r&3)<<4|n>>4,i=e.charCodeAt(o++),f=(n&15)<<2|i>>6,l=i&63,isNaN(n)?f=l=64:isNaN(i)&&(l=64),t+=Vr.charAt(a)+Vr.charAt(s)+Vr.charAt(f)+Vr.charAt(l);return t}function Br(e){var t="",r=0,n=0,i=0,a=0,s=0,f=0,l=0;e=e.replace(/[^\w\+\/\=]/g,"");for(var o=0;o>4,t+=String.fromCharCode(r),f=Vr.indexOf(e.charAt(o++)),n=(s&15)<<4|f>>2,f!==64&&(t+=String.fromCharCode(n)),l=Vr.indexOf(e.charAt(o++)),i=(f&3)<<6|l,l!==64&&(t+=String.fromCharCode(i));return t}var Ae=function(){return typeof Buffer<"u"&&typeof process<"u"&&typeof process.versions<"u"&&!!process.versions.node}(),Ur=function(){if(typeof Buffer<"u"){var e=!Buffer.from;if(!e)try{Buffer.from("foo","utf8")}catch{e=!0}return e?function(t,r){return r?new Buffer(t,r):new Buffer(t)}:Buffer.from.bind(Buffer)}return function(){}}();function qr(e){return Ae?Buffer.alloc?Buffer.alloc(e):new Buffer(e):typeof Uint8Array<"u"?new Uint8Array(e):new Array(e)}function g0(e){return Ae?Buffer.allocUnsafe?Buffer.allocUnsafe(e):new Buffer(e):typeof Uint8Array<"u"?new Uint8Array(e):new Array(e)}var Fr=function(t){return Ae?Ur(t,"binary"):t.split("").map(function(r){return r.charCodeAt(0)&255})};function Tn(e){if(typeof ArrayBuffer>"u")return Fr(e);for(var t=new ArrayBuffer(e.length),r=new Uint8Array(t),n=0;n!=e.length;++n)r[n]=e.charCodeAt(n)&255;return t}function Ht(e){if(Array.isArray(e))return e.map(function(n){return String.fromCharCode(n)}).join("");for(var t=[],r=0;r"u")throw new Error("Unsupported");return new Uint8Array(e)}var qe=Ae?function(e){return Buffer.concat(e.map(function(t){return Buffer.isBuffer(t)?t:Ur(t)}))}:function(e){if(typeof Uint8Array<"u"){var t=0,r=0;for(t=0;t>6&31,i[r++]=128|s&63;else if(s>=55296&&s<57344){s=(s&1023)+64;var f=e.charCodeAt(++a)&1023;i[r++]=240|s>>8&7,i[r++]=128|s>>2&63,i[r++]=128|f>>6&15|(s&3)<<4,i[r++]=128|f&63}else i[r++]=224|s>>12&15,i[r++]=128|s>>6&63,i[r++]=128|s&63;r>n&&(t.push(i.slice(0,r)),r=0,i=qr(65535),n=65530)}return t.push(i.slice(0,r)),qe(t)}var Ot=/\u0000/g,Jt=/[\u0001-\u0006]/g;function ct(e){for(var t="",r=e.length-1;r>=0;)t+=e.charAt(r--);return t}function yr(e,t){var r=""+e;return r.length>=t?r:be("0",t-r.length)+r}function Xn(e,t){var r=""+e;return r.length>=t?r:be(" ",t-r.length)+r}function fn(e,t){var r=""+e;return r.length>=t?r:r+be(" ",t-r.length)}function os(e,t){var r=""+Math.round(e);return r.length>=t?r:be("0",t-r.length)+r}function ls(e,t){var r=""+e;return r.length>=t?r:be("0",t-r.length)+r}var m0=Math.pow(2,32);function st(e,t){if(e>m0||e<-m0)return os(e,t);var r=Math.round(e);return ls(r,t)}function on(e,t){return t=t||0,e.length>=7+t&&(e.charCodeAt(t)|32)===103&&(e.charCodeAt(t+1)|32)===101&&(e.charCodeAt(t+2)|32)===110&&(e.charCodeAt(t+3)|32)===101&&(e.charCodeAt(t+4)|32)===114&&(e.charCodeAt(t+5)|32)===97&&(e.charCodeAt(t+6)|32)===108}var _0=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],Dn=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function hs(e){return e||(e={}),e[0]="General",e[1]="0",e[2]="0.00",e[3]="#,##0",e[4]="#,##0.00",e[9]="0%",e[10]="0.00%",e[11]="0.00E+00",e[12]="# ?/?",e[13]="# ??/??",e[14]="m/d/yy",e[15]="d-mmm-yy",e[16]="d-mmm",e[17]="mmm-yy",e[18]="h:mm AM/PM",e[19]="h:mm:ss AM/PM",e[20]="h:mm",e[21]="h:mm:ss",e[22]="m/d/yy h:mm",e[37]="#,##0 ;(#,##0)",e[38]="#,##0 ;[Red](#,##0)",e[39]="#,##0.00;(#,##0.00)",e[40]="#,##0.00;[Red](#,##0.00)",e[45]="mm:ss",e[46]="[h]:mm:ss",e[47]="mmss.0",e[48]="##0.0E+0",e[49]="@",e[56]='"上午/下午 "hh"時"mm"分"ss"秒 "',e}var Ue={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "'},T0={5:37,6:38,7:39,8:40,23:0,24:0,25:0,26:0,27:14,28:14,29:14,30:14,31:14,50:14,51:14,52:14,53:14,54:14,55:14,56:14,57:14,58:14,59:1,60:2,61:3,62:4,67:9,68:10,69:12,70:13,71:14,72:14,73:15,74:16,75:17,76:20,77:21,78:22,79:45,80:46,81:47,82:0},cs={5:'"$"#,##0_);\\("$"#,##0\\)',63:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',41:'_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'};function ln(e,t,r){for(var n=e<0?-1:1,i=e*n,a=0,s=1,f=0,l=1,o=0,h=0,p=Math.floor(i);ot&&(o>t?(h=l,f=a):(h=o,f=s)),!r)return[0,n*f,h];var x=Math.floor(n*f/h);return[x,n*f-x*h,h]}function qt(e,t,r){if(e>2958465||e<0)return null;var n=e|0,i=Math.floor(86400*(e-n)),a=0,s=[],f={D:n,T:i,u:86400*(e-n)-i,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(f.u)<1e-6&&(f.u=0),t&&t.date1904&&(n+=1462),f.u>.9999&&(f.u=0,++i==86400&&(f.T=i=0,++n,++f.D)),n===60)s=r?[1317,10,29]:[1900,2,29],a=3;else if(n===0)s=r?[1317,8,29]:[1900,1,0],a=6;else{n>60&&--n;var l=new Date(1900,0,1);l.setDate(l.getDate()+n-1),s=[l.getFullYear(),l.getMonth()+1,l.getDate()],a=l.getDay(),n<60&&(a=(a+6)%7),r&&(a=ms(l,s))}return f.y=s[0],f.m=s[1],f.d=s[2],f.S=i%60,i=Math.floor(i/60),f.M=i%60,i=Math.floor(i/60),f.H=i,f.q=a,f}var ai=new Date(1899,11,31,0,0,0),us=ai.getTime(),xs=new Date(1900,2,1,0,0,0);function si(e,t){var r=e.getTime();return t?r-=1461*24*60*60*1e3:e>=xs&&(r+=24*60*60*1e3),(r-(us+(e.getTimezoneOffset()-ai.getTimezoneOffset())*6e4))/(24*60*60*1e3)}function jn(e){return e.indexOf(".")==-1?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)$/,"$1")}function ds(e){return e.indexOf("E")==-1?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,"$1E").replace(/(E[+-])(\d)$/,"$10$2")}function ps(e){var t=e<0?12:11,r=jn(e.toFixed(12));return r.length<=t||(r=e.toPrecision(10),r.length<=t)?r:e.toExponential(5)}function vs(e){var t=jn(e.toFixed(11));return t.length>(e<0?12:11)||t==="0"||t==="-0"?e.toPrecision(6):t}function gs(e){var t=Math.floor(Math.log(Math.abs(e))*Math.LOG10E),r;return t>=-4&&t<=-1?r=e.toPrecision(10+t):Math.abs(t)<=9?r=ps(e):t===10?r=e.toFixed(10).substr(0,12):r=vs(e),jn(ds(r.toUpperCase()))}function Wn(e,t){switch(typeof e){case"string":return e;case"boolean":return e?"TRUE":"FALSE";case"number":return(e|0)===e?e.toString(10):gs(e);case"undefined":return"";case"object":if(e==null)return"";if(e instanceof Date)return Xr(14,si(e,t&&t.date1904),t)}throw new Error("unsupported value in General format: "+e)}function ms(e,t){t[0]-=581;var r=e.getDay();return e<60&&(r=(r+6)%7),r}function _s(e,t,r,n){var i="",a=0,s=0,f=r.y,l,o=0;switch(e){case 98:f=r.y+543;case 121:switch(t.length){case 1:case 2:l=f%100,o=2;break;default:l=f%1e4,o=4;break}break;case 109:switch(t.length){case 1:case 2:l=r.m,o=t.length;break;case 3:return Dn[r.m-1][1];case 5:return Dn[r.m-1][0];default:return Dn[r.m-1][2]}break;case 100:switch(t.length){case 1:case 2:l=r.d,o=t.length;break;case 3:return _0[r.q][0];default:return _0[r.q][1]}break;case 104:switch(t.length){case 1:case 2:l=1+(r.H+11)%12,o=t.length;break;default:throw"bad hour format: "+t}break;case 72:switch(t.length){case 1:case 2:l=r.H,o=t.length;break;default:throw"bad hour format: "+t}break;case 77:switch(t.length){case 1:case 2:l=r.M,o=t.length;break;default:throw"bad minute format: "+t}break;case 115:if(t!="s"&&t!="ss"&&t!=".0"&&t!=".00"&&t!=".000")throw"bad second format: "+t;return r.u===0&&(t=="s"||t=="ss")?yr(r.S,t.length):(n>=2?s=n===3?1e3:100:s=n===1?10:1,a=Math.round(s*(r.S+r.u)),a>=60*s&&(a=0),t==="s"?a===0?"0":""+a/s:(i=yr(a,2+n),t==="ss"?i.substr(0,2):"."+i.substr(2,t.length-1)));case 90:switch(t){case"[h]":case"[hh]":l=r.D*24+r.H;break;case"[m]":case"[mm]":l=(r.D*24+r.H)*60+r.M;break;case"[s]":case"[ss]":l=((r.D*24+r.H)*60+r.M)*60+Math.round(r.S+r.u);break;default:throw"bad abstime format: "+t}o=t.length===3?1:2;break;case 101:l=f,o=1;break}var h=o>0?yr(l,o):"";return h}function Gr(e){var t=3;if(e.length<=t)return e;for(var r=e.length%t,n=e.substr(0,r);r!=e.length;r+=t)n+=(n.length>0?",":"")+e.substr(r,t);return n}var fi=/%/g;function Ts(e,t,r){var n=t.replace(fi,""),i=t.length-n.length;return Lr(e,n,r*Math.pow(10,2*i))+be("%",i)}function Es(e,t,r){for(var n=t.length-1;t.charCodeAt(n-1)===44;)--n;return Lr(e,t.substr(0,n),r/Math.pow(10,3*(t.length-n)))}function oi(e,t){var r,n=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(t==0)return"0.0E+0";if(t<0)return"-"+oi(e,-t);var i=e.indexOf(".");i===-1&&(i=e.indexOf("E"));var a=Math.floor(Math.log(t)*Math.LOG10E)%i;if(a<0&&(a+=i),r=(t/Math.pow(10,a)).toPrecision(n+1+(i+a)%i),r.indexOf("e")===-1){var s=Math.floor(Math.log(t)*Math.LOG10E);for(r.indexOf(".")===-1?r=r.charAt(0)+"."+r.substr(1)+"E+"+(s-r.length+a):r+="E+"+(s-a);r.substr(0,2)==="0.";)r=r.charAt(0)+r.substr(2,i)+"."+r.substr(2+i),r=r.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function(f,l,o,h){return l+o+h.substr(0,(i+a)%i)+"."+h.substr(a)+"E"})}else r=t.toExponential(n);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}var li=/# (\?+)( ?)\/( ?)(\d+)/;function ws(e,t,r){var n=parseInt(e[4],10),i=Math.round(t*n),a=Math.floor(i/n),s=i-a*n,f=n;return r+(a===0?"":""+a)+" "+(s===0?be(" ",e[1].length+1+e[4].length):Xn(s,e[1].length)+e[2]+"/"+e[3]+yr(f,e[4].length))}function Ss(e,t,r){return r+(t===0?"":""+t)+be(" ",e[1].length+2+e[4].length)}var hi=/^#*0*\.([0#]+)/,ci=/\).*[0#]/,ui=/\(###\) ###\\?-####/;function sr(e){for(var t="",r,n=0;n!=e.length;++n)switch(r=e.charCodeAt(n)){case 35:break;case 63:t+=" ";break;case 48:t+="0";break;default:t+=String.fromCharCode(r)}return t}function E0(e,t){var r=Math.pow(10,t);return""+Math.round(e*r)/r}function w0(e,t){var r=e-Math.floor(e),n=Math.pow(10,t);return t<(""+Math.round(r*n)).length?0:Math.round(r*n)}function As(e,t){return t<(""+Math.round((e-Math.floor(e))*Math.pow(10,t))).length?1:0}function Fs(e){return e<2147483647&&e>-2147483648?""+(e>=0?e|0:e-1|0):""+Math.floor(e)}function Tr(e,t,r){if(e.charCodeAt(0)===40&&!t.match(ci)){var n=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?Tr("n",n,r):"("+Tr("n",n,-r)+")"}if(t.charCodeAt(t.length-1)===44)return Es(e,t,r);if(t.indexOf("%")!==-1)return Ts(e,t,r);if(t.indexOf("E")!==-1)return oi(t,r);if(t.charCodeAt(0)===36)return"$"+Tr(e,t.substr(t.charAt(1)==" "?2:1),r);var i,a,s,f,l=Math.abs(r),o=r<0?"-":"";if(t.match(/^00+$/))return o+st(l,t.length);if(t.match(/^[#?]+$/))return i=st(r,0),i==="0"&&(i=""),i.length>t.length?i:sr(t.substr(0,t.length-i.length))+i;if(a=t.match(li))return ws(a,l,o);if(t.match(/^#+0+$/))return o+st(l,t.length-t.indexOf("0"));if(a=t.match(hi))return i=E0(r,a[1].length).replace(/^([^\.]+)$/,"$1."+sr(a[1])).replace(/\.$/,"."+sr(a[1])).replace(/\.(\d*)$/,function(E,c){return"."+c+be("0",sr(a[1]).length-c.length)}),t.indexOf("0.")!==-1?i:i.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),a=t.match(/^(0*)\.(#*)$/))return o+E0(l,a[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,a[1].length?"0.":".");if(a=t.match(/^#{1,3},##0(\.?)$/))return o+Gr(st(l,0));if(a=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+Tr(e,t,-r):Gr(""+(Math.floor(r)+As(r,a[1].length)))+"."+yr(w0(r,a[1].length),a[1].length);if(a=t.match(/^#,#*,#0/))return Tr(e,t.replace(/^#,#*,/,""),r);if(a=t.match(/^([0#]+)(\\?-([0#]+))+$/))return i=ct(Tr(e,t.replace(/[\\-]/g,""),r)),s=0,ct(ct(t.replace(/\\/g,"")).replace(/[0#]/g,function(E){return s=0?Or("n",n,r):"("+Or("n",n,-r)+")"}if(t.charCodeAt(t.length-1)===44)return ys(e,t,r);if(t.indexOf("%")!==-1)return Cs(e,t,r);if(t.indexOf("E")!==-1)return xi(t,r);if(t.charCodeAt(0)===36)return"$"+Or(e,t.substr(t.charAt(1)==" "?2:1),r);var i,a,s,f,l=Math.abs(r),o=r<0?"-":"";if(t.match(/^00+$/))return o+yr(l,t.length);if(t.match(/^[#?]+$/))return i=""+r,r===0&&(i=""),i.length>t.length?i:sr(t.substr(0,t.length-i.length))+i;if(a=t.match(li))return Ss(a,l,o);if(t.match(/^#+0+$/))return o+yr(l,t.length-t.indexOf("0"));if(a=t.match(hi))return i=(""+r).replace(/^([^\.]+)$/,"$1."+sr(a[1])).replace(/\.$/,"."+sr(a[1])),i=i.replace(/\.(\d*)$/,function(E,c){return"."+c+be("0",sr(a[1]).length-c.length)}),t.indexOf("0.")!==-1?i:i.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),a=t.match(/^(0*)\.(#*)$/))return o+(""+l).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,a[1].length?"0.":".");if(a=t.match(/^#{1,3},##0(\.?)$/))return o+Gr(""+l);if(a=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+Or(e,t,-r):Gr(""+r)+"."+be("0",a[1].length);if(a=t.match(/^#,#*,#0/))return Or(e,t.replace(/^#,#*,/,""),r);if(a=t.match(/^([0#]+)(\\?-([0#]+))+$/))return i=ct(Or(e,t.replace(/[\\-]/g,""),r)),s=0,ct(ct(t.replace(/\\/g,"")).replace(/[0#]/g,function(E){return s-1||r=="\\"&&e.charAt(t+1)=="-"&&"0#".indexOf(e.charAt(t+2))>-1););break;case"?":for(;e.charAt(++t)===r;);break;case"*":++t,(e.charAt(t)==" "||e.charAt(t)=="*")&&++t;break;case"(":case")":++t;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(;t-1;);break;case" ":++t;break;default:++t;break}return!1}function ks(e,t,r,n){for(var i=[],a="",s=0,f="",l="t",o,h,p,x="H";s=12?"P":"A"),c.t="T",x="h",s+=3):e.substr(s,5).toUpperCase()==="AM/PM"?(o!=null&&(c.v=o.H>=12?"PM":"AM"),c.t="T",s+=5,x="h"):e.substr(s,5).toUpperCase()==="上午/下午"?(o!=null&&(c.v=o.H>=12?"下午":"上午"),c.t="T",s+=5,x="h"):(c.t="t",++s),o==null&&c.t==="T")return"";i[i.length]=c,l=f;break;case"[":for(a=f;e.charAt(s++)!=="]"&&s-1&&(a=(a.match(/\$([^-\[\]]*)/)||[])[1]||"$",pi(e)||(i[i.length]={t:"t",v:a}));break;case".":if(o!=null){for(a=f;++s-1;)a+=f;i[i.length]={t:"n",v:a};break;case"?":for(a=f;e.charAt(++s)===f;)a+=f;i[i.length]={t:f,v:a},l=f;break;case"*":++s,(e.charAt(s)==" "||e.charAt(s)=="*")&&++s;break;case"(":case")":i[i.length]={t:n===1?"t":f,v:f},++s;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(a=f;s-1;)a+=e.charAt(s);i[i.length]={t:"D",v:a};break;case" ":i[i.length]={t:f,v:f},++s;break;case"$":i[i.length]={t:"t",v:"$"},++s;break;default:if(",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(f)===-1)throw new Error("unrecognized character "+f+" in "+e);i[i.length]={t:"t",v:f},++s;break}var _=0,N=0,I;for(s=i.length-1,l="t";s>=0;--s)switch(i[s].t){case"h":case"H":i[s].t=x,l="h",_<1&&(_=1);break;case"s":(I=i[s].v.match(/\.0+$/))&&(N=Math.max(N,I[0].length-1)),_<3&&(_=3);case"d":case"y":case"M":case"e":l=i[s].t;break;case"m":l==="s"&&(i[s].t="M",_<2&&(_=2));break;case"X":break;case"Z":_<1&&i[s].v.match(/[Hh]/)&&(_=1),_<2&&i[s].v.match(/[Mm]/)&&(_=2),_<3&&i[s].v.match(/[Ss]/)&&(_=3)}switch(_){case 0:break;case 1:o.u>=.5&&(o.u=0,++o.S),o.S>=60&&(o.S=0,++o.M),o.M>=60&&(o.M=0,++o.H);break;case 2:o.u>=.5&&(o.u=0,++o.S),o.S>=60&&(o.S=0,++o.M);break}var D="",W;for(s=0;s0){D.charCodeAt(0)==40?(re=t<0&&D.charCodeAt(0)===45?-t:t,k=Lr("n",D,re)):(re=t<0&&n>1?-t:t,k=Lr("n",D,re),re<0&&i[0]&&i[0].t=="t"&&(k=k.substr(1),i[0].v="-"+i[0].v)),W=k.length-1;var T=i.length;for(s=0;s-1){T=s;break}var g=i.length;if(T===i.length&&k.indexOf("E")===-1){for(s=i.length-1;s>=0;--s)i[s]==null||"n?".indexOf(i[s].t)===-1||(W>=i[s].v.length-1?(W-=i[s].v.length,i[s].v=k.substr(W+1,i[s].v.length)):W<0?i[s].v="":(i[s].v=k.substr(0,W+1),W=-1),i[s].t="t",g=s);W>=0&&g=0;--s)if(!(i[s]==null||"n?".indexOf(i[s].t)===-1)){for(h=i[s].v.indexOf(".")>-1&&s===T?i[s].v.indexOf(".")-1:i[s].v.length-1,z=i[s].v.substr(h+1);h>=0;--h)W>=0&&(i[s].v.charAt(h)==="0"||i[s].v.charAt(h)==="#")&&(z=k.charAt(W--)+z);i[s].v=z,i[s].t="t",g=s}for(W>=0&&g-1&&s===T?i[s].v.indexOf(".")+1:0,z=i[s].v.substr(0,h);h-1&&(re=n>1&&t<0&&s>0&&i[s-1].v==="-"?-t:t,i[s].v=Lr(i[s].t,i[s].v,re),i[s].t="t");var y="";for(s=0;s!==i.length;++s)i[s]!=null&&(y+=i[s].v);return y}var S0=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function A0(e,t){if(t==null)return!1;var r=parseFloat(t[2]);switch(t[1]){case"=":if(e==r)return!0;break;case">":if(e>r)return!0;break;case"<":if(e":if(e!=r)return!0;break;case">=":if(e>=r)return!0;break;case"<=":if(e<=r)return!0;break}return!1}function Rs(e,t){var r=Os(e),n=r.length,i=r[n-1].indexOf("@");if(n<4&&i>-1&&--n,r.length>4)throw new Error("cannot find right format for |"+r.join("|")+"|");if(typeof t!="number")return[4,r.length===4||i>-1?r[r.length-1]:"@"];switch(r.length){case 1:r=i>-1?["General","General","General",r[0]]:[r[0],r[0],r[0],"@"];break;case 2:r=i>-1?[r[0],r[0],r[0],r[1]]:[r[0],r[1],r[0],"@"];break;case 3:r=i>-1?[r[0],r[1],r[0],r[2]]:[r[0],r[1],r[2],"@"];break}var a=t>0?r[0]:t<0?r[1]:r[2];if(r[0].indexOf("[")===-1&&r[1].indexOf("[")===-1)return[n,a];if(r[0].match(/\[[=<>]/)!=null||r[1].match(/\[[=<>]/)!=null){var s=r[0].match(S0),f=r[1].match(S0);return A0(t,s)?[n,r[0]]:A0(t,f)?[n,r[1]]:[n,r[s!=null&&f!=null?2:1]]}return[n,a]}function Xr(e,t,r){r==null&&(r={});var n="";switch(typeof e){case"string":e=="m/d/yy"&&r.dateNF?n=r.dateNF:n=e;break;case"number":e==14&&r.dateNF?n=r.dateNF:n=(r.table!=null?r.table:Ue)[e],n==null&&(n=r.table&&r.table[T0[e]]||Ue[T0[e]]),n==null&&(n=cs[e]||"General");break}if(on(n,0))return Wn(t,r);t instanceof Date&&(t=si(t,r.date1904));var i=Rs(n,t);if(on(i[1]))return Wn(t,r);if(t===!0)t="TRUE";else if(t===!1)t="FALSE";else if(t===""||t==null)return"";return ks(i[1],t,r,i[0])}function vi(e,t){if(typeof t!="number"){t=+t||-1;for(var r=0;r<392;++r){if(Ue[r]==null){t<0&&(t=r);continue}if(Ue[r]==e){t=r;break}}t<0&&(t=391)}return Ue[t]=e,t}function En(e){for(var t=0;t!=392;++t)e[t]!==void 0&&vi(e[t],t)}function wn(){Ue=hs()}var gi=/[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;function Ds(e){var t=typeof e=="number"?Ue[e]:e;return t=t.replace(gi,"(\\d+)"),new RegExp("^"+t+"$")}function Is(e,t,r){var n=-1,i=-1,a=-1,s=-1,f=-1,l=-1;(t.match(gi)||[]).forEach(function(p,x){var d=parseInt(r[x+1],10);switch(p.toLowerCase().charAt(0)){case"y":n=d;break;case"d":a=d;break;case"h":s=d;break;case"s":l=d;break;case"m":s>=0?f=d:i=d;break}}),l>=0&&f==-1&&i>=0&&(f=i,i=-1);var o=(""+(n>=0?n:new Date().getFullYear())).slice(-4)+"-"+("00"+(i>=1?i:1)).slice(-2)+"-"+("00"+(a>=1?a:1)).slice(-2);o.length==7&&(o="0"+o),o.length==8&&(o="20"+o);var h=("00"+(s>=0?s:0)).slice(-2)+":"+("00"+(f>=0?f:0)).slice(-2)+":"+("00"+(l>=0?l:0)).slice(-2);return s==-1&&f==-1&&l==-1?o:n==-1&&i==-1&&a==-1?h:o+"T"+h}var Ns=function(){var e={};e.version="1.2.0";function t(){for(var k=0,T=new Array(256),g=0;g!=256;++g)k=g,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,k=k&1?-306674912^k>>>1:k>>>1,T[g]=k;return typeof Int32Array<"u"?new Int32Array(T):T}var r=t();function n(k){var T=0,g=0,y=0,L=typeof Int32Array<"u"?new Int32Array(4096):new Array(4096);for(y=0;y!=256;++y)L[y]=k[y];for(y=0;y!=256;++y)for(g=k[y],T=256+y;T<4096;T+=256)g=L[T]=g>>>8^k[g&255];var P=[];for(y=1;y!=16;++y)P[y-1]=typeof Int32Array<"u"?L.subarray(y*256,y*256+256):L.slice(y*256,y*256+256);return P}var i=n(r),a=i[0],s=i[1],f=i[2],l=i[3],o=i[4],h=i[5],p=i[6],x=i[7],d=i[8],E=i[9],c=i[10],_=i[11],N=i[12],I=i[13],D=i[14];function W(k,T){for(var g=T^-1,y=0,L=k.length;y>>8^r[(g^k.charCodeAt(y++))&255];return~g}function z(k,T){for(var g=T^-1,y=k.length-15,L=0;L>8&255]^N[k[L++]^g>>16&255]^_[k[L++]^g>>>24]^c[k[L++]]^E[k[L++]]^d[k[L++]]^x[k[L++]]^p[k[L++]]^h[k[L++]]^o[k[L++]]^l[k[L++]]^f[k[L++]]^s[k[L++]]^a[k[L++]]^r[k[L++]];for(y+=15;L>>8^r[(g^k[L++])&255];return~g}function re(k,T){for(var g=T^-1,y=0,L=k.length,P=0,X=0;y>>8^r[(g^P)&255]:P<2048?(g=g>>>8^r[(g^(192|P>>6&31))&255],g=g>>>8^r[(g^(128|P&63))&255]):P>=55296&&P<57344?(P=(P&1023)+64,X=k.charCodeAt(y++)&1023,g=g>>>8^r[(g^(240|P>>8&7))&255],g=g>>>8^r[(g^(128|P>>2&63))&255],g=g>>>8^r[(g^(128|X>>6&15|(P&3)<<4))&255],g=g>>>8^r[(g^(128|X&63))&255]):(g=g>>>8^r[(g^(224|P>>12&15))&255],g=g>>>8^r[(g^(128|P>>6&63))&255],g=g>>>8^r[(g^(128|P&63))&255]);return~g}return e.table=r,e.bstr=W,e.buf=z,e.str=re,e}(),De=function(){var t={};t.version="1.2.1";function r(u,w){for(var v=u.split("/"),m=w.split("/"),S=0,A=0,B=Math.min(v.length,m.length);S>>1,u.write_shift(2,v);var m=w.getFullYear()-1980;m=m<<4|w.getMonth()+1,m=m<<5|w.getDate(),u.write_shift(2,m)}function s(u){var w=u.read_shift(2)&65535,v=u.read_shift(2)&65535,m=new Date,S=v&31;v>>>=5;var A=v&15;v>>>=4,m.setMilliseconds(0),m.setFullYear(v+1980),m.setMonth(A-1),m.setDate(S);var B=w&31;w>>>=5;var G=w&63;return w>>>=6,m.setHours(w),m.setMinutes(G),m.setSeconds(B<<1),m}function f(u){vr(u,0);for(var w={},v=0;u.l<=u.length-4;){var m=u.read_shift(2),S=u.read_shift(2),A=u.l+S,B={};switch(m){case 21589:v=u.read_shift(1),v&1&&(B.mtime=u.read_shift(4)),S>5&&(v&2&&(B.atime=u.read_shift(4)),v&4&&(B.ctime=u.read_shift(4))),B.mtime&&(B.mt=new Date(B.mtime*1e3));break}u.l=A,w[m]=B}return w}var l;function o(){return l||(l={})}function h(u,w){if(u[0]==80&&u[1]==75)return d0(u,w);if((u[0]|32)==109&&(u[1]|32)==105)return za(u,w);if(u.length<512)throw new Error("CFB file size "+u.length+" < 512");var v=3,m=512,S=0,A=0,B=0,G=0,M=0,b=[],U=u.slice(0,512);vr(U,0);var J=p(U);switch(v=J[0],v){case 3:m=512;break;case 4:m=4096;break;case 0:if(J[1]==0)return d0(u,w);default:throw new Error("Major Version: Expected 3 or 4 saw "+v)}m!==512&&(U=u.slice(0,m),vr(U,28));var te=u.slice(0,m);x(U,v);var fe=U.read_shift(4,"i");if(v===3&&fe!==0)throw new Error("# Directory Sectors: Expected 0 saw "+fe);U.l+=4,B=U.read_shift(4,"i"),U.l+=4,U.chk("00100000","Mini Stream Cutoff Size: "),G=U.read_shift(4,"i"),S=U.read_shift(4,"i"),M=U.read_shift(4,"i"),A=U.read_shift(4,"i");for(var Z=-1,se=0;se<109&&(Z=U.read_shift(4,"i"),!(Z<0));++se)b[se]=Z;var ge=d(u,m);_(M,A,ge,m,b);var Pe=I(ge,B,b,m);Pe[B].name="!Directory",S>0&&G!==X&&(Pe[G].name="!MiniFAT"),Pe[b[0]].name="!FAT",Pe.fat_addrs=b,Pe.ssz=m;var Me={},tr=[],St=[],At=[];D(B,Pe,ge,tr,S,Me,St,G),E(St,At,tr),tr.shift();var Ft={FileIndex:St,FullPaths:At};return w&&w.raw&&(Ft.raw={header:te,sectors:ge}),Ft}function p(u){if(u[u.l]==80&&u[u.l+1]==75)return[0,0];u.chk(ve,"Header Signature: "),u.l+=16;var w=u.read_shift(2,"u");return[u.read_shift(2,"u"),w]}function x(u,w){var v=9;switch(u.l+=2,v=u.read_shift(2)){case 9:if(w!=3)throw new Error("Sector Shift: Expected 9 saw "+v);break;case 12:if(w!=4)throw new Error("Sector Shift: Expected 12 saw "+v);break;default:throw new Error("Sector Shift: Expected 9 or 12 saw "+v)}u.chk("0600","Mini Sector Shift: "),u.chk("000000000000","Reserved: ")}function d(u,w){for(var v=Math.ceil(u.length/w)-1,m=[],S=1;S0&&B>=0;)A.push(w.slice(B*P,B*P+P)),S-=P,B=Yr(v,B*4);return A.length===0?H(0):qe(A).slice(0,u.size)}function _(u,w,v,m,S){var A=X;if(u===X){if(w!==0)throw new Error("DIFAT chain shorter than expected")}else if(u!==-1){var B=v[u],G=(m>>>2)-1;if(!B)return;for(var M=0;M=0;){S[M]=!0,A[A.length]=M,B.push(u[M]);var U=v[Math.floor(M*4/m)];if(b=M*4&G,m<4+b)throw new Error("FAT boundary crossed: "+M+" 4 "+m);if(!u[U])break;M=Yr(u[U],b)}return{nodes:A,data:I0([B])}}function I(u,w,v,m){var S=u.length,A=[],B=[],G=[],M=[],b=m-1,U=0,J=0,te=0,fe=0;for(U=0;U=S&&(te-=S),!B[te]){M=[];var Z=[];for(J=te;J>=0;){Z[J]=!0,B[J]=!0,G[G.length]=J,M.push(u[J]);var se=v[Math.floor(J*4/m)];if(fe=J*4&b,m<4+fe)throw new Error("FAT boundary crossed: "+J+" 4 "+m);if(!u[se]||(J=Yr(u[se],fe),Z[J]))break}A[te]={nodes:G,data:I0([M])}}return A}function D(u,w,v,m,S,A,B,G){for(var M=0,b=m.length?2:0,U=w[u].data,J=0,te=0,fe;J0&&M!==X&&(w[M].name="!StreamData")):se.size>=4096?(se.storage="fat",w[se.start]===void 0&&(w[se.start]=N(v,se.start,w.fat_addrs,w.ssz)),w[se.start].name=se.name,se.content=w[se.start].data.slice(0,se.size)):(se.storage="minifat",se.size<0?se.size=0:M!==X&&se.start!==X&&w[M]&&(se.content=c(se,w[M].data,(w[G]||{}).data))),se.content&&vr(se.content,0),A[fe]=se,B.push(se)}}function W(u,w){return new Date((mr(u,w+4)/1e7*Math.pow(2,32)+mr(u,w)/1e7-11644473600)*1e3)}function z(u,w){return o(),h(l.readFileSync(u),w)}function re(u,w){var v=w&&w.type;switch(v||Ae&&Buffer.isBuffer(u)&&(v="buffer"),v||"base64"){case"file":return z(u,w);case"base64":return h(Fr(Br(u)),w);case"binary":return h(Fr(u),w)}return h(u,w)}function k(u,w){var v=w||{},m=v.root||"Root Entry";if(u.FullPaths||(u.FullPaths=[]),u.FileIndex||(u.FileIndex=[]),u.FullPaths.length!==u.FileIndex.length)throw new Error("inconsistent CFB structure");u.FullPaths.length===0&&(u.FullPaths[0]=m+"/",u.FileIndex[0]={name:m,type:5}),v.CLSID&&(u.FileIndex[0].clsid=v.CLSID),T(u)}function T(u){var w="Sh33tJ5";if(!De.find(u,"/"+w)){var v=H(4);v[0]=55,v[1]=v[3]=50,v[2]=54,u.FileIndex.push({name:w,type:2,content:v,size:4,L:69,R:69,C:69}),u.FullPaths.push(u.FullPaths[0]+w),g(u)}}function g(u,w){k(u);for(var v=!1,m=!1,S=u.FullPaths.length-1;S>=0;--S){var A=u.FileIndex[S];switch(A.type){case 0:m?v=!0:(u.FileIndex.pop(),u.FullPaths.pop());break;case 1:case 2:case 5:m=!0,isNaN(A.R*A.L*A.C)&&(v=!0),A.R>-1&&A.L>-1&&A.R==A.L&&(v=!0);break;default:v=!0;break}}if(!(!v&&!w)){var B=new Date(1987,1,19),G=0,M=Object.create?Object.create(null):{},b=[];for(S=0;S1?1:-1,J.size=0,J.type=5;else if(te.slice(-1)=="/"){for(G=S+1;G=b.length?-1:G,G=S+1;G=b.length?-1:G,J.type=1}else n(u.FullPaths[S+1]||"")==n(te)&&(J.R=S+1),J.type=2}}}function y(u,w){var v=w||{};if(v.fileType=="mad")return Ka(u,v);switch(g(u),v.fileType){case"zip":return Wa(u,v)}var m=function(fe){for(var Z=0,se=0,ge=0;ge0&&(Me<4096?Z+=Me+63>>6:se+=Me+511>>9)}}for(var tr=fe.FullPaths.length+3>>2,St=Z+7>>3,At=Z+127>>7,Ft=St+se+tr+At,$r=Ft+127>>7,kn=$r<=109?0:Math.ceil(($r-109)/127);Ft+$r+kn+127>>7>$r;)kn=++$r<=109?0:Math.ceil(($r-109)/127);var Nr=[1,kn,$r,At,tr,se,Z,0];return fe.FileIndex[0].size=Z<<6,Nr[7]=(fe.FileIndex[0].start=Nr[0]+Nr[1]+Nr[2]+Nr[3]+Nr[4]+Nr[5])+(Nr[6]+7>>3),Nr}(u),S=H(m[7]<<9),A=0,B=0;{for(A=0;A<8;++A)S.write_shift(1,xe[A]);for(A=0;A<8;++A)S.write_shift(2,0);for(S.write_shift(2,62),S.write_shift(2,3),S.write_shift(2,65534),S.write_shift(2,9),S.write_shift(2,6),A=0;A<3;++A)S.write_shift(2,0);for(S.write_shift(4,0),S.write_shift(4,m[2]),S.write_shift(4,m[0]+m[1]+m[2]+m[3]-1),S.write_shift(4,0),S.write_shift(4,4096),S.write_shift(4,m[3]?m[0]+m[1]+m[2]-1:X),S.write_shift(4,m[3]),S.write_shift(-4,m[1]?m[0]-1:X),S.write_shift(4,m[1]),A=0;A<109;++A)S.write_shift(-4,A>9)));for(G(m[6]+7>>3);S.l&511;)S.write_shift(-4,le.ENDOFCHAIN);for(B=A=0,M=0;M=4096)&&(U.start=B,G(b+63>>6)));for(;S.l&511;)S.write_shift(-4,le.ENDOFCHAIN);for(A=0;A=4096)if(S.l=U.start+1<<9,Ae&&Buffer.isBuffer(U.content))U.content.copy(S,S.l,0,U.size),S.l+=U.size+511&-512;else{for(M=0;M0&&U.size<4096)if(Ae&&Buffer.isBuffer(U.content))U.content.copy(S,S.l,0,U.size),S.l+=U.size+63&-64;else{for(M=0;M>16|w>>8|w)&255}for(var Y=typeof Uint8Array<"u",K=Y?new Uint8Array(256):[],ae=0;ae<256;++ae)K[ae]=q(ae);function ue(u,w){var v=K[u&255];return w<=8?v>>>8-w:(v=v<<8|K[u>>8&255],w<=16?v>>>16-w:(v=v<<8|K[u>>16&255],v>>>24-w))}function Te(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=6?0:u[m+1]<<8))>>>v&3}function he(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=5?0:u[m+1]<<8))>>>v&7}function _e(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=4?0:u[m+1]<<8))>>>v&15}function ce(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=3?0:u[m+1]<<8))>>>v&31}function ne(u,w){var v=w&7,m=w>>>3;return(u[m]|(v<=1?0:u[m+1]<<8))>>>v&127}function pe(u,w,v){var m=w&7,S=w>>>3,A=(1<>>m;return v<8-m||(B|=u[S+1]<<8-m,v<16-m)||(B|=u[S+2]<<16-m,v<24-m)||(B|=u[S+3]<<24-m),B&A}function we(u,w,v){var m=w&7,S=w>>>3;return m<=5?u[S]|=(v&7)<>8-m),w+3}function rr(u,w,v){var m=w&7,S=w>>>3;return v=(v&1)<>>3;return v<<=m,u[S]|=v&255,v>>>=8,u[S+1]=v,w+8}function xr(u,w,v){var m=w&7,S=w>>>3;return v<<=m,u[S]|=v&255,v>>>=8,u[S+1]=v&255,u[S+2]=v>>>8,w+16}function Dr(u,w){var v=u.length,m=2*v>w?2*v:w+5,S=0;if(v>=w)return u;if(Ae){var A=g0(m);if(u.copy)u.copy(A);else for(;S>m-J,B=(1<=0;--B)w[G|B<0;)M[M.l++]=G[b++]}return M.l}function B(G,M){for(var b=0,U=0,J=Y?new Uint16Array(32768):[];U0;)M[M.l++]=G[U++];b=M.l*8;continue}b=we(M,b,+(U+te==G.length)+2);for(var fe=0;te-- >0;){var Z=G[U];fe=(fe<<5^Z)&32767;var se=-1,ge=0;if((se=J[fe])&&(se|=U&-32768,se>U&&(se-=32768),se2){Z=S[ge],Z<=22?b=ur(M,b,K[Z+1]>>1)-1:(ur(M,b,3),b+=5,ur(M,b,K[Z-23]>>5),b+=3);var Pe=Z<8?0:Z-4>>2;Pe>0&&(xr(M,b,ge-V[Z]),b+=Pe),Z=w[U-se],b=ur(M,b,K[Z]>>3),b-=3;var Me=Z<4?0:Z-2>>1;Me>0&&(xr(M,b,U-se-ie[Z]),b+=Me);for(var tr=0;tr>8-Z;for(var se=(1<<7-Z)-1;se>=0;--se)Wr[fe|se<>>=3){case 16:for(A=3+Te(u,w),w+=2,fe=ge[ge.length-1];A-- >0;)ge.push(fe);break;case 17:for(A=3+he(u,w),w+=3;A-- >0;)ge.push(0);break;case 18:for(A=11+ne(u,w),w+=7;A-- >0;)ge.push(0);break;default:ge.push(fe),M>>0,G=0,M=0;(m&1)==0;){if(m=he(u,v),v+=3,m>>>1)m>>1==1?(G=9,M=5):(v=Ba(u,v),G=wt,M=c0);else{v&7&&(v+=8-(v&7));var b=u[v>>>3]|u[(v>>>3)+1]<<8;if(v+=32,b>0)for(!w&&B0;)S[A++]=u[v>>>3],v+=8;continue}for(;;){!w&&B>>1==1?Be[U]:Ir[U];if(v+=J&15,J>>>=4,(J>>>8&255)===0)S[A++]=J;else{if(J==256)break;J-=257;var te=J<8?0:J-4>>2;te>5&&(te=0);var fe=A+V[J];te>0&&(fe+=pe(u,v,te),v+=te),U=pe(u,v,M),J=m>>>1==1?Xe[U]:dr[U],v+=J&15,J>>>=4;var Z=J<4?0:J-2>>1,se=ie[J];for(Z>0&&(se+=pe(u,v,Z),v+=Z),!w&&B>>3]:[S.slice(0,A),v+7>>>3]}function u0(u,w){var v=u.slice(u.l||0),m=ba(v,w);return u.l+=m[1],m[0]}function x0(u,w){if(u)typeof console<"u"&&console.error(w);else throw new Error(w)}function d0(u,w){var v=u;vr(v,0);var m=[],S=[],A={FileIndex:m,FullPaths:S};k(A,{root:w.root});for(var B=v.length-4;(v[B]!=80||v[B+1]!=75||v[B+2]!=5||v[B+3]!=6)&&B>=0;)--B;v.l=B+4,v.l+=4;var G=v.read_shift(2);v.l+=6;var M=v.read_shift(4);for(v.l=M,B=0;B0&&(v=v.slice(0,v.length-1),v=v.slice(0,v.lastIndexOf("/")+1),A.slice(0,v.length)!=v););var B=(m[1]||"").match(/boundary="(.*?)"/);if(!B)throw new Error("MAD cannot find boundary");var G="--"+(B[1]||""),M=[],b=[],U={FileIndex:M,FullPaths:b};k(U);var J,te=0;for(S=0;S=32&&fe<128&&++J;var se=J>=te*4/5;S.push(m),S.push("Content-Location: "+(v.root||"file:///C:/SheetJS/")+B),S.push("Content-Transfer-Encoding: "+(se?"quoted-printable":"base64")),S.push("Content-Type: "+Ha(G,B)),S.push(""),S.push(se?Ga(U):Va(U))}return S.push(m+`--\r -`),S.join(`\r -`)}function $a(u){var w={};return k(w,u),w}function On(u,w,v,m){var S=m&&m.unsafe;S||k(u);var A=!S&&De.find(u,w);if(!A){var B=u.FullPaths[0];w.slice(0,B.length)==B?B=w:(B.slice(-1)!="/"&&(B+="/"),B=(B+w).replace("//","/")),A={name:i(w),type:2},u.FileIndex.push(A),u.FullPaths.push(B),S||De.utils.cfb_gc(u)}return A.content=v,A.size=v?v.length:0,m&&(m.CLSID&&(A.clsid=m.CLSID),m.mt&&(A.mt=m.mt),m.ct&&(A.ct=m.ct)),A}function Ya(u,w){k(u);var v=De.find(u,w);if(v){for(var m=0;m0?r.setTime(r.getTime()+r.getTimezoneOffset()*60*1e3):t<0&&r.setTime(r.getTime()-r.getTimezoneOffset()*60*1e3),r;if(e instanceof Date)return e;if(Ti.getFullYear()==1917&&!isNaN(r.getFullYear())){var n=r.getFullYear();return e.indexOf(""+n)>-1||r.setFullYear(r.getFullYear()+100),r}var i=e.match(/\d+/g)||["2017","2","19","0","0","0"],a=new Date(+i[0],+i[1]-1,+i[2],+i[3]||0,+i[4]||0,+i[5]||0);return e.indexOf("Z")>-1&&(a=new Date(a.getTime()-a.getTimezoneOffset()*60*1e3)),a}function An(e,t){if(Ae&&Buffer.isBuffer(e))return e.toString("binary");if(typeof TextDecoder<"u")try{var r={"€":"€","‚":"‚",ƒ:"ƒ","„":"„","…":"…","†":"†","‡":"‡","ˆ":"ˆ","‰":"‰",Š:"Š","‹":"‹",Œ:"Œ",Ž:"Ž","‘":"‘","’":"’","“":"“","”":"”","•":"•","–":"–","—":"—","˜":"˜","™":"™",š:"š","›":"›",œ:"œ",ž:"ž",Ÿ:"Ÿ"};return Array.isArray(e)&&(e=new Uint8Array(e)),new TextDecoder("latin1").decode(e).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g,function(a){return r[a]||a})}catch{}for(var n=[],i=0;i!=e.length;++i)n.push(String.fromCharCode(e[i]));return n.join("")}function cr(e){if(typeof JSON<"u"&&!Array.isArray(e))return JSON.parse(JSON.stringify(e));if(typeof e!="object"||e==null)return e;if(e instanceof Date)return new Date(e.getTime());var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=cr(e[r]));return t}function be(e,t){for(var r="";r.length3&&bs.indexOf(s)==-1)return r}else if(s.match(/[a-z]/))return r;return n<0||n>8099?r:(i>0||a>1)&&n!=101?t:e.match(/[^-0-9:,\/\\]/)?r:t}function me(e,t,r){if(e.FullPaths){if(typeof r=="string"){var n;return Ae?n=Ur(r):n=fs(r),De.utils.cfb_add(e,t,n)}De.utils.cfb_add(e,t,r)}else e.file(t,r)}function Kn(){return De.utils.cfb_new()}var Ve=`\r -`,Us={""":'"',"'":"'",">":">","<":"<","&":"&"},$n=zn(Us),Yn=/[&<>'"]/g,Ws=/[\u0000-\u0008\u000b-\u001f]/g;function ke(e){var t=e+"";return t.replace(Yn,function(r){return $n[r]}).replace(Ws,function(r){return"_x"+("000"+r.charCodeAt(0).toString(16)).slice(-4)+"_"})}function O0(e){return ke(e).replace(/ /g,"_x0020_")}var Ei=/[\u0000-\u001f]/g;function Hs(e){var t=e+"";return t.replace(Yn,function(r){return $n[r]}).replace(/\n/g,"
").replace(Ei,function(r){return"&#x"+("000"+r.charCodeAt(0).toString(16)).slice(-4)+";"})}function Vs(e){var t=e+"";return t.replace(Yn,function(r){return $n[r]}).replace(Ei,function(r){return"&#x"+r.charCodeAt(0).toString(16).toUpperCase()+";"})}function Gs(e){return e.replace(/(\r\n|[\r\n])/g," ")}function Xs(e){switch(e){case 1:case!0:case"1":case"true":case"TRUE":return!0;default:return!1}}function In(e){for(var t="",r=0,n=0,i=0,a=0,s=0,f=0;r191&&n<224){s=(n&31)<<6,s|=i&63,t+=String.fromCharCode(s);continue}if(a=e.charCodeAt(r++),n<240){t+=String.fromCharCode((n&15)<<12|(i&63)<<6|a&63);continue}s=e.charCodeAt(r++),f=((n&7)<<18|(i&63)<<12|(a&63)<<6|s&63)-65536,t+=String.fromCharCode(55296+(f>>>10&1023)),t+=String.fromCharCode(56320+(f&1023))}return t}function k0(e){var t=qr(2*e.length),r,n,i=1,a=0,s=0,f;for(n=0;n>>10&1023),r=56320+(r&1023)),s!==0&&(t[a++]=s&255,t[a++]=s>>>8,s=0),t[a++]=r%256,t[a++]=r>>>8;return t.slice(0,a).toString("ucs2")}function R0(e){return Ur(e,"binary").toString("utf8")}var Zt="foo bar baz☃🍣",kt=Ae&&(R0(Zt)==In(Zt)&&R0||k0(Zt)==In(Zt)&&k0)||In,Bt=Ae?function(e){return Ur(e,"utf8").toString("binary")}:function(e){for(var t=[],r=0,n=0,i=0;r>6))),t.push(String.fromCharCode(128+(n&63)));break;case(n>=55296&&n<57344):n-=55296,i=e.charCodeAt(r++)-56320+(n<<10),t.push(String.fromCharCode(240+(i>>18&7))),t.push(String.fromCharCode(144+(i>>12&63))),t.push(String.fromCharCode(128+(i>>6&63))),t.push(String.fromCharCode(128+(i&63)));break;default:t.push(String.fromCharCode(224+(n>>12))),t.push(String.fromCharCode(128+(n>>6&63))),t.push(String.fromCharCode(128+(n&63)))}return t.join("")},js=function(){var e=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map(function(t){return[new RegExp("&"+t[0]+";","ig"),t[1]]});return function(r){for(var n=r.replace(/^[\t\n\r ]+/,"").replace(/[\t\n\r ]+$/,"").replace(/>\s+/g,">").replace(/\s+/g,` -`).replace(/<[^>]*>/g,""),i=0;i"+t+""}function bt(e){return er(e).map(function(t){return" "+t+'="'+e[t]+'"'}).join("")}function Q(e,t,r){return"<"+e+(r!=null?bt(r):"")+(t!=null?(t.match(wi)?' xml:space="preserve"':"")+">"+t+""}function Hn(e,t){try{return e.toISOString().replace(/\.\d*/,"")}catch(r){if(t)throw r}return""}function zs(e,t){switch(typeof e){case"string":var r=Q("vt:lpwstr",ke(e));return r=r.replace(/"/g,"_x0022_"),r;case"number":return Q((e|0)==e?"vt:i4":"vt:r8",ke(String(e)));case"boolean":return Q("vt:bool",e?"true":"false")}if(e instanceof Date)return Q("vt:filetime",Hn(e));throw new Error("Unable to serialize "+e)}var je={CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",CT:"http://schemas.openxmlformats.org/package/2006/content-types",RELS:"http://schemas.openxmlformats.org/package/2006/relationships",TCMNT:"http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"},vt=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"],gr={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};function Ks(e,t){for(var r=1-2*(e[t+7]>>>7),n=((e[t+7]&127)<<4)+(e[t+6]>>>4&15),i=e[t+6]&15,a=5;a>=0;--a)i=i*256+e[t+a];return n==2047?i==0?r*(1/0):NaN:(n==0?n=-1022:(n-=1023,i+=Math.pow(2,52)),r*Math.pow(2,n-52)*i)}function $s(e,t,r){var n=(t<0||1/t==-1/0?1:0)<<7,i=0,a=0,s=n?-t:t;isFinite(s)?s==0?i=a=0:(i=Math.floor(Math.log(s)/Math.LN2),a=s*Math.pow(2,52-i),i<=-1023&&(!isFinite(a)||a>4|n}var D0=function(e){for(var t=[],r=10240,n=0;n0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0].map(function(t){return Buffer.isBuffer(t)?t:Ur(t)})):D0(e)}:D0,N0=function(e,t,r){for(var n=[],i=t;i0?Gt(e,t+4,t+4+r-1):""},Fi=Ai,yi=function(e,t){var r=mr(e,t);return r>0?Gt(e,t+4,t+4+r-1):""},Ci=yi,Oi=function(e,t){var r=2*mr(e,t);return r>0?Gt(e,t+4,t+4+r-1):""},ki=Oi,Ri=function(t,r){var n=mr(t,r);return n>0?Jn(t,r+4,r+4+n):""},Di=Ri,Ii=function(e,t){var r=mr(e,t);return r>0?Gt(e,t+4,t+4+r):""},Ni=Ii,Li=function(e,t){return Ks(e,t)},cn=Li,qn=function(t){return Array.isArray(t)||typeof Uint8Array<"u"&&t instanceof Uint8Array};Ae&&(Fi=function(t,r){if(!Buffer.isBuffer(t))return Ai(t,r);var n=t.readUInt32LE(r);return n>0?t.toString("utf8",r+4,r+4+n-1):""},Ci=function(t,r){if(!Buffer.isBuffer(t))return yi(t,r);var n=t.readUInt32LE(r);return n>0?t.toString("utf8",r+4,r+4+n-1):""},ki=function(t,r){if(!Buffer.isBuffer(t))return Oi(t,r);var n=2*t.readUInt32LE(r);return t.toString("utf16le",r+4,r+4+n-1)},Di=function(t,r){if(!Buffer.isBuffer(t))return Ri(t,r);var n=t.readUInt32LE(r);return t.toString("utf16le",r+4,r+4+n)},Ni=function(t,r){if(!Buffer.isBuffer(t))return Ii(t,r);var n=t.readUInt32LE(r);return t.toString("utf8",r+4,r+4+n)},cn=function(t,r){return Buffer.isBuffer(t)?t.readDoubleLE(r):Li(t,r)},qn=function(t){return Buffer.isBuffer(t)||Array.isArray(t)||typeof Uint8Array<"u"&&t instanceof Uint8Array});var lt=function(e,t){return e[t]},Ct=function(e,t){return e[t+1]*256+e[t]},Ys=function(e,t){var r=e[t+1]*256+e[t];return r<32768?r:(65535-r+1)*-1},mr=function(e,t){return e[t+3]*(1<<24)+(e[t+2]<<16)+(e[t+1]<<8)+e[t]},Yr=function(e,t){return e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]},Js=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};function Rt(e,t){var r="",n,i,a=[],s,f,l,o;switch(t){case"dbcs":if(o=this.l,Ae&&Buffer.isBuffer(this))r=this.slice(this.l,this.l+2*e).toString("utf16le");else for(l=0;l0?Yr:Js)(this,this.l),this.l+=4,n):(i=mr(this,this.l),this.l+=4,i);case 8:case-8:if(t==="f")return e==8?i=cn(this,this.l):i=cn([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,i;e=8;case 16:r=Si(this,this.l,e);break}}return this.l+=e,r}var qs=function(e,t,r){e[r]=t&255,e[r+1]=t>>>8&255,e[r+2]=t>>>16&255,e[r+3]=t>>>24&255},Zs=function(e,t,r){e[r]=t&255,e[r+1]=t>>8&255,e[r+2]=t>>16&255,e[r+3]=t>>24&255},Qs=function(e,t,r){e[r]=t&255,e[r+1]=t>>>8&255};function ef(e,t,r){var n=0,i=0;if(r==="dbcs"){for(i=0;i!=t.length;++i)Qs(this,t.charCodeAt(i),this.l+2*i);n=2*t.length}else if(r==="sbcs"){for(t=t.replace(/[^\x00-\x7F]/g,"_"),i=0;i!=t.length;++i)this[this.l+i]=t.charCodeAt(i)&255;n=t.length}else if(r==="hex"){for(;i>8}for(;this.l>>=8,this[this.l+1]=t&255;break;case 3:n=3,this[this.l]=t&255,t>>>=8,this[this.l+1]=t&255,t>>>=8,this[this.l+2]=t&255;break;case 4:n=4,qs(this,t,this.l);break;case 8:if(n=8,r==="f"){$s(this,t,this.l);break}case 16:break;case-4:n=4,Zs(this,t,this.l);break}return this.l+=n,this}function Pi(e,t){var r=Si(this,this.l,e.length>>1);if(r!==e)throw new Error(t+"Expected "+e+" saw "+r);this.l+=e.length>>1}function vr(e,t){e.l=t,e.read_shift=Rt,e.chk=Pi,e.write_shift=ef}function Rr(e,t){e.l+=t}function H(e){var t=qr(e);return vr(t,0),t}function lr(){var e=[],t=Ae?256:2048,r=function(o){var h=H(o);return vr(h,0),h},n=r(t),i=function(){n&&(n.length>n.l&&(n=n.slice(0,n.l),n.l=n.length),n.length>0&&e.push(n),n=null)},a=function(o){return n&&o=128?1:0)+1,n>=128&&++a,n>=16384&&++a,n>=2097152&&++a;var s=e.next(a);i<=127?s.write_shift(1,i):(s.write_shift(1,(i&127)+128),s.write_shift(1,i>>7));for(var f=0;f!=4;++f)if(n>=128)s.write_shift(1,(n&127)+128),n>>=7;else{s.write_shift(1,n);break}n>0&&qn(r)&&e.push(r)}}function Dt(e,t,r){var n=cr(e);if(t.s?(n.cRel&&(n.c+=t.s.c),n.rRel&&(n.r+=t.s.r)):(n.cRel&&(n.c+=t.c),n.rRel&&(n.r+=t.r)),!r||r.biff<12){for(;n.c>=256;)n.c-=256;for(;n.r>=65536;)n.r-=65536}return n}function M0(e,t,r){var n=cr(e);return n.s=Dt(n.s,t.s,r),n.e=Dt(n.e,t.s,r),n}function It(e,t){if(e.cRel&&e.c<0)for(e=cr(e);e.c<0;)e.c+=t>8?16384:256;if(e.rRel&&e.r<0)for(e=cr(e);e.r<0;)e.r+=t>8?1048576:t>5?65536:16384;var r=Re(e);return!e.cRel&&e.cRel!=null&&(r=nf(r)),!e.rRel&&e.rRel!=null&&(r=rf(r)),r}function Nn(e,t){return e.s.r==0&&!e.s.rRel&&e.e.r==(t.biff>=12?1048575:t.biff>=8?65536:16384)&&!e.e.rRel?(e.s.cRel?"":"$")+nr(e.s.c)+":"+(e.e.cRel?"":"$")+nr(e.e.c):e.s.c==0&&!e.s.cRel&&e.e.c==(t.biff>=12?16383:255)&&!e.e.cRel?(e.s.rRel?"":"$")+Qe(e.s.r)+":"+(e.e.rRel?"":"$")+Qe(e.e.r):It(e.s,t.biff)+":"+It(e.e,t.biff)}function Zn(e){return parseInt(tf(e),10)-1}function Qe(e){return""+(e+1)}function rf(e){return e.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function tf(e){return e.replace(/\$(\d+)$/,"$1")}function Qn(e){for(var t=af(e),r=0,n=0;n!==t.length;++n)r=26*r+t.charCodeAt(n)-64;return r-1}function nr(e){if(e<0)throw new Error("invalid column "+e);var t="";for(++e;e;e=Math.floor((e-1)/26))t=String.fromCharCode((e-1)%26+65)+t;return t}function nf(e){return e.replace(/^([A-Z])/,"$$$1")}function af(e){return e.replace(/^\$([A-Z])/,"$1")}function sf(e){return e.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function ze(e){for(var t=0,r=0,n=0;n=48&&i<=57?t=10*t+(i-48):i>=65&&i<=90&&(r=26*r+(i-64))}return{c:r-1,r:t-1}}function Re(e){for(var t=e.c+1,r="";t;t=(t-1)/26|0)r=String.fromCharCode((t-1)%26+65)+r;return r+(e.r+1)}function _r(e){var t=e.indexOf(":");return t==-1?{s:ze(e),e:ze(e)}:{s:ze(e.slice(0,t)),e:ze(e.slice(t+1))}}function He(e,t){return typeof t>"u"||typeof t=="number"?He(e.s,e.e):(typeof e!="string"&&(e=Re(e)),typeof t!="string"&&(t=Re(t)),e==t?e:e+":"+t)}function Le(e){var t={s:{c:0,r:0},e:{c:0,r:0}},r=0,n=0,i=0,a=e.length;for(r=0;n26);++n)r=26*r+i;for(t.s.c=--r,r=0;n9);++n)r=10*r+i;if(t.s.r=--r,n===a||i!=10)return t.e.c=t.s.c,t.e.r=t.s.r,t;for(++n,r=0;n!=a&&!((i=e.charCodeAt(n)-64)<1||i>26);++n)r=26*r+i;for(t.e.c=--r,r=0;n!=a&&!((i=e.charCodeAt(n)-48)<0||i>9);++n)r=10*r+i;return t.e.r=--r,t}function B0(e,t){var r=e.t=="d"&&t instanceof Date;if(e.z!=null)try{return e.w=Xr(e.z,r?hr(t):t)}catch{}try{return e.w=Xr((e.XF||{}).numFmtId||(r?14:0),r?hr(t):t)}catch{return""+t}}function br(e,t,r){return e==null||e.t==null||e.t=="z"?"":e.w!==void 0?e.w:(e.t=="d"&&!e.z&&r&&r.dateNF&&(e.z=r.dateNF),e.t=="e"?Xt[e.v]||e.v:t==null?B0(e,e.v):B0(e,t))}function rt(e,t){var r=t&&t.sheet?t.sheet:"Sheet1",n={};return n[r]=e,{SheetNames:[r],Sheets:n}}function Mi(e,t,r){var n=r||{},i=e?Array.isArray(e):n.dense,a=e||(i?[]:{}),s=0,f=0;if(a&&n.origin!=null){if(typeof n.origin=="number")s=n.origin;else{var l=typeof n.origin=="string"?ze(n.origin):n.origin;s=l.r,f=l.c}a["!ref"]||(a["!ref"]="A1:A1")}var o={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(a["!ref"]){var h=Le(a["!ref"]);o.s.c=h.s.c,o.s.r=h.s.r,o.e.c=Math.max(o.e.c,h.e.c),o.e.r=Math.max(o.e.r,h.e.r),s==-1&&(o.e.r=s=h.e.r+1)}for(var p=0;p!=t.length;++p)if(t[p]){if(!Array.isArray(t[p]))throw new Error("aoa_to_sheet expects an array of arrays");for(var x=0;x!=t[p].length;++x)if(!(typeof t[p][x]>"u")){var d={v:t[p][x]},E=s+p,c=f+x;if(o.s.r>E&&(o.s.r=E),o.s.c>c&&(o.s.c=c),o.e.r0&&t.write_shift(0,e,"dbcs"),r?t.slice(0,t.l):t}function of(e){return{ich:e.read_shift(2),ifnt:e.read_shift(2)}}function lf(e,t){return t||(t=H(4)),t.write_shift(2,0),t.write_shift(2,0),t}function e0(e,t){var r=e.l,n=e.read_shift(1),i=ir(e),a=[],s={t:i,h:i};if((n&1)!==0){for(var f=e.read_shift(4),l=0;l!=f;++l)a.push(of(e));s.r=a}else s.r=[{ich:0,ifnt:0}];return e.l=r+t,s}function hf(e,t){var r=!1;return t==null&&(r=!0,t=H(15+4*e.t.length)),t.write_shift(1,0),Ke(e.t,t),r?t.slice(0,t.l):t}var cf=e0;function uf(e,t){var r=!1;return t==null&&(r=!0,t=H(23+4*e.t.length)),t.write_shift(1,1),Ke(e.t,t),t.write_shift(4,1),lf({},t),r?t.slice(0,t.l):t}function wr(e){var t=e.read_shift(4),r=e.read_shift(2);return r+=e.read_shift(1)<<16,e.l++,{c:t,iStyleRef:r}}function tt(e,t){return t==null&&(t=H(8)),t.write_shift(-4,e.c),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}function nt(e){var t=e.read_shift(2);return t+=e.read_shift(1)<<16,e.l++,{c:-1,iStyleRef:t}}function it(e,t){return t==null&&(t=H(4)),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}var xf=ir,Bi=Ke;function r0(e){var t=e.read_shift(4);return t===0||t===4294967295?"":e.read_shift(t,"dbcs")}function un(e,t){var r=!1;return t==null&&(r=!0,t=H(127)),t.write_shift(4,e.length>0?e.length:4294967295),e.length>0&&t.write_shift(0,e,"dbcs"),r?t.slice(0,t.l):t}var df=ir,Vn=r0,t0=un;function bi(e){var t=e.slice(e.l,e.l+4),r=t[0]&1,n=t[0]&2;e.l+=4;var i=n===0?cn([0,0,0,0,t[0]&252,t[1],t[2],t[3]],0):Yr(t,0)>>2;return r?i/100:i}function Ui(e,t){t==null&&(t=H(4));var r=0,n=0,i=e*100;if(e==(e|0)&&e>=-536870912&&e<1<<29?n=1:i==(i|0)&&i>=-536870912&&i<1<<29&&(n=1,r=1),n)t.write_shift(-4,((r?i:e)<<2)+(r+2));else throw new Error("unsupported RkNumber "+e)}function Wi(e){var t={s:{},e:{}};return t.s.r=e.read_shift(4),t.e.r=e.read_shift(4),t.s.c=e.read_shift(4),t.e.c=e.read_shift(4),t}function pf(e,t){return t||(t=H(16)),t.write_shift(4,e.s.r),t.write_shift(4,e.e.r),t.write_shift(4,e.s.c),t.write_shift(4,e.e.c),t}var at=Wi,mt=pf;function _t(e){if(e.length-e.l<8)throw"XLS Xnum Buffer underflow";return e.read_shift(8,"f")}function Zr(e,t){return(t||H(8)).write_shift(8,e,"f")}function vf(e){var t={},r=e.read_shift(1),n=r>>>1,i=e.read_shift(1),a=e.read_shift(2,"i"),s=e.read_shift(1),f=e.read_shift(1),l=e.read_shift(1);switch(e.l++,n){case 0:t.auto=1;break;case 1:t.index=i;var o=Ff[i];o&&(t.rgb=$0(o));break;case 2:t.rgb=$0([s,f,l]);break;case 3:t.theme=i;break}return a!=0&&(t.tint=a>0?a/32767:a/32768),t}function xn(e,t){if(t||(t=H(8)),!e||e.auto)return t.write_shift(4,0),t.write_shift(4,0),t;e.index!=null?(t.write_shift(1,2),t.write_shift(1,e.index)):e.theme!=null?(t.write_shift(1,6),t.write_shift(1,e.theme)):(t.write_shift(1,5),t.write_shift(1,0));var r=e.tint||0;if(r>0?r*=32767:r<0&&(r*=32768),t.write_shift(2,r),!e.rgb||e.theme!=null)t.write_shift(2,0),t.write_shift(1,0),t.write_shift(1,0);else{var n=e.rgb||"FFFFFF";typeof n=="number"&&(n=("000000"+n.toString(16)).slice(-6)),t.write_shift(1,parseInt(n.slice(0,2),16)),t.write_shift(1,parseInt(n.slice(2,4),16)),t.write_shift(1,parseInt(n.slice(4,6),16)),t.write_shift(1,255)}return t}function gf(e){var t=e.read_shift(1);e.l++;var r={fBold:t&1,fItalic:t&2,fUnderline:t&4,fStrikeout:t&8,fOutline:t&16,fShadow:t&32,fCondense:t&64,fExtend:t&128};return r}function mf(e,t){t||(t=H(2));var r=(e.italic?2:0)|(e.strike?8:0)|(e.outline?16:0)|(e.shadow?32:0)|(e.condense?64:0)|(e.extend?128:0);return t.write_shift(1,r),t.write_shift(1,0),t}var Hi=2,pr=3,Qt=11,dn=19,en=64,_f=65,Tf=71,Ef=4108,wf=4126,Je=80,b0={1:{n:"CodePage",t:Hi},2:{n:"Category",t:Je},3:{n:"PresentationFormat",t:Je},4:{n:"ByteCount",t:pr},5:{n:"LineCount",t:pr},6:{n:"ParagraphCount",t:pr},7:{n:"SlideCount",t:pr},8:{n:"NoteCount",t:pr},9:{n:"HiddenCount",t:pr},10:{n:"MultimediaClipCount",t:pr},11:{n:"ScaleCrop",t:Qt},12:{n:"HeadingPairs",t:Ef},13:{n:"TitlesOfParts",t:wf},14:{n:"Manager",t:Je},15:{n:"Company",t:Je},16:{n:"LinksUpToDate",t:Qt},17:{n:"CharacterCount",t:pr},19:{n:"SharedDoc",t:Qt},22:{n:"HyperlinksChanged",t:Qt},23:{n:"AppVersion",t:pr,p:"version"},24:{n:"DigSig",t:_f},26:{n:"ContentType",t:Je},27:{n:"ContentStatus",t:Je},28:{n:"Language",t:Je},29:{n:"Version",t:Je},255:{},2147483648:{n:"Locale",t:dn},2147483651:{n:"Behavior",t:dn},1919054434:{}},U0={1:{n:"CodePage",t:Hi},2:{n:"Title",t:Je},3:{n:"Subject",t:Je},4:{n:"Author",t:Je},5:{n:"Keywords",t:Je},6:{n:"Comments",t:Je},7:{n:"Template",t:Je},8:{n:"LastAuthor",t:Je},9:{n:"RevNumber",t:Je},10:{n:"EditTime",t:en},11:{n:"LastPrinted",t:en},12:{n:"CreatedDate",t:en},13:{n:"ModifiedDate",t:en},14:{n:"PageCount",t:pr},15:{n:"WordCount",t:pr},16:{n:"CharCount",t:pr},17:{n:"Thumbnail",t:Tf},18:{n:"Application",t:Je},19:{n:"DocSecurity",t:pr},255:{},2147483648:{n:"Locale",t:dn},2147483651:{n:"Behavior",t:dn},1919054434:{}};function Sf(e){return e.map(function(t){return[t>>16&255,t>>8&255,t&255]})}var Af=Sf([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Ff=cr(Af),Xt={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"},yf={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.sheet.macroEnabled.main+xml":"workbooks","application/vnd.ms-excel.sheet.binary.macroEnabled.main":"workbooks","application/vnd.ms-excel.addin.macroEnabled.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets","application/vnd.ms-excel.worksheet":"sheets","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"charts","application/vnd.ms-excel.chartsheet":"charts","application/vnd.ms-excel.macrosheet+xml":"macros","application/vnd.ms-excel.macrosheet":"macros","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"dialogs","application/vnd.ms-excel.dialogsheet":"dialogs","application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml":"strs","application/vnd.ms-excel.sharedStrings":"strs","application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles","application/vnd.ms-excel.styles":"styles","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.comments":"comments","application/vnd.ms-excel.threadedcomments+xml":"threadedcomments","application/vnd.ms-excel.person+xml":"people","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"metadata","application/vnd.ms-excel.sheetMetadata":"metadata","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-office.chartex+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"links","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"links","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"TODO","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"},rn={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xlam:"application/vnd.ms-excel.addin.macroEnabled.main+xml",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},metadata:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",xlsb:"application/vnd.ms-excel.sheetMetadata"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};function Vi(){return{workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""}}function Gi(e,t){var r=Ps(yf),n=[],i;n[n.length]=Ve,n[n.length]=Q("Types",null,{xmlns:je.CT,"xmlns:xsd":je.xsd,"xmlns:xsi":je.xsi}),n=n.concat([["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["data","application/vnd.openxmlformats-officedocument.model+data"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels","application/vnd.openxmlformats-package.relationships+xml"]].map(function(l){return Q("Default",null,{Extension:l[0],ContentType:l[1]})}));var a=function(l){e[l]&&e[l].length>0&&(i=e[l][0],n[n.length]=Q("Override",null,{PartName:(i[0]=="/"?"":"/")+i,ContentType:rn[l][t.bookType]||rn[l].xlsx}))},s=function(l){(e[l]||[]).forEach(function(o){n[n.length]=Q("Override",null,{PartName:(o[0]=="/"?"":"/")+o,ContentType:rn[l][t.bookType]||rn[l].xlsx})})},f=function(l){(e[l]||[]).forEach(function(o){n[n.length]=Q("Override",null,{PartName:(o[0]=="/"?"":"/")+o,ContentType:r[l][0]})})};return a("workbooks"),s("sheets"),s("charts"),f("themes"),["strs","styles"].forEach(a),["coreprops","extprops","custprops"].forEach(f),f("vba"),f("comments"),f("threadedcomments"),f("drawings"),s("metadata"),f("people"),n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}var Se={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",CMNT:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",SST:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",STY:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",THEME:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",WS:["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"],DRAW:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",XLMETA:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",TCMNT:"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",PEOPLE:"http://schemas.microsoft.com/office/2017/10/relationships/person",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function Xi(e){var t=e.lastIndexOf("/");return e.slice(0,t+1)+"_rels/"+e.slice(t+1)+".rels"}function ut(e){var t=[Ve,Q("Relationships",null,{xmlns:je.RELS})];return er(e["!id"]).forEach(function(r){t[t.length]=Q("Relationship",null,e["!id"][r])}),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function Oe(e,t,r,n,i,a){if(i||(i={}),e["!id"]||(e["!id"]={}),e["!idx"]||(e["!idx"]=1),t<0)for(t=e["!idx"];e["!id"]["rId"+t];++t);if(e["!idx"]=t+1,i.Id="rId"+t,i.Type=n,i.Target=r,[Se.HLINK,Se.XPATH,Se.XMISS].indexOf(i.Type)>-1&&(i.TargetMode="External"),e["!id"][i.Id])throw new Error("Cannot rewrite rId "+t);return e["!id"][i.Id]=i,e[("/"+i.Target).replace("//","/")]=i,t}function Cf(e){var t=[Ve];t.push(` -`),t.push(` -`);for(var r=0;r -`);return t.push(""),t.join("")}function W0(e,t,r){return[' -`,' -`,` -`].join("")}function Of(e,t){return[' -`,' -`,` -`].join("")}function kf(e){var t=[Ve];t.push(` -`);for(var r=0;r!=e.length;++r)t.push(W0(e[r][0],e[r][1])),t.push(Of("",e[r][0]));return t.push(W0("","Document","pkg")),t.push(""),t.join("")}function ji(){return'SheetJS '+an.version+""}var Jr=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];function Ln(e,t,r,n,i){i[e]!=null||t==null||t===""||(i[e]=t,t=ke(t),n[n.length]=r?Q(e,t,r):Ze(e,t))}function zi(e,t){var r=t||{},n=[Ve,Q("cp:coreProperties",null,{"xmlns:cp":je.CORE_PROPS,"xmlns:dc":je.dc,"xmlns:dcterms":je.dcterms,"xmlns:dcmitype":je.dcmitype,"xmlns:xsi":je.xsi})],i={};if(!e&&!r.Props)return n.join("");e&&(e.CreatedDate!=null&&Ln("dcterms:created",typeof e.CreatedDate=="string"?e.CreatedDate:Hn(e.CreatedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,i),e.ModifiedDate!=null&&Ln("dcterms:modified",typeof e.ModifiedDate=="string"?e.ModifiedDate:Hn(e.ModifiedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,i));for(var a=0;a!=Jr.length;++a){var s=Jr[a],f=r.Props&&r.Props[s[1]]!=null?r.Props[s[1]]:e?e[s[1]]:null;f===!0?f="1":f===!1?f="0":typeof f=="number"&&(f=String(f)),f!=null&&Ln(s[0],f,null,n,i)}return n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}var xt=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]],Ki=["Worksheets","SheetNames","NamedRanges","DefinedNames","Chartsheets","ChartNames"];function $i(e){var t=[],r=Q;return e||(e={}),e.Application="SheetJS",t[t.length]=Ve,t[t.length]=Q("Properties",null,{xmlns:je.EXT_PROPS,"xmlns:vt":je.vt}),xt.forEach(function(n){if(e[n[1]]!==void 0){var i;switch(n[2]){case"string":i=ke(String(e[n[1]]));break;case"bool":i=e[n[1]]?"true":"false";break}i!==void 0&&(t[t.length]=r(n[0],i))}}),t[t.length]=r("HeadingPairs",r("vt:vector",r("vt:variant","Worksheets")+r("vt:variant",r("vt:i4",String(e.Worksheets))),{size:2,baseType:"variant"})),t[t.length]=r("TitlesOfParts",r("vt:vector",e.SheetNames.map(function(n){return""+ke(n)+""}).join(""),{size:e.Worksheets,baseType:"lpstr"})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function Yi(e){var t=[Ve,Q("Properties",null,{xmlns:je.CUST_PROPS,"xmlns:vt":je.vt})];if(!e)return t.join("");var r=1;return er(e).forEach(function(i){++r,t[t.length]=Q("property",zs(e[i]),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:r,name:ke(i)})}),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var H0={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"};function Rf(e,t){var r=[];return er(H0).map(function(n){for(var i=0;i'+i.join("")+""}function If(e){var t=typeof e=="string"?new Date(Date.parse(e)):e,r=t.getTime()/1e3+11644473600,n=r%Math.pow(2,32),i=(r-n)/Math.pow(2,32);n*=1e7,i*=1e7;var a=n/Math.pow(2,32)|0;a>0&&(n=n%Math.pow(2,32),i+=a);var s=H(8);return s.write_shift(4,n),s.write_shift(4,i),s}function V0(e,t){var r=H(4),n=H(4);switch(r.write_shift(4,e==80?31:e),e){case 3:n.write_shift(-4,t);break;case 5:n=H(8),n.write_shift(8,t,"f");break;case 11:n.write_shift(4,t?1:0);break;case 64:n=If(t);break;case 31:case 80:for(n=H(4+2*(t.length+1)+(t.length%2?0:2)),n.write_shift(4,t.length+1),n.write_shift(0,t,"dbcs");n.l!=n.length;)n.write_shift(1,0);break;default:throw new Error("TypedPropertyValue unrecognized type "+e+" "+t)}return qe([r,n])}var Ji=["CodePage","Thumbnail","_PID_LINKBASE","_PID_HLINKS","SystemIdentifier","FMTID"];function Nf(e){switch(typeof e){case"boolean":return 11;case"number":return(e|0)==e?3:5;case"string":return 31;case"object":if(e instanceof Date)return 64;break}return-1}function G0(e,t,r){var n=H(8),i=[],a=[],s=8,f=0,l=H(8),o=H(8);if(l.write_shift(4,2),l.write_shift(4,1200),o.write_shift(4,1),a.push(l),i.push(o),s+=8+l.length,!t){o=H(8),o.write_shift(4,0),i.unshift(o);var h=[H(4)];for(h[0].write_shift(4,e.length),f=0;f-1||Ki.indexOf(e[f][0])>-1)&&e[f][1]!=null){var x=e[f][1],d=0;if(t){d=+t[e[f][0]];var E=r[d];if(E.p=="version"&&typeof x=="string"){var c=x.split(".");x=(+c[0]<<16)+(+c[1]||0)}l=V0(E.t,x)}else{var _=Nf(x);_==-1&&(_=31,x=String(x)),l=V0(_,x)}a.push(l),o=H(8),o.write_shift(4,t?d:2+f),i.push(o),s+=8+l.length}var N=8*(a.length+1);for(f=0;f=12?2:1),i="sbcs-cont";if(r&&r.biff>=8,!r||r.biff==8){var a=e.read_shift(1);a&&(i="dbcs-cont")}else r.biff==12&&(i="wstr");r.biff>=2&&r.biff<=5&&(i="cpstr");var s=n?e.read_shift(n,i):"";return s}function Mf(e){var t=e.t||"",r=H(3);r.write_shift(2,t.length),r.write_shift(1,1);var n=H(2*t.length);n.write_shift(2*t.length,t,"utf16le");var i=[r,n];return qe(i)}function Bf(e,t,r){var n;if(r){if(r.biff>=2&&r.biff<=5)return e.read_shift(t,"cpstr");if(r.biff>=12)return e.read_shift(t,"dbcs-cont")}var i=e.read_shift(1);return i===0?n=e.read_shift(t,"sbcs-cont"):n=e.read_shift(t,"dbcs-cont"),n}function bf(e,t,r){var n=e.read_shift(r&&r.biff==2?1:2);return n===0?(e.l++,""):Bf(e,n,r)}function Uf(e,t,r){if(r.biff>5)return bf(e,t,r);var n=e.read_shift(1);return n===0?(e.l++,""):e.read_shift(n,r.biff<=4||!e.lens?"cpstr":"sbcs-cont")}function ea(e,t,r){return r||(r=H(3+2*e.length)),r.write_shift(2,e.length),r.write_shift(1,1),r.write_shift(31,e,"utf16le"),r}function j0(e,t){t||(t=H(6+e.length*2)),t.write_shift(4,1+e.length);for(var r=0;r-1?31:23;switch(n.charAt(0)){case"#":a=28;break;case".":a&=-3;break}t.write_shift(4,2),t.write_shift(4,a);var s=[8,6815827,6619237,4849780,83];for(r=0;r-1?n.slice(0,i):n;for(t.write_shift(4,2*(f.length+1)),r=0;r-1?n.slice(i+1):"",t)}else{for(s="03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" "),r=0;r8?4:2,i=e.read_shift(n),a=e.read_shift(n,"i"),s=e.read_shift(n,"i");return[i,a,s]}function Vf(e){var t=e.read_shift(2),r=e.read_shift(2),n=e.read_shift(2),i=e.read_shift(2);return{s:{c:n,r:t},e:{c:i,r}}}function ra(e,t){return t||(t=H(8)),t.write_shift(2,e.s.r),t.write_shift(2,e.e.r),t.write_shift(2,e.s.c),t.write_shift(2,e.e.c),t}function n0(e,t,r){var n=1536,i=16;switch(r.bookType){case"biff8":break;case"biff5":n=1280,i=8;break;case"biff4":n=4,i=6;break;case"biff3":n=3,i=6;break;case"biff2":n=2,i=4;break;case"xla":break;default:throw new Error("unsupported BIFF version")}var a=H(i);return a.write_shift(2,n),a.write_shift(2,t),i>4&&a.write_shift(2,29282),i>6&&a.write_shift(2,1997),i>8&&(a.write_shift(2,49161),a.write_shift(2,1),a.write_shift(2,1798),a.write_shift(2,0)),a}function Gf(e,t){var r=!t||t.biff==8,n=H(r?112:54);for(n.write_shift(t.biff==8?2:1,7),r&&n.write_shift(1,0),n.write_shift(4,859007059),n.write_shift(4,5458548|(r?0:536870912));n.l=8?2:1,n=H(8+r*e.name.length);n.write_shift(4,e.pos),n.write_shift(1,e.hs||0),n.write_shift(1,e.dt),n.write_shift(1,e.name.length),t.biff>=8&&n.write_shift(1,1),n.write_shift(r*e.name.length,e.name,t.biff<8?"sbcs":"utf16le");var i=n.slice(0,n.l);return i.l=n.l,i}function jf(e,t){var r=H(8);r.write_shift(4,e.Count),r.write_shift(4,e.Unique);for(var n=[],i=0;in.l?n.slice(0,n.l):n;return a.l==null&&(a.l=a.length),a}function Zf(e,t){var r=t.biff==8||!t.biff?4:2,n=H(2*r+6);return n.write_shift(r,e.s.r),n.write_shift(r,e.e.r+1),n.write_shift(2,e.s.c),n.write_shift(2,e.e.c+1),n.write_shift(2,0),n}function z0(e,t,r,n){var i=r&&r.biff==5;n||(n=H(i?16:20)),n.write_shift(2,0),e.style?(n.write_shift(2,e.numFmtId||0),n.write_shift(2,65524)):(n.write_shift(2,e.numFmtId||0),n.write_shift(2,t<<4));var a=0;return e.numFmtId>0&&i&&(a|=1024),n.write_shift(4,a),n.write_shift(4,0),i||n.write_shift(4,0),n.write_shift(2,0),n}function Qf(e){var t=H(8);return t.write_shift(4,0),t.write_shift(2,0),t.write_shift(2,0),t}function eo(e,t,r,n,i,a){var s=H(8);return Qr(e,t,n,s),Zi(r,a,s),s}function ro(e,t,r,n){var i=H(14);return Qr(e,t,n,i),Zr(r,i),i}function to(e,t,r){if(r.biff<8)return no(e,t,r);for(var n=[],i=e.l+t,a=e.read_shift(r.biff>8?4:2);a--!==0;)n.push(Hf(e,r.biff>8?12:6,r));if(e.l!=i)throw new Error("Bad ExternSheet: "+e.l+" != "+i);return n}function no(e,t,r){e[e.l+1]==3&&e[e.l]++;var n=Qi(e,t,r);return n.charCodeAt(0)==3?n.slice(1):n}function io(e){var t=H(2+e.length*8);t.write_shift(2,e.length);for(var r=0;r=12?4:2,i=e.read_shift(n),a=e.read_shift(n),s=e.read_shift(n),f=e.read_shift(n),l=e.read_shift(2);n==2&&(e.l+=2);var o={s:i,e:a,w:s,ixfe:f,flags:l};return(r.biff>=5||!r.biff)&&(o.level=l>>8&7),o}function lo(e,t){var r=H(12);r.write_shift(2,t),r.write_shift(2,t),r.write_shift(2,e.width*256),r.write_shift(2,0);var n=0;return e.hidden&&(n|=1),r.write_shift(1,n),n=e.level||0,r.write_shift(1,n),r.write_shift(2,0),r}function ho(e){for(var t=H(2*e),r=0;r1048576&&(c=1e6),p!=2&&(_=h.read_shift(2));var N=h.read_shift(2),I=l.codepage||1252;p!=2&&(h.l+=16,h.read_shift(1),h[h.l]!==0&&(I=e[h[h.l]]),h.l+=1,h.l+=2),E&&(h.l+=36);for(var D=[],W={},z=Math.min(h.length,p==2?521:_-10-(d?264:0)),re=E?32:11;h.l0;){if(h[h.l]===42){h.l+=N;continue}for(++h.l,o[++k]=[],T=0,T=0;T!=D.length;++T){var g=h.slice(h.l,h.l+D[T].len);h.l+=D[T].len,vr(g,0);var y=sn.utils.decode(I,g);switch(D[T].type){case"C":y.trim().length&&(o[k][T]=y.replace(/\s+$/,""));break;case"D":y.length===8?o[k][T]=new Date(+y.slice(0,4),+y.slice(4,6)-1,+y.slice(6,8)):o[k][T]=y;break;case"F":o[k][T]=parseFloat(y.trim());break;case"+":case"I":o[k][T]=E?g.read_shift(-4,"i")^2147483648:g.read_shift(4,"i");break;case"L":switch(y.trim().toUpperCase()){case"Y":case"T":o[k][T]=!0;break;case"N":case"F":o[k][T]=!1;break;case"":case"?":break;default:throw new Error("DBF Unrecognized L:|"+y+"|")}break;case"M":if(!x)throw new Error("DBF Unexpected MEMO for type "+p.toString(16));o[k][T]="##MEMO##"+(E?parseInt(y.trim(),10):g.read_shift(4));break;case"N":y=y.replace(/\u0000/g,"").trim(),y&&y!="."&&(o[k][T]=+y||0);break;case"@":o[k][T]=new Date(g.read_shift(-8,"f")-621356832e5);break;case"T":o[k][T]=new Date((g.read_shift(4)-2440588)*864e5+g.read_shift(4));break;case"Y":o[k][T]=g.read_shift(4,"i")/1e4+g.read_shift(4,"i")/1e4*Math.pow(2,32);break;case"O":o[k][T]=-g.read_shift(-8,"f");break;case"B":if(d&&D[T].len==8){o[k][T]=g.read_shift(8,"f");break}case"G":case"P":g.l+=D[T].len;break;case"0":if(D[T].name==="_NullFlags")break;default:throw new Error("DBF Unsupported data type "+D[T].type)}}}if(p!=2&&h.l=0&&Lt(+o.codepage),o.type=="string")throw new Error("Cannot write DBF to JS string");var h=lr(),p=_n(f,{header:1,raw:!0,cellDates:!0}),x=p[0],d=p.slice(1),E=f["!cols"]||[],c=0,_=0,N=0,I=1;for(c=0;c250&&(g=250),T=((E[c]||{}).DBF||{}).type,T=="C"&&E[c].DBF.len>g&&(g=E[c].DBF.len),k=="B"&&T=="N"&&(k="N",re[c]=E[c].DBF.dec,g=E[c].DBF.len),z[c]=k=="C"||T=="N"?g:a[k]||0,I+=z[c],W[c]=k}var L=h.next(32);for(L.write_shift(4,318902576),L.write_shift(4,d.length),L.write_shift(2,296+32*N),L.write_shift(2,I),c=0;c<4;++c)L.write_shift(4,0);for(L.write_shift(4,0|(+t[ni]||3)<<8),c=0,_=0;c":190,"?":191,"{":223},t=new RegExp("\x1BN("+er(e).join("|").replace(/\|\|\|/,"|\\||").replace(/([?()+])/g,"\\$1")+"|\\|)","gm"),r=function(x,d){var E=e[d];return typeof E=="number"?v0(E):E},n=function(x,d,E){var c=d.charCodeAt(0)-32<<4|E.charCodeAt(0)-48;return c==59?x:v0(c)};e["|"]=254;function i(x,d){switch(d.type){case"base64":return a(Br(x),d);case"binary":return a(x,d);case"buffer":return a(Ae&&Buffer.isBuffer(x)?x.toString("binary"):Ht(x),d);case"array":return a(An(x),d)}throw new Error("Unrecognized type "+d.type)}function a(x,d){var E=x.split(/[\n\r]+/),c=-1,_=-1,N=0,I=0,D=[],W=[],z=null,re={},k=[],T=[],g=[],y=0,L;for(+d.codepage>=0&&Lt(+d.codepage);N!==E.length;++N){y=0;var P=E[N].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g,n).replace(t,r),X=P.replace(/;;/g,"\0").split(";").map(function(C){return C.replace(/\u0000/g,";")}),ve=X[0],xe;if(P.length>0)switch(ve){case"ID":break;case"E":break;case"B":break;case"O":break;case"W":break;case"P":X[1].charAt(0)=="P"&&W.push(P.slice(3).replace(/;;/g,";"));break;case"C":var Fe=!1,le=!1,Ee=!1,oe=!1,ye=-1,de=-1;for(I=1;I-1&&D[ye][de];if(!O||!O[1])throw new Error("SYLK shared formula cannot find base");D[c][_][1]=dl(O[1],{r:c-ye,c:_-de})}break;case"F":var R=0;for(I=1;I0?(k[c].hpt=y,k[c].hpx=sa(y)):y===0&&(k[c].hidden=!0);break;default:if(d&&d.WTF)throw new Error("SYLK bad record "+P)}R<1&&(z=null);break;default:if(d&&d.WTF)throw new Error("SYLK bad record "+P)}}return k.length>0&&(re["!rows"]=k),T.length>0&&(re["!cols"]=T),d&&d.sheetRows&&(D=D.slice(0,d.sheetRows)),[D,re]}function s(x,d){var E=i(x,d),c=E[0],_=E[1],N=gt(c,d);return er(_).forEach(function(I){N[I]=_[I]}),N}function f(x,d){return rt(s(x,d),d)}function l(x,d,E,c){var _="C;Y"+(E+1)+";X"+(c+1)+";K";switch(x.t){case"n":_+=x.v||0,x.f&&!x.F&&(_+=";E"+s0(x.f,{r:E,c}));break;case"b":_+=x.v?"TRUE":"FALSE";break;case"e":_+=x.w||x.v;break;case"d":_+='"'+(x.w||x.v)+'"';break;case"s":_+='"'+x.v.replace(/"/g,"").replace(/;/g,";;")+'"';break}return _}function o(x,d){d.forEach(function(E,c){var _="F;W"+(c+1)+" "+(c+1)+" ";E.hidden?_+="0":(typeof E.width=="number"&&!E.wpx&&(E.wpx=pn(E.width)),typeof E.wpx=="number"&&!E.wch&&(E.wch=vn(E.wpx)),typeof E.wch=="number"&&(_+=Math.round(E.wch))),_.charAt(_.length-1)!=" "&&x.push(_)})}function h(x,d){d.forEach(function(E,c){var _="F;";E.hidden?_+="M0;":E.hpt?_+="M"+20*E.hpt+";":E.hpx&&(_+="M"+20*gn(E.hpx)+";"),_.length>2&&x.push(_+"R"+(c+1))})}function p(x,d){var E=["ID;PWXL;N;E"],c=[],_=Le(x["!ref"]),N,I=Array.isArray(x),D=`\r -`;E.push("P;PGeneral"),E.push("F;P0;DG0G8;M255"),x["!cols"]&&o(E,x["!cols"]),x["!rows"]&&h(E,x["!rows"]),E.push("B;Y"+(_.e.r-_.s.r+1)+";X"+(_.e.c-_.s.c+1)+";D"+[_.s.c,_.s.r,_.e.c,_.e.r].join(" "));for(var W=_.s.r;W<=_.e.r;++W)for(var z=_.s.c;z<=_.e.c;++z){var re=Re({r:W,c:z});N=I?(x[W]||[])[z]:x[re],!(!N||N.v==null&&(!N.f||N.F))&&c.push(l(N,x,W,z))}return E.join(D)+D+c.join(D)+D+"E"+D}return{to_workbook:f,to_sheet:s,from_sheet:p}}(),vo=function(){function e(a,s){switch(s.type){case"base64":return t(Br(a),s);case"binary":return t(a,s);case"buffer":return t(Ae&&Buffer.isBuffer(a)?a.toString("binary"):Ht(a),s);case"array":return t(An(a),s)}throw new Error("Unrecognized type "+s.type)}function t(a,s){for(var f=a.split(` -`),l=-1,o=-1,h=0,p=[];h!==f.length;++h){if(f[h].trim()==="BOT"){p[++l]=[],o=0;continue}if(!(l<0)){var x=f[h].trim().split(","),d=x[0],E=x[1];++h;for(var c=f[h]||"";(c.match(/["]/g)||[]).length&1&&h=0&&E[c].length===0;)--c;for(var _=10,N=0,I=0;I<=c;++I)N=E[I].indexOf(" "),N==-1?N=E[I].length:N++,_=Math.max(_,N);for(I=0;I<=c;++I){d[I]=[];var D=0;for(e(E[I].slice(0,_).trim(),d,I,D,x),D=1;D<=(E[I].length-_)/10+1;++D)e(E[I].slice(_+(D-1)*10,_+D*10).trim(),d,I,D,x)}return x.sheetRows&&(d=d.slice(0,x.sheetRows)),d}var r={44:",",9:" ",59:";",124:"|"},n={44:3,9:2,59:1,124:0};function i(h){for(var p={},x=!1,d=0,E=0;d0&&y(),E["!ref"]=He(c),E}function s(h,p){return!(p&&p.PRN)||p.FS||h.slice(0,4)=="sep="||h.indexOf(" ")>=0||h.indexOf(",")>=0||h.indexOf(";")>=0?a(h,p):gt(t(h,p),p)}function f(h,p){var x="",d=p.type=="string"?[0,0,0,0]:k1(h,p);switch(p.type){case"base64":x=Br(h);break;case"binary":x=h;break;case"buffer":p.codepage==65001?x=h.toString("utf8"):p.codepage&&typeof sn<"u"||(x=Ae&&Buffer.isBuffer(h)?h.toString("binary"):Ht(h));break;case"array":x=An(h);break;case"string":x=h;break;default:throw new Error("Unrecognized type "+p.type)}return d[0]==239&&d[1]==187&&d[2]==191?x=kt(x.slice(3)):p.type!="string"&&p.type!="buffer"&&p.codepage==65001?x=kt(x):p.type=="binary"&&typeof sn<"u",x.slice(0,19)=="socialcalc:version:"?ta.to_sheet(p.type=="string"?x:kt(x),p):s(x,p)}function l(h,p){return rt(f(h,p),p)}function o(h){for(var p=[],x=Le(h["!ref"]),d,E=Array.isArray(h),c=x.s.r;c<=x.e.r;++c){for(var _=[],N=x.s.c;N<=x.e.c;++N){var I=Re({r:c,c:N});if(d=E?(h[c]||[])[N]:h[I],!d||d.v==null){_.push(" ");continue}for(var D=(d.w||(br(d),d.w)||"").slice(0,10);D.length<10;)D+=" ";_.push(D+(N===0?" ":""))}p.push(_.join(""))}return p.join(` -`)}return{to_workbook:l,to_sheet:f,from_sheet:o}}(),K0=function(){function e(F,O,R){if(F){vr(F,F.l||0);for(var C=R.Enum||ye;F.l=16&&F[14]==5&&F[15]===108)throw new Error("Unsupported Works 3 for Mac file");if(F[2]==2)R.Enum=ye,e(F,function(ne,pe,we){switch(we){case 0:R.vers=ne,ne>=4096&&(R.qpro=!0);break;case 6:ue=ne;break;case 204:ne&&(ie=ne);break;case 222:ie=ne;break;case 15:case 51:R.qpro||(ne[1].v=ne[1].v.slice(1));case 13:case 14:case 16:we==14&&(ne[2]&112)==112&&(ne[2]&15)>1&&(ne[2]&15)<15&&(ne[1].z=R.dateNF||Ue[14],R.cellDates&&(ne[1].t="d",ne[1].v=_i(ne[1].v))),R.qpro&&ne[3]>q&&(C["!ref"]=He(ue),Y[V]=C,K.push(V),C=R.dense?[]:{},ue={s:{r:0,c:0},e:{r:0,c:0}},q=ne[3],V=ie||"Sheet"+(q+1),ie="");var rr=R.dense?(C[ne[0].r]||[])[ne[0].c]:C[Re(ne[0])];if(rr){rr.t=ne[1].t,rr.v=ne[1].v,ne[1].z!=null&&(rr.z=ne[1].z),ne[1].f!=null&&(rr.f=ne[1].f);break}R.dense?(C[ne[0].r]||(C[ne[0].r]=[]),C[ne[0].r][ne[0].c]=ne[1]):C[Re(ne[0])]=ne[1];break}},R);else if(F[2]==26||F[2]==14)R.Enum=de,F[2]==14&&(R.qpro=!0,F.l=0),e(F,function(ne,pe,we){switch(we){case 204:V=ne;break;case 22:ne[1].v=ne[1].v.slice(1);case 23:case 24:case 25:case 37:case 39:case 40:if(ne[3]>q&&(C["!ref"]=He(ue),Y[V]=C,K.push(V),C=R.dense?[]:{},ue={s:{r:0,c:0},e:{r:0,c:0}},q=ne[3],V="Sheet"+(q+1)),Te>0&&ne[0].r>=Te)break;R.dense?(C[ne[0].r]||(C[ne[0].r]=[]),C[ne[0].r][ne[0].c]=ne[1]):C[Re(ne[0])]=ne[1],ue.e.c=0&&Lt(+R.codepage),R.type=="string")throw new Error("Cannot write WK1 to JS string");var C=lr(),V=Le(F["!ref"]),ie=Array.isArray(F),q=[];ee(C,0,a(1030)),ee(C,6,l(V));for(var Y=Math.min(V.e.r,8191),K=V.s.r;K<=Y;++K)for(var ae=Qe(K),ue=V.s.c;ue<=V.e.c;++ue){K===V.s.r&&(q[ue]=nr(ue));var Te=q[ue]+ae,he=ie?(F[K]||[])[ue]:F[Te];if(!(!he||he.t=="z"))if(he.t=="n")(he.v|0)==he.v&&he.v>=-32768&&he.v<=32767?ee(C,13,d(K,ue,he.v)):ee(C,14,c(K,ue,he.v));else{var _e=br(he);ee(C,15,p(K,ue,_e.slice(0,239)))}}return ee(C,1),C.end()}function i(F,O){var R=O||{};if(+R.codepage>=0&&Lt(+R.codepage),R.type=="string")throw new Error("Cannot write WK3 to JS string");var C=lr();ee(C,0,s(F));for(var V=0,ie=0;V8191&&(R=8191),O.write_shift(2,R),O.write_shift(1,V),O.write_shift(1,C),O.write_shift(2,0),O.write_shift(2,0),O.write_shift(1,1),O.write_shift(1,2),O.write_shift(4,0),O.write_shift(4,0),O}function f(F,O,R){var C={s:{c:0,r:0},e:{c:0,r:0}};return O==8&&R.qpro?(C.s.c=F.read_shift(1),F.l++,C.s.r=F.read_shift(2),C.e.c=F.read_shift(1),F.l++,C.e.r=F.read_shift(2),C):(C.s.c=F.read_shift(2),C.s.r=F.read_shift(2),O==12&&R.qpro&&(F.l+=2),C.e.c=F.read_shift(2),C.e.r=F.read_shift(2),O==12&&R.qpro&&(F.l+=2),C.s.c==65535&&(C.s.c=C.e.c=C.s.r=C.e.r=0),C)}function l(F){var O=H(8);return O.write_shift(2,F.s.c),O.write_shift(2,F.s.r),O.write_shift(2,F.e.c),O.write_shift(2,F.e.r),O}function o(F,O,R){var C=[{c:0,r:0},{t:"n",v:0},0,0];return R.qpro&&R.vers!=20768?(C[0].c=F.read_shift(1),C[3]=F.read_shift(1),C[0].r=F.read_shift(2),F.l+=2):(C[2]=F.read_shift(1),C[0].c=F.read_shift(2),C[0].r=F.read_shift(2)),C}function h(F,O,R){var C=F.l+O,V=o(F,O,R);if(V[1].t="s",R.vers==20768){F.l++;var ie=F.read_shift(1);return V[1].v=F.read_shift(ie,"utf8"),V}return R.qpro&&F.l++,V[1].v=F.read_shift(C-F.l,"cstr"),V}function p(F,O,R){var C=H(7+R.length);C.write_shift(1,255),C.write_shift(2,O),C.write_shift(2,F),C.write_shift(1,39);for(var V=0;V=128?95:ie)}return C.write_shift(1,0),C}function x(F,O,R){var C=o(F,O,R);return C[1].v=F.read_shift(2,"i"),C}function d(F,O,R){var C=H(7);return C.write_shift(1,255),C.write_shift(2,O),C.write_shift(2,F),C.write_shift(2,R,"i"),C}function E(F,O,R){var C=o(F,O,R);return C[1].v=F.read_shift(8,"f"),C}function c(F,O,R){var C=H(13);return C.write_shift(1,255),C.write_shift(2,O),C.write_shift(2,F),C.write_shift(8,R,"f"),C}function _(F,O,R){var C=F.l+O,V=o(F,O,R);if(V[1].v=F.read_shift(8,"f"),R.qpro)F.l=C;else{var ie=F.read_shift(2);W(F.slice(F.l,F.l+ie),V),F.l+=ie}return V}function N(F,O,R){var C=O&32768;return O&=-32769,O=(C?F:0)+(O>=8192?O-16384:O),(C?"":"$")+(R?nr(O):Qe(O))}var I={51:["FALSE",0],52:["TRUE",0],70:["LEN",1],80:["SUM",69],81:["AVERAGEA",69],82:["COUNTA",69],83:["MINA",69],84:["MAXA",69],111:["T",1]},D=["","","","","","","","","","+","-","*","/","^","=","<>","<=",">=","<",">","","","","","&","","","","","","",""];function W(F,O){vr(F,0);for(var R=[],C=0,V="",ie="",q="",Y="";F.lR.length){console.error("WK1 bad formula parse 0x"+K.toString(16)+":|"+R.join("|")+"|");return}var he=R.slice(-C);R.length-=C,R.push(I[K][0]+"("+he.join(",")+")")}else return K<=7?console.error("WK1 invalid opcode "+K.toString(16)):K<=24?console.error("WK1 unsupported op "+K.toString(16)):K<=30?console.error("WK1 invalid opcode "+K.toString(16)):K<=115?console.error("WK1 unsupported function opcode "+K.toString(16)):console.error("WK1 unrecognized opcode "+K.toString(16))}}R.length==1?O[1].f=""+R[0]:console.error("WK1 bad formula parse |"+R.join("|")+"|")}function z(F){var O=[{c:0,r:0},{t:"n",v:0},0];return O[0].r=F.read_shift(2),O[3]=F[F.l++],O[0].c=F[F.l++],O}function re(F,O){var R=z(F);return R[1].t="s",R[1].v=F.read_shift(O-4,"cstr"),R}function k(F,O,R,C){var V=H(6+C.length);V.write_shift(2,F),V.write_shift(1,R),V.write_shift(1,O),V.write_shift(1,39);for(var ie=0;ie=128?95:q)}return V.write_shift(1,0),V}function T(F,O){var R=z(F);R[1].v=F.read_shift(2);var C=R[1].v>>1;if(R[1].v&1)switch(C&7){case 0:C=(C>>3)*5e3;break;case 1:C=(C>>3)*500;break;case 2:C=(C>>3)/20;break;case 3:C=(C>>3)/200;break;case 4:C=(C>>3)/2e3;break;case 5:C=(C>>3)/2e4;break;case 6:C=(C>>3)/16;break;case 7:C=(C>>3)/64;break}return R[1].v=C,R}function g(F,O){var R=z(F),C=F.read_shift(4),V=F.read_shift(4),ie=F.read_shift(2);if(ie==65535)return C===0&&V===3221225472?(R[1].t="e",R[1].v=15):C===0&&V===3489660928?(R[1].t="e",R[1].v=42):R[1].v=0,R;var q=ie&32768;return ie=(ie&32767)-16446,R[1].v=(1-q*2)*(V*Math.pow(2,ie+32)+C*Math.pow(2,ie)),R}function y(F,O,R,C){var V=H(14);if(V.write_shift(2,F),V.write_shift(1,R),V.write_shift(1,O),C==0)return V.write_shift(4,0),V.write_shift(4,0),V.write_shift(2,65535),V;var ie=0,q=0,Y=0,K=0;return C<0&&(ie=1,C=-C),q=Math.log2(C)|0,C/=Math.pow(2,q-31),K=C>>>0,(K&2147483648)==0&&(C/=2,++q,K=C>>>0),C-=K,K|=2147483648,K>>>=0,C*=Math.pow(2,32),Y=C>>>0,V.write_shift(4,Y),V.write_shift(4,K),q+=16383+(ie?32768:0),V.write_shift(2,q),V}function L(F,O){var R=g(F);return F.l+=O-14,R}function P(F,O){var R=z(F),C=F.read_shift(4);return R[1].v=C>>6,R}function X(F,O){var R=z(F),C=F.read_shift(8,"f");return R[1].v=C,R}function ve(F,O){var R=X(F);return F.l+=O-10,R}function xe(F,O){return F[F.l+O-1]==0?F.read_shift(O,"cstr"):""}function Fe(F,O){var R=F[F.l++];R>O-1&&(R=O-1);for(var C="";C.length127?95:V}return R[R.l++]=0,R}var ye={0:{n:"BOF",f:qi},1:{n:"EOF"},2:{n:"CALCMODE"},3:{n:"CALCORDER"},4:{n:"SPLIT"},5:{n:"SYNC"},6:{n:"RANGE",f},7:{n:"WINDOW1"},8:{n:"COLW1"},9:{n:"WINTWO"},10:{n:"COLW2"},11:{n:"NAME"},12:{n:"BLANK"},13:{n:"INTEGER",f:x},14:{n:"NUMBER",f:E},15:{n:"LABEL",f:h},16:{n:"FORMULA",f:_},24:{n:"TABLE"},25:{n:"ORANGE"},26:{n:"PRANGE"},27:{n:"SRANGE"},28:{n:"FRANGE"},29:{n:"KRANGE1"},32:{n:"HRANGE"},35:{n:"KRANGE2"},36:{n:"PROTEC"},37:{n:"FOOTER"},38:{n:"HEADER"},39:{n:"SETUP"},40:{n:"MARGINS"},41:{n:"LABELFMT"},42:{n:"TITLES"},43:{n:"SHEETJS"},45:{n:"GRAPH"},46:{n:"NGRAPH"},47:{n:"CALCCOUNT"},48:{n:"UNFORMATTED"},49:{n:"CURSORW12"},50:{n:"WINDOW"},51:{n:"STRING",f:h},55:{n:"PASSWORD"},56:{n:"LOCKED"},60:{n:"QUERY"},61:{n:"QUERYNAME"},62:{n:"PRINT"},63:{n:"PRINTNAME"},64:{n:"GRAPH2"},65:{n:"GRAPHNAME"},66:{n:"ZOOM"},67:{n:"SYMSPLIT"},68:{n:"NSROWS"},69:{n:"NSCOLS"},70:{n:"RULER"},71:{n:"NNAME"},72:{n:"ACOMM"},73:{n:"AMACRO"},74:{n:"PARSE"},102:{n:"PRANGES??"},103:{n:"RRANGES??"},104:{n:"FNAME??"},105:{n:"MRANGES??"},204:{n:"SHEETNAMECS",f:xe},222:{n:"SHEETNAMELP",f:Fe},65535:{n:""}},de={0:{n:"BOF"},1:{n:"EOF"},2:{n:"PASSWORD"},3:{n:"CALCSET"},4:{n:"WINDOWSET"},5:{n:"SHEETCELLPTR"},6:{n:"SHEETLAYOUT"},7:{n:"COLUMNWIDTH"},8:{n:"HIDDENCOLUMN"},9:{n:"USERRANGE"},10:{n:"SYSTEMRANGE"},11:{n:"ZEROFORCE"},12:{n:"SORTKEYDIR"},13:{n:"FILESEAL"},14:{n:"DATAFILLNUMS"},15:{n:"PRINTMAIN"},16:{n:"PRINTSTRING"},17:{n:"GRAPHMAIN"},18:{n:"GRAPHSTRING"},19:{n:"??"},20:{n:"ERRCELL"},21:{n:"NACELL"},22:{n:"LABEL16",f:re},23:{n:"NUMBER17",f:g},24:{n:"NUMBER18",f:T},25:{n:"FORMULA19",f:L},26:{n:"FORMULA1A"},27:{n:"XFORMAT",f:Ee},28:{n:"DTLABELMISC"},29:{n:"DTLABELCELL"},30:{n:"GRAPHWINDOW"},31:{n:"CPA"},32:{n:"LPLAUTO"},33:{n:"QUERY"},34:{n:"HIDDENSHEET"},35:{n:"??"},37:{n:"NUMBER25",f:P},38:{n:"??"},39:{n:"NUMBER27",f:X},40:{n:"FORMULA28",f:ve},142:{n:"??"},147:{n:"??"},150:{n:"??"},151:{n:"??"},152:{n:"??"},153:{n:"??"},154:{n:"??"},155:{n:"??"},156:{n:"??"},163:{n:"??"},174:{n:"??"},175:{n:"??"},176:{n:"??"},177:{n:"??"},184:{n:"??"},185:{n:"??"},186:{n:"??"},187:{n:"??"},188:{n:"??"},195:{n:"??"},201:{n:"??"},204:{n:"SHEETNAMECS",f:xe},205:{n:"??"},206:{n:"??"},207:{n:"??"},208:{n:"??"},256:{n:"??"},259:{n:"??"},260:{n:"??"},261:{n:"??"},262:{n:"??"},263:{n:"??"},265:{n:"??"},266:{n:"??"},267:{n:"??"},268:{n:"??"},270:{n:"??"},271:{n:"??"},384:{n:"??"},389:{n:"??"},390:{n:"??"},393:{n:"??"},396:{n:"??"},512:{n:"??"},514:{n:"??"},513:{n:"??"},516:{n:"??"},517:{n:"??"},640:{n:"??"},641:{n:"??"},642:{n:"??"},643:{n:"??"},644:{n:"??"},645:{n:"??"},646:{n:"??"},647:{n:"??"},648:{n:"??"},658:{n:"??"},659:{n:"??"},660:{n:"??"},661:{n:"??"},662:{n:"??"},665:{n:"??"},666:{n:"??"},768:{n:"??"},772:{n:"??"},1537:{n:"SHEETINFOQP",f:le},1600:{n:"??"},1602:{n:"??"},1793:{n:"??"},1794:{n:"??"},1795:{n:"??"},1796:{n:"??"},1920:{n:"??"},2048:{n:"??"},2049:{n:"??"},2052:{n:"??"},2688:{n:"??"},10998:{n:"??"},12849:{n:"??"},28233:{n:"??"},28484:{n:"??"},65535:{n:""}};return{sheet_to_wk1:n,book_to_wk3:i,to_workbook:t}}(),mo=/^\s|\s$|[\t\n\r]/;function na(e,t){if(!t.bookSST)return"";var r=[Ve];r[r.length]=Q("sst",null,{xmlns:vt[0],count:e.Count,uniqueCount:e.Unique});for(var n=0;n!=e.length;++n)if(e[n]!=null){var i=e[n],a="";i.r?a+=i.r:(a+=""),a+="",r[r.length]=a}return r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}function _o(e){return[e.read_shift(4),e.read_shift(4)]}function To(e,t){return t||(t=H(8)),t.write_shift(4,e.Count),t.write_shift(4,e.Unique),t}var Eo=hf;function wo(e){var t=lr();j(t,159,To(e));for(var r=0;r=0;--a)s=r[a],f=(t&16384)===0?0:1,l=t<<1&32767,o=f|l,t=o^s;return t^52811}var Ao=function(){function e(i,a){switch(a.type){case"base64":return t(Br(i),a);case"binary":return t(i,a);case"buffer":return t(Ae&&Buffer.isBuffer(i)?i.toString("binary"):Ht(i),a);case"array":return t(An(i),a)}throw new Error("Unrecognized type "+a.type)}function t(i,a){var s=a||{},f=s.dense?[]:{},l=i.match(/\\trowd.*?\\row\b/g);if(!l.length)throw new Error("RTF missing table");var o={s:{c:0,r:0},e:{c:0,r:l.length-1}};return l.forEach(function(h,p){Array.isArray(f)&&(f[p]=[]);for(var x=/\\\w+\b/g,d=0,E,c=-1;E=x.exec(h);){switch(E[0]){case"\\cell":var _=h.slice(d,x.lastIndex-E[0].length);if(_[0]==" "&&(_=_.slice(1)),++c,_.length){var N={v:_,t:"s"};Array.isArray(f)?f[p][c]=N:f[Re({r:p,c})]=N}break}d=x.lastIndex}c>o.e.c&&(o.e.c=c)}),f["!ref"]=He(o),f}function r(i,a){return rt(e(i,a),a)}function n(i){for(var a=["{\\rtf1\\ansi"],s=Le(i["!ref"]),f,l=Array.isArray(i),o=s.s.r;o<=s.e.r;++o){a.push("\\trowd\\trautofit1");for(var h=s.s.c;h<=s.e.c;++h)a.push("\\cellx"+(h+1));for(a.push("\\pard\\intbl"),h=s.s.c;h<=s.e.c;++h){var p=Re({r:o,c:h});f=l?(i[o]||[])[h]:i[p],!(!f||f.v==null&&(!f.f||f.F))&&(a.push(" "+(f.w||(br(f),f.w))),a.push("\\cell"))}a.push("\\pard\\intbl\\row")}return a.join("")+"}"}return{to_workbook:r,to_sheet:e,from_sheet:n}}();function $0(e){for(var t=0,r=1;t!=3;++t)r=r*256+(e[t]>255?255:e[t]<0?0:e[t]);return r.toString(16).toUpperCase().slice(1)}var Fo=6,Mr=Fo;function pn(e){return Math.floor((e+Math.round(128/Mr)/256)*Mr)}function vn(e){return Math.floor((e-5)/Mr*100+.5)/100}function Gn(e){return Math.round((e*Mr+5)/Mr*256)/256}function i0(e){e.width?(e.wpx=pn(e.width),e.wch=vn(e.wpx),e.MDW=Mr):e.wpx?(e.wch=vn(e.wpx),e.width=Gn(e.wch),e.MDW=Mr):typeof e.wch=="number"&&(e.width=Gn(e.wch),e.wpx=pn(e.width),e.MDW=Mr),e.customWidth&&delete e.customWidth}var yo=96,aa=yo;function gn(e){return e*96/aa}function sa(e){return e*aa/96}function Co(e){var t=[""];return[[5,8],[23,26],[41,44],[50,392]].forEach(function(r){for(var n=r[0];n<=r[1];++n)e[n]!=null&&(t[t.length]=Q("numFmt",null,{numFmtId:n,formatCode:ke(e[n])}))}),t.length===1?"":(t[t.length]="",t[0]=Q("numFmts",null,{count:t.length-2}).replace("/>",">"),t.join(""))}function Oo(e){var t=[];return t[t.length]=Q("cellXfs",null),e.forEach(function(r){t[t.length]=Q("xf",null,r)}),t[t.length]="",t.length===2?"":(t[0]=Q("cellXfs",null,{count:t.length-2}).replace("/>",">"),t.join(""))}function fa(e,t){var r=[Ve,Q("styleSheet",null,{xmlns:vt[0],"xmlns:vt":je.vt})],n;return e.SSF&&(n=Co(e.SSF))!=null&&(r[r.length]=n),r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',(n=Oo(t.cellXfs))&&(r[r.length]=n),r[r.length]='',r[r.length]='',r[r.length]='',r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}function ko(e,t){var r=e.read_shift(2),n=ir(e);return[r,n]}function Ro(e,t,r){r||(r=H(6+4*t.length)),r.write_shift(2,e),Ke(t,r);var n=r.length>r.l?r.slice(0,r.l):r;return r.l==null&&(r.l=r.length),n}function Do(e,t,r){var n={};n.sz=e.read_shift(2)/20;var i=gf(e);i.fItalic&&(n.italic=1),i.fCondense&&(n.condense=1),i.fExtend&&(n.extend=1),i.fShadow&&(n.shadow=1),i.fOutline&&(n.outline=1),i.fStrikeout&&(n.strike=1);var a=e.read_shift(2);switch(a===700&&(n.bold=1),e.read_shift(2)){case 1:n.vertAlign="superscript";break;case 2:n.vertAlign="subscript";break}var s=e.read_shift(1);s!=0&&(n.underline=s);var f=e.read_shift(1);f>0&&(n.family=f);var l=e.read_shift(1);switch(l>0&&(n.charset=l),e.l++,n.color=vf(e),e.read_shift(1)){case 1:n.scheme="major";break;case 2:n.scheme="minor";break}return n.name=ir(e),n}function Io(e,t){t||(t=H(25+4*32)),t.write_shift(2,e.sz*20),mf(e,t),t.write_shift(2,e.bold?700:400);var r=0;e.vertAlign=="superscript"?r=1:e.vertAlign=="subscript"&&(r=2),t.write_shift(2,r),t.write_shift(1,e.underline||0),t.write_shift(1,e.family||0),t.write_shift(1,e.charset||0),t.write_shift(1,0),xn(e.color,t);var n=0;return n=2,t.write_shift(1,n),Ke(e.name,t),t.length>t.l?t.slice(0,t.l):t}var No=["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"],Pn,Lo=Rr;function Y0(e,t){t||(t=H(4*3+8*7+16*1)),Pn||(Pn=zn(No));var r=Pn[e.patternType];r==null&&(r=40),t.write_shift(4,r);var n=0;if(r!=40)for(xn({auto:1},t),xn({auto:1},t);n<12;++n)t.write_shift(4,0);else{for(;n<4;++n)t.write_shift(4,0);for(;n<12;++n)t.write_shift(4,0)}return t.length>t.l?t.slice(0,t.l):t}function Po(e,t){var r=e.l+t,n=e.read_shift(2),i=e.read_shift(2);return e.l=r,{ixfe:n,numFmtId:i}}function oa(e,t,r){r||(r=H(16)),r.write_shift(2,t||0),r.write_shift(2,e.numFmtId||0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(1,0),r.write_shift(1,0);var n=0;return r.write_shift(1,n),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r}function yt(e,t){return t||(t=H(10)),t.write_shift(1,0),t.write_shift(1,0),t.write_shift(4,0),t.write_shift(4,0),t}var Mo=Rr;function Bo(e,t){return t||(t=H(51)),t.write_shift(1,0),yt(null,t),yt(null,t),yt(null,t),yt(null,t),yt(null,t),t.length>t.l?t.slice(0,t.l):t}function bo(e,t){return t||(t=H(12+4*10)),t.write_shift(4,e.xfId),t.write_shift(2,1),t.write_shift(1,0),t.write_shift(1,0),un(e.name||"",t),t.length>t.l?t.slice(0,t.l):t}function Uo(e,t,r){var n=H(2052);return n.write_shift(4,e),un(t,n),un(r,n),n.length>n.l?n.slice(0,n.l):n}function Wo(e,t){if(t){var r=0;[[5,8],[23,26],[41,44],[50,392]].forEach(function(n){for(var i=n[0];i<=n[1];++i)t[i]!=null&&++r}),r!=0&&(j(e,615,Cr(r)),[[5,8],[23,26],[41,44],[50,392]].forEach(function(n){for(var i=n[0];i<=n[1];++i)t[i]!=null&&j(e,44,Ro(i,t[i]))}),j(e,616))}}function Ho(e){var t=1;j(e,611,Cr(t)),j(e,43,Io({sz:12,color:{theme:1},name:"Calibri",family:2})),j(e,612)}function Vo(e){var t=2;j(e,603,Cr(t)),j(e,45,Y0({patternType:"none"})),j(e,45,Y0({patternType:"gray125"})),j(e,604)}function Go(e){var t=1;j(e,613,Cr(t)),j(e,46,Bo()),j(e,614)}function Xo(e){var t=1;j(e,626,Cr(t)),j(e,47,oa({numFmtId:0},65535)),j(e,627)}function jo(e,t){j(e,617,Cr(t.length)),t.forEach(function(r){j(e,47,oa(r,0))}),j(e,618)}function zo(e){var t=1;j(e,619,Cr(t)),j(e,48,bo({xfId:0,name:"Normal"})),j(e,620)}function Ko(e){var t=0;j(e,505,Cr(t)),j(e,506)}function $o(e){var t=0;j(e,508,Uo(t,"TableStyleMedium9","PivotStyleMedium4")),j(e,509)}function Yo(e,t){var r=lr();return j(r,278),Wo(r,e.SSF),Ho(r),Vo(r),Go(r),Xo(r),jo(r,t.cellXfs),zo(r),Ko(r),$o(r),j(r,279),r.end()}function la(e,t){if(t&&t.themeXLSX)return t.themeXLSX;if(e&&typeof e.raw=="string")return e.raw;var r=[Ve];return r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r.join("")}function Jo(e,t){return{flags:e.read_shift(4),version:e.read_shift(4),name:ir(e)}}function qo(e){var t=H(12+2*e.name.length);return t.write_shift(4,e.flags),t.write_shift(4,e.version),Ke(e.name,t),t.slice(0,t.l)}function Zo(e){for(var t=[],r=e.read_shift(4);r-- >0;)t.push([e.read_shift(4),e.read_shift(4)]);return t}function Qo(e){var t=H(4+8*e.length);t.write_shift(4,e.length);for(var r=0;r - - - - - - - - - - - - - - - - - -`),e.join("")}function il(e){var t={};t.i=e.read_shift(4);var r={};r.r=e.read_shift(4),r.c=e.read_shift(4),t.r=Re(r);var n=e.read_shift(1);return n&2&&(t.l="1"),n&8&&(t.a="1"),t}var ht=1024;function ca(e,t){for(var r=[21600,21600],n=["m0,0l0",r[1],r[0],r[1],r[0],"0xe"].join(","),i=[Q("xml",null,{"xmlns:v":gr.v,"xmlns:o":gr.o,"xmlns:x":gr.x,"xmlns:mv":gr.mv}).replace(/\/>/,">"),Q("o:shapelayout",Q("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"}),Q("v:shapetype",[Q("v:stroke",null,{joinstyle:"miter"}),Q("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:r.join(","),path:n})];ht",o,Q("v:shadow",null,h),Q("v:path",null,{"o:connecttype":"none"}),'
','',"","",Ze("x:Anchor",[s.c+1,0,s.r+1,0,s.c+3,20,s.r+5,20].join(",")),Ze("x:AutoFill","False"),Ze("x:Row",String(s.r)),Ze("x:Column",String(s.c)),a[1].hidden?"":"","",""])}),i.push(""),i.join("")}function ua(e){var t=[Ve,Q("comments",null,{xmlns:vt[0]})],r=[];return t.push(""),e.forEach(function(n){n[1].forEach(function(i){var a=ke(i.a);r.indexOf(a)==-1&&(r.push(a),t.push(""+a+"")),i.T&&i.ID&&r.indexOf("tc="+i.ID)==-1&&(r.push("tc="+i.ID),t.push("tc="+i.ID+""))})}),r.length==0&&(r.push("SheetJ5"),t.push("SheetJ5")),t.push(""),t.push(""),e.forEach(function(n){var i=0,a=[];if(n[1][0]&&n[1][0].T&&n[1][0].ID?i=r.indexOf("tc="+n[1][0].ID):n[1].forEach(function(l){l.a&&(i=r.indexOf(ke(l.a))),a.push(l.t||"")}),t.push(''),a.length<=1)t.push(Ze("t",ke(a[0]||"")));else{for(var s=`Comment: - `+a[0]+` -`,f=1;f")}),t.push(""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function al(e,t,r){var n=[Ve,Q("ThreadedComments",null,{xmlns:je.TCMNT}).replace(/[\/]>/,">")];return e.forEach(function(i){var a="";(i[1]||[]).forEach(function(s,f){if(!s.T){delete s.ID;return}s.a&&t.indexOf(s.a)==-1&&t.push(s.a);var l={ref:i[0],id:"{54EE7951-7262-4200-6969-"+("000000000000"+r.tcid++).slice(-12)+"}"};f==0?a=l.id:l.parentId=a,s.ID=l.id,s.a&&(l.personId="{54EE7950-7262-4200-6969-"+("000000000000"+t.indexOf(s.a)).slice(-12)+"}"),n.push(Q("threadedComment",Ze("text",s.t||""),l))})}),n.push(""),n.join("")}function sl(e){var t=[Ve,Q("personList",null,{xmlns:je.TCMNT,"xmlns:x":vt[0]}).replace(/[\/]>/,">")];return e.forEach(function(r,n){t.push(Q("person",null,{displayName:r,id:"{54EE7950-7262-4200-6969-"+("000000000000"+n).slice(-12)+"}",userId:r,providerId:"None"}))}),t.push(""),t.join("")}function fl(e){var t={};t.iauthor=e.read_shift(4);var r=at(e);return t.rfx=r.s,t.ref=Re(r.s),e.l+=16,t}function ol(e,t){return t==null&&(t=H(36)),t.write_shift(4,e[1].iauthor),mt(e[0],t),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t}var ll=ir;function hl(e){return Ke(e.slice(0,54))}function cl(e){var t=lr(),r=[];return j(t,628),j(t,630),e.forEach(function(n){n[1].forEach(function(i){r.indexOf(i.a)>-1||(r.push(i.a.slice(0,54)),j(t,632,hl(i.a)))})}),j(t,631),j(t,633),e.forEach(function(n){n[1].forEach(function(i){i.iauthor=r.indexOf(i.a);var a={s:ze(n[0]),e:ze(n[0])};j(t,635,ol([a,i])),i.t&&i.t.length>0&&j(t,637,uf(i)),j(t,636),delete i.iauthor})}),j(t,634),j(t,629),t.end()}function ul(e,t){t.FullPaths.forEach(function(r,n){if(n!=0){var i=r.replace(/[^\/]*[\/]/,"/_VBA_PROJECT_CUR/");i.slice(-1)!=="/"&&De.utils.cfb_add(e,i,t.FileIndex[n].content)}})}var xa=["xlsb","xlsm","xlam","biff8","xla"],xl=function(){var e=/(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g,t={r:0,c:0};function r(n,i,a,s){var f=!1,l=!1;a.length==0?l=!0:a.charAt(0)=="["&&(l=!0,a=a.slice(1,-1)),s.length==0?f=!0:s.charAt(0)=="["&&(f=!0,s=s.slice(1,-1));var o=a.length>0?parseInt(a,10)|0:0,h=s.length>0?parseInt(s,10)|0:0;return f?h+=t.c:--h,l?o+=t.r:--o,i+(f?"":"$")+nr(h)+(l?"":"$")+Qe(o)}return function(i,a){return t=a,i.replace(e,r)}}(),a0=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g,s0=function(){return function(t,r){return t.replace(a0,function(n,i,a,s,f,l){var o=Qn(s)-(a?0:r.c),h=Zn(l)-(f?0:r.r),p=h==0?"":f?h+1:"["+h+"]",x=o==0?"":a?o+1:"["+o+"]";return i+"R"+p+"C"+x})}}();function dl(e,t){return e.replace(a0,function(r,n,i,a,s,f){return n+(i=="$"?i+a:nr(Qn(a)+t.c))+(s=="$"?s+f:Qe(Zn(f)+t.r))})}function pl(e){return e.length!=1}function We(e){e.l+=1}function jr(e,t){var r=e.read_shift(2);return[r&16383,r>>14&1,r>>15&1]}function da(e,t,r){var n=2;if(r){if(r.biff>=2&&r.biff<=5)return pa(e);r.biff==12&&(n=4)}var i=e.read_shift(n),a=e.read_shift(n),s=jr(e),f=jr(e);return{s:{r:i,c:s[0],cRel:s[1],rRel:s[2]},e:{r:a,c:f[0],cRel:f[1],rRel:f[2]}}}function pa(e){var t=jr(e),r=jr(e),n=e.read_shift(1),i=e.read_shift(1);return{s:{r:t[0],c:n,cRel:t[1],rRel:t[2]},e:{r:r[0],c:i,cRel:r[1],rRel:r[2]}}}function vl(e,t,r){if(r.biff<8)return pa(e);var n=e.read_shift(r.biff==12?4:2),i=e.read_shift(r.biff==12?4:2),a=jr(e),s=jr(e);return{s:{r:n,c:a[0],cRel:a[1],rRel:a[2]},e:{r:i,c:s[0],cRel:s[1],rRel:s[2]}}}function va(e,t,r){if(r&&r.biff>=2&&r.biff<=5)return gl(e);var n=e.read_shift(r&&r.biff==12?4:2),i=jr(e);return{r:n,c:i[0],cRel:i[1],rRel:i[2]}}function gl(e){var t=jr(e),r=e.read_shift(1);return{r:t[0],c:r,cRel:t[1],rRel:t[2]}}function ml(e){var t=e.read_shift(2),r=e.read_shift(2);return{r:t,c:r&255,fQuoted:!!(r&16384),cRel:r>>15,rRel:r>>15}}function _l(e,t,r){var n=r&&r.biff?r.biff:8;if(n>=2&&n<=5)return Tl(e);var i=e.read_shift(n>=12?4:2),a=e.read_shift(2),s=(a&16384)>>14,f=(a&32768)>>15;if(a&=16383,f==1)for(;i>524287;)i-=1048576;if(s==1)for(;a>8191;)a=a-16384;return{r:i,c:a,cRel:s,rRel:f}}function Tl(e){var t=e.read_shift(2),r=e.read_shift(1),n=(t&32768)>>15,i=(t&16384)>>14;return t&=16383,n==1&&t>=8192&&(t=t-16384),i==1&&r>=128&&(r=r-256),{r:t,c:r,cRel:i,rRel:n}}function El(e,t,r){var n=(e[e.l++]&96)>>5,i=da(e,r.biff>=2&&r.biff<=5?6:8,r);return[n,i]}function wl(e,t,r){var n=(e[e.l++]&96)>>5,i=e.read_shift(2,"i"),a=8;if(r)switch(r.biff){case 5:e.l+=12,a=6;break;case 12:a=12;break}var s=da(e,a,r);return[n,i,s]}function Sl(e,t,r){var n=(e[e.l++]&96)>>5;return e.l+=r&&r.biff>8?12:r.biff<8?6:8,[n]}function Al(e,t,r){var n=(e[e.l++]&96)>>5,i=e.read_shift(2),a=8;if(r)switch(r.biff){case 5:e.l+=12,a=6;break;case 12:a=12;break}return e.l+=a,[n,i]}function Fl(e,t,r){var n=(e[e.l++]&96)>>5,i=vl(e,t-1,r);return[n,i]}function yl(e,t,r){var n=(e[e.l++]&96)>>5;return e.l+=r.biff==2?6:r.biff==12?14:7,[n]}function J0(e){var t=e[e.l+1]&1,r=1;return e.l+=4,[t,r]}function Cl(e,t,r){e.l+=2;for(var n=e.read_shift(r&&r.biff==2?1:2),i=[],a=0;a<=n;++a)i.push(e.read_shift(r&&r.biff==2?1:2));return i}function Ol(e,t,r){var n=e[e.l+1]&255?1:0;return e.l+=2,[n,e.read_shift(r&&r.biff==2?1:2)]}function kl(e,t,r){var n=e[e.l+1]&255?1:0;return e.l+=2,[n,e.read_shift(r&&r.biff==2?1:2)]}function Rl(e){var t=e[e.l+1]&255?1:0;return e.l+=2,[t,e.read_shift(2)]}function Dl(e,t,r){var n=e[e.l+1]&255?1:0;return e.l+=r&&r.biff==2?3:4,[n]}function ga(e){var t=e.read_shift(1),r=e.read_shift(1);return[t,r]}function Il(e){return e.read_shift(2),ga(e)}function Nl(e){return e.read_shift(2),ga(e)}function Ll(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=va(e,0,r);return[n,i]}function Pl(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=_l(e,0,r);return[n,i]}function Ml(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=e.read_shift(2);r&&r.biff==5&&(e.l+=12);var a=va(e,0,r);return[n,i,a]}function Bl(e,t,r){var n=(e[e.l]&96)>>5;e.l+=1;var i=e.read_shift(r&&r.biff<=3?1:2);return[Bh[i],Ta[i],n]}function bl(e,t,r){var n=e[e.l++],i=e.read_shift(1),a=r&&r.biff<=3?[n==88?-1:0,e.read_shift(1)]:Ul(e);return[i,(a[0]===0?Ta:Mh)[a[1]]]}function Ul(e){return[e[e.l+1]>>7,e.read_shift(2)&32767]}function Wl(e,t,r){e.l+=r&&r.biff==2?3:4}function Hl(e,t,r){if(e.l++,r&&r.biff==12)return[e.read_shift(4,"i"),0];var n=e.read_shift(2),i=e.read_shift(r&&r.biff==2?1:2);return[n,i]}function Vl(e){return e.l++,Xt[e.read_shift(1)]}function Gl(e){return e.l++,e.read_shift(2)}function Xl(e){return e.l++,e.read_shift(1)!==0}function jl(e){return e.l++,_t(e)}function zl(e,t,r){return e.l++,Qi(e,t-1,r)}function Kl(e,t){var r=[e.read_shift(1)];if(t==12)switch(r[0]){case 2:r[0]=4;break;case 4:r[0]=16;break;case 0:r[0]=1;break;case 1:r[0]=2;break}switch(r[0]){case 4:r[1]=Pf(e,1)?"TRUE":"FALSE",t!=12&&(e.l+=7);break;case 37:case 16:r[1]=Xt[e[e.l]],e.l+=t==12?4:8;break;case 0:e.l+=8;break;case 1:r[1]=_t(e);break;case 2:r[1]=Uf(e,0,{biff:t>0&&t<8?2:t});break;default:throw new Error("Bad SerAr: "+r[0])}return r}function $l(e,t,r){for(var n=e.read_shift(r.biff==12?4:2),i=[],a=0;a!=n;++a)i.push((r.biff==12?at:Vf)(e));return i}function Yl(e,t,r){var n=0,i=0;r.biff==12?(n=e.read_shift(4),i=e.read_shift(4)):(i=1+e.read_shift(1),n=1+e.read_shift(2)),r.biff>=2&&r.biff<8&&(--n,--i==0&&(i=256));for(var a=0,s=[];a!=n&&(s[a]=[]);++a)for(var f=0;f!=i;++f)s[a][f]=Kl(e,r.biff);return s}function Jl(e,t,r){var n=e.read_shift(1)>>>5&3,i=!r||r.biff>=8?4:2,a=e.read_shift(i);switch(r.biff){case 2:e.l+=5;break;case 3:case 4:e.l+=8;break;case 5:e.l+=12;break}return[n,0,a]}function ql(e,t,r){if(r.biff==5)return Zl(e);var n=e.read_shift(1)>>>5&3,i=e.read_shift(2),a=e.read_shift(4);return[n,i,a]}function Zl(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2,"i");e.l+=8;var n=e.read_shift(2);return e.l+=12,[t,r,n]}function Ql(e,t,r){var n=e.read_shift(1)>>>5&3;e.l+=r&&r.biff==2?3:4;var i=e.read_shift(r&&r.biff==2?1:2);return[n,i]}function eh(e,t,r){var n=e.read_shift(1)>>>5&3,i=e.read_shift(r&&r.biff==2?1:2);return[n,i]}function rh(e,t,r){var n=e.read_shift(1)>>>5&3;return e.l+=4,r.biff<8&&e.l--,r.biff==12&&(e.l+=2),[n]}function th(e,t,r){var n=(e[e.l++]&96)>>5,i=e.read_shift(2),a=4;if(r)switch(r.biff){case 5:a=15;break;case 12:a=6;break}return e.l+=a,[n,i]}var nh=Rr,ih=Rr,ah=Rr;function jt(e,t,r){return e.l+=2,[ml(e)]}function f0(e){return e.l+=6,[]}var sh=jt,fh=f0,oh=f0,lh=jt;function ma(e){return e.l+=2,[qi(e),e.read_shift(2)&1]}var hh=jt,ch=ma,uh=f0,xh=jt,dh=jt,ph=["Data","All","Headers","??","?Data2","??","?DataHeaders","??","Totals","??","??","??","?DataTotals","??","??","??","?Current"];function vh(e){e.l+=2;var t=e.read_shift(2),r=e.read_shift(2),n=e.read_shift(4),i=e.read_shift(2),a=e.read_shift(2),s=ph[r>>2&31];return{ixti:t,coltype:r&3,rt:s,idx:n,c:i,C:a}}function gh(e){return e.l+=2,[e.read_shift(4)]}function mh(e,t,r){return e.l+=5,e.l+=2,e.l+=r.biff==2?1:4,["PTGSHEET"]}function _h(e,t,r){return e.l+=r.biff==2?4:5,["PTGENDSHEET"]}function Th(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2);return[t,r]}function Eh(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2);return[t,r]}function wh(e){return e.l+=4,[0,0]}var q0={1:{n:"PtgExp",f:Hl},2:{n:"PtgTbl",f:ah},3:{n:"PtgAdd",f:We},4:{n:"PtgSub",f:We},5:{n:"PtgMul",f:We},6:{n:"PtgDiv",f:We},7:{n:"PtgPower",f:We},8:{n:"PtgConcat",f:We},9:{n:"PtgLt",f:We},10:{n:"PtgLe",f:We},11:{n:"PtgEq",f:We},12:{n:"PtgGe",f:We},13:{n:"PtgGt",f:We},14:{n:"PtgNe",f:We},15:{n:"PtgIsect",f:We},16:{n:"PtgUnion",f:We},17:{n:"PtgRange",f:We},18:{n:"PtgUplus",f:We},19:{n:"PtgUminus",f:We},20:{n:"PtgPercent",f:We},21:{n:"PtgParen",f:We},22:{n:"PtgMissArg",f:We},23:{n:"PtgStr",f:zl},26:{n:"PtgSheet",f:mh},27:{n:"PtgEndSheet",f:_h},28:{n:"PtgErr",f:Vl},29:{n:"PtgBool",f:Xl},30:{n:"PtgInt",f:Gl},31:{n:"PtgNum",f:jl},32:{n:"PtgArray",f:yl},33:{n:"PtgFunc",f:Bl},34:{n:"PtgFuncVar",f:bl},35:{n:"PtgName",f:Jl},36:{n:"PtgRef",f:Ll},37:{n:"PtgArea",f:El},38:{n:"PtgMemArea",f:Ql},39:{n:"PtgMemErr",f:nh},40:{n:"PtgMemNoMem",f:ih},41:{n:"PtgMemFunc",f:eh},42:{n:"PtgRefErr",f:rh},43:{n:"PtgAreaErr",f:Sl},44:{n:"PtgRefN",f:Pl},45:{n:"PtgAreaN",f:Fl},46:{n:"PtgMemAreaN",f:Th},47:{n:"PtgMemNoMemN",f:Eh},57:{n:"PtgNameX",f:ql},58:{n:"PtgRef3d",f:Ml},59:{n:"PtgArea3d",f:wl},60:{n:"PtgRefErr3d",f:th},61:{n:"PtgAreaErr3d",f:Al},255:{}},Sh={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61},Ah={1:{n:"PtgElfLel",f:ma},2:{n:"PtgElfRw",f:xh},3:{n:"PtgElfCol",f:sh},6:{n:"PtgElfRwV",f:dh},7:{n:"PtgElfColV",f:lh},10:{n:"PtgElfRadical",f:hh},11:{n:"PtgElfRadicalS",f:uh},13:{n:"PtgElfColS",f:fh},15:{n:"PtgElfColSV",f:oh},16:{n:"PtgElfRadicalLel",f:ch},25:{n:"PtgList",f:vh},29:{n:"PtgSxName",f:gh},255:{}},Fh={0:{n:"PtgAttrNoop",f:wh},1:{n:"PtgAttrSemi",f:Dl},2:{n:"PtgAttrIf",f:kl},4:{n:"PtgAttrChoose",f:Cl},8:{n:"PtgAttrGoto",f:Ol},16:{n:"PtgAttrSum",f:Wl},32:{n:"PtgAttrBaxcel",f:J0},33:{n:"PtgAttrBaxcel",f:J0},64:{n:"PtgAttrSpace",f:Il},65:{n:"PtgAttrSpaceSemi",f:Nl},128:{n:"PtgAttrIfError",f:Rl},255:{}};function yh(e,t,r,n){if(n.biff<8)return Rr(e,t);for(var i=e.l+t,a=[],s=0;s!==r.length;++s)switch(r[s][0]){case"PtgArray":r[s][1]=Yl(e,0,n),a.push(r[s][1]);break;case"PtgMemArea":r[s][2]=$l(e,r[s][1],n),a.push(r[s][2]);break;case"PtgExp":n&&n.biff==12&&(r[s][1][1]=e.read_shift(4),a.push(r[s][1]));break;case"PtgList":case"PtgElfRadicalS":case"PtgElfColS":case"PtgElfColSV":throw"Unsupported "+r[s][0]}return t=i-e.l,t!==0&&a.push(Rr(e,t)),a}function Ch(e,t,r){for(var n=e.l+t,i,a,s=[];n!=e.l;)t=n-e.l,a=e[e.l],i=q0[a]||q0[Sh[a]],(a===24||a===25)&&(i=(a===24?Ah:Fh)[e[e.l+1]]),!i||!i.f?Rr(e,t):s.push([i.n,i.f(e,t,r)]);return s}function Oh(e){for(var t=[],r=0;r=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function Rh(e,t){if(!e&&!(t&&t.biff<=5&&t.biff>=2))throw new Error("empty sheet name");return/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(e)?"'"+e+"'":e}function _a(e,t,r){if(!e)return"SH33TJSERR0";if(r.biff>8&&(!e.XTI||!e.XTI[t]))return e.SheetNames[t];if(!e.XTI)return"SH33TJSERR6";var n=e.XTI[t];if(r.biff<8)return t>1e4&&(t-=65536),t<0&&(t=-t),t==0?"":e.XTI[t-1];if(!n)return"SH33TJSERR1";var i="";if(r.biff>8)switch(e[n[0]][0]){case 357:return i=n[1]==-1?"#REF":e.SheetNames[n[1]],n[1]==n[2]?i:i+":"+e.SheetNames[n[2]];case 358:return r.SID!=null?e.SheetNames[r.SID]:"SH33TJSSAME"+e[n[0]][0];case 355:default:return"SH33TJSSRC"+e[n[0]][0]}switch(e[n[0]][0][0]){case 1025:return i=n[1]==-1?"#REF":e.SheetNames[n[1]]||"SH33TJSERR3",n[1]==n[2]?i:i+":"+e.SheetNames[n[2]];case 14849:return e[n[0]].slice(1).map(function(a){return a.Name}).join(";;");default:return e[n[0]][0][3]?(i=n[1]==-1?"#REF":e[n[0]][0][3][n[1]]||"SH33TJSERR4",n[1]==n[2]?i:i+":"+e[n[0]][0][3][n[2]]):"SH33TJSERR2"}}function Z0(e,t,r){var n=_a(e,t,r);return n=="#REF"?n:Rh(n,r)}function pt(e,t,r,n,i){var a=i&&i.biff||8,s={s:{c:0,r:0}},f=[],l,o,h,p=0,x=0,d,E="";if(!e[0]||!e[0][0])return"";for(var c=-1,_="",N=0,I=e[0].length;N=0){switch(e[0][c][1][0]){case 0:_=be(" ",e[0][c][1][1]);break;case 1:_=be("\r",e[0][c][1][1]);break;default:if(_="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][c][1][0])}o=o+_,c=-1}f.push(o+kh[D[0]]+l);break;case"PtgIsect":l=f.pop(),o=f.pop(),f.push(o+" "+l);break;case"PtgUnion":l=f.pop(),o=f.pop(),f.push(o+","+l);break;case"PtgRange":l=f.pop(),o=f.pop(),f.push(o+":"+l);break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgAttrIfError":break;case"PtgRef":h=Dt(D[1][1],s,i),f.push(It(h,a));break;case"PtgRefN":h=r?Dt(D[1][1],r,i):D[1][1],f.push(It(h,a));break;case"PtgRef3d":p=D[1][1],h=Dt(D[1][2],s,i),E=Z0(n,p,i),f.push(E+"!"+It(h,a));break;case"PtgFunc":case"PtgFuncVar":var W=D[1][0],z=D[1][1];W||(W=0),W&=127;var re=W==0?[]:f.slice(-W);f.length-=W,z==="User"&&(z=re.shift()),f.push(z+"("+re.join(",")+")");break;case"PtgBool":f.push(D[1]?"TRUE":"FALSE");break;case"PtgInt":f.push(D[1]);break;case"PtgNum":f.push(String(D[1]));break;case"PtgStr":f.push('"'+D[1].replace(/"/g,'""')+'"');break;case"PtgErr":f.push(D[1]);break;case"PtgAreaN":d=M0(D[1][1],r?{s:r}:s,i),f.push(Nn(d,i));break;case"PtgArea":d=M0(D[1][1],s,i),f.push(Nn(d,i));break;case"PtgArea3d":p=D[1][1],d=D[1][2],E=Z0(n,p,i),f.push(E+"!"+Nn(d,i));break;case"PtgAttrSum":f.push("SUM("+f.pop()+")");break;case"PtgAttrBaxcel":case"PtgAttrSemi":break;case"PtgName":x=D[1][2];var k=(n.names||[])[x-1]||(n[0]||[])[x],T=k?k.Name:"SH33TJSNAME"+String(x);T&&T.slice(0,6)=="_xlfn."&&!i.xlfn&&(T=T.slice(6)),f.push(T);break;case"PtgNameX":var g=D[1][1];x=D[1][2];var y;if(i.biff<=5)g<0&&(g=-g),n[g]&&(y=n[g][x]);else{var L="";if(((n[g]||[])[0]||[])[0]==14849||(((n[g]||[])[0]||[])[0]==1025?n[g][x]&&n[g][x].itab>0&&(L=n.SheetNames[n[g][x].itab-1]+"!"):L=n.SheetNames[x-1]+"!"),n[g]&&n[g][x])L+=n[g][x].Name;else if(n[0]&&n[0][x])L+=n[0][x].Name;else{var P=(_a(n,g,i)||"").split(";;");P[x-1]?L=P[x-1]:L+="SH33TJSERRX"}f.push(L);break}y||(y={Name:"SH33TJSERRY"}),f.push(y.Name);break;case"PtgParen":var X="(",ve=")";if(c>=0){switch(_="",e[0][c][1][0]){case 2:X=be(" ",e[0][c][1][1])+X;break;case 3:X=be("\r",e[0][c][1][1])+X;break;case 4:ve=be(" ",e[0][c][1][1])+ve;break;case 5:ve=be("\r",e[0][c][1][1])+ve;break;default:if(i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][c][1][0])}c=-1}f.push(X+f.pop()+ve);break;case"PtgRefErr":f.push("#REF!");break;case"PtgRefErr3d":f.push("#REF!");break;case"PtgExp":h={c:D[1][1],r:D[1][0]};var xe={c:r.c,r:r.r};if(n.sharedf[Re(h)]){var Fe=n.sharedf[Re(h)];f.push(pt(Fe,s,xe,n,i))}else{var le=!1;for(l=0;l!=n.arrayf.length;++l)if(o=n.arrayf[l],!(h.co[0].e.c)&&!(h.ro[0].e.r)){f.push(pt(o[1],s,xe,n,i)),le=!0;break}le||f.push(D[1])}break;case"PtgArray":f.push("{"+Oh(D[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":c=N;break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":f.push("");break;case"PtgAreaErr":f.push("#REF!");break;case"PtgAreaErr3d":f.push("#REF!");break;case"PtgList":f.push("Table"+D[1].idx+"[#"+D[1].rt+"]");break;case"PtgMemAreaN":case"PtgMemNoMemN":case"PtgAttrNoop":case"PtgSheet":case"PtgEndSheet":break;case"PtgMemFunc":break;case"PtgMemNoMem":break;case"PtgElfCol":case"PtgElfColS":case"PtgElfColSV":case"PtgElfColV":case"PtgElfLel":case"PtgElfRadical":case"PtgElfRadicalLel":case"PtgElfRadicalS":case"PtgElfRw":case"PtgElfRwV":throw new Error("Unsupported ELFs");case"PtgSxName":throw new Error("Unrecognized Formula Token: "+String(D));default:throw new Error("Unrecognized Formula Token: "+String(D))}var Ee=["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"];if(i.biff!=3&&c>=0&&Ee.indexOf(e[0][N][0])==-1){D=e[0][c];var oe=!0;switch(D[1][0]){case 4:oe=!1;case 0:_=be(" ",D[1][1]);break;case 5:oe=!1;case 1:_=be("\r",D[1][1]);break;default:if(_="",i.WTF)throw new Error("Unexpected PtgAttrSpaceType "+D[1][0])}f.push((oe?_:"")+f.pop()+(oe?"":_)),c=-1}}if(f.length>1&&i.WTF)throw new Error("bad formula stack");return f[0]}function Dh(e){if(e==null){var t=H(8);return t.write_shift(1,3),t.write_shift(1,0),t.write_shift(2,0),t.write_shift(2,0),t.write_shift(2,65535),t}else if(typeof e=="number")return Zr(e);return Zr(0)}function Ih(e,t,r,n,i){var a=Qr(t,r,i),s=Dh(e.v),f=H(6),l=33;f.write_shift(2,l),f.write_shift(4,0);for(var o=H(e.bf.length),h=0;h0?yh(e,a,i,r):null;return[i,s]}var Nh=Fn,yn=Fn,Lh=Fn,Ph=Fn,Mh={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"},Ta={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"},Bh={2:1,3:1,10:0,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,34:0,35:0,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,63:0,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,74:0,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,89:0,90:1,94:0,95:0,97:2,98:1,99:1,101:3,102:3,105:1,106:1,108:2,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,161:1,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,186:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,225:0,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0};function bh(e){var t="of:="+e.replace(a0,"$1[.$2$3$4$5]").replace(/\]:\[/g,":");return t.replace(/;/g,"|").replace(/,/g,";")}function Uh(e){return e.replace(/\./,"!")}var Nt=typeof Map<"u";function o0(e,t,r){var n=0,i=e.length;if(r){if(Nt?r.has(t):Object.prototype.hasOwnProperty.call(r,t)){for(var a=Nt?r.get(t):r[t];n-1?(r.width=Gn(n),r.customWidth=1):t.width!=null&&(r.width=t.width),t.hidden&&(r.hidden=!0),t.level!=null&&(r.outlineLevel=r.level=t.level),r}function Ea(e,t){if(e){var r=[.7,.7,.75,.75,.3,.3];e.left==null&&(e.left=r[0]),e.right==null&&(e.right=r[1]),e.top==null&&(e.top=r[2]),e.bottom==null&&(e.bottom=r[3]),e.header==null&&(e.header=r[4]),e.footer==null&&(e.footer=r[5])}}function Kr(e,t,r){var n=r.revssf[t.z!=null?t.z:"General"],i=60,a=e.length;if(n==null&&r.ssf){for(;i<392;++i)if(r.ssf[i]==null){vi(t.z,i),r.ssf[i]=t.z,r.revssf[t.z]=n=i;break}}for(i=0;i!=a;++i)if(e[i].numFmtId===n)return i;return e[a]={numFmtId:n,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},a}function Wh(e,t,r){if(e&&e["!ref"]){var n=Le(e["!ref"]);if(n.e.c',r=0;r!=e.length;++r)t+='';return t+""}function Vh(e,t,r,n,i){var a=!1,s={},f=null;if(n.bookType!=="xlsx"&&t.vbaraw){var l=t.SheetNames[r];try{t.Workbook&&(l=t.Workbook.Sheets[r].CodeName||l)}catch{}a=!0,s.codeName=Bt(ke(l))}if(e&&e["!outline"]){var o={summaryBelow:1,summaryRight:1};e["!outline"].above&&(o.summaryBelow=0),e["!outline"].left&&(o.summaryRight=0),f=(f||"")+Q("outlinePr",null,o)}!a&&!f||(i[i.length]=Q("sheetPr",f,s))}var Gh=["objects","scenarios","selectLockedCells","selectUnlockedCells"],Xh=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"];function jh(e){var t={sheet:1};return Gh.forEach(function(r){e[r]!=null&&e[r]&&(t[r]="1")}),Xh.forEach(function(r){e[r]!=null&&!e[r]&&(t[r]="0")}),e.password&&(t.password=ia(e.password).toString(16).toUpperCase()),Q("sheetProtection",null,t)}function zh(e){return Ea(e),Q("pageMargins",null,e)}function Kh(e,t){for(var r=[""],n,i=0;i!=t.length;++i)(n=t[i])&&(r[r.length]=Q("col",null,Cn(i,n)));return r[r.length]="",r.join("")}function $h(e,t,r,n){var i=typeof e.ref=="string"?e.ref:He(e.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var a=r.Workbook.Names,s=_r(i);s.s.r==s.e.r&&(s.e.r=_r(t["!ref"]).e.r,i=He(s));for(var f=0;f"u"&&(e.z=Ue[14]);break;default:i=e.v;break}var f=Ze("v",ke(i)),l={r:t},o=Kr(n.cellXfs,e,n);switch(o!==0&&(l.s=o),e.t){case"n":break;case"d":l.t="d";break;case"b":l.t="b";break;case"e":l.t="e";break;case"z":break;default:if(e.v==null){delete e.t;break}if(e.v.length>32767)throw new Error("Text length must not exceed 32767 characters");if(n&&n.bookSST){f=Ze("v",""+o0(n.Strings,e.v,n.revStrings)),l.t="s";break}l.t="str";break}if(e.t!=a&&(e.t=a,e.v=s),typeof e.f=="string"&&e.f){var h=e.F&&e.F.slice(0,t.length)==t?{t:"array",ref:e.F}:null;f=Q("f",ke(e.f),h)+(e.v!=null?f:"")}return e.l&&r["!links"].push([t,e.l]),e.D&&(l.cm=1),Q("c",f,l)}function qh(e,t,r,n){var i=[],a=[],s=Le(e["!ref"]),f="",l,o="",h=[],p=0,x=0,d=e["!rows"],E=Array.isArray(e),c={r:o},_,N=-1;for(x=s.s.c;x<=s.e.c;++x)h[x]=nr(x);for(p=s.s.r;p<=s.e.r;++p){for(a=[],o=Qe(p),x=s.s.c;x<=s.e.c;++x){l=h[x]+o;var I=E?(e[p]||[])[x]:e[l];I!==void 0&&(f=Jh(I,l,e,t))!=null&&a.push(f)}(a.length>0||d&&d[p])&&(c={r:o},d&&d[p]&&(_=d[p],_.hidden&&(c.hidden=1),N=-1,_.hpx?N=gn(_.hpx):_.hpt&&(N=_.hpt),N>-1&&(c.ht=N,c.customHeight=1),_.level&&(c.outlineLevel=_.level)),i[i.length]=Q("row",a.join(""),c))}if(d)for(;p-1&&(c.ht=N,c.customHeight=1),_.level&&(c.outlineLevel=_.level),i[i.length]=Q("row","",c));return i.join("")}function wa(e,t,r,n){var i=[Ve,Q("worksheet",null,{xmlns:vt[0],"xmlns:r":je.r})],a=r.SheetNames[e],s=0,f="",l=r.Sheets[a];l==null&&(l={});var o=l["!ref"]||"A1",h=Le(o);if(h.e.c>16383||h.e.r>1048575){if(t.WTF)throw new Error("Range "+o+" exceeds format limit A1:XFD1048576");h.e.c=Math.min(h.e.c,16383),h.e.r=Math.min(h.e.c,1048575),o=He(h)}n||(n={}),l["!comments"]=[];var p=[];Vh(l,r,e,t,i),i[i.length]=Q("dimension",null,{ref:o}),i[i.length]=Yh(l,t,e,r),t.sheetFormat&&(i[i.length]=Q("sheetFormatPr",null,{defaultRowHeight:t.sheetFormat.defaultRowHeight||"16",baseColWidth:t.sheetFormat.baseColWidth||"10",outlineLevelRow:t.sheetFormat.outlineLevelRow||"7"})),l["!cols"]!=null&&l["!cols"].length>0&&(i[i.length]=Kh(l,l["!cols"])),i[s=i.length]="",l["!links"]=[],l["!ref"]!=null&&(f=qh(l,t),f.length>0&&(i[i.length]=f)),i.length>s+1&&(i[i.length]="",i[s]=i[s].replace("/>",">")),l["!protect"]&&(i[i.length]=jh(l["!protect"])),l["!autofilter"]!=null&&(i[i.length]=$h(l["!autofilter"],l,r,e)),l["!merges"]!=null&&l["!merges"].length>0&&(i[i.length]=Hh(l["!merges"]));var x=-1,d,E=-1;return l["!links"].length>0&&(i[i.length]="",l["!links"].forEach(function(c){c[1].Target&&(d={ref:c[0]},c[1].Target.charAt(0)!="#"&&(E=Oe(n,-1,ke(c[1].Target).replace(/#.*$/,""),Se.HLINK),d["r:id"]="rId"+E),(x=c[1].Target.indexOf("#"))>-1&&(d.location=ke(c[1].Target.slice(x+1))),c[1].Tooltip&&(d.tooltip=ke(c[1].Tooltip)),i[i.length]=Q("hyperlink",null,d))}),i[i.length]=""),delete l["!links"],l["!margins"]!=null&&(i[i.length]=zh(l["!margins"])),(!t||t.ignoreEC||t.ignoreEC==null)&&(i[i.length]=Ze("ignoredErrors",Q("ignoredError",null,{numberStoredAsText:1,sqref:o}))),p.length>0&&(E=Oe(n,-1,"../drawings/drawing"+(e+1)+".xml",Se.DRAW),i[i.length]=Q("drawing",null,{"r:id":"rId"+E}),l["!drawing"]=p),l["!comments"].length>0&&(E=Oe(n,-1,"../drawings/vmlDrawing"+(e+1)+".vml",Se.VML),i[i.length]=Q("legacyDrawing",null,{"r:id":"rId"+E}),l["!legacy"]=E),i.length>1&&(i[i.length]="",i[1]=i[1].replace("/>",">")),i.join("")}function Zh(e,t){var r={},n=e.l+t;r.r=e.read_shift(4),e.l+=4;var i=e.read_shift(2);e.l+=1;var a=e.read_shift(1);return e.l=n,a&7&&(r.level=a&7),a&16&&(r.hidden=!0),a&32&&(r.hpt=i/20),r}function Qh(e,t,r){var n=H(145),i=(r["!rows"]||[])[e]||{};n.write_shift(4,e),n.write_shift(4,0);var a=320;i.hpx?a=gn(i.hpx)*20:i.hpt&&(a=i.hpt*20),n.write_shift(2,a),n.write_shift(1,0);var s=0;i.level&&(s|=i.level),i.hidden&&(s|=16),(i.hpx||i.hpt)&&(s|=32),n.write_shift(1,s),n.write_shift(1,0);var f=0,l=n.l;n.l+=4;for(var o={r:e,c:0},h=0;h<16;++h)if(!(t.s.c>h+1<<10||t.e.cn.l?n.slice(0,n.l):n}function ec(e,t,r,n){var i=Qh(n,r,t);(i.length>17||(t["!rows"]||[])[n])&&j(e,0,i)}var rc=at,tc=mt;function nc(){}function ic(e,t){var r={},n=e[e.l];return++e.l,r.above=!(n&64),r.left=!(n&128),e.l+=18,r.name=xf(e),r}function ac(e,t,r){r==null&&(r=H(84+4*e.length));var n=192;t&&(t.above&&(n&=-65),t.left&&(n&=-129)),r.write_shift(1,n);for(var i=1;i<3;++i)r.write_shift(1,0);return xn({auto:1},r),r.write_shift(-4,-1),r.write_shift(-4,-1),Bi(e,r),r.slice(0,r.l)}function sc(e){var t=wr(e);return[t]}function fc(e,t,r){return r==null&&(r=H(8)),tt(t,r)}function oc(e){var t=nt(e);return[t]}function lc(e,t,r){return r==null&&(r=H(4)),it(t,r)}function hc(e){var t=wr(e),r=e.read_shift(1);return[t,r,"b"]}function cc(e,t,r){return r==null&&(r=H(9)),tt(t,r),r.write_shift(1,e.v?1:0),r}function uc(e){var t=nt(e),r=e.read_shift(1);return[t,r,"b"]}function xc(e,t,r){return r==null&&(r=H(5)),it(t,r),r.write_shift(1,e.v?1:0),r}function dc(e){var t=wr(e),r=e.read_shift(1);return[t,r,"e"]}function pc(e,t,r){return r==null&&(r=H(9)),tt(t,r),r.write_shift(1,e.v),r}function vc(e){var t=nt(e),r=e.read_shift(1);return[t,r,"e"]}function gc(e,t,r){return r==null&&(r=H(8)),it(t,r),r.write_shift(1,e.v),r.write_shift(2,0),r.write_shift(1,0),r}function mc(e){var t=wr(e),r=e.read_shift(4);return[t,r,"s"]}function _c(e,t,r){return r==null&&(r=H(12)),tt(t,r),r.write_shift(4,t.v),r}function Tc(e){var t=nt(e),r=e.read_shift(4);return[t,r,"s"]}function Ec(e,t,r){return r==null&&(r=H(8)),it(t,r),r.write_shift(4,t.v),r}function wc(e){var t=wr(e),r=_t(e);return[t,r,"n"]}function Sc(e,t,r){return r==null&&(r=H(16)),tt(t,r),Zr(e.v,r),r}function Ac(e){var t=nt(e),r=_t(e);return[t,r,"n"]}function Fc(e,t,r){return r==null&&(r=H(12)),it(t,r),Zr(e.v,r),r}function yc(e){var t=wr(e),r=bi(e);return[t,r,"n"]}function Cc(e,t,r){return r==null&&(r=H(12)),tt(t,r),Ui(e.v,r),r}function Oc(e){var t=nt(e),r=bi(e);return[t,r,"n"]}function kc(e,t,r){return r==null&&(r=H(8)),it(t,r),Ui(e.v,r),r}function Rc(e){var t=wr(e),r=e0(e);return[t,r,"is"]}function Dc(e){var t=wr(e),r=ir(e);return[t,r,"str"]}function Ic(e,t,r){return r==null&&(r=H(12+4*e.v.length)),tt(t,r),Ke(e.v,r),r.length>r.l?r.slice(0,r.l):r}function Nc(e){var t=nt(e),r=ir(e);return[t,r,"str"]}function Lc(e,t,r){return r==null&&(r=H(8+4*e.v.length)),it(t,r),Ke(e.v,r),r.length>r.l?r.slice(0,r.l):r}function Pc(e,t,r){var n=e.l+t,i=wr(e);i.r=r["!row"];var a=e.read_shift(1),s=[i,a,"b"];if(r.cellFormula){e.l+=2;var f=yn(e,n-e.l,r);s[3]=pt(f,null,i,r.supbooks,r)}else e.l=n;return s}function Mc(e,t,r){var n=e.l+t,i=wr(e);i.r=r["!row"];var a=e.read_shift(1),s=[i,a,"e"];if(r.cellFormula){e.l+=2;var f=yn(e,n-e.l,r);s[3]=pt(f,null,i,r.supbooks,r)}else e.l=n;return s}function Bc(e,t,r){var n=e.l+t,i=wr(e);i.r=r["!row"];var a=_t(e),s=[i,a,"n"];if(r.cellFormula){e.l+=2;var f=yn(e,n-e.l,r);s[3]=pt(f,null,i,r.supbooks,r)}else e.l=n;return s}function bc(e,t,r){var n=e.l+t,i=wr(e);i.r=r["!row"];var a=ir(e),s=[i,a,"str"];if(r.cellFormula){e.l+=2;var f=yn(e,n-e.l,r);s[3]=pt(f,null,i,r.supbooks,r)}else e.l=n;return s}var Uc=at,Wc=mt;function Hc(e,t){return t==null&&(t=H(4)),t.write_shift(4,e),t}function Vc(e,t){var r=e.l+t,n=at(e),i=r0(e),a=ir(e),s=ir(e),f=ir(e);e.l=r;var l={rfx:n,relId:i,loc:a,display:f};return s&&(l.Tooltip=s),l}function Gc(e,t){var r=H(50+4*(e[1].Target.length+(e[1].Tooltip||"").length));mt({s:ze(e[0]),e:ze(e[0])},r),t0("rId"+t,r);var n=e[1].Target.indexOf("#"),i=n==-1?"":e[1].Target.slice(n+1);return Ke(i||"",r),Ke(e[1].Tooltip||"",r),Ke("",r),r.slice(0,r.l)}function Xc(){}function jc(e,t,r){var n=e.l+t,i=Wi(e),a=e.read_shift(1),s=[i];if(s[2]=a,r.cellFormula){var f=Nh(e,n-e.l,r);s[1]=f}else e.l=n;return s}function zc(e,t,r){var n=e.l+t,i=at(e),a=[i];if(r.cellFormula){var s=Ph(e,n-e.l,r);a[1]=s,e.l=n}else e.l=n;return a}function Kc(e,t,r){r==null&&(r=H(18));var n=Cn(e,t);r.write_shift(-4,e),r.write_shift(-4,e),r.write_shift(4,(n.width||10)*256),r.write_shift(4,0);var i=0;return t.hidden&&(i|=1),typeof n.width=="number"&&(i|=2),t.level&&(i|=t.level<<8),r.write_shift(2,i),r}var Sa=["left","right","top","bottom","header","footer"];function $c(e){var t={};return Sa.forEach(function(r){t[r]=_t(e)}),t}function Yc(e,t){return t==null&&(t=H(6*8)),Ea(e),Sa.forEach(function(r){Zr(e[r],t)}),t}function Jc(e){var t=e.read_shift(2);return e.l+=28,{RTL:t&32}}function qc(e,t,r){r==null&&(r=H(30));var n=924;return(((t||{}).Views||[])[0]||{}).RTL&&(n|=32),r.write_shift(2,n),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(2,0),r.write_shift(2,100),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(4,0),r}function Zc(e){var t=H(24);return t.write_shift(4,4),t.write_shift(4,1),mt(e,t),t}function Qc(e,t){return t==null&&(t=H(16*4+2)),t.write_shift(2,e.password?ia(e.password):0),t.write_shift(4,1),[["objects",!1],["scenarios",!1],["formatCells",!0],["formatColumns",!0],["formatRows",!0],["insertColumns",!0],["insertRows",!0],["insertHyperlinks",!0],["deleteColumns",!0],["deleteRows",!0],["selectLockedCells",!1],["sort",!0],["autoFilter",!0],["pivotTables",!0],["selectUnlockedCells",!1]].forEach(function(r){r[1]?t.write_shift(4,e[r[0]]!=null&&!e[r[0]]?1:0):t.write_shift(4,e[r[0]]!=null&&e[r[0]]?0:1)}),t}function eu(){}function ru(){}function tu(e,t,r,n,i,a,s){if(t.v===void 0)return!1;var f="";switch(t.t){case"b":f=t.v?"1":"0";break;case"d":t=cr(t),t.z=t.z||Ue[14],t.v=hr(or(t.v)),t.t="n";break;case"n":case"e":f=""+t.v;break;default:f=t.v;break}var l={r,c:n};switch(l.s=Kr(i.cellXfs,t,i),t.l&&a["!links"].push([Re(l),t.l]),t.c&&a["!comments"].push([Re(l),t.c]),t.t){case"s":case"str":return i.bookSST?(f=o0(i.Strings,t.v,i.revStrings),l.t="s",l.v=f,s?j(e,18,Ec(t,l)):j(e,7,_c(t,l))):(l.t="str",s?j(e,17,Lc(t,l)):j(e,6,Ic(t,l))),!0;case"n":return t.v==(t.v|0)&&t.v>-1e3&&t.v<1e3?s?j(e,13,kc(t,l)):j(e,2,Cc(t,l)):s?j(e,16,Fc(t,l)):j(e,5,Sc(t,l)),!0;case"b":return l.t="b",s?j(e,15,xc(t,l)):j(e,4,cc(t,l)),!0;case"e":return l.t="e",s?j(e,14,gc(t,l)):j(e,3,pc(t,l)),!0}return s?j(e,12,lc(t,l)):j(e,1,fc(t,l)),!0}function nu(e,t,r,n){var i=Le(t["!ref"]||"A1"),a,s="",f=[];j(e,145);var l=Array.isArray(t),o=i.e.r;t["!rows"]&&(o=Math.max(i.e.r,t["!rows"].length-1));for(var h=i.s.r;h<=o;++h){s=Qe(h),ec(e,t,i,h);var p=!1;if(h<=i.e.r)for(var x=i.s.c;x<=i.e.c;++x){h===i.s.r&&(f[x]=nr(x)),a=f[x]+s;var d=l?(t[h]||[])[x]:t[a];if(!d){p=!1;continue}p=tu(e,d,h,x,n,t,p)}}j(e,146)}function iu(e,t){!t||!t["!merges"]||(j(e,177,Hc(t["!merges"].length)),t["!merges"].forEach(function(r){j(e,176,Wc(r))}),j(e,178))}function au(e,t){!t||!t["!cols"]||(j(e,390),t["!cols"].forEach(function(r,n){r&&j(e,60,Kc(n,r))}),j(e,391))}function su(e,t){!t||!t["!ref"]||(j(e,648),j(e,649,Zc(Le(t["!ref"]))),j(e,650))}function fu(e,t,r){t["!links"].forEach(function(n){if(n[1].Target){var i=Oe(r,-1,n[1].Target.replace(/#.*$/,""),Se.HLINK);j(e,494,Gc(n,i))}}),delete t["!links"]}function ou(e,t,r,n){if(t["!comments"].length>0){var i=Oe(n,-1,"../drawings/vmlDrawing"+(r+1)+".vml",Se.VML);j(e,551,t0("rId"+i)),t["!legacy"]=i}}function lu(e,t,r,n){if(t["!autofilter"]){var i=t["!autofilter"],a=typeof i.ref=="string"?i.ref:He(i.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var s=r.Workbook.Names,f=_r(a);f.s.r==f.e.r&&(f.e.r=_r(t["!ref"]).e.r,a=He(f));for(var l=0;l16383||l.e.r>1048575){if(t.WTF)throw new Error("Range "+(s["!ref"]||"A1")+" exceeds format limit A1:XFD1048576");l.e.c=Math.min(l.e.c,16383),l.e.r=Math.min(l.e.c,1048575)}return s["!links"]=[],s["!comments"]=[],j(i,129),(r.vbaraw||s["!outline"])&&j(i,147,ac(f,s["!outline"])),j(i,148,tc(l)),hu(i,s,r.Workbook),au(i,s),nu(i,s,e,t),cu(i,s),lu(i,s,r,e),iu(i,s),fu(i,s,n),s["!margins"]&&j(i,476,Yc(s["!margins"])),(!t||t.ignoreEC||t.ignoreEC==null)&&su(i,s),ou(i,s,e,n),j(i,130),i.end()}function xu(e,t){e.l+=10;var r=ir(e);return{name:r}}var du=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]];function pu(e){return!e.Workbook||!e.Workbook.WBProps?"false":Xs(e.Workbook.WBProps.date1904)?"true":"false"}var vu="][*?/\\".split("");function Aa(e,t){if(e.length>31)throw new Error("Sheet names cannot exceed 31 chars");var r=!0;return vu.forEach(function(n){if(e.indexOf(n)!=-1)throw new Error("Sheet name cannot contain : \\ / ? * [ ]")}),r}function gu(e,t,r){e.forEach(function(n,i){Aa(n);for(var a=0;a22)throw new Error("Bad Code Name: Worksheet"+s)}})}function mu(e){if(!e||!e.SheetNames||!e.Sheets)throw new Error("Invalid Workbook");if(!e.SheetNames.length)throw new Error("Workbook is empty");var t=e.Workbook&&e.Workbook.Sheets||[];gu(e.SheetNames,t,!!e.vbaraw);for(var r=0;r0,n={codeName:"ThisWorkbook"};e.Workbook&&e.Workbook.WBProps&&(du.forEach(function(f){e.Workbook.WBProps[f[0]]!=null&&e.Workbook.WBProps[f[0]]!=f[1]&&(n[f[0]]=e.Workbook.WBProps[f[0]])}),e.Workbook.WBProps.CodeName&&(n.codeName=e.Workbook.WBProps.CodeName,delete n.CodeName)),t[t.length]=Q("workbookPr",null,n);var i=e.Workbook&&e.Workbook.Sheets||[],a=0;if(i&&i[0]&&i[0].Hidden){for(t[t.length]="",a=0;a!=e.SheetNames.length&&!(!i[a]||!i[a].Hidden);++a);a==e.SheetNames.length&&(a=0),t[t.length]='',t[t.length]=""}for(t[t.length]="",a=0;a!=e.SheetNames.length;++a){var s={name:ke(e.SheetNames[a].slice(0,31))};if(s.sheetId=""+(a+1),s["r:id"]="rId"+(a+1),i[a])switch(i[a].Hidden){case 1:s.state="hidden";break;case 2:s.state="veryHidden";break}t[t.length]=Q("sheet",null,s)}return t[t.length]="",r&&(t[t.length]="",e.Workbook&&e.Workbook.Names&&e.Workbook.Names.forEach(function(f){var l={name:f.Name};f.Comment&&(l.comment=f.Comment),f.Sheet!=null&&(l.localSheetId=""+f.Sheet),f.Hidden&&(l.hidden="1"),f.Ref&&(t[t.length]=Q("definedName",ke(f.Ref),l))}),t[t.length]=""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function _u(e,t){var r={};return r.Hidden=e.read_shift(4),r.iTabID=e.read_shift(4),r.strRelID=Vn(e),r.name=ir(e),r}function Tu(e,t){return t||(t=H(127)),t.write_shift(4,e.Hidden),t.write_shift(4,e.iTabID),t0(e.strRelID,t),Ke(e.name.slice(0,31),t),t.length>t.l?t.slice(0,t.l):t}function Eu(e,t){var r={},n=e.read_shift(4);r.defaultThemeVersion=e.read_shift(4);var i=t>8?ir(e):"";return i.length>0&&(r.CodeName=i),r.autoCompressPictures=!!(n&65536),r.backupFile=!!(n&64),r.checkCompatibility=!!(n&4096),r.date1904=!!(n&1),r.filterPrivacy=!!(n&8),r.hidePivotFieldList=!!(n&1024),r.promptedSolutions=!!(n&16),r.publishItems=!!(n&2048),r.refreshAllConnections=!!(n&262144),r.saveExternalLinkValues=!!(n&128),r.showBorderUnselectedTables=!!(n&4),r.showInkAnnotation=!!(n&32),r.showObjects=["all","placeholders","none"][n>>13&3],r.showPivotChartFilter=!!(n&32768),r.updateLinks=["userSet","never","always"][n>>8&3],r}function wu(e,t){t||(t=H(72));var r=0;return e&&e.filterPrivacy&&(r|=8),t.write_shift(4,r),t.write_shift(4,0),Bi(e&&e.CodeName||"ThisWorkbook",t),t.slice(0,t.l)}function Su(e,t,r){var n=e.l+t;e.l+=4,e.l+=1;var i=e.read_shift(4),a=df(e),s=Lh(e,0,r),f=r0(e);e.l=n;var l={Name:a,Ptg:s};return i<268435455&&(l.Sheet=i),f&&(l.Comment=f),l}function Au(e,t){j(e,143);for(var r=0;r!=t.SheetNames.length;++r){var n=t.Workbook&&t.Workbook.Sheets&&t.Workbook.Sheets[r]&&t.Workbook.Sheets[r].Hidden||0,i={Hidden:n,iTabID:r+1,strRelID:"rId"+(r+1),name:t.SheetNames[r]};j(e,156,Tu(i))}j(e,144)}function Fu(e,t){t||(t=H(127));for(var r=0;r!=4;++r)t.write_shift(4,0);return Ke("SheetJS",t),Ke(an.version,t),Ke(an.version,t),Ke("7262",t),t.length>t.l?t.slice(0,t.l):t}function yu(e,t){t||(t=H(29)),t.write_shift(-4,0),t.write_shift(-4,460),t.write_shift(4,28800),t.write_shift(4,17600),t.write_shift(4,500),t.write_shift(4,e),t.write_shift(4,e);var r=120;return t.write_shift(1,r),t.length>t.l?t.slice(0,t.l):t}function Cu(e,t){if(!(!t.Workbook||!t.Workbook.Sheets)){for(var r=t.Workbook.Sheets,n=0,i=-1,a=-1;ni||(j(e,135),j(e,158,yu(i)),j(e,136))}}function Ou(e,t){var r=lr();return j(r,131),j(r,128,Fu()),j(r,153,wu(e.Workbook&&e.Workbook.WBProps||null)),Cu(r,e),Au(r,e),j(r,132),r.end()}function ku(e,t,r){return(t.slice(-4)===".bin"?Ou:Fa)(e)}function Ru(e,t,r,n,i){return(t.slice(-4)===".bin"?uu:wa)(e,r,n,i)}function Du(e,t,r){return(t.slice(-4)===".bin"?Yo:fa)(e,r)}function Iu(e,t,r){return(t.slice(-4)===".bin"?wo:na)(e,r)}function Nu(e,t,r){return(t.slice(-4)===".bin"?cl:ua)(e)}function Lu(e){return(e.slice(-4)===".bin"?nl:ha)()}function Pu(e,t){var r=[];return e.Props&&r.push(Rf(e.Props,t)),e.Custprops&&r.push(Df(e.Props,e.Custprops)),r.join("")}function Mu(){return""}function Bu(e,t){var r=[''];return t.cellXfs.forEach(function(n,i){var a=[];a.push(Q("NumberFormat",null,{"ss:Format":ke(Ue[n.numFmtId])}));var s={"ss:ID":"s"+(21+i)};r.push(Q("Style",a.join(""),s))}),Q("Styles",r.join(""))}function ya(e){return Q("NamedRange",null,{"ss:Name":e.Name,"ss:RefersTo":"="+s0(e.Ref,{r:0,c:0})})}function bu(e){if(!((e||{}).Workbook||{}).Names)return"";for(var t=e.Workbook.Names,r=[],n=0;n"),e["!margins"].header&&i.push(Q("Header",null,{"x:Margin":e["!margins"].header})),e["!margins"].footer&&i.push(Q("Footer",null,{"x:Margin":e["!margins"].footer})),i.push(Q("PageMargins",null,{"x:Bottom":e["!margins"].bottom||"0.75","x:Left":e["!margins"].left||"0.7","x:Right":e["!margins"].right||"0.7","x:Top":e["!margins"].top||"0.75"})),i.push("")),n&&n.Workbook&&n.Workbook.Sheets&&n.Workbook.Sheets[r])if(n.Workbook.Sheets[r].Hidden)i.push(Q("Visible",n.Workbook.Sheets[r].Hidden==1?"SheetHidden":"SheetVeryHidden",{}));else{for(var a=0;a")}return((((n||{}).Workbook||{}).Views||[])[0]||{}).RTL&&i.push(""),e["!protect"]&&(i.push(Ze("ProtectContents","True")),e["!protect"].objects&&i.push(Ze("ProtectObjects","True")),e["!protect"].scenarios&&i.push(Ze("ProtectScenarios","True")),e["!protect"].selectLockedCells!=null&&!e["!protect"].selectLockedCells?i.push(Ze("EnableSelection","NoSelection")):e["!protect"].selectUnlockedCells!=null&&!e["!protect"].selectUnlockedCells&&i.push(Ze("EnableSelection","UnlockedCells")),[["formatCells","AllowFormatCells"],["formatColumns","AllowSizeCols"],["formatRows","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach(function(s){e["!protect"][s[0]]&&i.push("<"+s[1]+"/>")})),i.length==0?"":Q("WorksheetOptions",i.join(""),{xmlns:gr.x})}function Hu(e){return e.map(function(t){var r=Gs(t.t||""),n=Q("ss:Data",r,{xmlns:"http://www.w3.org/TR/REC-html40"});return Q("Comment",n,{"ss:Author":t.a})}).join("")}function Vu(e,t,r,n,i,a,s){if(!e||e.v==null&&e.f==null)return"";var f={};if(e.f&&(f["ss:Formula"]="="+ke(s0(e.f,s))),e.F&&e.F.slice(0,t.length)==t){var l=ze(e.F.slice(t.length+1));f["ss:ArrayRange"]="RC:R"+(l.r==s.r?"":"["+(l.r-s.r)+"]")+"C"+(l.c==s.c?"":"["+(l.c-s.c)+"]")}if(e.l&&e.l.Target&&(f["ss:HRef"]=ke(e.l.Target),e.l.Tooltip&&(f["x:HRefScreenTip"]=ke(e.l.Tooltip))),r["!merges"])for(var o=r["!merges"],h=0;h!=o.length;++h)o[h].s.c!=s.c||o[h].s.r!=s.r||(o[h].e.c>o[h].s.c&&(f["ss:MergeAcross"]=o[h].e.c-o[h].s.c),o[h].e.r>o[h].s.r&&(f["ss:MergeDown"]=o[h].e.r-o[h].s.r));var p="",x="";switch(e.t){case"z":if(!n.sheetStubs)return"";break;case"n":p="Number",x=String(e.v);break;case"b":p="Boolean",x=e.v?"1":"0";break;case"e":p="Error",x=Xt[e.v];break;case"d":p="DateTime",x=new Date(e.v).toISOString(),e.z==null&&(e.z=e.z||Ue[14]);break;case"s":p="String",x=Vs(e.v||"");break}var d=Kr(n.cellXfs,e,n);f["ss:StyleID"]="s"+(21+d),f["ss:Index"]=s.c+1;var E=e.v!=null?x:"",c=e.t=="z"?"":''+E+"";return(e.c||[]).length>0&&(c+=Hu(e.c)),Q("Cell",c,f)}function Gu(e,t){var r='"}function Xu(e,t,r,n){if(!e["!ref"])return"";var i=Le(e["!ref"]),a=e["!merges"]||[],s=0,f=[];e["!cols"]&&e["!cols"].forEach(function(_,N){i0(_);var I=!!_.width,D=Cn(N,_),W={"ss:Index":N+1};I&&(W["ss:Width"]=pn(D.width)),_.hidden&&(W["ss:Hidden"]="1"),f.push(Q("Column",null,W))});for(var l=Array.isArray(e),o=i.s.r;o<=i.e.r;++o){for(var h=[Gu(o,(e["!rows"]||[])[o])],p=i.s.c;p<=i.e.c;++p){var x=!1;for(s=0;s!=a.length;++s)if(!(a[s].s.c>p)&&!(a[s].s.r>o)&&!(a[s].e.c"),h.length>2&&f.push(h.join(""))}return f.join("")}function ju(e,t,r){var n=[],i=r.SheetNames[e],a=r.Sheets[i],s=a?Uu(a,t,e,r):"";return s.length>0&&n.push(""+s+""),s=a?Xu(a,t,e,r):"",s.length>0&&n.push(""+s+"
"),n.push(Wu(a,t,e,r)),n.join("")}function zu(e,t){t||(t={}),e.SSF||(e.SSF=cr(Ue)),e.SSF&&(wn(),En(e.SSF),t.revssf=Sn(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF,t.cellXfs=[],Kr(t.cellXfs,{},{revssf:{General:0}}));var r=[];r.push(Pu(e,t)),r.push(Mu()),r.push(""),r.push("");for(var n=0;n-1||Ki.indexOf(i[a][0])>-1||i[a][1]!=null&&o.push(i[a]);n.length&&De.utils.cfb_add(t,"/SummaryInformation",X0(n,Mn.SI,l,U0)),(r.length||o.length)&&De.utils.cfb_add(t,"/DocumentSummaryInformation",X0(r,Mn.DSI,f,b0,o.length?o:null,Mn.UDI))}function $u(e,t){var r=t||{},n=De.utils.cfb_new({root:"R"}),i="/Workbook";switch(r.bookType||"xls"){case"xls":r.bookType="biff8";case"xla":r.bookType||(r.bookType="xla");case"biff8":i="/Workbook",r.biff=8;break;case"biff5":i="/Book",r.biff=5;break;default:throw new Error("invalid type "+r.bookType+" for XLS CFB")}return De.utils.cfb_add(n,i,Ca(e,r)),r.biff==8&&(e.Props||e.Custprops)&&Ku(e,n),r.biff==8&&e.vbaraw&&ul(n,De.read(e.vbaraw,{type:typeof e.vbaraw=="string"?"binary":"buffer"})),n}var Yu={0:{f:Zh},1:{f:sc},2:{f:yc},3:{f:dc},4:{f:hc},5:{f:wc},6:{f:Dc},7:{f:mc},8:{f:bc},9:{f:Bc},10:{f:Pc},11:{f:Mc},12:{f:oc},13:{f:Oc},14:{f:vc},15:{f:uc},16:{f:Ac},17:{f:Nc},18:{f:Tc},19:{f:e0},20:{},21:{},22:{},23:{},24:{},25:{},26:{},27:{},28:{},29:{},30:{},31:{},32:{},33:{},34:{},35:{T:1},36:{T:-1},37:{T:1},38:{T:-1},39:{f:Su},40:{},42:{},43:{f:Do},44:{f:ko},45:{f:Lo},46:{f:Mo},47:{f:Po},48:{},49:{f:ff},50:{},51:{f:Zo},52:{T:1},53:{T:-1},54:{T:1},55:{T:-1},56:{T:1},57:{T:-1},58:{},59:{},60:{f:oo},62:{f:Rc},63:{f:il},64:{f:eu},65:{},66:{},67:{},68:{},69:{},70:{},128:{},129:{T:1},130:{T:-1},131:{T:1,f:Rr,p:0},132:{T:-1},133:{T:1},134:{T:-1},135:{T:1},136:{T:-1},137:{T:1,f:Jc},138:{T:-1},139:{T:1},140:{T:-1},141:{T:1},142:{T:-1},143:{T:1},144:{T:-1},145:{T:1},146:{T:-1},147:{f:ic},148:{f:rc,p:16},151:{f:Xc},152:{},153:{f:Eu},154:{},155:{},156:{f:_u},157:{},158:{},159:{T:1,f:_o},160:{T:-1},161:{T:1,f:at},162:{T:-1},163:{T:1},164:{T:-1},165:{T:1},166:{T:-1},167:{},168:{},169:{},170:{},171:{},172:{T:1},173:{T:-1},174:{},175:{},176:{f:Uc},177:{T:1},178:{T:-1},179:{T:1},180:{T:-1},181:{T:1},182:{T:-1},183:{T:1},184:{T:-1},185:{T:1},186:{T:-1},187:{T:1},188:{T:-1},189:{T:1},190:{T:-1},191:{T:1},192:{T:-1},193:{T:1},194:{T:-1},195:{T:1},196:{T:-1},197:{T:1},198:{T:-1},199:{T:1},200:{T:-1},201:{T:1},202:{T:-1},203:{T:1},204:{T:-1},205:{T:1},206:{T:-1},207:{T:1},208:{T:-1},209:{T:1},210:{T:-1},211:{T:1},212:{T:-1},213:{T:1},214:{T:-1},215:{T:1},216:{T:-1},217:{T:1},218:{T:-1},219:{T:1},220:{T:-1},221:{T:1},222:{T:-1},223:{T:1},224:{T:-1},225:{T:1},226:{T:-1},227:{T:1},228:{T:-1},229:{T:1},230:{T:-1},231:{T:1},232:{T:-1},233:{T:1},234:{T:-1},235:{T:1},236:{T:-1},237:{T:1},238:{T:-1},239:{T:1},240:{T:-1},241:{T:1},242:{T:-1},243:{T:1},244:{T:-1},245:{T:1},246:{T:-1},247:{T:1},248:{T:-1},249:{T:1},250:{T:-1},251:{T:1},252:{T:-1},253:{T:1},254:{T:-1},255:{T:1},256:{T:-1},257:{T:1},258:{T:-1},259:{T:1},260:{T:-1},261:{T:1},262:{T:-1},263:{T:1},264:{T:-1},265:{T:1},266:{T:-1},267:{T:1},268:{T:-1},269:{T:1},270:{T:-1},271:{T:1},272:{T:-1},273:{T:1},274:{T:-1},275:{T:1},276:{T:-1},277:{},278:{T:1},279:{T:-1},280:{T:1},281:{T:-1},282:{T:1},283:{T:1},284:{T:-1},285:{T:1},286:{T:-1},287:{T:1},288:{T:-1},289:{T:1},290:{T:-1},291:{T:1},292:{T:-1},293:{T:1},294:{T:-1},295:{T:1},296:{T:-1},297:{T:1},298:{T:-1},299:{T:1},300:{T:-1},301:{T:1},302:{T:-1},303:{T:1},304:{T:-1},305:{T:1},306:{T:-1},307:{T:1},308:{T:-1},309:{T:1},310:{T:-1},311:{T:1},312:{T:-1},313:{T:-1},314:{T:1},315:{T:-1},316:{T:1},317:{T:-1},318:{T:1},319:{T:-1},320:{T:1},321:{T:-1},322:{T:1},323:{T:-1},324:{T:1},325:{T:-1},326:{T:1},327:{T:-1},328:{T:1},329:{T:-1},330:{T:1},331:{T:-1},332:{T:1},333:{T:-1},334:{T:1},335:{f:Jo},336:{T:-1},337:{f:rl,T:1},338:{T:-1},339:{T:1},340:{T:-1},341:{T:1},342:{T:-1},343:{T:1},344:{T:-1},345:{T:1},346:{T:-1},347:{T:1},348:{T:-1},349:{T:1},350:{T:-1},351:{},352:{},353:{T:1},354:{T:-1},355:{f:Vn},357:{},358:{},359:{},360:{T:1},361:{},362:{f:to},363:{},364:{},366:{},367:{},368:{},369:{},370:{},371:{},372:{T:1},373:{T:-1},374:{T:1},375:{T:-1},376:{T:1},377:{T:-1},378:{T:1},379:{T:-1},380:{T:1},381:{T:-1},382:{T:1},383:{T:-1},384:{T:1},385:{T:-1},386:{T:1},387:{T:-1},388:{T:1},389:{T:-1},390:{T:1},391:{T:-1},392:{T:1},393:{T:-1},394:{T:1},395:{T:-1},396:{},397:{},398:{},399:{},400:{},401:{T:1},403:{},404:{},405:{},406:{},407:{},408:{},409:{},410:{},411:{},412:{},413:{},414:{},415:{},416:{},417:{},418:{},419:{},420:{},421:{},422:{T:1},423:{T:1},424:{T:-1},425:{T:-1},426:{f:jc},427:{f:zc},428:{},429:{T:1},430:{T:-1},431:{T:1},432:{T:-1},433:{T:1},434:{T:-1},435:{T:1},436:{T:-1},437:{T:1},438:{T:-1},439:{T:1},440:{T:-1},441:{T:1},442:{T:-1},443:{T:1},444:{T:-1},445:{T:1},446:{T:-1},447:{T:1},448:{T:-1},449:{T:1},450:{T:-1},451:{T:1},452:{T:-1},453:{T:1},454:{T:-1},455:{T:1},456:{T:-1},457:{T:1},458:{T:-1},459:{T:1},460:{T:-1},461:{T:1},462:{T:-1},463:{T:1},464:{T:-1},465:{T:1},466:{T:-1},467:{T:1},468:{T:-1},469:{T:1},470:{T:-1},471:{},472:{},473:{T:1},474:{T:-1},475:{},476:{f:$c},477:{},478:{},479:{T:1},480:{T:-1},481:{T:1},482:{T:-1},483:{T:1},484:{T:-1},485:{f:nc},486:{T:1},487:{T:-1},488:{T:1},489:{T:-1},490:{T:1},491:{T:-1},492:{T:1},493:{T:-1},494:{f:Vc},495:{T:1},496:{T:-1},497:{T:1},498:{T:-1},499:{},500:{T:1},501:{T:-1},502:{T:1},503:{T:-1},504:{},505:{T:1},506:{T:-1},507:{},508:{T:1},509:{T:-1},510:{T:1},511:{T:-1},512:{},513:{},514:{T:1},515:{T:-1},516:{T:1},517:{T:-1},518:{T:1},519:{T:-1},520:{T:1},521:{T:-1},522:{},523:{},524:{},525:{},526:{},527:{},528:{T:1},529:{T:-1},530:{T:1},531:{T:-1},532:{T:1},533:{T:-1},534:{},535:{},536:{},537:{},538:{T:1},539:{T:-1},540:{T:1},541:{T:-1},542:{T:1},548:{},549:{},550:{f:Vn},551:{},552:{},553:{},554:{T:1},555:{T:-1},556:{T:1},557:{T:-1},558:{T:1},559:{T:-1},560:{T:1},561:{T:-1},562:{},564:{},565:{T:1},566:{T:-1},569:{T:1},570:{T:-1},572:{},573:{T:1},574:{T:-1},577:{},578:{},579:{},580:{},581:{},582:{},583:{},584:{},585:{},586:{},587:{},588:{T:-1},589:{},590:{T:1},591:{T:-1},592:{T:1},593:{T:-1},594:{T:1},595:{T:-1},596:{},597:{T:1},598:{T:-1},599:{T:1},600:{T:-1},601:{T:1},602:{T:-1},603:{T:1},604:{T:-1},605:{T:1},606:{T:-1},607:{},608:{T:1},609:{T:-1},610:{},611:{T:1},612:{T:-1},613:{T:1},614:{T:-1},615:{T:1},616:{T:-1},617:{T:1},618:{T:-1},619:{T:1},620:{T:-1},625:{},626:{T:1},627:{T:-1},628:{T:1},629:{T:-1},630:{T:1},631:{T:-1},632:{f:ll},633:{T:1},634:{T:-1},635:{T:1,f:fl},636:{T:-1},637:{f:cf},638:{T:1},639:{},640:{T:-1},641:{T:1},642:{T:-1},643:{T:1},644:{},645:{T:-1},646:{T:1},648:{T:1},649:{},650:{T:-1},651:{f:xu},652:{},653:{T:1},654:{T:-1},655:{T:1},656:{T:-1},657:{T:1},658:{T:-1},659:{},660:{T:1},661:{},662:{T:-1},663:{},664:{T:1},665:{},666:{T:-1},667:{},668:{},669:{},671:{T:1},672:{T:-1},673:{T:1},674:{T:-1},675:{},676:{},677:{},678:{},679:{},680:{},681:{},1024:{},1025:{},1026:{T:1},1027:{T:-1},1028:{T:1},1029:{T:-1},1030:{},1031:{T:1},1032:{T:-1},1033:{T:1},1034:{T:-1},1035:{},1036:{},1037:{},1038:{T:1},1039:{T:-1},1040:{},1041:{T:1},1042:{T:-1},1043:{},1044:{},1045:{},1046:{T:1},1047:{T:-1},1048:{T:1},1049:{T:-1},1050:{},1051:{T:1},1052:{T:1},1053:{f:ru},1054:{T:1},1055:{},1056:{T:1},1057:{T:-1},1058:{T:1},1059:{T:-1},1061:{},1062:{T:1},1063:{T:-1},1064:{T:1},1065:{T:-1},1066:{T:1},1067:{T:-1},1068:{T:1},1069:{T:-1},1070:{T:1},1071:{T:-1},1072:{T:1},1073:{T:-1},1075:{T:1},1076:{T:-1},1077:{T:1},1078:{T:-1},1079:{T:1},1080:{T:-1},1081:{T:1},1082:{T:-1},1083:{T:1},1084:{T:-1},1085:{},1086:{T:1},1087:{T:-1},1088:{T:1},1089:{T:-1},1090:{T:1},1091:{T:-1},1092:{T:1},1093:{T:-1},1094:{T:1},1095:{T:-1},1096:{},1097:{T:1},1098:{},1099:{T:-1},1100:{T:1},1101:{T:-1},1102:{},1103:{},1104:{},1105:{},1111:{},1112:{},1113:{T:1},1114:{T:-1},1115:{T:1},1116:{T:-1},1117:{},1118:{T:1},1119:{T:-1},1120:{T:1},1121:{T:-1},1122:{T:1},1123:{T:-1},1124:{T:1},1125:{T:-1},1126:{},1128:{T:1},1129:{T:-1},1130:{},1131:{T:1},1132:{T:-1},1133:{T:1},1134:{T:-1},1135:{T:1},1136:{T:-1},1137:{T:1},1138:{T:-1},1139:{T:1},1140:{T:-1},1141:{},1142:{T:1},1143:{T:-1},1144:{T:1},1145:{T:-1},1146:{},1147:{T:1},1148:{T:-1},1149:{T:1},1150:{T:-1},1152:{T:1},1153:{T:-1},1154:{T:-1},1155:{T:-1},1156:{T:-1},1157:{T:1},1158:{T:-1},1159:{T:1},1160:{T:-1},1161:{T:1},1162:{T:-1},1163:{T:1},1164:{T:-1},1165:{T:1},1166:{T:-1},1167:{T:1},1168:{T:-1},1169:{T:1},1170:{T:-1},1171:{},1172:{T:1},1173:{T:-1},1177:{},1178:{T:1},1180:{},1181:{},1182:{},2048:{T:1},2049:{T:-1},2050:{},2051:{T:1},2052:{T:-1},2053:{},2054:{},2055:{T:1},2056:{T:-1},2057:{T:1},2058:{T:-1},2060:{},2067:{},2068:{T:1},2069:{T:-1},2070:{},2071:{},2072:{T:1},2073:{T:-1},2075:{},2076:{},2077:{T:1},2078:{T:-1},2079:{},2080:{T:1},2081:{T:-1},2082:{},2083:{T:1},2084:{T:-1},2085:{T:1},2086:{T:-1},2087:{T:1},2088:{T:-1},2089:{T:1},2090:{T:-1},2091:{},2092:{},2093:{T:1},2094:{T:-1},2095:{},2096:{T:1},2097:{T:-1},2098:{T:1},2099:{T:-1},2100:{T:1},2101:{T:-1},2102:{},2103:{T:1},2104:{T:-1},2105:{},2106:{T:1},2107:{T:-1},2108:{},2109:{T:1},2110:{T:-1},2111:{T:1},2112:{T:-1},2113:{T:1},2114:{T:-1},2115:{},2116:{},2117:{},2118:{T:1},2119:{T:-1},2120:{},2121:{T:1},2122:{T:-1},2123:{T:1},2124:{T:-1},2125:{},2126:{T:1},2127:{T:-1},2128:{},2129:{T:1},2130:{T:-1},2131:{T:1},2132:{T:-1},2133:{T:1},2134:{},2135:{},2136:{},2137:{T:1},2138:{T:-1},2139:{T:1},2140:{T:-1},2141:{},3072:{},3073:{},4096:{T:1},4097:{T:-1},5002:{T:1},5003:{T:-1},5081:{T:1},5082:{T:-1},5083:{},5084:{T:1},5085:{T:-1},5086:{T:1},5087:{T:-1},5088:{},5089:{},5090:{},5092:{T:1},5093:{T:-1},5094:{},5095:{T:1},5096:{T:-1},5097:{},5099:{},65535:{n:""}};function ee(e,t,r,n){var i=t;if(!isNaN(i)){var a=n||(r||[]).length||0,s=e.next(4);s.write_shift(2,i),s.write_shift(2,a),a>0&&qn(r)&&e.push(r)}}function Ju(e,t,r,n){var i=(r||[]).length||0;if(i<=8224)return ee(e,t,r,i);var a=t;if(!isNaN(a)){for(var s=r.parts||[],f=0,l=0,o=0;o+(s[f]||8224)<=8224;)o+=s[f]||8224,f++;var h=e.next(4);for(h.write_shift(2,a),h.write_shift(2,o),e.push(r.slice(l,l+o)),l+=o;l=0&&i<65536?ee(e,2,uo(r,n,i)):ee(e,3,co(r,n,i));return;case"b":case"e":ee(e,5,qu(r,n,t.v,t.t));return;case"s":case"str":ee(e,4,Zu(r,n,(t.v||"").slice(0,255)));return}ee(e,1,zt(null,r,n))}function e1(e,t,r,n){var i=Array.isArray(t),a=Le(t["!ref"]||"A1"),s,f="",l=[];if(a.e.c>255||a.e.r>16383){if(n.WTF)throw new Error("Range "+(t["!ref"]||"A1")+" exceeds format limit A1:IV16384");a.e.c=Math.min(a.e.c,255),a.e.r=Math.min(a.e.c,16383),s=He(a)}for(var o=a.s.r;o<=a.e.r;++o){f=Qe(o);for(var h=a.s.c;h<=a.e.c;++h){o===a.s.r&&(l[h]=nr(h)),s=l[h]+f;var p=i?(t[o]||[])[h]:t[s];p&&Qu(e,p,o,h)}}}function r1(e,t){for(var r=t||{},n=lr(),i=0,a=0;a255||d.e.r>=E){if(t.WTF)throw new Error("Range "+(a["!ref"]||"A1")+" exceeds format limit A1:IV16384");d.e.c=Math.min(d.e.c,255),d.e.r=Math.min(d.e.c,E-1)}ee(n,2057,n0(r,16,t)),ee(n,13,Er(1)),ee(n,12,Er(100)),ee(n,15,fr(!0)),ee(n,17,fr(!1)),ee(n,16,Zr(.001)),ee(n,95,fr(!0)),ee(n,42,fr(!1)),ee(n,43,fr(!1)),ee(n,130,Er(1)),ee(n,128,Qf()),ee(n,131,fr(!1)),ee(n,132,fr(!1)),o&&f1(n,a["!cols"]),ee(n,512,Zf(d,t)),o&&(a["!links"]=[]);for(var c=d.s.r;c<=d.e.r;++c){p=Qe(c);for(var _=d.s.c;_<=d.e.c;++_){c===d.s.r&&(x[_]=nr(_)),h=x[_]+p;var N=l?(a[c]||[])[_]:a[h];N&&(o1(n,N,c,_,t),o&&N.l&&a["!links"].push([h,N.l]))}}var I=f.CodeName||f.name||i;return o&&ee(n,574,Kf((s.Views||[])[0])),o&&(a["!merges"]||[]).length&&ee(n,229,io(a["!merges"])),o&&s1(n,a),ee(n,442,ea(I)),o&&i1(n,a),ee(n,10),n.end()}function h1(e,t,r){var n=lr(),i=(e||{}).Workbook||{},a=i.Sheets||[],s=i.WBProps||{},f=r.biff==8,l=r.biff==5;if(ee(n,2057,n0(e,5,r)),r.bookType=="xla"&&ee(n,135),ee(n,225,f?Er(1200):null),ee(n,193,Lf(2)),l&&ee(n,191),l&&ee(n,192),ee(n,226),ee(n,92,Gf("SheetJS",r)),ee(n,66,Er(f?1200:1252)),f&&ee(n,353,Er(0)),f&&ee(n,448),ee(n,317,ho(e.SheetNames.length)),f&&e.vbaraw&&ee(n,211),f&&e.vbaraw){var o=s.CodeName||"ThisWorkbook";ee(n,442,ea(o))}ee(n,156,Er(17)),ee(n,25,fr(!1)),ee(n,18,fr(!1)),ee(n,19,Er(0)),f&&ee(n,431,fr(!1)),f&&ee(n,444,Er(0)),ee(n,61,zf()),ee(n,64,fr(!1)),ee(n,141,Er(0)),ee(n,34,fr(pu(e)=="true")),ee(n,14,fr(!0)),f&&ee(n,439,fr(!1)),ee(n,218,Er(0)),t1(n,e,r),n1(n,e.SSF,r),a1(n,r),f&&ee(n,352,fr(!1));var h=n.end(),p=lr();f&&ee(p,140,fo()),f&&r.Strings&&Ju(p,252,jf(r.Strings)),ee(p,10);var x=p.end(),d=lr(),E=0,c=0;for(c=0;c255&&typeof console<"u"&&console.error&&console.error("Worksheet '"+e.SheetNames[r]+"' extends beyond column IV (255). Data may be lost.")}}var a=t||{};switch(a.biff||2){case 8:case 5:return c1(e,t);case 4:case 3:case 2:return r1(e,t)}throw new Error("invalid type "+a.bookType+" for BIFF")}function u1(e,t,r,n){for(var i=e["!merges"]||[],a=[],s=t.s.c;s<=t.e.c;++s){for(var f=0,l=0,o=0;or||i[o].s.c>s)&&!(i[o].e.r1&&(d.rowspan=f),l>1&&(d.colspan=l),n.editable?x=''+x+"":p&&(d["data-t"]=p&&p.t||"z",p.v!=null&&(d["data-v"]=p.v),p.z!=null&&(d["data-z"]=p.z),p.l&&(p.l.Target||"#").charAt(0)!="#"&&(x=''+x+"")),d.id=(n.id||"sjs")+"-"+h,a.push(Q("td",x,d))}}var E="";return E+a.join("")+""}var x1='SheetJS Table Export',d1="";function p1(e,t,r){var n=[];return n.join("")+""}function Oa(e,t){var r=t||{},n=r.header!=null?r.header:x1,i=r.footer!=null?r.footer:d1,a=[n],s=_r(e["!ref"]);r.dense=Array.isArray(e),a.push(p1(e,s,r));for(var f=s.s.r;f<=s.e.r;++f)a.push(u1(e,s,f,r));return a.push(""+i),a.join("")}function ka(e,t,r){var n=r||{},i=0,a=0;if(n.origin!=null)if(typeof n.origin=="number")i=n.origin;else{var s=typeof n.origin=="string"?ze(n.origin):n.origin;i=s.r,a=s.c}var f=t.getElementsByTagName("tr"),l=Math.min(n.sheetRows||1e7,f.length),o={s:{r:0,c:0},e:{r:i,c:a}};if(e["!ref"]){var h=_r(e["!ref"]);o.s.r=Math.min(o.s.r,h.s.r),o.s.c=Math.min(o.s.c,h.s.c),o.e.r=Math.max(o.e.r,h.e.r),o.e.c=Math.max(o.e.c,h.e.c),i==-1&&(o.e.r=i=h.e.r+1)}var p=[],x=0,d=e["!rows"]||(e["!rows"]=[]),E=0,c=0,_=0,N=0,I=0,D=0;for(e["!cols"]||(e["!cols"]=[]);E1||D>1)&&p.push({s:{r:c+i,c:N+a},e:{r:c+i+(I||1)-1,c:N+a+(D||1)-1}});var y={t:"s",v:k},L=re.getAttribute("data-t")||re.getAttribute("t")||"";k!=null&&(k.length==0?y.t=L||"z":n.raw||k.trim().length==0||L=="s"||(k==="TRUE"?y={t:"b",v:!0}:k==="FALSE"?y={t:"b",v:!1}:isNaN(Pr(k))?isNaN(Mt(k).getDate())||(y={t:"d",v:or(k)},n.cellDates||(y={t:"n",v:hr(y.v)}),y.z=n.dateNF||Ue[14]):y={t:"n",v:Pr(k)})),y.z===void 0&&T!=null&&(y.z=T);var P="",X=re.getElementsByTagName("A");if(X&&X.length)for(var ve=0;ve=l&&(e["!fullref"]=He((o.e.r=f.length-E+c-1+i,o))),e}function Ra(e,t){var r=t||{},n=r.dense?[]:{};return ka(n,e,t)}function v1(e,t){return rt(Ra(e,t),t)}function Q0(e){var t="",r=g1(e);return r&&(t=r(e).getPropertyValue("display")),t||(t=e.style&&e.style.display),t==="none"}function g1(e){return e.ownerDocument.defaultView&&typeof e.ownerDocument.defaultView.getComputedStyle=="function"?e.ownerDocument.defaultView.getComputedStyle:typeof getComputedStyle=="function"?getComputedStyle:null}var m1=function(){var e=["",'',"",'',"",'',"",""].join(""),t=""+e+"";return function(){return Ve+t}}(),ei=function(){var e=function(a){return ke(a).replace(/ +/g,function(s){return''}).replace(/\t/g,"").replace(/\n/g,"").replace(/^ /,"").replace(/ $/,"")},t=` -`,r=` -`,n=function(a,s,f){var l=[];l.push(' -`);var o=0,h=0,p=_r(a["!ref"]||"A1"),x=a["!merges"]||[],d=0,E=Array.isArray(a);if(a["!cols"])for(h=0;h<=p.e.c;++h)l.push(" -`);var c="",_=a["!rows"]||[];for(o=0;o -`);for(;o<=p.e.r;++o){for(c=_[o]?' table:style-name="ro'+_[o].ods+'"':"",l.push(" -`),h=0;hh)&&!(x[d].s.r>o)&&!(x[d].e.c -`)}return l.push(` -`),l.join("")},i=function(a,s){a.push(` -`),a.push(` -`),a.push(` -`),a.push(` / -`),a.push(` -`),a.push(` / -`),a.push(` -`),a.push(` -`);var f=0;s.SheetNames.map(function(o){return s.Sheets[o]}).forEach(function(o){if(o&&o["!cols"]){for(var h=0;h -`),a.push(' -`),a.push(` -`),++f}}});var l=0;s.SheetNames.map(function(o){return s.Sheets[o]}).forEach(function(o){if(o&&o["!rows"]){for(var h=0;h -`),a.push(' -`),a.push(` -`),++l}}}),a.push(` -`),a.push(` -`),a.push(` -`),a.push(` -`),a.push(` -`)};return function(s,f){var l=[Ve],o=bt({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),h=bt({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});f.bookType=="fods"?(l.push(" -`),l.push(ji().replace(/office:document-meta/g,"office:meta"))):l.push(" -`),i(l,s),l.push(` -`),l.push(` -`);for(var p=0;p!=s.SheetNames.length;++p)l.push(n(s.Sheets[s.SheetNames[p]],s,p));return l.push(` -`),l.push(` -`),f.bookType=="fods"?l.push(""):l.push(""),l.join("")}}();function Da(e,t){if(t.bookType=="fods")return ei(e,t);var r=Kn(),n="",i=[],a=[];return n="mimetype",me(r,n,"application/vnd.oasis.opendocument.spreadsheet"),n="content.xml",me(r,n,ei(e,t)),i.push([n,"text/xml"]),a.push([n,"ContentFile"]),n="styles.xml",me(r,n,m1(e,t)),i.push([n,"text/xml"]),a.push([n,"StylesFile"]),n="meta.xml",me(r,n,Ve+ji()),i.push([n,"text/xml"]),a.push([n,"MetadataFile"]),n="manifest.rdf",me(r,n,kf(a)),i.push([n,"application/rdf+xml"]),n="META-INF/manifest.xml",me(r,n,Cf(i)),r}/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */function mn(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function _1(e){return typeof TextEncoder<"u"?new TextEncoder().encode(e):Fr(Bt(e))}function T1(e,t){e:for(var r=0;r<=e.length-t.length;++r){for(var n=0;n>7,e[t+14]|=(n&127)<<1;for(var a=0;i>=1;++a,i/=256)e[t+a]=i&255;e[t+15]|=r>=0?0:128}function Ut(e,t){var r=t?t[0]:0,n=e[r]&127;e:if(e[r++]>=128&&(n|=(e[r]&127)<<7,e[r++]<128||(n|=(e[r]&127)<<14,e[r++]<128)||(n|=(e[r]&127)<<21,e[r++]<128)||(n+=(e[r]&127)*Math.pow(2,28),++r,e[r++]<128)||(n+=(e[r]&127)*Math.pow(2,35),++r,e[r++]<128)||(n+=(e[r]&127)*Math.pow(2,42),++r,e[r++]<128)))break e;return t&&(t[0]=r),n}function Ce(e){var t=new Uint8Array(7);t[0]=e&127;var r=1;e:if(e>127){if(t[r-1]|=128,t[r]=e>>7&127,++r,e<=16383||(t[r-1]|=128,t[r]=e>>14&127,++r,e<=2097151)||(t[r-1]|=128,t[r]=e>>21&127,++r,e<=268435455)||(t[r-1]|=128,t[r]=e/256>>>21&127,++r,e<=34359738367)||(t[r-1]|=128,t[r]=e/65536>>>21&127,++r,e<=4398046511103))break e;t[r-1]|=128,t[r]=e/16777216>>>21&127,++r}return t.slice(0,r)}function dt(e){var t=0,r=e[t]&127;e:if(e[t++]>=128){if(r|=(e[t]&127)<<7,e[t++]<128||(r|=(e[t]&127)<<14,e[t++]<128)||(r|=(e[t]&127)<<21,e[t++]<128))break e;r|=(e[t]&127)<<28}return r}function Ge(e){for(var t=[],r=[0];r[0]=128;);f=e.slice(l,r[0])}break;case 5:s=4,f=e.slice(r[0],r[0]+s),r[0]+=s;break;case 1:s=8,f=e.slice(r[0],r[0]+s),r[0]+=s;break;case 2:s=Ut(e,r),f=e.slice(r[0],r[0]+s),r[0]+=s;break;case 3:case 4:default:throw new Error("PB Type ".concat(a," for Field ").concat(i," at offset ").concat(n))}var o={data:f,type:a};t[i]==null?t[i]=[o]:t[i].push(o)}return t}function Ye(e){var t=[];return e.forEach(function(r,n){r.forEach(function(i){i.data&&(t.push(Ce(n*8+i.type)),i.type==2&&t.push(Ce(i.data.length)),t.push(i.data))})}),zr(t)}function Sr(e){for(var t,r=[],n=[0];n[0]>>0>0),r.push(s)}return r}function ft(e){var t=[];return e.forEach(function(r){var n=[];n[1]=[{data:Ce(r.id),type:0}],n[2]=[],r.merge!=null&&(n[3]=[{data:Ce(+!!r.merge),type:0}]);var i=[];r.messages.forEach(function(s){i.push(s.data),s.meta[3]=[{type:0,data:Ce(s.data.length)}],n[2].push({data:Ye(s.meta),type:2})});var a=Ye(n);t.push(Ce(a.length)),t.push(a),i.forEach(function(s){return t.push(s)})}),zr(t)}function w1(e,t){if(e!=0)throw new Error("Unexpected Snappy chunk type ".concat(e));for(var r=[0],n=Ut(t,r),i=[];r[0]>2;if(s<60)++s;else{var f=s-59;s=t[r[0]],f>1&&(s|=t[r[0]+1]<<8),f>2&&(s|=t[r[0]+2]<<16),f>3&&(s|=t[r[0]+3]<<24),s>>>=0,s++,r[0]+=f}i.push(t.slice(r[0],r[0]+s)),r[0]+=s;continue}else{var l=0,o=0;if(a==1?(o=(t[r[0]]>>2&7)+4,l=(t[r[0]++]&224)<<3,l|=t[r[0]++]):(o=(t[r[0]++]>>2)+1,a==2?(l=t[r[0]]|t[r[0]+1]<<8,r[0]+=2):(l=(t[r[0]]|t[r[0]+1]<<8|t[r[0]+2]<<16|t[r[0]+3]<<24)>>>0,r[0]+=4)),i=[zr(i)],l==0)throw new Error("Invalid offset 0");if(l>i[0].length)throw new Error("Invalid offset beyond length");if(o>=l)for(i.push(i[0].slice(-l)),o-=l;o>=i[i.length-1].length;)i.push(i[i.length-1]),o-=i[i.length-1].length;i.push(i[0].slice(-l,-l+o))}}var h=zr(i);if(h.length!=n)throw new Error("Unexpected length: ".concat(h.length," != ").concat(n));return h}function Ar(e){for(var t=[],r=0;r>8&255]))):n<=16777216?(s+=4,t.push(new Uint8Array([248,n-1&255,n-1>>8&255,n-1>>16&255]))):n<=4294967296&&(s+=5,t.push(new Uint8Array([252,n-1&255,n-1>>8&255,n-1>>16&255,n-1>>>24&255]))),t.push(e.slice(r,r+n)),s+=n,i[0]=0,i[1]=s&255,i[2]=s>>8&255,i[3]=s>>16&255,r+=n}return zr(t)}function Bn(e,t){var r=new Uint8Array(32),n=mn(r),i=12,a=0;switch(r[0]=5,e.t){case"n":r[1]=2,E1(r,i,e.v),a|=1,i+=16;break;case"b":r[1]=6,n.setFloat64(i,e.v?1:0,!0),a|=2,i+=8;break;case"s":if(t.indexOf(e.v)==-1)throw new Error("Value ".concat(e.v," missing from SST!"));r[1]=3,n.setUint32(i,t.indexOf(e.v),!0),a|=8,i+=4;break;default:throw"unsupported cell type "+e.t}return n.setUint32(8,a,!0),r.slice(0,i)}function bn(e,t){var r=new Uint8Array(32),n=mn(r),i=12,a=0;switch(r[0]=3,e.t){case"n":r[2]=2,n.setFloat64(i,e.v,!0),a|=32,i+=8;break;case"b":r[2]=6,n.setFloat64(i,e.v?1:0,!0),a|=32,i+=8;break;case"s":if(t.indexOf(e.v)==-1)throw new Error("Value ".concat(e.v," missing from SST!"));r[2]=3,n.setUint32(i,t.indexOf(e.v),!0),a|=16,i+=4;break;default:throw"unsupported cell type "+e.t}return n.setUint32(4,a,!0),r.slice(0,i)}function Hr(e){var t=Ge(e);return Ut(t[1][0].data)}function S1(e,t,r){var n,i,a,s;if(!((n=e[6])!=null&&n[0])||!((i=e[7])!=null&&i[0]))throw"Mutation only works on post-BNC storages!";var f=((s=(a=e[8])==null?void 0:a[0])==null?void 0:s.data)&&dt(e[8][0].data)>0||!1;if(f)throw"Math only works with normal offsets";for(var l=0,o=mn(e[7][0].data),h=0,p=[],x=mn(e[4][0].data),d=0,E=[],c=0;c1&&console.error("The Numbers writer currently writes only the first table");var n=_r(r["!ref"]);n.s.r=n.s.c=0;var i=!1;n.e.c>9&&(i=!0,n.e.c=9),n.e.r>49&&(i=!0,n.e.r=49),i&&console.error("The Numbers writer is currently limited to ".concat(He(n)));var a=_n(r,{range:n,header:1}),s=["~Sh33tJ5~"];a.forEach(function(O){return O.forEach(function(R){typeof R=="string"&&s.push(R)})});var f={},l=[],o=De.read(t.numbers,{type:"base64"});o.FileIndex.map(function(O,R){return[O,o.FullPaths[R]]}).forEach(function(O){var R=O[0],C=O[1];if(R.type==2&&R.name.match(/\.iwa/)){var V=R.content,ie=Ar(V),q=Sr(ie);q.forEach(function(Y){l.push(Y.id),f[Y.id]={deps:[],location:C,type:dt(Y.messages[0].meta[1][0].data)}})}}),l.sort(function(O,R){return O-R});var h=l.filter(function(O){return O>1}).map(function(O){return[O,Ce(O)]});o.FileIndex.map(function(O,R){return[O,o.FullPaths[R]]}).forEach(function(O){var R=O[0];if(O[1],!!R.name.match(/\.iwa/)){var C=Sr(Ar(R.content));C.forEach(function(V){V.messages.forEach(function(ie){h.forEach(function(q){V.messages.some(function(Y){return dt(Y.meta[1][0].data)!=11006&&T1(Y.data,q[1])})&&f[q[0]].deps.push(V.id)})})})}});for(var p=De.find(o,f[1].location),x=Sr(Ar(p.content)),d,E=0;E-1,i=Vi();l0(t=t||{});var a=Kn(),s="",f=0;if(t.cellXfs=[],Kr(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),s="docProps/core.xml",me(a,s,zi(e.Props,t)),i.coreprops.push(s),Oe(t.rels,2,s,Se.CORE_PROPS),s="docProps/app.xml",!(e.Props&&e.Props.SheetNames))if(!e.Workbook||!e.Workbook.Sheets)e.Props.SheetNames=e.SheetNames;else{for(var l=[],o=0;o0&&(s="docProps/custom.xml",me(a,s,Yi(e.Custprops)),i.custprops.push(s),Oe(t.rels,4,s,Se.CUST_PROPS)),f=1;f<=e.SheetNames.length;++f){var h={"!id":{}},p=e.Sheets[e.SheetNames[f-1]],x=(p||{})["!type"]||"sheet";switch(x){case"chart":default:s="xl/worksheets/sheet"+f+"."+r,me(a,s,Ru(f-1,s,t,e,h)),i.sheets.push(s),Oe(t.wbrels,-1,"worksheets/sheet"+f+"."+r,Se.WS[0])}if(p){var d=p["!comments"],E=!1,c="";d&&d.length>0&&(c="xl/comments"+f+"."+r,me(a,c,Nu(d,c)),i.comments.push(c),Oe(h,-1,"../comments"+f+"."+r,Se.CMNT),E=!0),p["!legacy"]&&E&&me(a,"xl/drawings/vmlDrawing"+f+".vml",ca(f,p["!comments"])),delete p["!comments"],delete p["!legacy"]}h["!id"].rId1&&me(a,Xi(s),ut(h))}return t.Strings!=null&&t.Strings.length>0&&(s="xl/sharedStrings."+r,me(a,s,Iu(t.Strings,s,t)),i.strs.push(s),Oe(t.wbrels,-1,"sharedStrings."+r,Se.SST)),s="xl/workbook."+r,me(a,s,ku(e,s)),i.workbooks.push(s),Oe(t.rels,1,s,Se.WB),s="xl/theme/theme1.xml",me(a,s,la(e.Themes,t)),i.themes.push(s),Oe(t.wbrels,-1,"theme/theme1.xml",Se.THEME),s="xl/styles."+r,me(a,s,Du(e,s,t)),i.styles.push(s),Oe(t.wbrels,-1,"styles."+r,Se.STY),e.vbaraw&&n&&(s="xl/vbaProject.bin",me(a,s,e.vbaraw),i.vba.push(s),Oe(t.wbrels,-1,"vbaProject.bin",Se.VBA)),s="xl/metadata."+r,me(a,s,Lu(s)),i.metadata.push(s),Oe(t.wbrels,-1,"metadata."+r,Se.XLMETA),me(a,"[Content_Types].xml",Gi(i,t)),me(a,"_rels/.rels",ut(t.rels)),me(a,"xl/_rels/workbook."+r+".rels",ut(t.wbrels)),delete t.revssf,delete t.ssf,a}function O1(e,t){ht=1024,e&&!e.SSF&&(e.SSF=cr(Ue)),e&&e.SSF&&(wn(),En(e.SSF),t.revssf=Sn(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF),t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,Nt?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var r="xml",n=xa.indexOf(t.bookType)>-1,i=Vi();l0(t=t||{});var a=Kn(),s="",f=0;if(t.cellXfs=[],Kr(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),s="docProps/core.xml",me(a,s,zi(e.Props,t)),i.coreprops.push(s),Oe(t.rels,2,s,Se.CORE_PROPS),s="docProps/app.xml",!(e.Props&&e.Props.SheetNames))if(!e.Workbook||!e.Workbook.Sheets)e.Props.SheetNames=e.SheetNames;else{for(var l=[],o=0;o0&&(s="docProps/custom.xml",me(a,s,Yi(e.Custprops)),i.custprops.push(s),Oe(t.rels,4,s,Se.CUST_PROPS));var h=["SheetJ5"];for(t.tcid=0,f=1;f<=e.SheetNames.length;++f){var p={"!id":{}},x=e.Sheets[e.SheetNames[f-1]],d=(x||{})["!type"]||"sheet";switch(d){case"chart":default:s="xl/worksheets/sheet"+f+"."+r,me(a,s,wa(f-1,t,e,p)),i.sheets.push(s),Oe(t.wbrels,-1,"worksheets/sheet"+f+"."+r,Se.WS[0])}if(x){var E=x["!comments"],c=!1,_="";if(E&&E.length>0){var N=!1;E.forEach(function(I){I[1].forEach(function(D){D.T==!0&&(N=!0)})}),N&&(_="xl/threadedComments/threadedComment"+f+"."+r,me(a,_,al(E,h,t)),i.threadedcomments.push(_),Oe(p,-1,"../threadedComments/threadedComment"+f+"."+r,Se.TCMNT)),_="xl/comments"+f+"."+r,me(a,_,ua(E)),i.comments.push(_),Oe(p,-1,"../comments"+f+"."+r,Se.CMNT),c=!0}x["!legacy"]&&c&&me(a,"xl/drawings/vmlDrawing"+f+".vml",ca(f,x["!comments"])),delete x["!comments"],delete x["!legacy"]}p["!id"].rId1&&me(a,Xi(s),ut(p))}return t.Strings!=null&&t.Strings.length>0&&(s="xl/sharedStrings."+r,me(a,s,na(t.Strings,t)),i.strs.push(s),Oe(t.wbrels,-1,"sharedStrings."+r,Se.SST)),s="xl/workbook."+r,me(a,s,Fa(e)),i.workbooks.push(s),Oe(t.rels,1,s,Se.WB),s="xl/theme/theme1.xml",me(a,s,la(e.Themes,t)),i.themes.push(s),Oe(t.wbrels,-1,"theme/theme1.xml",Se.THEME),s="xl/styles."+r,me(a,s,fa(e,t)),i.styles.push(s),Oe(t.wbrels,-1,"styles."+r,Se.STY),e.vbaraw&&n&&(s="xl/vbaProject.bin",me(a,s,e.vbaraw),i.vba.push(s),Oe(t.wbrels,-1,"vbaProject.bin",Se.VBA)),s="xl/metadata."+r,me(a,s,ha()),i.metadata.push(s),Oe(t.wbrels,-1,"metadata."+r,Se.XLMETA),h.length>1&&(s="xl/persons/person.xml",me(a,s,sl(h)),i.people.push(s),Oe(t.wbrels,-1,"persons/person.xml",Se.PEOPLE)),me(a,"[Content_Types].xml",Gi(i,t)),me(a,"_rels/.rels",ut(t.rels)),me(a,"xl/_rels/workbook."+r+".rels",ut(t.wbrels)),delete t.revssf,delete t.ssf,a}function k1(e,t){var r="";switch((t||{}).type||"base64"){case"buffer":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];case"base64":r=Br(e.slice(0,12));break;case"binary":r=e;break;case"array":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];default:throw new Error("Unrecognized type "+(t&&t.type||"undefined"))}return[r.charCodeAt(0),r.charCodeAt(1),r.charCodeAt(2),r.charCodeAt(3),r.charCodeAt(4),r.charCodeAt(5),r.charCodeAt(6),r.charCodeAt(7)]}function Ia(e,t){switch(t.type){case"base64":case"binary":break;case"buffer":case"array":t.type="";break;case"file":return Vt(t.file,De.write(e,{type:Ae?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");default:throw new Error("Unrecognized type "+t.type)}return De.write(e,t)}function R1(e,t){var r=cr(t||{}),n=y1(e,r);return D1(n,r)}function D1(e,t){var r={},n=Ae?"nodebuffer":typeof Uint8Array<"u"?"array":"string";if(t.compression&&(r.compression="DEFLATE"),t.password)r.type=n;else switch(t.type){case"base64":r.type="base64";break;case"binary":r.type="string";break;case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");case"buffer":case"file":r.type=n;break;default:throw new Error("Unrecognized type "+t.type)}var i=e.FullPaths?De.write(e,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[r.type]||r.type,compression:!!t.compression}):e.generate(r);if(typeof Deno<"u"&&typeof i=="string"){if(t.type=="binary"||t.type=="base64")return i;i=new Uint8Array(Tn(i))}return t.password&&typeof encrypt_agile<"u"?Ia(encrypt_agile(i,t.password),t):t.type==="file"?Vt(t.file,i):t.type=="string"?kt(i):i}function I1(e,t){var r=t||{},n=$u(e,r);return Ia(n,r)}function kr(e,t,r){r||(r="");var n=r+e;switch(t.type){case"base64":return Pt(Bt(n));case"binary":return Bt(n);case"string":return e;case"file":return Vt(t.file,n,"utf8");case"buffer":return Ae?Ur(n,"utf8"):typeof TextEncoder<"u"?new TextEncoder().encode(n):kr(n,{type:"binary"}).split("").map(function(i){return i.charCodeAt(0)})}throw new Error("Unrecognized type "+t.type)}function N1(e,t){switch(t.type){case"base64":return Pt(e);case"binary":return e;case"string":return e;case"file":return Vt(t.file,e,"binary");case"buffer":return Ae?Ur(e,"binary"):e.split("").map(function(r){return r.charCodeAt(0)})}throw new Error("Unrecognized type "+t.type)}function tn(e,t){switch(t.type){case"string":case"base64":case"binary":for(var r="",n=0;n0&&(i=0);var p=Qe(l.s.r),x=[],d=[],E=0,c=0,_=Array.isArray(e),N=l.s.r,I=0,D={};_&&!e[N]&&(e[N]=[]);var W=o.skipHidden&&e["!cols"]||[],z=o.skipHidden&&e["!rows"]||[];for(I=l.s.c;I<=l.e.c;++I)if(!(W[I]||{}).hidden)switch(x[I]=nr(I),r=_?e[N][I]:e[x[I]+p],n){case 1:a[I]=I-l.s.c;break;case 2:a[I]=x[I];break;case 3:a[I]=o.header[I-l.s.c];break;default:if(r==null&&(r={w:"__EMPTY",t:"s"}),f=s=br(r,null,o),c=D[s]||0,!c)D[s]=1;else{do f=s+"_"+c++;while(D[f]);D[s]=c,D[f]=1}a[I]=f}for(N=l.s.r+i;N<=l.e.r;++N)if(!(z[N]||{}).hidden){var re=M1(e,l,N,x,n,a,_,o);(re.isempty===!1||(n===1?o.blankrows!==!1:o.blankrows))&&(d[E++]=re.row)}return d.length=E,d}var ri=/"/g;function B1(e,t,r,n,i,a,s,f){for(var l=!0,o=[],h="",p=Qe(r),x=t.s.c;x<=t.e.c;++x)if(n[x]){var d=f.dense?(e[r]||[])[x]:e[n[x]+p];if(d==null)h="";else if(d.v!=null){l=!1,h=""+(f.rawNumbers&&d.t=="n"?d.v:br(d,null,f));for(var E=0,c=0;E!==h.length;++E)if((c=h.charCodeAt(E))===i||c===a||c===34||f.forceQuotes){h='"'+h.replace(ri,'""')+'"';break}h=="ID"&&(h='"ID"')}else d.f!=null&&!d.F?(l=!1,h="="+d.f,h.indexOf(",")>=0&&(h='"'+h.replace(ri,'""')+'"')):h="";o.push(h)}return f.blankrows===!1&&l?null:o.join(s)}function h0(e,t){var r=[],n=t??{};if(e==null||e["!ref"]==null)return"";var i=Le(e["!ref"]),a=n.FS!==void 0?n.FS:",",s=a.charCodeAt(0),f=n.RS!==void 0?n.RS:` -`,l=f.charCodeAt(0),o=new RegExp((a=="|"?"\\|":a)+"+$"),h="",p=[];n.dense=Array.isArray(e);for(var x=n.skipHidden&&e["!cols"]||[],d=n.skipHidden&&e["!rows"]||[],E=i.s.c;E<=i.e.c;++E)(x[E]||{}).hidden||(p[E]=nr(E));for(var c=0,_=i.s.r;_<=i.e.r;++_)(d[_]||{}).hidden||(h=B1(e,i,_,p,s,l,a,n),h!=null&&(n.strip&&(h=h.replace(o,"")),(h||n.blankrows!==!1)&&r.push((c++?f:"")+h)));return delete n.dense,r.join("")}function La(e,t){t||(t={}),t.FS=" ",t.RS=` -`;var r=h0(e,t);return r}function b1(e){var t="",r,n="";if(e==null||e["!ref"]==null)return[];var i=Le(e["!ref"]),a="",s=[],f,l=[],o=Array.isArray(e);for(f=i.s.c;f<=i.e.c;++f)s[f]=nr(f);for(var h=i.s.r;h<=i.e.r;++h)for(a=Qe(h),f=i.s.c;f<=i.e.c;++f)if(t=s[f]+a,r=o?(e[h]||[])[f]:e[t],n="",r!==void 0){if(r.F!=null){if(t=r.F,!r.f)continue;n=r.f,t.indexOf(":")==-1&&(t=t+":"+t)}if(r.f!=null)n=r.f;else{if(r.t=="z")continue;if(r.t=="n"&&r.v!=null)n=""+r.v;else if(r.t=="b")n=r.v?"TRUE":"FALSE";else if(r.w!==void 0)n="'"+r.w;else{if(r.v===void 0)continue;r.t=="s"?n="'"+r.v:n=""+r.v}}l[l.length]=t+"="+n}return l}function Pa(e,t,r){var n=r||{},i=+!n.skipHeader,a=e||{},s=0,f=0;if(a&&n.origin!=null)if(typeof n.origin=="number")s=n.origin;else{var l=typeof n.origin=="string"?ze(n.origin):n.origin;s=l.r,f=l.c}var o,h={s:{c:0,r:0},e:{c:f,r:s+t.length-1+i}};if(a["!ref"]){var p=Le(a["!ref"]);h.e.c=Math.max(h.e.c,p.e.c),h.e.r=Math.max(h.e.r,p.e.r),s==-1&&(s=p.e.r+1,h.e.r=s+t.length-1+i)}else s==-1&&(s=0,h.e.r=t.length-1+i);var x=n.header||[],d=0;t.forEach(function(c,_){er(c).forEach(function(N){(d=x.indexOf(N))==-1&&(x[d=x.length]=N);var I=c[N],D="z",W="",z=Re({c:f+d,r:s+_+i});o=Wt(a,z),I&&typeof I=="object"&&!(I instanceof Date)?a[z]=I:(typeof I=="number"?D="n":typeof I=="boolean"?D="b":typeof I=="string"?D="s":I instanceof Date?(D="d",n.cellDates||(D="n",I=hr(I)),W=n.dateNF||Ue[14]):I===null&&n.nullError&&(D="e",I=0),o?(o.t=D,o.v=I,delete o.w,delete o.R,W&&(o.z=W)):a[z]=o={t:D,v:I},W&&(o.z=W))})}),h.e.c=Math.max(h.e.c,f+x.length-1);var E=Qe(s);if(i)for(d=0;d=0&&e.SheetNames.length>t)return t;throw new Error("Cannot find sheet # "+t)}else if(typeof t=="string"){var r=e.SheetNames.indexOf(t);if(r>-1)return r;throw new Error("Cannot find sheet name |"+t+"|")}else throw new Error("Cannot find sheet |"+t+"|")}function H1(){return{SheetNames:[],Sheets:{}}}function V1(e,t,r,n){var i=1;if(!r)for(;i<=65535&&e.SheetNames.indexOf(r="Sheet"+i)!=-1;++i,r=void 0);if(!r||e.SheetNames.length>=65535)throw new Error("Too many worksheets");if(n&&e.SheetNames.indexOf(r)>=0){var a=r.match(/(^.*?)(\d+)$/);i=a&&+a[2]||0;var s=a&&a[1]||r;for(++i;i<=65535&&e.SheetNames.indexOf(r=s+i)!=-1;++i);}if(Aa(r),e.SheetNames.indexOf(r)>=0)throw new Error("Worksheet with name |"+r+"| already exists!");return e.SheetNames.push(r),e.Sheets[r]=t,r}function G1(e,t,r){e.Workbook||(e.Workbook={}),e.Workbook.Sheets||(e.Workbook.Sheets=[]);var n=W1(e,t);switch(e.Workbook.Sheets[n]||(e.Workbook.Sheets[n]={}),r){case 0:case 1:case 2:break;default:throw new Error("Bad sheet visibility setting "+r)}e.Workbook.Sheets[n].Hidden=r}function X1(e,t){return e.z=t,e}function Ma(e,t,r){return t?(e.l={Target:t},r&&(e.l.Tooltip=r)):delete e.l,e}function j1(e,t,r){return Ma(e,"#"+t,r)}function z1(e,t,r){e.c||(e.c=[]),e.c.push({t,a:r||"SheetJS"})}function K1(e,t,r,n){for(var i=typeof t!="string"?t:Le(t),a=typeof t=="string"?t:He(t),s=i.s.r;s<=i.e.r;++s)for(var f=i.s.c;f<=i.e.c;++f){var l=Wt(e,s,f);l.t="n",l.F=a,delete l.v,s==i.s.r&&f==i.s.c&&(l.f=r,n&&(l.D=!0))}return e}var Un={encode_col:nr,encode_row:Qe,encode_cell:Re,encode_range:He,decode_col:Qn,decode_row:Zn,split_cell:sf,decode_cell:ze,decode_range:_r,format_cell:br,sheet_add_aoa:Mi,sheet_add_json:Pa,sheet_add_dom:ka,aoa_to_sheet:gt,json_to_sheet:U1,table_to_sheet:Ra,table_to_book:v1,sheet_to_csv:h0,sheet_to_txt:La,sheet_to_json:_n,sheet_to_html:Oa,sheet_to_formulae:b1,sheet_to_row_object_array:_n,sheet_get_cell:Wt,book_new:H1,book_append_sheet:V1,book_set_sheet_visibility:G1,cell_set_number_format:X1,cell_set_hyperlink:Ma,cell_set_internal_link:j1,cell_add_comment:z1,sheet_set_array_formula:K1,consts:{SHEET_VISIBLE:0,SHEET_HIDDEN:1,SHEET_VERY_HIDDEN:2}};const $1=et.div` - position: relative; - display: inline-block; -`,Y1=et.button` - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.75rem 1.5rem; - background: #10b981; - color: white; - border: none; - border-radius: 0.5rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background: #059669; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } - - &:disabled { - opacity: 0.6; - cursor: not-allowed; - } -`,J1=et.div` - position: absolute; - top: 100%; - left: 0; - right: 0; - background: white; - border: 1px solid #e5e7eb; - border-radius: 0.5rem; - box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); - z-index: 50; - margin-top: 0.5rem; - overflow: hidden; -`,ti=et.button` - width: 100%; - padding: 0.75rem 1rem; - text-align: left; - background: none; - border: none; - cursor: pointer; - transition: background-color 0.2s; - display: flex; - align-items: center; - gap: 0.5rem; - - &:hover { - background: #f9fafb; - } - - &:focus { - outline: none; - background: #f0fdf4; - } -`;et.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.9); - display: flex; - align-items: center; - justify-content: center; - border-radius: 0.5rem; -`;const q1=et.div` - width: 20px; - height: 20px; - border: 2px solid #f3f4f6; - border-top: 2px solid #10b981; - border-radius: 50%; - animation: spin 1s linear infinite; - - @keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } - } -`,Z1=et.div` - position: absolute; - top: 100%; - left: 0; - right: 0; - padding: 0.5rem; - margin-top: 0.5rem; - border-radius: 0.5rem; - font-size: 0.875rem; - z-index: 50; - - ${e=>e.type==="success"&&` - background: #d1fae5; - color: #065f46; - border: 1px solid #a7f3d0; - `} - - ${e=>e.type==="error"&&` - background: #fee2e2; - color: #991b1b; - border: 1px solid #fecaca; - `} -`,rx=({data:e=[],fileName:t="export",filters:r={},onExportStart:n,onExportComplete:i,onExportError:a})=>{const[s,f]=Rn.useState(!1),[l,o]=Rn.useState(!1),[h,p]=Rn.useState(null),x=e.filter(I=>{if(r.selectedForests&&r.selectedForests.length>0){const D=I.id<=4?1:2;if(!r.selectedForests.includes(D))return!1}if(r.dateRange){const D=new Date(2023,I.id%12,I.id%28+1);if(Dr.dateRange.endDate)return!1}return!0}),d=(I,D)=>{p({message:I,type:D}),setTimeout(()=>p(null),3e3)},E=async()=>{f(!1),o(!0);try{n&&n(),await new Promise(k=>setTimeout(k,500));const I=x.map(k=>({"Tree ID":k.name,Species:k.species,"Height (m)":k.height,Health:k.health,Latitude:k.lat,Longitude:k.lng,Forest:k.id<=4?"Forest A":"Forest B","Export Date":$t(new Date)})),D=ts.unparse(I),W=new Blob([D],{type:"text/csv;charset=utf-8;"}),z=document.createElement("a"),re=URL.createObjectURL(W);z.setAttribute("href",re),z.setAttribute("download",`${t}_${$t(new Date)}.csv`),z.style.visibility="hidden",document.body.appendChild(z),z.click(),document.body.removeChild(z),d(`CSV exported successfully (${x.length} records)`,"success"),i&&i("csv",x.length)}catch(I){console.error("CSV export error:",I),d("CSV export failed","error"),a&&a(I)}finally{o(!1)}},c=async()=>{f(!1),o(!0);try{n&&n(),await new Promise(z=>setTimeout(z,500));const I=x.map(z=>({"Tree ID":z.name,Species:z.species,"Height (m)":z.height,Health:z.health,Latitude:z.lat,Longitude:z.lng,Forest:z.id<=4?"Forest A":"Forest B","Export Date":$t(new Date)})),D=Un.book_new(),W=Un.json_to_sheet(I);Un.book_append_sheet(D,W,"Tree Data"),P1(D,`${t}_${$t(new Date)}.xlsx`),d(`XLSX exported successfully (${x.length} records)`,"success"),i&&i("xlsx",x.length)}catch(I){console.error("XLSX export error:",I),d("XLSX export failed","error"),a&&a(I)}finally{o(!1)}},_=()=>{l||f(!s)},N=I=>{I.target.closest(".export-container")||f(!1)};return s?document.addEventListener("click",N):document.removeEventListener("click",N),Ne.jsxs($1,{className:"export-container",children:[Ne.jsx(Y1,{onClick:_,disabled:l,children:l?Ne.jsxs(Ne.Fragment,{children:[Ne.jsx(q1,{}),"Exporting..."]}):Ne.jsxs(Ne.Fragment,{children:[Ne.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:Ne.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Export Data",Ne.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:Ne.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})}),s&&Ne.jsxs(J1,{children:[Ne.jsxs(ti,{onClick:E,children:[Ne.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:Ne.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),Ne.jsxs("div",{children:[Ne.jsx("div",{className:"font-medium",children:"Export as CSV"}),Ne.jsxs("div",{className:"text-xs text-gray-500",children:[x.length," records • Comma-separated values"]})]})]}),Ne.jsxs(ti,{onClick:c,children:[Ne.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:Ne.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),Ne.jsxs("div",{children:[Ne.jsx("div",{className:"font-medium",children:"Export as XLSX"}),Ne.jsxs("div",{className:"text-xs text-gray-500",children:[x.length," records • Excel spreadsheet"]})]})]})]}),h&&Ne.jsx(Z1,{type:h.type,children:h.message})]})};export{rx as E}; diff --git a/frontend/dist/assets/FilterHeader-CBw4AnG_.js b/frontend/dist/assets/FilterHeader-CBw4AnG_.js deleted file mode 100644 index de814f59ce..0000000000 --- a/frontend/dist/assets/FilterHeader-CBw4AnG_.js +++ /dev/null @@ -1,276 +0,0 @@ -var ta=Object.defineProperty;var ra=(n,a,t)=>a in n?ta(n,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[a]=t;var M=(n,a,t)=>ra(n,typeof a!="symbol"?a+"":a,t);import{r as D,h as wn,b as na,j as T,R as m,c as re,i as aa,d as H,k as oa,l as Pr}from"./index-Dzr7PBfw.js";const ia=(n,a,t)=>{const[e,r]=D.useState(a||new Date(new Date().getFullYear(),0,1)),[o,i]=D.useState(t||new Date),s=D.useRef(n),c=D.useRef(!1);return D.useEffect(()=>{s.current=n},[n]),D.useEffect(()=>{if(!c.current){c.current=!0;return}const f=setTimeout(()=>{s.current&&e&&o&&s.current({startDate:e,endDate:o})},1e3);return()=>clearTimeout(f)},[e,o]),{startDate:e,endDate:o,handleStartDateChange:f=>{r(f),f&&o&&f>o&&i(f)},handleEndDateChange:f=>{i(f),f&&e&&f{const f=new Date(new Date().getFullYear(),0,1),p=new Date;r(f),i(p),s.current&&s.current({startDate:f,endDate:p})}}},Dn=6048e5,sa=864e5,Vt=6e4,qt=36e5,ca=1e3,Tr=Symbol.for("constructDateFrom");function U(n,a){return typeof n=="function"?n(a):n&&typeof n=="object"&&Tr in n?n[Tr](a):n instanceof Date?new n.constructor(a):new Date(a)}function E(n,a){return U(a||n,n)}function pe(n,a,t){const e=E(n,t==null?void 0:t.in);return isNaN(a)?U((t==null?void 0:t.in)||n,NaN):(a&&e.setDate(e.getDate()+a),e)}function he(n,a,t){const e=E(n,t==null?void 0:t.in);if(isNaN(a))return U(n,NaN);if(!a)return e;const r=e.getDate(),o=U(n,e.getTime());o.setMonth(e.getMonth()+a+1,0);const i=o.getDate();return r>=i?o:(e.setFullYear(o.getFullYear(),o.getMonth(),r),e)}function yn(n,a,t){return U(n,+E(n)+a)}function la(n,a,t){return yn(n,a*qt)}let ua={};function qe(){return ua}function Ee(n,a){var s,c,l,u;const t=qe(),e=(a==null?void 0:a.weekStartsOn)??((c=(s=a==null?void 0:a.locale)==null?void 0:s.options)==null?void 0:c.weekStartsOn)??t.weekStartsOn??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.weekStartsOn)??0,r=E(n,a==null?void 0:a.in),o=r.getDay(),i=(o=o.getTime()?e+1:t.getTime()>=s.getTime()?e:e-1}function Ot(n){const a=E(n),t=new Date(Date.UTC(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds()));return t.setUTCFullYear(a.getFullYear()),+n-+t}function Pe(n,...a){const t=U.bind(null,a.find(e=>typeof e=="object"));return a.map(t)}function Qe(n,a){const t=E(n,a==null?void 0:a.in);return t.setHours(0,0,0,0),t}function Xe(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Qe(e),i=Qe(r),s=+o-Ot(o),c=+i-Ot(i);return Math.round((s-c)/sa)}function da(n,a){const t=bn(n,a),e=U(n,0);return e.setFullYear(t,0,4),e.setHours(0,0,0,0),ze(e)}function cr(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setTime(e.getTime()+a*Vt),e}function mr(n,a,t){return he(n,a*3,t)}function fa(n,a,t){return yn(n,a*1e3)}function Rt(n,a,t){return pe(n,a*7,t)}function _e(n,a,t){return he(n,a*12,t)}function Or(n,a){let t,e=a==null?void 0:a.in;return n.forEach(r=>{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=E(r,e);(!t||t{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=E(r,e);(!t||t>o||isNaN(+o))&&(t=o)}),U(e,t||NaN)}function pa(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+Qe(e)==+Qe(r)}function xe(n){return n instanceof Date||typeof n=="object"&&Object.prototype.toString.call(n)==="[object Date]"}function Nt(n){return!(!xe(n)&&typeof n!="number"||isNaN(+E(n)))}function Yt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),i=e.getMonth()-r.getMonth();return o*12+i}function We(n,a){const t=E(n,a==null?void 0:a.in);return Math.trunc(t.getMonth()/3)+1}function Lt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),i=We(e)-We(r);return o*4+i}function Ft(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()-r.getFullYear()}function ha(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Nr(e,r),i=Math.abs(Xe(e,r));e.setDate(e.getDate()-o*i);const s=+(Nr(e,r)===-o),c=o*(i-s);return c===0?0:c}function Nr(n,a){const t=n.getFullYear()-a.getFullYear()||n.getMonth()-a.getMonth()||n.getDate()-a.getDate()||n.getHours()-a.getHours()||n.getMinutes()-a.getMinutes()||n.getSeconds()-a.getSeconds()||n.getMilliseconds()-a.getMilliseconds();return t<0?-1:t>0?1:t}function kn(n,a){const t=E(n,a==null?void 0:a.in);return t.setHours(23,59,59,999),t}function _n(n,a){const t=E(n,a==null?void 0:a.in),e=t.getMonth();return t.setFullYear(t.getFullYear(),e+1,0),t.setHours(23,59,59,999),t}function lr(n,a){const t=E(n,a==null?void 0:a.in),e=t.getMonth(),r=e-e%3;return t.setMonth(r,1),t.setHours(0,0,0,0),t}function xn(n,a){const t=E(n,a==null?void 0:a.in);return t.setDate(1),t.setHours(0,0,0,0),t}function Mn(n,a){const t=E(n,a==null?void 0:a.in),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function Kt(n,a){const t=E(n,a==null?void 0:a.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function ma(n,a){var s,c;const t=qe(),e=t.weekStartsOn??((c=(s=t.locale)==null?void 0:s.options)==null?void 0:c.weekStartsOn)??0,r=E(n,a==null?void 0:a.in),o=r.getDay(),i=(o{let e;const r=ga[n];return typeof r=="string"?e=r:a===1?e=r.one:e=r.other.replace("{{count}}",a.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+e:e+" ago":e};function Jt(n){return(a={})=>{const t=a.width?String(a.width):n.defaultWidth;return n.formats[t]||n.formats[n.defaultWidth]}}const wa={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Da={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},ya={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},ba={date:Jt({formats:wa,defaultWidth:"full"}),time:Jt({formats:Da,defaultWidth:"full"}),dateTime:Jt({formats:ya,defaultWidth:"full"})},ka={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},_a=(n,a,t,e)=>ka[n];function at(n){return(a,t)=>{const e=t!=null&&t.context?String(t.context):"standalone";let r;if(e==="formatting"&&n.formattingValues){const i=n.defaultFormattingWidth||n.defaultWidth,s=t!=null&&t.width?String(t.width):i;r=n.formattingValues[s]||n.formattingValues[i]}else{const i=n.defaultWidth,s=t!=null&&t.width?String(t.width):n.defaultWidth;r=n.values[s]||n.values[i]}const o=n.argumentCallback?n.argumentCallback(a):a;return r[o]}}const xa={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Ma={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Ca={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Sa={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Ea={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Pa={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Ta=(n,a)=>{const t=Number(n),e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},Oa={ordinalNumber:Ta,era:at({values:xa,defaultWidth:"wide"}),quarter:at({values:Ma,defaultWidth:"wide",argumentCallback:n=>n-1}),month:at({values:Ca,defaultWidth:"wide"}),day:at({values:Sa,defaultWidth:"wide"}),dayPeriod:at({values:Ea,defaultWidth:"wide",formattingValues:Pa,defaultFormattingWidth:"wide"})};function ot(n){return(a,t={})=>{const e=t.width,r=e&&n.matchPatterns[e]||n.matchPatterns[n.defaultMatchWidth],o=a.match(r);if(!o)return null;const i=o[0],s=e&&n.parsePatterns[e]||n.parsePatterns[n.defaultParseWidth],c=Array.isArray(s)?Na(s,d=>d.test(i)):Ra(s,d=>d.test(i));let l;l=n.valueCallback?n.valueCallback(c):c,l=t.valueCallback?t.valueCallback(l):l;const u=a.slice(i.length);return{value:l,rest:u}}}function Ra(n,a){for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&a(n[t]))return t}function Na(n,a){for(let t=0;t{const e=a.match(n.matchPattern);if(!e)return null;const r=e[0],o=a.match(n.parsePattern);if(!o)return null;let i=n.valueCallback?n.valueCallback(o[0]):o[0];i=t.valueCallback?t.valueCallback(i):i;const s=a.slice(r.length);return{value:i,rest:s}}}const La=/^(\d+)(th|st|nd|rd)?/i,Fa=/\d+/i,Ia={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Aa={any:[/^b/i,/^(a|c)/i]},Wa={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Ha={any:[/1/i,/2/i,/3/i,/4/i]},Ba={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Qa={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},ja={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Va={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},qa={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Ka={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Ua={ordinalNumber:Ya({matchPattern:La,parsePattern:Fa,valueCallback:n=>parseInt(n,10)}),era:ot({matchPatterns:Ia,defaultMatchWidth:"wide",parsePatterns:Aa,defaultParseWidth:"any"}),quarter:ot({matchPatterns:Wa,defaultMatchWidth:"wide",parsePatterns:Ha,defaultParseWidth:"any",valueCallback:n=>n+1}),month:ot({matchPatterns:Ba,defaultMatchWidth:"wide",parsePatterns:Qa,defaultParseWidth:"any"}),day:ot({matchPatterns:ja,defaultMatchWidth:"wide",parsePatterns:Va,defaultParseWidth:"any"}),dayPeriod:ot({matchPatterns:qa,defaultMatchWidth:"any",parsePatterns:Ka,defaultParseWidth:"any"})},Cn={code:"en-US",formatDistance:va,formatLong:ba,formatRelative:_a,localize:Oa,match:Ua,options:{weekStartsOn:0,firstWeekContainsDate:1}};function $a(n,a){const t=E(n,a==null?void 0:a.in);return Xe(t,Kt(t))+1}function gr(n,a){const t=E(n,a==null?void 0:a.in),e=+ze(t)-+da(t);return Math.round(e/Dn)+1}function vr(n,a){var u,d,f,p;const t=E(n,a==null?void 0:a.in),e=t.getFullYear(),r=qe(),o=(a==null?void 0:a.firstWeekContainsDate)??((d=(u=a==null?void 0:a.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??r.firstWeekContainsDate??((p=(f=r.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,i=U((a==null?void 0:a.in)||n,0);i.setFullYear(e+1,0,o),i.setHours(0,0,0,0);const s=Ee(i,a),c=U((a==null?void 0:a.in)||n,0);c.setFullYear(e,0,o),c.setHours(0,0,0,0);const l=Ee(c,a);return+t>=+s?e+1:+t>=+l?e:e-1}function Ga(n,a){var s,c,l,u;const t=qe(),e=(a==null?void 0:a.firstWeekContainsDate)??((c=(s=a==null?void 0:a.locale)==null?void 0:s.options)==null?void 0:c.firstWeekContainsDate)??t.firstWeekContainsDate??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.firstWeekContainsDate)??1,r=vr(n,a),o=U((a==null?void 0:a.in)||n,0);return o.setFullYear(r,0,e),o.setHours(0,0,0,0),Ee(o,a)}function Sn(n,a){const t=E(n,a==null?void 0:a.in),e=+Ee(t,a)-+Ga(t,a);return Math.round(e/Dn)+1}function K(n,a){const t=n<0?"-":"",e=Math.abs(n).toString().padStart(a,"0");return t+e}const Te={y(n,a){const t=n.getFullYear(),e=t>0?t:1-t;return K(a==="yy"?e%100:e,a.length)},M(n,a){const t=n.getMonth();return a==="M"?String(t+1):K(t+1,2)},d(n,a){return K(n.getDate(),a.length)},a(n,a){const t=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(n,a){return K(n.getHours()%12||12,a.length)},H(n,a){return K(n.getHours(),a.length)},m(n,a){return K(n.getMinutes(),a.length)},s(n,a){return K(n.getSeconds(),a.length)},S(n,a){const t=a.length,e=n.getMilliseconds(),r=Math.trunc(e*Math.pow(10,t-3));return K(r,a.length)}},Ke={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Yr={G:function(n,a,t){const e=n.getFullYear()>0?1:0;switch(a){case"G":case"GG":case"GGG":return t.era(e,{width:"abbreviated"});case"GGGGG":return t.era(e,{width:"narrow"});case"GGGG":default:return t.era(e,{width:"wide"})}},y:function(n,a,t){if(a==="yo"){const e=n.getFullYear(),r=e>0?e:1-e;return t.ordinalNumber(r,{unit:"year"})}return Te.y(n,a)},Y:function(n,a,t,e){const r=vr(n,e),o=r>0?r:1-r;if(a==="YY"){const i=o%100;return K(i,2)}return a==="Yo"?t.ordinalNumber(o,{unit:"year"}):K(o,a.length)},R:function(n,a){const t=bn(n);return K(t,a.length)},u:function(n,a){const t=n.getFullYear();return K(t,a.length)},Q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"Q":return String(e);case"QQ":return K(e,2);case"Qo":return t.ordinalNumber(e,{unit:"quarter"});case"QQQ":return t.quarter(e,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(e,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(e,{width:"wide",context:"formatting"})}},q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"q":return String(e);case"qq":return K(e,2);case"qo":return t.ordinalNumber(e,{unit:"quarter"});case"qqq":return t.quarter(e,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(e,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(e,{width:"wide",context:"standalone"})}},M:function(n,a,t){const e=n.getMonth();switch(a){case"M":case"MM":return Te.M(n,a);case"Mo":return t.ordinalNumber(e+1,{unit:"month"});case"MMM":return t.month(e,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(e,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(e,{width:"wide",context:"formatting"})}},L:function(n,a,t){const e=n.getMonth();switch(a){case"L":return String(e+1);case"LL":return K(e+1,2);case"Lo":return t.ordinalNumber(e+1,{unit:"month"});case"LLL":return t.month(e,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(e,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(e,{width:"wide",context:"standalone"})}},w:function(n,a,t,e){const r=Sn(n,e);return a==="wo"?t.ordinalNumber(r,{unit:"week"}):K(r,a.length)},I:function(n,a,t){const e=gr(n);return a==="Io"?t.ordinalNumber(e,{unit:"week"}):K(e,a.length)},d:function(n,a,t){return a==="do"?t.ordinalNumber(n.getDate(),{unit:"date"}):Te.d(n,a)},D:function(n,a,t){const e=$a(n);return a==="Do"?t.ordinalNumber(e,{unit:"dayOfYear"}):K(e,a.length)},E:function(n,a,t){const e=n.getDay();switch(a){case"E":case"EE":case"EEE":return t.day(e,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(e,{width:"short",context:"formatting"});case"EEEE":default:return t.day(e,{width:"wide",context:"formatting"})}},e:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"e":return String(o);case"ee":return K(o,2);case"eo":return t.ordinalNumber(o,{unit:"day"});case"eee":return t.day(r,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(r,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(r,{width:"short",context:"formatting"});case"eeee":default:return t.day(r,{width:"wide",context:"formatting"})}},c:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"c":return String(o);case"cc":return K(o,a.length);case"co":return t.ordinalNumber(o,{unit:"day"});case"ccc":return t.day(r,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(r,{width:"narrow",context:"standalone"});case"cccccc":return t.day(r,{width:"short",context:"standalone"});case"cccc":default:return t.day(r,{width:"wide",context:"standalone"})}},i:function(n,a,t){const e=n.getDay(),r=e===0?7:e;switch(a){case"i":return String(r);case"ii":return K(r,a.length);case"io":return t.ordinalNumber(r,{unit:"day"});case"iii":return t.day(e,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(e,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(e,{width:"short",context:"formatting"});case"iiii":default:return t.day(e,{width:"wide",context:"formatting"})}},a:function(n,a,t){const r=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(n,a,t){const e=n.getHours();let r;switch(e===12?r=Ke.noon:e===0?r=Ke.midnight:r=e/12>=1?"pm":"am",a){case"b":case"bb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(n,a,t){const e=n.getHours();let r;switch(e>=17?r=Ke.evening:e>=12?r=Ke.afternoon:e>=4?r=Ke.morning:r=Ke.night,a){case"B":case"BB":case"BBB":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(n,a,t){if(a==="ho"){let e=n.getHours()%12;return e===0&&(e=12),t.ordinalNumber(e,{unit:"hour"})}return Te.h(n,a)},H:function(n,a,t){return a==="Ho"?t.ordinalNumber(n.getHours(),{unit:"hour"}):Te.H(n,a)},K:function(n,a,t){const e=n.getHours()%12;return a==="Ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},k:function(n,a,t){let e=n.getHours();return e===0&&(e=24),a==="ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},m:function(n,a,t){return a==="mo"?t.ordinalNumber(n.getMinutes(),{unit:"minute"}):Te.m(n,a)},s:function(n,a,t){return a==="so"?t.ordinalNumber(n.getSeconds(),{unit:"second"}):Te.s(n,a)},S:function(n,a){return Te.S(n,a)},X:function(n,a,t){const e=n.getTimezoneOffset();if(e===0)return"Z";switch(a){case"X":return Fr(e);case"XXXX":case"XX":return Fe(e);case"XXXXX":case"XXX":default:return Fe(e,":")}},x:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"x":return Fr(e);case"xxxx":case"xx":return Fe(e);case"xxxxx":case"xxx":default:return Fe(e,":")}},O:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"O":case"OO":case"OOO":return"GMT"+Lr(e,":");case"OOOO":default:return"GMT"+Fe(e,":")}},z:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"z":case"zz":case"zzz":return"GMT"+Lr(e,":");case"zzzz":default:return"GMT"+Fe(e,":")}},t:function(n,a,t){const e=Math.trunc(+n/1e3);return K(e,a.length)},T:function(n,a,t){return K(+n,a.length)}};function Lr(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=Math.trunc(e/60),o=e%60;return o===0?t+String(r):t+String(r)+a+K(o,2)}function Fr(n,a){return n%60===0?(n>0?"-":"+")+K(Math.abs(n)/60,2):Fe(n,a)}function Fe(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=K(Math.trunc(e/60),2),o=K(e%60,2);return t+r+a+o}const Ir=(n,a)=>{switch(n){case"P":return a.date({width:"short"});case"PP":return a.date({width:"medium"});case"PPP":return a.date({width:"long"});case"PPPP":default:return a.date({width:"full"})}},En=(n,a)=>{switch(n){case"p":return a.time({width:"short"});case"pp":return a.time({width:"medium"});case"ppp":return a.time({width:"long"});case"pppp":default:return a.time({width:"full"})}},za=(n,a)=>{const t=n.match(/(P+)(p+)?/)||[],e=t[1],r=t[2];if(!r)return Ir(n,a);let o;switch(e){case"P":o=a.dateTime({width:"short"});break;case"PP":o=a.dateTime({width:"medium"});break;case"PPP":o=a.dateTime({width:"long"});break;case"PPPP":default:o=a.dateTime({width:"full"});break}return o.replace("{{date}}",Ir(e,a)).replace("{{time}}",En(r,a))},ur={p:En,P:za},Xa=/^D+$/,Za=/^Y+$/,Ja=["D","DD","YY","YYYY"];function eo(n){return Xa.test(n)}function to(n){return Za.test(n)}function ro(n,a,t){const e=no(n,a,t);if(console.warn(e),Ja.includes(n))throw new RangeError(e)}function no(n,a,t){const e=n[0]==="Y"?"years":"days of the month";return`Use \`${n.toLowerCase()}\` instead of \`${n}\` (in \`${a}\`) for formatting ${e} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const ao=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,oo=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,io=/^'([^]*?)'?$/,so=/''/g,co=/[a-zA-Z]/;function Ar(n,a,t){var u,d,f,p,h,v,g,y;const e=qe(),r=(t==null?void 0:t.locale)??e.locale??Cn,o=(t==null?void 0:t.firstWeekContainsDate)??((d=(u=t==null?void 0:t.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??e.firstWeekContainsDate??((p=(f=e.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,i=(t==null?void 0:t.weekStartsOn)??((v=(h=t==null?void 0:t.locale)==null?void 0:h.options)==null?void 0:v.weekStartsOn)??e.weekStartsOn??((y=(g=e.locale)==null?void 0:g.options)==null?void 0:y.weekStartsOn)??0,s=E(n,t==null?void 0:t.in);if(!Nt(s))throw new RangeError("Invalid time value");let c=a.match(oo).map(_=>{const w=_[0];if(w==="p"||w==="P"){const b=ur[w];return b(_,r.formatLong)}return _}).join("").match(ao).map(_=>{if(_==="''")return{isToken:!1,value:"'"};const w=_[0];if(w==="'")return{isToken:!1,value:lo(_)};if(Yr[w])return{isToken:!0,value:_};if(w.match(co))throw new RangeError("Format string contains an unescaped latin alphabet character `"+w+"`");return{isToken:!1,value:_}});r.localize.preprocessor&&(c=r.localize.preprocessor(s,c));const l={firstWeekContainsDate:o,weekStartsOn:i,locale:r};return c.map(_=>{if(!_.isToken)return _.value;const w=_.value;(!(t!=null&&t.useAdditionalWeekYearTokens)&&to(w)||!(t!=null&&t.useAdditionalDayOfYearTokens)&&eo(w))&&ro(w,a,String(n));const b=Yr[w[0]];return b(s,w,r.localize,l)}).join("")}function lo(n){const a=n.match(io);return a?a[1].replace(so,"'"):n}function Wr(n,a){return E(n,a==null?void 0:a.in).getDate()}function uo(n,a){return E(n,a==null?void 0:a.in).getDay()}function fo(n,a){const t=E(n,a==null?void 0:a.in),e=t.getFullYear(),r=t.getMonth(),o=U(t,0);return o.setFullYear(e,r+1,0),o.setHours(0,0,0,0),o.getDate()}function po(){return Object.assign({},qe())}function Me(n,a){return E(n,a==null?void 0:a.in).getHours()}function ho(n,a){const t=E(n,a==null?void 0:a.in).getDay();return t===0?7:t}function Ce(n,a){return E(n,a==null?void 0:a.in).getMinutes()}function ne(n,a){return E(n,a==null?void 0:a.in).getMonth()}function Re(n){return E(n).getSeconds()}function dr(n){return+E(n)}function L(n,a){return E(n,a==null?void 0:a.in).getFullYear()}function Ye(n,a){return+E(n)>+E(a)}function je(n,a){return+E(n)<+E(a)}function mo(n,a){return+E(n)==+E(a)}function go(n,a){const t=vo(a)?new a(0):U(a,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t.setHours(n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()),t}function vo(n){var a;return typeof n=="function"&&((a=n.prototype)==null?void 0:a.constructor)===n}const wo=10;class Pn{constructor(){M(this,"subPriority",0)}validate(a,t){return!0}}class Do extends Pn{constructor(a,t,e,r,o){super(),this.value=a,this.validateValue=t,this.setValue=e,this.priority=r,o&&(this.subPriority=o)}validate(a,t){return this.validateValue(a,this.value,t)}set(a,t,e){return this.setValue(a,t,this.value,e)}}class yo extends Pn{constructor(t,e){super();M(this,"priority",wo);M(this,"subPriority",-1);this.context=t||(r=>U(e,r))}set(t,e){return e.timestampIsSet?t:U(t,go(t,this.context))}}class B{run(a,t,e,r){const o=this.parse(a,t,e,r);return o?{setter:new Do(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(a,t,e){return!0}}class bo extends B{constructor(){super(...arguments);M(this,"priority",140);M(this,"incompatibleTokens",["R","u","t","T"])}parse(t,e,r){switch(e){case"G":case"GG":case"GGG":return r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"});case"GGGGG":return r.era(t,{width:"narrow"});case"GGGG":default:return r.era(t,{width:"wide"})||r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"})}}set(t,e,r){return e.era=r,t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}const Z={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},ve={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function J(n,a){return n&&{value:a(n.value),rest:n.rest}}function z(n,a){const t=a.match(n);return t?{value:parseInt(t[0],10),rest:a.slice(t[0].length)}:null}function we(n,a){const t=a.match(n);if(!t)return null;if(t[0]==="Z")return{value:0,rest:a.slice(1)};const e=t[1]==="+"?1:-1,r=t[2]?parseInt(t[2],10):0,o=t[3]?parseInt(t[3],10):0,i=t[5]?parseInt(t[5],10):0;return{value:e*(r*qt+o*Vt+i*ca),rest:a.slice(t[0].length)}}function Tn(n){return z(Z.anyDigitsSigned,n)}function X(n,a){switch(n){case 1:return z(Z.singleDigit,a);case 2:return z(Z.twoDigits,a);case 3:return z(Z.threeDigits,a);case 4:return z(Z.fourDigits,a);default:return z(new RegExp("^\\d{1,"+n+"}"),a)}}function It(n,a){switch(n){case 1:return z(Z.singleDigitSigned,a);case 2:return z(Z.twoDigitsSigned,a);case 3:return z(Z.threeDigitsSigned,a);case 4:return z(Z.fourDigitsSigned,a);default:return z(new RegExp("^-?\\d{1,"+n+"}"),a)}}function wr(n){switch(n){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function On(n,a){const t=a>0,e=t?a:1-a;let r;if(e<=50)r=n||100;else{const o=e+50,i=Math.trunc(o/100)*100,s=n>=o%100;r=n+i-(s?100:0)}return t?r:1-r}function Rn(n){return n%400===0||n%4===0&&n%100!==0}class ko extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(t,e,r){const o=i=>({year:i,isTwoDigitYear:e==="yy"});switch(e){case"y":return J(X(4,t),o);case"yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r){const o=t.getFullYear();if(r.isTwoDigitYear){const s=On(r.year,o);return t.setFullYear(s,0,1),t.setHours(0,0,0,0),t}const i=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(i,0,1),t.setHours(0,0,0,0),t}}class _o extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(t,e,r){const o=i=>({year:i,isTwoDigitYear:e==="YY"});switch(e){case"Y":return J(X(4,t),o);case"Yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r,o){const i=vr(t,o);if(r.isTwoDigitYear){const c=On(r.year,i);return t.setFullYear(c,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}const s=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(s,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}}class xo extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(t,e){return It(e==="R"?4:e.length,t)}set(t,e,r){const o=U(t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),ze(o)}}class Mo extends B{constructor(){super(...arguments);M(this,"priority",130);M(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(t,e){return It(e==="u"?4:e.length,t)}set(t,e,r){return t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}class Co extends B{constructor(){super(...arguments);M(this,"priority",120);M(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"Q":case"QQ":return X(e.length,t);case"Qo":return r.ordinalNumber(t,{unit:"quarter"});case"QQQ":return r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQ":default:return r.quarter(t,{width:"wide",context:"formatting"})||r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class So extends B{constructor(){super(...arguments);M(this,"priority",120);M(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"q":case"qq":return X(e.length,t);case"qo":return r.ordinalNumber(t,{unit:"quarter"});case"qqq":return r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(t,{width:"narrow",context:"standalone"});case"qqqq":default:return r.quarter(t,{width:"wide",context:"standalone"})||r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class Eo extends B{constructor(){super(...arguments);M(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]);M(this,"priority",110)}parse(t,e,r){const o=i=>i-1;switch(e){case"M":return J(z(Z.month,t),o);case"MM":return J(X(2,t),o);case"Mo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"MMM":return r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(t,{width:"narrow",context:"formatting"});case"MMMM":default:return r.month(t,{width:"wide",context:"formatting"})||r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}class Po extends B{constructor(){super(...arguments);M(this,"priority",110);M(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(t,e,r){const o=i=>i-1;switch(e){case"L":return J(z(Z.month,t),o);case"LL":return J(X(2,t),o);case"Lo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"LLL":return r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(t,{width:"narrow",context:"standalone"});case"LLLL":default:return r.month(t,{width:"wide",context:"standalone"})||r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}function To(n,a,t){const e=E(n,t==null?void 0:t.in),r=Sn(e,t)-a;return e.setDate(e.getDate()-r*7),E(e,t==null?void 0:t.in)}class Oo extends B{constructor(){super(...arguments);M(this,"priority",100);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(t,e,r){switch(e){case"w":return z(Z.week,t);case"wo":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r,o){return Ee(To(t,r,o),o)}}function Ro(n,a,t){const e=E(n,t==null?void 0:t.in),r=gr(e,t)-a;return e.setDate(e.getDate()-r*7),e}class No extends B{constructor(){super(...arguments);M(this,"priority",100);M(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(t,e,r){switch(e){case"I":return z(Z.week,t);case"Io":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r){return ze(Ro(t,r))}}const Yo=[31,28,31,30,31,30,31,31,30,31,30,31],Lo=[31,29,31,30,31,30,31,31,30,31,30,31];class Fo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"subPriority",1);M(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"d":return z(Z.date,t);case"do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear(),o=Rn(r),i=t.getMonth();return o?e>=1&&e<=Lo[i]:e>=1&&e<=Yo[i]}set(t,e,r){return t.setDate(r),t.setHours(0,0,0,0),t}}class Io extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"subpriority",1);M(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(t,e,r){switch(e){case"D":case"DD":return z(Z.dayOfYear,t);case"Do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear();return Rn(r)?e>=1&&e<=366:e>=1&&e<=365}set(t,e,r){return t.setMonth(0,r),t.setHours(0,0,0,0),t}}function Dr(n,a,t){var d,f,p,h;const e=qe(),r=(t==null?void 0:t.weekStartsOn)??((f=(d=t==null?void 0:t.locale)==null?void 0:d.options)==null?void 0:f.weekStartsOn)??e.weekStartsOn??((h=(p=e.locale)==null?void 0:p.options)==null?void 0:h.weekStartsOn)??0,o=E(n,t==null?void 0:t.in),i=o.getDay(),c=(a%7+7)%7,l=7-r,u=a<0||a>6?a-(i+l)%7:(c+l)%7-(i+l)%7;return pe(o,u,t)}class Ao extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"E":case"EE":case"EEE":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEE":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Wo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(t,e,r,o){const i=s=>{const c=Math.floor((s-1)/7)*7;return(s+o.weekStartsOn+6)%7+c};switch(e){case"e":case"ee":return J(X(e.length,t),i);case"eo":return J(r.ordinalNumber(t,{unit:"day"}),i);case"eee":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeeee":return r.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeee":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Ho extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(t,e,r,o){const i=s=>{const c=Math.floor((s-1)/7)*7;return(s+o.weekStartsOn+6)%7+c};switch(e){case"c":case"cc":return J(X(e.length,t),i);case"co":return J(r.ordinalNumber(t,{unit:"day"}),i);case"ccc":return r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"ccccc":return r.day(t,{width:"narrow",context:"standalone"});case"cccccc":return r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"cccc":default:return r.day(t,{width:"wide",context:"standalone"})||r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}function Bo(n,a,t){const e=E(n,t==null?void 0:t.in),r=ho(e,t),o=a-r;return pe(e,o,t)}class Qo extends B{constructor(){super(...arguments);M(this,"priority",90);M(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(t,e,r){const o=i=>i===0?7:i;switch(e){case"i":case"ii":return X(e.length,t);case"io":return r.ordinalNumber(t,{unit:"day"});case"iii":return J(r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiii":return J(r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiiii":return J(r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiii":default:return J(r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o)}}validate(t,e){return e>=1&&e<=7}set(t,e,r){return t=Bo(t,r),t.setHours(0,0,0,0),t}}class jo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(t,e,r){switch(e){case"a":case"aa":case"aaa":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaaa":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaa":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Vo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(t,e,r){switch(e){case"b":case"bb":case"bbb":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbbb":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbb":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class qo extends B{constructor(){super(...arguments);M(this,"priority",80);M(this,"incompatibleTokens",["a","b","t","T"])}parse(t,e,r){switch(e){case"B":case"BB":case"BBB":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBBB":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBB":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Ko extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["H","K","k","t","T"])}parse(t,e,r){switch(e){case"h":return z(Z.hour12h,t);case"ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=12}set(t,e,r){const o=t.getHours()>=12;return o&&r<12?t.setHours(r+12,0,0,0):!o&&r===12?t.setHours(0,0,0,0):t.setHours(r,0,0,0),t}}class Uo extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(t,e,r){switch(e){case"H":return z(Z.hour23h,t);case"Ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=23}set(t,e,r){return t.setHours(r,0,0,0),t}}class $o extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["h","H","k","t","T"])}parse(t,e,r){switch(e){case"K":return z(Z.hour11h,t);case"Ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.getHours()>=12&&r<12?t.setHours(r+12,0,0,0):t.setHours(r,0,0,0),t}}class Go extends B{constructor(){super(...arguments);M(this,"priority",70);M(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(t,e,r){switch(e){case"k":return z(Z.hour24h,t);case"ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=24}set(t,e,r){const o=r<=24?r%24:r;return t.setHours(o,0,0,0),t}}class zo extends B{constructor(){super(...arguments);M(this,"priority",60);M(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"m":return z(Z.minute,t);case"mo":return r.ordinalNumber(t,{unit:"minute"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setMinutes(r,0,0),t}}class Xo extends B{constructor(){super(...arguments);M(this,"priority",50);M(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"s":return z(Z.second,t);case"so":return r.ordinalNumber(t,{unit:"second"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setSeconds(r,0),t}}class Zo extends B{constructor(){super(...arguments);M(this,"priority",30);M(this,"incompatibleTokens",["t","T"])}parse(t,e){const r=o=>Math.trunc(o*Math.pow(10,-e.length+3));return J(X(e.length,t),r)}set(t,e,r){return t.setMilliseconds(r),t}}class Jo extends B{constructor(){super(...arguments);M(this,"priority",10);M(this,"incompatibleTokens",["t","T","x"])}parse(t,e){switch(e){case"X":return we(ve.basicOptionalMinutes,t);case"XX":return we(ve.basic,t);case"XXXX":return we(ve.basicOptionalSeconds,t);case"XXXXX":return we(ve.extendedOptionalSeconds,t);case"XXX":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class ei extends B{constructor(){super(...arguments);M(this,"priority",10);M(this,"incompatibleTokens",["t","T","X"])}parse(t,e){switch(e){case"x":return we(ve.basicOptionalMinutes,t);case"xx":return we(ve.basic,t);case"xxxx":return we(ve.basicOptionalSeconds,t);case"xxxxx":return we(ve.extendedOptionalSeconds,t);case"xxx":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class ti extends B{constructor(){super(...arguments);M(this,"priority",40);M(this,"incompatibleTokens","*")}parse(t){return Tn(t)}set(t,e,r){return[U(t,r*1e3),{timestampIsSet:!0}]}}class ri extends B{constructor(){super(...arguments);M(this,"priority",20);M(this,"incompatibleTokens","*")}parse(t){return Tn(t)}set(t,e,r){return[U(t,r),{timestampIsSet:!0}]}}const ni={G:new bo,y:new ko,Y:new _o,R:new xo,u:new Mo,Q:new Co,q:new So,M:new Eo,L:new Po,w:new Oo,I:new No,d:new Fo,D:new Io,E:new Ao,e:new Wo,c:new Ho,i:new Qo,a:new jo,b:new Vo,B:new qo,h:new Ko,H:new Uo,K:new $o,k:new Go,m:new zo,s:new Xo,S:new Zo,X:new Jo,x:new ei,t:new ti,T:new ri},ai=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,oi=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,ii=/^'([^]*?)'?$/,si=/''/g,ci=/\S/,li=/[a-zA-Z]/;function ui(n,a,t,e){var g,y,_,w,b,P,O,C;const r=()=>U((e==null?void 0:e.in)||t,NaN),o=po(),i=(e==null?void 0:e.locale)??o.locale??Cn,s=(e==null?void 0:e.firstWeekContainsDate)??((y=(g=e==null?void 0:e.locale)==null?void 0:g.options)==null?void 0:y.firstWeekContainsDate)??o.firstWeekContainsDate??((w=(_=o.locale)==null?void 0:_.options)==null?void 0:w.firstWeekContainsDate)??1,c=(e==null?void 0:e.weekStartsOn)??((P=(b=e==null?void 0:e.locale)==null?void 0:b.options)==null?void 0:P.weekStartsOn)??o.weekStartsOn??((C=(O=o.locale)==null?void 0:O.options)==null?void 0:C.weekStartsOn)??0;if(!a)return n?r():E(t,e==null?void 0:e.in);const l={firstWeekContainsDate:s,weekStartsOn:c,locale:i},u=[new yo(e==null?void 0:e.in,t)],d=a.match(oi).map(k=>{const S=k[0];if(S in ur){const N=ur[S];return N(k,i.formatLong)}return k}).join("").match(ai),f=[];for(let k of d){const S=k[0],N=ni[S];if(N){const{incompatibleTokens:Q}=N;if(Array.isArray(Q)){const $=f.find(j=>Q.includes(j.token)||j.token===S);if($)throw new RangeError(`The format string mustn't contain \`${$.fullToken}\` and \`${k}\` at the same time`)}else if(N.incompatibleTokens==="*"&&f.length>0)throw new RangeError(`The format string mustn't contain \`${k}\` and any other token at the same time`);f.push({token:S,fullToken:k});const I=N.run(n,k,i.match,l);if(!I)return r();u.push(I.setter),n=I.rest}else{if(S.match(li))throw new RangeError("Format string contains an unescaped latin alphabet character `"+S+"`");if(k==="''"?k="'":S==="'"&&(k=di(k)),n.indexOf(k)===0)n=n.slice(k.length);else return r()}}if(n.length>0&&ci.test(n))return r();const p=u.map(k=>k.priority).sort((k,S)=>S-k).filter((k,S,N)=>N.indexOf(k)===S).map(k=>u.filter(S=>S.priority===k).sort((S,N)=>N.subPriority-S.subPriority)).map(k=>k[0]);let h=E(t,e==null?void 0:e.in);if(isNaN(+h))return r();const v={};for(const k of p){if(!k.validate(h,l))return r();const S=k.set(h,v,l);Array.isArray(S)?(h=S[0],Object.assign(v,S[1])):h=S}return h}function di(n){return n.match(ii)[1].replace(si,"'")}function fi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()&&e.getMonth()===r.getMonth()}function pi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+lr(e)==+lr(r)}function hi(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()}function ut(n,a,t){const e=+E(n,t==null?void 0:t.in),[r,o]=[+E(a.start,t==null?void 0:t.in),+E(a.end,t==null?void 0:t.in)].sort((i,s)=>i-s);return e>=r&&e<=o}function mi(n,a,t){return pe(n,-1,t)}function gi(n,a){const t=()=>U(a==null?void 0:a.in,NaN),r=yi(n);let o;if(r.date){const l=bi(r.date,2);o=ki(l.restDateString,l.year)}if(!o||isNaN(+o))return t();const i=+o;let s=0,c;if(r.time&&(s=_i(r.time),isNaN(s)))return t();if(r.timezone){if(c=xi(r.timezone),isNaN(c))return t()}else{const l=new Date(i+s),u=E(0,a==null?void 0:a.in);return u.setFullYear(l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate()),u.setHours(l.getUTCHours(),l.getUTCMinutes(),l.getUTCSeconds(),l.getUTCMilliseconds()),u}return E(i+s+c,a==null?void 0:a.in)}const vt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},vi=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,wi=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Di=/^([+-])(\d{2})(?::?(\d{2}))?$/;function yi(n){const a={},t=n.split(vt.dateTimeDelimiter);let e;if(t.length>2)return a;if(/:/.test(t[0])?e=t[0]:(a.date=t[0],e=t[1],vt.timeZoneDelimiter.test(a.date)&&(a.date=n.split(vt.timeZoneDelimiter)[0],e=n.substr(a.date.length,n.length))),e){const r=vt.timezone.exec(e);r?(a.time=e.replace(r[1],""),a.timezone=r[1]):a.time=e}return a}function bi(n,a){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+a)+"})|(\\d{2}|[+-]\\d{"+(2+a)+"})$)"),e=n.match(t);if(!e)return{year:NaN,restDateString:""};const r=e[1]?parseInt(e[1]):null,o=e[2]?parseInt(e[2]):null;return{year:o===null?r:o*100,restDateString:n.slice((e[1]||e[2]).length)}}function ki(n,a){if(a===null)return new Date(NaN);const t=n.match(vi);if(!t)return new Date(NaN);const e=!!t[4],r=it(t[1]),o=it(t[2])-1,i=it(t[3]),s=it(t[4]),c=it(t[5])-1;if(e)return Pi(a,s,c)?Mi(a,s,c):new Date(NaN);{const l=new Date(0);return!Si(a,o,i)||!Ei(a,r)?new Date(NaN):(l.setUTCFullYear(a,o,Math.max(r,i)),l)}}function it(n){return n?parseInt(n):1}function _i(n){const a=n.match(wi);if(!a)return NaN;const t=er(a[1]),e=er(a[2]),r=er(a[3]);return Ti(t,e,r)?t*qt+e*Vt+r*1e3:NaN}function er(n){return n&&parseFloat(n.replace(",","."))||0}function xi(n){if(n==="Z")return 0;const a=n.match(Di);if(!a)return 0;const t=a[1]==="+"?-1:1,e=parseInt(a[2]),r=a[3]&&parseInt(a[3])||0;return Oi(e,r)?t*(e*qt+r*Vt):NaN}function Mi(n,a,t){const e=new Date(0);e.setUTCFullYear(n,0,4);const r=e.getUTCDay()||7,o=(a-1)*7+t+1-r;return e.setUTCDate(e.getUTCDate()+o),e}const Ci=[31,null,31,30,31,30,31,31,30,31,30,31];function Nn(n){return n%400===0||n%4===0&&n%100!==0}function Si(n,a,t){return a>=0&&a<=11&&t>=1&&t<=(Ci[a]||(Nn(n)?29:28))}function Ei(n,a){return a>=1&&a<=(Nn(n)?366:365)}function Pi(n,a,t){return a>=1&&a<=53&&t>=0&&t<=6}function Ti(n,a,t){return n===24?a===0&&t===0:t>=0&&t<60&&a>=0&&a<60&&n>=0&&n<25}function Oi(n,a){return a>=0&&a<=59}function ce(n,a,t){const e=E(n,t==null?void 0:t.in),r=e.getFullYear(),o=e.getDate(),i=U(n,0);i.setFullYear(r,a,15),i.setHours(0,0,0,0);const s=fo(i);return e.setMonth(a,Math.min(o,s)),e}function xt(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setHours(a),e}function Mt(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setMinutes(a),e}function Ue(n,a,t){const e=E(n,t==null?void 0:t.in),r=Math.trunc(e.getMonth()/3)+1,o=a-r;return ce(e,e.getMonth()+o*3)}function Ct(n,a,t){const e=E(n,t==null?void 0:t.in);return e.setSeconds(a),e}function me(n,a,t){const e=E(n,t==null?void 0:t.in);return isNaN(+e)?U(n,NaN):(e.setFullYear(a),e)}function He(n,a,t){return he(n,-a,t)}function Yn(n,a,t){return mr(n,-1,t)}function Hr(n,a,t){return Rt(n,-1,t)}function Ze(n,a,t){return _e(n,-a,t)}function Ut(){return typeof window<"u"}function nt(n){return Ln(n)?(n.nodeName||"").toLowerCase():"#document"}function ie(n){var a;return(n==null||(a=n.ownerDocument)==null?void 0:a.defaultView)||window}function ke(n){var a;return(a=(Ln(n)?n.ownerDocument:n.document)||window.document)==null?void 0:a.documentElement}function Ln(n){return Ut()?n instanceof Node||n instanceof ie(n).Node:!1}function oe(n){return Ut()?n instanceof Element||n instanceof ie(n).Element:!1}function be(n){return Ut()?n instanceof HTMLElement||n instanceof ie(n).HTMLElement:!1}function Br(n){return!Ut()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof ie(n).ShadowRoot}const Ri=new Set(["inline","contents"]);function pt(n){const{overflow:a,overflowX:t,overflowY:e,display:r}=ue(n);return/auto|scroll|overlay|hidden|clip/.test(a+e+t)&&!Ri.has(r)}const Ni=new Set(["table","td","th"]);function Yi(n){return Ni.has(nt(n))}const Li=[":popover-open",":modal"];function $t(n){return Li.some(a=>{try{return n.matches(a)}catch{return!1}})}const Fi=["transform","translate","scale","rotate","perspective"],Ii=["transform","translate","scale","rotate","perspective","filter"],Ai=["paint","layout","strict","content"];function yr(n){const a=br(),t=oe(n)?ue(n):n;return Fi.some(e=>t[e]?t[e]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!a&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!a&&(t.filter?t.filter!=="none":!1)||Ii.some(e=>(t.willChange||"").includes(e))||Ai.some(e=>(t.contain||"").includes(e))}function Wi(n){let a=Le(n);for(;be(a)&&!Je(a);){if(yr(a))return a;if($t(a))return null;a=Le(a)}return null}function br(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Hi=new Set(["html","body","#document"]);function Je(n){return Hi.has(nt(n))}function ue(n){return ie(n).getComputedStyle(n)}function Gt(n){return oe(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function Le(n){if(nt(n)==="html")return n;const a=n.assignedSlot||n.parentNode||Br(n)&&n.host||ke(n);return Br(a)?a.host:a}function Fn(n){const a=Le(n);return Je(a)?n.ownerDocument?n.ownerDocument.body:n.body:be(a)&&pt(a)?a:Fn(a)}function dt(n,a,t){var e;a===void 0&&(a=[]),t===void 0&&(t=!0);const r=Fn(n),o=r===((e=n.ownerDocument)==null?void 0:e.body),i=ie(r);if(o){const s=fr(i);return a.concat(i,i.visualViewport||[],pt(r)?r:[],s&&t?dt(s):[])}return a.concat(r,dt(r,[],t))}function fr(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}const et=Math.min,Be=Math.max,At=Math.round,wt=Math.floor,ye=n=>({x:n,y:n}),Bi={left:"right",right:"left",bottom:"top",top:"bottom"},Qi={start:"end",end:"start"};function ji(n,a,t){return Be(n,et(a,t))}function zt(n,a){return typeof n=="function"?n(a):n}function tt(n){return n.split("-")[0]}function ht(n){return n.split("-")[1]}function Vi(n){return n==="x"?"y":"x"}function kr(n){return n==="y"?"height":"width"}const qi=new Set(["top","bottom"]);function Ie(n){return qi.has(tt(n))?"y":"x"}function _r(n){return Vi(Ie(n))}function Ki(n,a,t){t===void 0&&(t=!1);const e=ht(n),r=_r(n),o=kr(r);let i=r==="x"?e===(t?"end":"start")?"right":"left":e==="start"?"bottom":"top";return a.reference[o]>a.floating[o]&&(i=Wt(i)),[i,Wt(i)]}function Ui(n){const a=Wt(n);return[pr(n),a,pr(a)]}function pr(n){return n.replace(/start|end/g,a=>Qi[a])}const Qr=["left","right"],jr=["right","left"],$i=["top","bottom"],Gi=["bottom","top"];function zi(n,a,t){switch(n){case"top":case"bottom":return t?a?jr:Qr:a?Qr:jr;case"left":case"right":return a?$i:Gi;default:return[]}}function Xi(n,a,t,e){const r=ht(n);let o=zi(tt(n),t==="start",e);return r&&(o=o.map(i=>i+"-"+r),a&&(o=o.concat(o.map(pr)))),o}function Wt(n){return n.replace(/left|right|bottom|top/g,a=>Bi[a])}function Zi(n){return{top:0,right:0,bottom:0,left:0,...n}}function In(n){return typeof n!="number"?Zi(n):{top:n,right:n,bottom:n,left:n}}function Ht(n){const{x:a,y:t,width:e,height:r}=n;return{width:e,height:r,top:t,left:a,right:a+e,bottom:t+r,x:a,y:t}}var Ji=typeof document<"u",es=function(){},Bt=Ji?D.useLayoutEffect:es;const ts={...wn},rs=ts.useInsertionEffect,ns=rs||(n=>n());function as(n){const a=D.useRef(()=>{});return ns(()=>{a.current=n}),D.useCallback(function(){for(var t=arguments.length,e=new Array(t),r=0;r{const{placement:e="bottom",strategy:r="absolute",middleware:o=[],platform:i}=t,s=o.filter(Boolean),c=await(i.isRTL==null?void 0:i.isRTL(a));let l=await i.getElementRects({reference:n,floating:a,strategy:r}),{x:u,y:d}=Vr(l,e,c),f=e,p={},h=0;for(let v=0;v({name:"arrow",options:n,async fn(a){const{x:t,y:e,placement:r,rects:o,platform:i,elements:s,middlewareData:c}=a,{element:l,padding:u=0}=zt(n,a)||{};if(l==null)return{};const d=In(u),f={x:t,y:e},p=_r(r),h=kr(p),v=await i.getDimensions(l),g=p==="y",y=g?"top":"left",_=g?"bottom":"right",w=g?"clientHeight":"clientWidth",b=o.reference[h]+o.reference[p]-f[p]-o.floating[h],P=f[p]-o.reference[p],O=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l));let C=O?O[w]:0;(!C||!await(i.isElement==null?void 0:i.isElement(O)))&&(C=s.floating[w]||o.floating[h]);const k=b/2-P/2,S=C/2-v[h]/2-1,N=et(d[y],S),Q=et(d[_],S),I=N,$=C-v[h]-Q,j=C/2-v[h]/2+k,q=ji(I,j,$),R=!c.arrow&&ht(r)!=null&&j!==q&&o.reference[h]/2-(jj<=0)){var Q,I;const j=(((Q=o.flip)==null?void 0:Q.index)||0)+1,q=C[j];if(q&&(!(d==="alignment"?_!==Ie(q):!1)||N.every(Y=>Y.overflows[0]>0&&Ie(Y.placement)===_)))return{data:{index:j,overflows:N},reset:{placement:q}};let R=(I=N.filter(F=>F.overflows[0]<=0).sort((F,Y)=>F.overflows[1]-Y.overflows[1])[0])==null?void 0:I.placement;if(!R)switch(p){case"bestFit":{var $;const F=($=N.filter(Y=>{if(O){const ee=Ie(Y.placement);return ee===_||ee==="y"}return!0}).map(Y=>[Y.placement,Y.overflows.filter(ee=>ee>0).reduce((ee,de)=>ee+de,0)]).sort((Y,ee)=>Y[1]-ee[1])[0])==null?void 0:$[0];F&&(R=F);break}case"initialPlacement":R=s;break}if(r!==R)return{reset:{placement:R}}}return{}}}},ls=new Set(["left","top"]);async function us(n,a){const{placement:t,platform:e,elements:r}=n,o=await(e.isRTL==null?void 0:e.isRTL(r.floating)),i=tt(t),s=ht(t),c=Ie(t)==="y",l=ls.has(i)?-1:1,u=o&&c?-1:1,d=zt(a,n);let{mainAxis:f,crossAxis:p,alignmentAxis:h}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof h=="number"&&(p=s==="end"?h*-1:h),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}const ds=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(a){var t,e;const{x:r,y:o,placement:i,middlewareData:s}=a,c=await us(a,n);return i===((t=s.offset)==null?void 0:t.placement)&&(e=s.arrow)!=null&&e.alignmentOffset?{}:{x:r+c.x,y:o+c.y,data:{...c,placement:i}}}}};function An(n){const a=ue(n);let t=parseFloat(a.width)||0,e=parseFloat(a.height)||0;const r=be(n),o=r?n.offsetWidth:t,i=r?n.offsetHeight:e,s=At(t)!==o||At(e)!==i;return s&&(t=o,e=i),{width:t,height:e,$:s}}function xr(n){return oe(n)?n:n.contextElement}function $e(n){const a=xr(n);if(!be(a))return ye(1);const t=a.getBoundingClientRect(),{width:e,height:r,$:o}=An(a);let i=(o?At(t.width):t.width)/e,s=(o?At(t.height):t.height)/r;return(!i||!Number.isFinite(i))&&(i=1),(!s||!Number.isFinite(s))&&(s=1),{x:i,y:s}}const fs=ye(0);function Wn(n){const a=ie(n);return!br()||!a.visualViewport?fs:{x:a.visualViewport.offsetLeft,y:a.visualViewport.offsetTop}}function ps(n,a,t){return a===void 0&&(a=!1),!t||a&&t!==ie(n)?!1:a}function Ve(n,a,t,e){a===void 0&&(a=!1),t===void 0&&(t=!1);const r=n.getBoundingClientRect(),o=xr(n);let i=ye(1);a&&(e?oe(e)&&(i=$e(e)):i=$e(n));const s=ps(o,t,e)?Wn(o):ye(0);let c=(r.left+s.x)/i.x,l=(r.top+s.y)/i.y,u=r.width/i.x,d=r.height/i.y;if(o){const f=ie(o),p=e&&oe(e)?ie(e):e;let h=f,v=fr(h);for(;v&&e&&p!==h;){const g=$e(v),y=v.getBoundingClientRect(),_=ue(v),w=y.left+(v.clientLeft+parseFloat(_.paddingLeft))*g.x,b=y.top+(v.clientTop+parseFloat(_.paddingTop))*g.y;c*=g.x,l*=g.y,u*=g.x,d*=g.y,c+=w,l+=b,h=ie(v),v=fr(h)}}return Ht({width:u,height:d,x:c,y:l})}function Mr(n,a){const t=Gt(n).scrollLeft;return a?a.left+t:Ve(ke(n)).left+t}function Hn(n,a,t){t===void 0&&(t=!1);const e=n.getBoundingClientRect(),r=e.left+a.scrollLeft-(t?0:Mr(n,e)),o=e.top+a.scrollTop;return{x:r,y:o}}function hs(n){let{elements:a,rect:t,offsetParent:e,strategy:r}=n;const o=r==="fixed",i=ke(e),s=a?$t(a.floating):!1;if(e===i||s&&o)return t;let c={scrollLeft:0,scrollTop:0},l=ye(1);const u=ye(0),d=be(e);if((d||!d&&!o)&&((nt(e)!=="body"||pt(i))&&(c=Gt(e)),be(e))){const p=Ve(e);l=$e(e),u.x=p.x+e.clientLeft,u.y=p.y+e.clientTop}const f=i&&!d&&!o?Hn(i,c,!0):ye(0);return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:t.y*l.y-c.scrollTop*l.y+u.y+f.y}}function ms(n){return Array.from(n.getClientRects())}function gs(n){const a=ke(n),t=Gt(n),e=n.ownerDocument.body,r=Be(a.scrollWidth,a.clientWidth,e.scrollWidth,e.clientWidth),o=Be(a.scrollHeight,a.clientHeight,e.scrollHeight,e.clientHeight);let i=-t.scrollLeft+Mr(n);const s=-t.scrollTop;return ue(e).direction==="rtl"&&(i+=Be(a.clientWidth,e.clientWidth)-r),{width:r,height:o,x:i,y:s}}function vs(n,a){const t=ie(n),e=ke(n),r=t.visualViewport;let o=e.clientWidth,i=e.clientHeight,s=0,c=0;if(r){o=r.width,i=r.height;const l=br();(!l||l&&a==="fixed")&&(s=r.offsetLeft,c=r.offsetTop)}return{width:o,height:i,x:s,y:c}}const ws=new Set(["absolute","fixed"]);function Ds(n,a){const t=Ve(n,!0,a==="fixed"),e=t.top+n.clientTop,r=t.left+n.clientLeft,o=be(n)?$e(n):ye(1),i=n.clientWidth*o.x,s=n.clientHeight*o.y,c=r*o.x,l=e*o.y;return{width:i,height:s,x:c,y:l}}function qr(n,a,t){let e;if(a==="viewport")e=vs(n,t);else if(a==="document")e=gs(ke(n));else if(oe(a))e=Ds(a,t);else{const r=Wn(n);e={x:a.x-r.x,y:a.y-r.y,width:a.width,height:a.height}}return Ht(e)}function Bn(n,a){const t=Le(n);return t===a||!oe(t)||Je(t)?!1:ue(t).position==="fixed"||Bn(t,a)}function ys(n,a){const t=a.get(n);if(t)return t;let e=dt(n,[],!1).filter(s=>oe(s)&&nt(s)!=="body"),r=null;const o=ue(n).position==="fixed";let i=o?Le(n):n;for(;oe(i)&&!Je(i);){const s=ue(i),c=yr(i);!c&&s.position==="fixed"&&(r=null),(o?!c&&!r:!c&&s.position==="static"&&!!r&&ws.has(r.position)||pt(i)&&!c&&Bn(n,i))?e=e.filter(u=>u!==i):r=s,i=Le(i)}return a.set(n,e),e}function bs(n){let{element:a,boundary:t,rootBoundary:e,strategy:r}=n;const i=[...t==="clippingAncestors"?$t(a)?[]:ys(a,this._c):[].concat(t),e],s=i[0],c=i.reduce((l,u)=>{const d=qr(a,u,r);return l.top=Be(d.top,l.top),l.right=et(d.right,l.right),l.bottom=et(d.bottom,l.bottom),l.left=Be(d.left,l.left),l},qr(a,s,r));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function ks(n){const{width:a,height:t}=An(n);return{width:a,height:t}}function _s(n,a,t){const e=be(a),r=ke(a),o=t==="fixed",i=Ve(n,!0,o,a);let s={scrollLeft:0,scrollTop:0};const c=ye(0);function l(){c.x=Mr(r)}if(e||!e&&!o)if((nt(a)!=="body"||pt(r))&&(s=Gt(a)),e){const p=Ve(a,!0,o,a);c.x=p.x+a.clientLeft,c.y=p.y+a.clientTop}else r&&l();o&&!e&&r&&l();const u=r&&!e&&!o?Hn(r,s):ye(0),d=i.left+s.scrollLeft-c.x-u.x,f=i.top+s.scrollTop-c.y-u.y;return{x:d,y:f,width:i.width,height:i.height}}function tr(n){return ue(n).position==="static"}function Kr(n,a){if(!be(n)||ue(n).position==="fixed")return null;if(a)return a(n);let t=n.offsetParent;return ke(n)===t&&(t=t.ownerDocument.body),t}function Qn(n,a){const t=ie(n);if($t(n))return t;if(!be(n)){let r=Le(n);for(;r&&!Je(r);){if(oe(r)&&!tr(r))return r;r=Le(r)}return t}let e=Kr(n,a);for(;e&&Yi(e)&&tr(e);)e=Kr(e,a);return e&&Je(e)&&tr(e)&&!yr(e)?t:e||Wi(n)||t}const xs=async function(n){const a=this.getOffsetParent||Qn,t=this.getDimensions,e=await t(n.floating);return{reference:_s(n.reference,await a(n.floating),n.strategy),floating:{x:0,y:0,width:e.width,height:e.height}}};function Ms(n){return ue(n).direction==="rtl"}const Cs={convertOffsetParentRelativeRectToViewportRelativeRect:hs,getDocumentElement:ke,getClippingRect:bs,getOffsetParent:Qn,getElementRects:xs,getClientRects:ms,getDimensions:ks,getScale:$e,isElement:oe,isRTL:Ms};function jn(n,a){return n.x===a.x&&n.y===a.y&&n.width===a.width&&n.height===a.height}function Ss(n,a){let t=null,e;const r=ke(n);function o(){var s;clearTimeout(e),(s=t)==null||s.disconnect(),t=null}function i(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),o();const l=n.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(s||a(),!f||!p)return;const h=wt(d),v=wt(r.clientWidth-(u+f)),g=wt(r.clientHeight-(d+p)),y=wt(u),w={rootMargin:-h+"px "+-v+"px "+-g+"px "+-y+"px",threshold:Be(0,et(1,c))||1};let b=!0;function P(O){const C=O[0].intersectionRatio;if(C!==c){if(!b)return i();C?i(!1,C):e=setTimeout(()=>{i(!1,1e-7)},1e3)}C===1&&!jn(l,n.getBoundingClientRect())&&i(),b=!1}try{t=new IntersectionObserver(P,{...w,root:r.ownerDocument})}catch{t=new IntersectionObserver(P,w)}t.observe(n)}return i(!0),o}function Es(n,a,t,e){e===void 0&&(e={});const{ancestorScroll:r=!0,ancestorResize:o=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:c=!1}=e,l=xr(n),u=r||o?[...l?dt(l):[],...dt(a)]:[];u.forEach(y=>{r&&y.addEventListener("scroll",t,{passive:!0}),o&&y.addEventListener("resize",t)});const d=l&&s?Ss(l,t):null;let f=-1,p=null;i&&(p=new ResizeObserver(y=>{let[_]=y;_&&_.target===l&&p&&(p.unobserve(a),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var w;(w=p)==null||w.observe(a)})),t()}),l&&!c&&p.observe(l),p.observe(a));let h,v=c?Ve(n):null;c&&g();function g(){const y=Ve(n);v&&!jn(v,y)&&t(),v=y,h=requestAnimationFrame(g)}return t(),()=>{var y;u.forEach(_=>{r&&_.removeEventListener("scroll",t),o&&_.removeEventListener("resize",t)}),d==null||d(),(y=p)==null||y.disconnect(),p=null,c&&cancelAnimationFrame(h)}}const Ps=ds,Ts=cs,Ur=ss,Os=(n,a,t)=>{const e=new Map,r={platform:Cs,...t},o={...r.platform,_c:e};return os(n,a,{...r,platform:o})};var Rs=typeof document<"u",Ns=function(){},St=Rs?D.useLayoutEffect:Ns;function Qt(n,a){if(n===a)return!0;if(typeof n!=typeof a)return!1;if(typeof n=="function"&&n.toString()===a.toString())return!0;let t,e,r;if(n&&a&&typeof n=="object"){if(Array.isArray(n)){if(t=n.length,t!==a.length)return!1;for(e=t;e--!==0;)if(!Qt(n[e],a[e]))return!1;return!0}if(r=Object.keys(n),t=r.length,t!==Object.keys(a).length)return!1;for(e=t;e--!==0;)if(!{}.hasOwnProperty.call(a,r[e]))return!1;for(e=t;e--!==0;){const o=r[e];if(!(o==="_owner"&&n.$$typeof)&&!Qt(n[o],a[o]))return!1}return!0}return n!==n&&a!==a}function Vn(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function $r(n,a){const t=Vn(n);return Math.round(a*t)/t}function rr(n){const a=D.useRef(n);return St(()=>{a.current=n}),a}function Ys(n){n===void 0&&(n={});const{placement:a="bottom",strategy:t="absolute",middleware:e=[],platform:r,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:c,open:l}=n,[u,d]=D.useState({x:0,y:0,strategy:t,placement:a,middlewareData:{},isPositioned:!1}),[f,p]=D.useState(e);Qt(f,e)||p(e);const[h,v]=D.useState(null),[g,y]=D.useState(null),_=D.useCallback(Y=>{Y!==O.current&&(O.current=Y,v(Y))},[]),w=D.useCallback(Y=>{Y!==C.current&&(C.current=Y,y(Y))},[]),b=o||h,P=i||g,O=D.useRef(null),C=D.useRef(null),k=D.useRef(u),S=c!=null,N=rr(c),Q=rr(r),I=rr(l),$=D.useCallback(()=>{if(!O.current||!C.current)return;const Y={placement:a,strategy:t,middleware:f};Q.current&&(Y.platform=Q.current),Os(O.current,C.current,Y).then(ee=>{const de={...ee,isPositioned:I.current!==!1};j.current&&!Qt(k.current,de)&&(k.current=de,na.flushSync(()=>{d(de)}))})},[f,a,t,Q,I]);St(()=>{l===!1&&k.current.isPositioned&&(k.current.isPositioned=!1,d(Y=>({...Y,isPositioned:!1})))},[l]);const j=D.useRef(!1);St(()=>(j.current=!0,()=>{j.current=!1}),[]),St(()=>{if(b&&(O.current=b),P&&(C.current=P),b&&P){if(N.current)return N.current(b,P,$);$()}},[b,P,$,N,S]);const q=D.useMemo(()=>({reference:O,floating:C,setReference:_,setFloating:w}),[_,w]),R=D.useMemo(()=>({reference:b,floating:P}),[b,P]),F=D.useMemo(()=>{const Y={position:t,left:0,top:0};if(!R.floating)return Y;const ee=$r(R.floating,u.x),de=$r(R.floating,u.y);return s?{...Y,transform:"translate("+ee+"px, "+de+"px)",...Vn(R.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:ee,top:de}},[t,s,R.floating,u.x,u.y]);return D.useMemo(()=>({...u,update:$,refs:q,elements:R,floatingStyles:F}),[u,$,q,R,F])}const Ls=n=>{function a(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:n,fn(t){const{element:e,padding:r}=typeof n=="function"?n(t):n;return e&&a(e)?e.current!=null?Ur({element:e.current,padding:r}).fn(t):{}:e?Ur({element:e,padding:r}).fn(t):{}}}},Fs=(n,a)=>({...Ps(n),options:[n,a]}),Is=(n,a)=>({...Ts(n),options:[n,a]}),As=(n,a)=>({...Ls(n),options:[n,a]}),Ws={...wn};let Gr=!1,Hs=0;const zr=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Hs++;function Bs(){const[n,a]=D.useState(()=>Gr?zr():void 0);return Bt(()=>{n==null&&a(zr())},[]),D.useEffect(()=>{Gr=!0},[]),n}const Qs=Ws.useId,qn=Qs||Bs,js=D.forwardRef(function(a,t){const{context:{placement:e,elements:{floating:r},middlewareData:{arrow:o,shift:i}},width:s=14,height:c=7,tipRadius:l=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h,...v}={},...g}=a,y=qn(),[_,w]=D.useState(!1);if(Bt(()=>{if(!r)return;ue(r).direction==="rtl"&&w(!0)},[r]),!r)return null;const[b,P]=e.split("-"),O=b==="top"||b==="bottom";let C=d;(O&&i!=null&&i.x||!O&&i!=null&&i.y)&&(C=null);const k=u*2,S=k/2,N=s/2*(l/-8+1),Q=c/2*l/4,I=!!p,$=C&&P==="end"?"bottom":"top";let j=C&&P==="end"?"right":"left";C&&_&&(j=P==="end"?"left":"right");const q=(o==null?void 0:o.x)!=null?C||o.x:"",R=(o==null?void 0:o.y)!=null?C||o.y:"",F=p||"M0,0"+(" H"+s)+(" L"+(s-N)+","+(c-Q))+(" Q"+s/2+","+c+" "+N+","+(c-Q))+" Z",Y={top:I?"rotate(180deg)":"",left:I?"rotate(90deg)":"rotate(-90deg)",bottom:I?"":"rotate(180deg)",right:I?"rotate(-90deg)":"rotate(90deg)"}[b];return T.jsxs("svg",{...g,"aria-hidden":!0,ref:t,width:I?s:s+k,height:s,viewBox:"0 0 "+s+" "+(c>s?c:s),style:{position:"absolute",pointerEvents:"none",[j]:q,[$]:R,[b]:O||I?"100%":"calc(100% - "+k/2+"px)",transform:[Y,h].filter(ee=>!!ee).join(" "),...v},children:[k>0&&T.jsx("path",{clipPath:"url(#"+y+")",fill:"none",stroke:f,strokeWidth:k+(p?0:1),d:F}),T.jsx("path",{stroke:k&&!p?g.fill:"none",d:F}),T.jsx("clipPath",{id:y,children:T.jsx("rect",{x:-S,y:S*(I?-1:1),width:s+k,height:s})})]})});function Vs(){const n=new Map;return{emit(a,t){var e;(e=n.get(a))==null||e.forEach(r=>r(t))},on(a,t){n.has(a)||n.set(a,new Set),n.get(a).add(t)},off(a,t){var e;(e=n.get(a))==null||e.delete(t)}}}const qs=D.createContext(null),Ks=D.createContext(null),Us=()=>{var n;return((n=D.useContext(qs))==null?void 0:n.id)||null},$s=()=>D.useContext(Ks);function Gs(n){const{open:a=!1,onOpenChange:t,elements:e}=n,r=qn(),o=D.useRef({}),[i]=D.useState(()=>Vs()),s=Us()!=null,[c,l]=D.useState(e.reference),u=as((p,h,v)=>{o.current.openEvent=p?h:void 0,i.emit("openchange",{open:p,event:h,reason:v,nested:s}),t==null||t(p,h,v)}),d=D.useMemo(()=>({setPositionReference:l}),[]),f=D.useMemo(()=>({reference:c||e.reference||null,floating:e.floating||null,domReference:e.reference}),[c,e.reference,e.floating]);return D.useMemo(()=>({dataRef:o,open:a,onOpenChange:u,elements:f,events:i,floatingId:r,refs:d}),[a,u,f,i,r,d])}function zs(n){n===void 0&&(n={});const{nodeId:a}=n,t=Gs({...n,elements:{reference:null,floating:null,...n.elements}}),e=n.rootContext||t,r=e.elements,[o,i]=D.useState(null),[s,c]=D.useState(null),u=(r==null?void 0:r.domReference)||o,d=D.useRef(null),f=$s();Bt(()=>{u&&(d.current=u)},[u]);const p=Ys({...n,elements:{...r,...s&&{reference:s}}}),h=D.useCallback(w=>{const b=oe(w)?{getBoundingClientRect:()=>w.getBoundingClientRect(),getClientRects:()=>w.getClientRects(),contextElement:w}:w;c(b),p.refs.setReference(b)},[p.refs]),v=D.useCallback(w=>{(oe(w)||w===null)&&(d.current=w,i(w)),(oe(p.refs.reference.current)||p.refs.reference.current===null||w!==null&&!oe(w))&&p.refs.setReference(w)},[p.refs]),g=D.useMemo(()=>({...p.refs,setReference:v,setPositionReference:h,domReference:d}),[p.refs,v,h]),y=D.useMemo(()=>({...p.elements,domReference:u}),[p.elements,u]),_=D.useMemo(()=>({...p,...e,refs:g,elements:y,nodeId:a}),[p,g,y,a,e]);return Bt(()=>{e.dataRef.current.floatingContext=_;const w=f==null?void 0:f.nodesRef.current.find(b=>b.id===a);w&&(w.context=_)}),D.useMemo(()=>({...p,context:_,refs:g,elements:y}),[p,g,y,_])}/*! - react-datepicker v8.4.0 - https://github.com/Hacker0x01/react-datepicker - Released under the MIT License. -*/var hr=function(a,t){return hr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])},hr(a,t)};function te(n,a){if(typeof a!="function"&&a!==null)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");hr(n,a);function t(){this.constructor=n}n.prototype=a===null?Object.create(a):(t.prototype=a.prototype,new t)}var W=function(){return W=Object.assign||function(t){for(var e,r=1,o=arguments.length;r0?t[0]:t;return n&&G(n,r,e)||""}var Un=" - ";function Js(n,a,t){if(!n)return"";var e=se(n,t),r=a?se(a,t):"";return"".concat(e).concat(Un).concat(r)}function ec(n,a){if(!(n!=null&&n.length))return"";var t=n[0]?se(n[0],a):"";if(n.length===1)return t;if(n.length===2&&n[1]){var e=se(n[1],a);return"".concat(t,", ").concat(e)}var r=n.length-1;return"".concat(t," (+").concat(r,")")}function ar(n,a){var t=a.hour,e=t===void 0?0:t,r=a.minute,o=r===void 0?0:r,i=a.second,s=i===void 0?0:i;return xt(Mt(Ct(n,s),o),e)}function tc(n){return gr(n)}function rc(n,a){return G(n,"ddd",a)}function Et(n){return Qe(n)}function Ne(n,a,t){var e=rt(a||Cr());return Ee(n,{locale:e,weekStartsOn:t})}function Se(n){return xn(n)}function ct(n){return Kt(n)}function Xr(n){return lr(n)}function Zr(){return Qe(V())}function Jr(n){return kn(n)}function nc(n){return ma(n)}function ac(n){return _n(n)}function ge(n,a){return n&&a?hi(n,a):!n&&!a}function ae(n,a){return n&&a?fi(n,a):!n&&!a}function jt(n,a){return n&&a?pi(n,a):!n&&!a}function A(n,a){return n&&a?pa(n,a):!n&&!a}function Ae(n,a){return n&&a?mo(n,a):!n&&!a}function lt(n,a,t){var e,r=Qe(a),o=kn(t);try{e=ut(n,{start:r,end:o})}catch{e=!1}return e}function Cr(){var n=Kn();return n.__localeId__}function rt(n){if(typeof n=="string"){var a=Kn();return a.__localeData__?a.__localeData__[n]:void 0}else return n}function oc(n,a,t){return a(G(n,"EEEE",t))}function ic(n,a){return G(n,"EEEEEE",a)}function sc(n,a){return G(n,"EEE",a)}function Sr(n,a){return G(ce(V(),n),"LLLL",a)}function $n(n,a){return G(ce(V(),n),"LLL",a)}function cc(n,a){return G(Ue(V(),n),"QQQ",a)}function le(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.excludeDateIntervals,s=t.includeDates,c=t.includeDateIntervals,l=t.filterDate;return gt(n,{minDate:e,maxDate:r})||o&&o.some(function(u){return u instanceof Date?A(n,u):A(n,u.date)})||i&&i.some(function(u){var d=u.start,f=u.end;return ut(n,{start:d,end:f})})||s&&!s.some(function(u){return A(n,u)})||c&&!c.some(function(u){var d=u.start,f=u.end;return ut(n,{start:d,end:f})})||l&&!l(V(n))||!1}function Er(n,a){var t=a===void 0?{}:a,e=t.excludeDates,r=t.excludeDateIntervals;return r&&r.length>0?r.some(function(o){var i=o.start,s=o.end;return ut(n,{start:i,end:s})}):e&&e.some(function(o){var i;return o instanceof Date?A(n,o):A(n,(i=o.date)!==null&&i!==void 0?i:new Date)})||!1}function Gn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.includeDates,s=t.filterDate;return gt(n,{minDate:e?xn(e):void 0,maxDate:r?_n(r):void 0})||(o==null?void 0:o.some(function(c){return ae(n,c instanceof Date?c:c.date)}))||i&&!i.some(function(c){return ae(n,c)})||s&&!s(V(n))||!1}function Dt(n,a,t,e){var r=L(n),o=ne(n),i=L(a),s=ne(a),c=L(e);return r===i&&r===c?o<=t&&t<=s:r=t||cr:!1}function lc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.includeDates;return gt(n,{minDate:e,maxDate:r})||o&&o.some(function(s){return ae(s instanceof Date?s:s.date,n)})||i&&!i.some(function(s){return ae(s,n)})||!1}function yt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.includeDates,s=t.filterDate;return gt(n,{minDate:e,maxDate:r})||(o==null?void 0:o.some(function(c){return jt(n,c instanceof Date?c:c.date)}))||i&&!i.some(function(c){return jt(n,c)})||s&&!s(V(n))||!1}function bt(n,a,t){if(!a||!t||!Nt(a)||!Nt(t))return!1;var e=L(a),r=L(t);return e<=n&&r>=n}function Pt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,i=t.includeDates,s=t.filterDate,c=new Date(n,0,1);return gt(c,{minDate:e?Kt(e):void 0,maxDate:r?Mn(r):void 0})||(o==null?void 0:o.some(function(l){return ge(c,l instanceof Date?l:l.date)}))||i&&!i.some(function(l){return ge(c,l)})||s&&!s(V(c))||!1}function kt(n,a,t,e){var r=L(n),o=We(n),i=L(a),s=We(a),c=L(e);return r===i&&r===c?o<=t&&t<=s:r=t||cr:!1}function gt(n,a){var t,e=a===void 0?{}:a,r=e.minDate,o=e.maxDate;return(t=r&&Xe(n,r)<0||o&&Xe(n,o)>0)!==null&&t!==void 0?t:!1}function en(n,a){return a.some(function(t){return Me(t)===Me(n)&&Ce(t)===Ce(n)&&Re(t)===Re(n)})}function tn(n,a){var t=a===void 0?{}:a,e=t.excludeTimes,r=t.includeTimes,o=t.filterTime;return e&&en(n,e)||r&&!en(n,r)||o&&!o(n)||!1}function rn(n,a){var t=a.minTime,e=a.maxTime;if(!t||!e)throw new Error("Both minTime and maxTime props required");var r=V();r=xt(r,Me(n)),r=Mt(r,Ce(n)),r=Ct(r,Re(n));var o=V();o=xt(o,Me(t)),o=Mt(o,Ce(t)),o=Ct(o,Re(t));var i=V();i=xt(i,Me(e)),i=Mt(i,Ce(e)),i=Ct(i,Re(e));var s;try{s=!ut(r,{start:o,end:i})}catch{s=!1}return s}function nn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=He(n,1);return e&&Yt(e,o)>0||r&&r.every(function(i){return Yt(i,o)>0})||!1}function an(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=he(n,1);return e&&Yt(o,e)>0||r&&r.every(function(i){return Yt(o,i)>0})||!1}function uc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=Kt(n),i=Yn(o);return e&&Lt(e,i)>0||r&&r.every(function(s){return Lt(s,i)>0})||!1}function dc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=Mn(n),i=mr(o,1);return e&&Lt(i,e)>0||r&&r.every(function(s){return Lt(i,s)>0})||!1}function on(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=Ze(n,1);return e&&Ft(e,o)>0||r&&r.every(function(i){return Ft(i,o)>0})||!1}function fc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.yearItemNumber,o=r===void 0?mt:r,i=ct(Ze(n,o)),s=Oe(i,o).endPeriod,c=e&&L(e);return c&&c>s||!1}function sn(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=_e(n,1);return e&&Ft(o,e)>0||r&&r.every(function(i){return Ft(o,i)>0})||!1}function pc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.yearItemNumber,o=r===void 0?mt:r,i=_e(n,o),s=Oe(i,o).startPeriod,c=e&&L(e);return c&&c=0});return Rr(e)}else return t?Rr(t):a}function Xn(n){var a=n.maxDate,t=n.includeDates;if(t&&a){var e=t.filter(function(r){return Xe(r,a)<=0});return Or(e)}else return t?Or(t):a}function cn(n,a){var t;n===void 0&&(n=[]),a===void 0&&(a="react-datepicker__day--highlighted");for(var e=new Map,r=0,o=n.length;r=_c,p=!r&&!t.isWeekInMonth(s);if(f||p)if(t.props.peekNextMonth)i=!0;else break}return e},t.onMonthClick=function(e,r){var o=t.isMonthDisabledForLabelDate(r),i=o.isDisabled,s=o.labelDate;i||t.handleDayClick(Se(s),e)},t.onMonthMouseEnter=function(e){var r=t.isMonthDisabledForLabelDate(e),o=r.isDisabled,i=r.labelDate;o||t.handleDayMouseEnter(Se(i))},t.handleMonthNavigation=function(e,r){var o,i,s,c;(i=(o=t.props).setPreSelection)===null||i===void 0||i.call(o,r),(c=(s=t.MONTH_REFS[e])===null||s===void 0?void 0:s.current)===null||c===void 0||c.focus()},t.handleKeyboardNavigation=function(e,r,o){var i,s=t.props,c=s.selected,l=s.preSelection,u=s.setPreSelection,d=s.minDate,f=s.maxDate,p=s.showFourColumnMonthYearPicker,h=s.showTwoColumnMonthYearPicker;if(l){var v=pn(p,h),g=t.getVerticalOffset(v),y=(i=or[v])===null||i===void 0?void 0:i.grid,_=function(C,k,S){var N,Q,I=k,$=S;switch(C){case x.ArrowRight:I=he(k,_t),$=S===11?0:S+_t;break;case x.ArrowLeft:I=He(k,_t),$=S===0?11:S-_t;break;case x.ArrowUp:I=He(k,g),$=!((N=y==null?void 0:y[0])===null||N===void 0)&&N.includes(S)?S+12-g:S-g;break;case x.ArrowDown:I=he(k,g),$=!((Q=y==null?void 0:y[y.length-1])===null||Q===void 0)&&Q.includes(S)?S-12+g:S+g;break}return{newCalculatedDate:I,newCalculatedMonth:$}},w=function(C,k,S){for(var N=40,Q=C,I=!1,$=0,j=_(Q,k,S),q=j.newCalculatedDate,R=j.newCalculatedMonth;!I;){if($>=N){q=k,R=S;break}if(d&&qf){Q=x.ArrowLeft;var F=_(Q,q,R);q=F.newCalculatedDate,R=F.newCalculatedMonth}if(lc(q,t.props)){var F=_(Q,q,R);q=F.newCalculatedDate,R=F.newCalculatedMonth}else I=!0;$++}return{newCalculatedDate:q,newCalculatedMonth:R}};if(r===x.Enter){t.isMonthDisabled(o)||(t.onMonthClick(e,o),u==null||u(c));return}var b=w(r,l,o),P=b.newCalculatedDate,O=b.newCalculatedMonth;switch(r){case x.ArrowRight:case x.ArrowLeft:case x.ArrowUp:case x.ArrowDown:t.handleMonthNavigation(O,P);break}}},t.getVerticalOffset=function(e){var r,o;return(o=(r=or[e])===null||r===void 0?void 0:r.verticalNavigationOffset)!==null&&o!==void 0?o:0},t.onMonthKeyDown=function(e,r){var o=t.props,i=o.disabledKeyboardNavigation,s=o.handleOnMonthKeyDown,c=e.key;c!==x.Tab&&e.preventDefault(),i||t.handleKeyboardNavigation(e,c,r),s&&s(e)},t.onQuarterClick=function(e,r){var o=Ue(t.props.day,r);yt(o,t.props)||t.handleDayClick(Xr(o),e)},t.onQuarterMouseEnter=function(e){var r=Ue(t.props.day,e);yt(r,t.props)||t.handleDayMouseEnter(Xr(r))},t.handleQuarterNavigation=function(e,r){var o,i,s,c;t.isDisabled(r)||t.isExcluded(r)||((i=(o=t.props).setPreSelection)===null||i===void 0||i.call(o,r),(c=(s=t.QUARTER_REFS[e-1])===null||s===void 0?void 0:s.current)===null||c===void 0||c.focus())},t.onQuarterKeyDown=function(e,r){var o,i,s=e.key;if(!t.props.disabledKeyboardNavigation)switch(s){case x.Enter:t.onQuarterClick(e,r),(i=(o=t.props).setPreSelection)===null||i===void 0||i.call(o,t.props.selected);break;case x.ArrowRight:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===4?1:r+1,mr(t.props.preSelection,1));break;case x.ArrowLeft:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===1?4:r-1,Yn(t.props.preSelection));break}},t.isMonthDisabledForLabelDate=function(e){var r,o=t.props,i=o.day,s=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=ce(i,e);return{isDisabled:(r=(s||c||l||u)&&Gn(d,t.props))!==null&&r!==void 0?r:!1,labelDate:d}},t.isMonthDisabled=function(e){var r=t.isMonthDisabledForLabelDate(e).isDisabled;return r},t.getMonthClassNames=function(e){var r=t.props,o=r.day,i=r.startDate,s=r.endDate,c=r.preSelection,l=r.monthClassName,u=l?l(ce(o,e)):void 0,d=t.getSelection();return re("react-datepicker__month-text","react-datepicker__month-".concat(e),u,{"react-datepicker__month-text--disabled":t.isMonthDisabled(e),"react-datepicker__month-text--selected":d?t.isSelectMonthInList(o,e,d):void 0,"react-datepicker__month-text--keyboard-selected":!t.props.disabledKeyboardNavigation&&c&&t.isSelectedMonth(o,e,c)&&!t.isMonthSelected()&&!t.isMonthDisabled(e),"react-datepicker__month-text--in-selecting-range":t.isInSelectingRangeMonth(e),"react-datepicker__month-text--in-range":i&&s?Dt(i,s,e,o):void 0,"react-datepicker__month-text--range-start":t.isRangeStartMonth(e),"react-datepicker__month-text--range-end":t.isRangeEndMonth(e),"react-datepicker__month-text--selecting-range-start":t.isSelectingMonthRangeStart(e),"react-datepicker__month-text--selecting-range-end":t.isSelectingMonthRangeEnd(e),"react-datepicker__month-text--today":t.isCurrentMonth(o,e)})},t.getTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=ne(t.props.preSelection),o=t.isMonthDisabledForLabelDate(r).isDisabled,i=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return i},t.getQuarterTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=We(t.props.preSelection),o=yt(t.props.day,t.props),i=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return i},t.getAriaLabel=function(e){var r=t.props,o=r.chooseDayAriaLabelPrefix,i=o===void 0?"Choose":o,s=r.disabledDayAriaLabelPrefix,c=s===void 0?"Not available":s,l=r.day,u=r.locale,d=ce(l,e),f=t.isDisabled(d)||t.isExcluded(d)?c:i;return"".concat(f," ").concat(G(d,"MMMM yyyy",u))},t.getQuarterClassNames=function(e){var r=t.props,o=r.day,i=r.startDate,s=r.endDate,c=r.selected,l=r.minDate,u=r.maxDate,d=r.excludeDates,f=r.includeDates,p=r.filterDate,h=r.preSelection,v=r.disabledKeyboardNavigation,g=(l||u||d||f||p)&&yt(Ue(o,e),t.props);return re("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter-text--disabled":g,"react-datepicker__quarter-text--selected":c?t.isSelectedQuarter(o,e,c):void 0,"react-datepicker__quarter-text--keyboard-selected":!v&&h&&t.isSelectedQuarter(o,e,h)&&!g,"react-datepicker__quarter-text--in-selecting-range":t.isInSelectingRangeQuarter(e),"react-datepicker__quarter-text--in-range":i&&s?kt(i,s,e,o):void 0,"react-datepicker__quarter-text--range-start":t.isRangeStartQuarter(e),"react-datepicker__quarter-text--range-end":t.isRangeEndQuarter(e),"react-datepicker__quarter-text--today":t.isCurrentQuarter(o,e)})},t.getMonthContent=function(e){var r=t.props,o=r.showFullMonthYearPicker,i=r.renderMonthContent,s=r.locale,c=r.day,l=$n(e,s),u=Sr(e,s);return i?i(e,l,u,c):o?u:l},t.getQuarterContent=function(e){var r,o=t.props,i=o.renderQuarterContent,s=o.locale,c=cc(e,s);return(r=i==null?void 0:i(e,c))!==null&&r!==void 0?r:c},t.renderMonths=function(){var e,r=t.props,o=r.showTwoColumnMonthYearPicker,i=r.showFourColumnMonthYearPicker,s=r.day,c=r.selected,l=(e=or[pn(i,o)])===null||e===void 0?void 0:e.grid;return l==null?void 0:l.map(function(u,d){return m.createElement("div",{className:"react-datepicker__month-wrapper",key:d},u.map(function(f,p){return m.createElement("div",{ref:t.MONTH_REFS[f],key:p,onClick:function(h){t.onMonthClick(h,f)},onKeyDown:function(h){Zn(h)&&(h.preventDefault(),h.key=x.Enter),t.onMonthKeyDown(h,f)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onMonthMouseEnter(f)},onPointerEnter:t.props.usePointerEvent?function(){return t.onMonthMouseEnter(f)}:void 0,tabIndex:Number(t.getTabIndex(f)),className:t.getMonthClassNames(f),"aria-disabled":t.isMonthDisabled(f),role:"option","aria-label":t.getAriaLabel(f),"aria-current":t.isCurrentMonth(s,f)?"date":void 0,"aria-selected":c?t.isSelectedMonth(s,f,c):void 0},t.getMonthContent(f))}))})},t.renderQuarters=function(){var e=t.props,r=e.day,o=e.selected,i=[1,2,3,4];return m.createElement("div",{className:"react-datepicker__quarter-wrapper"},i.map(function(s,c){return m.createElement("div",{key:c,ref:t.QUARTER_REFS[c],role:"option",onClick:function(l){t.onQuarterClick(l,s)},onKeyDown:function(l){t.onQuarterKeyDown(l,s)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onQuarterMouseEnter(s)},onPointerEnter:t.props.usePointerEvent?function(){return t.onQuarterMouseEnter(s)}:void 0,className:t.getQuarterClassNames(s),"aria-selected":o?t.isSelectedQuarter(r,s,o):void 0,tabIndex:Number(t.getQuarterTabIndex(s)),"aria-current":t.isCurrentQuarter(r,s)?"date":void 0},t.getQuarterContent(s))}))},t.getClassNames=function(){var e=t.props,r=e.selectingDate,o=e.selectsStart,i=e.selectsEnd,s=e.showMonthYearPicker,c=e.showQuarterYearPicker,l=e.showWeekPicker;return re("react-datepicker__month",{"react-datepicker__month--selecting-range":r&&(o||i)},{"react-datepicker__monthPicker":s},{"react-datepicker__quarterPicker":c},{"react-datepicker__weekPicker":l})},t}return a.prototype.getSelection=function(){var t=this.props,e=t.selected,r=t.selectedDates,o=t.selectsMultiple;if(o)return r;if(e)return[e]},a.prototype.render=function(){var t=this.props,e=t.showMonthYearPicker,r=t.showQuarterYearPicker,o=t.day,i=t.ariaLabelPrefix,s=i===void 0?"Month ":i,c=s?s.trim()+" ":"";return m.createElement("div",{className:this.getClassNames(),onMouseLeave:this.props.usePointerEvent?void 0:this.handleMouseLeave,onPointerLeave:this.props.usePointerEvent?this.handleMouseLeave:void 0,"aria-label":"".concat(c).concat(G(o,"MMMM, yyyy",this.props.locale)),role:"listbox"},e?this.renderMonths():r?this.renderQuarters():this.renderWeeks())},a}(D.Component),Mc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.isSelectedMonth=function(e){return t.props.month===e},t.renderOptions=function(){return t.props.monthNames.map(function(e,r){return m.createElement("div",{className:t.isSelectedMonth(r)?"react-datepicker__month-option react-datepicker__month-option--selected_month":"react-datepicker__month-option",key:e,onClick:t.onChange.bind(t,r),"aria-selected":t.isSelectedMonth(r)?"true":void 0},t.isSelectedMonth(r)?m.createElement("span",{className:"react-datepicker__month-option--selected"},"✓"):"",e)})},t.onChange=function(e){return t.props.onChange(e)},t.handleClickOutside=function(){return t.props.onCancel()},t}return a.prototype.render=function(){return m.createElement(Xt,{className:"react-datepicker__month-dropdown",onClickOutside:this.handleClickOutside},this.renderOptions())},a}(D.Component),Cc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(e){return e.map(function(r,o){return m.createElement("option",{key:r,value:o},r)})},t.renderSelectMode=function(e){return m.createElement("select",{value:t.props.month,className:"react-datepicker__month-select",onChange:function(r){return t.onChange(parseInt(r.target.value))}},t.renderSelectOptions(e))},t.renderReadView=function(e,r){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-read-view--selected-month"},r[t.props.month]))},t.renderDropdown=function(e){return m.createElement(Mc,W({key:"dropdown"},t.props,{monthNames:e,onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(e){var r=t.state.dropdownVisible,o=[t.renderReadView(!r,e)];return r&&o.unshift(t.renderDropdown(e)),o},t.onChange=function(e){t.toggleDropdown(),e!==t.props.month&&t.props.onChange(e)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t=this,e=[0,1,2,3,4,5,6,7,8,9,10,11].map(this.props.useShortMonthInDropdown?function(o){return $n(o,t.props.locale)}:function(o){return Sr(o,t.props.locale)}),r;switch(this.props.dropdownMode){case"scroll":r=this.renderScrollMode(e);break;case"select":r=this.renderSelectMode(e);break}return m.createElement("div",{className:"react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode)},r)},a}(D.Component);function Sc(n,a){for(var t=[],e=Se(n),r=Se(a);!Ye(e,r);)t.push(V(e)),e=he(e,1);return t}var Ec=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.renderOptions=function(){return e.state.monthYearsList.map(function(r){var o=dr(r),i=ge(e.props.date,r)&&ae(e.props.date,r);return m.createElement("div",{className:i?"react-datepicker__month-year-option--selected_month-year":"react-datepicker__month-year-option",key:o,onClick:e.onChange.bind(e,o),"aria-selected":i?"true":void 0},i?m.createElement("span",{className:"react-datepicker__month-year-option--selected"},"✓"):"",G(r,e.props.dateFormat,e.props.locale))})},e.onChange=function(r){return e.props.onChange(r)},e.handleClickOutside=function(){e.props.onCancel()},e.state={monthYearsList:Sc(e.props.minDate,e.props.maxDate)},e}return a.prototype.render=function(){var t=re({"react-datepicker__month-year-dropdown":!0,"react-datepicker__month-year-dropdown--scrollable":this.props.scrollableMonthYearDropdown});return m.createElement(Xt,{className:t,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(D.Component),Pc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=Se(t.props.minDate),r=Se(t.props.maxDate),o=[];!Ye(e,r);){var i=dr(e);o.push(m.createElement("option",{key:i,value:i},G(e,t.props.dateFormat,t.props.locale))),e=he(e,1)}return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:dr(Se(t.props.date)),className:"react-datepicker__month-year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){var r=G(t.props.date,t.props.dateFormat,t.props.locale);return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-year-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-year-read-view--selected-month-year"},r))},t.renderDropdown=function(){return m.createElement(Ec,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown();var r=V(e);ge(t.props.date,r)&&ae(t.props.date,r)||t.props.onChange(r)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(D.Component),Tc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={height:null},t.scrollToTheSelectedTime=function(){requestAnimationFrame(function(){var e,r,o;t.list&&(t.list.scrollTop=(o=t.centerLi&&a.calcCenterPosition(t.props.monthRef?t.props.monthRef.clientHeight-((r=(e=t.header)===null||e===void 0?void 0:e.clientHeight)!==null&&r!==void 0?r:0):t.list.clientHeight,t.centerLi))!==null&&o!==void 0?o:0)})},t.handleClick=function(e){var r,o;(t.props.minTime||t.props.maxTime)&&rn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&tn(e,t.props)||(o=(r=t.props).onChange)===null||o===void 0||o.call(r,e)},t.isSelectedTime=function(e){return t.props.selected&&wc(t.props.selected,e)},t.isDisabledTime=function(e){return(t.props.minTime||t.props.maxTime)&&rn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&tn(e,t.props)},t.liClasses=function(e){var r,o=["react-datepicker__time-list-item",t.props.timeClassName?t.props.timeClassName(e):void 0];return t.isSelectedTime(e)&&o.push("react-datepicker__time-list-item--selected"),t.isDisabledTime(e)&&o.push("react-datepicker__time-list-item--disabled"),t.props.injectTimes&&(Me(e)*3600+Ce(e)*60+Re(e))%(((r=t.props.intervals)!==null&&r!==void 0?r:a.defaultProps.intervals)*60)!==0&&o.push("react-datepicker__time-list-item--injected"),o.join(" ")},t.handleOnKeyDown=function(e,r){var o,i;e.key===x.Space&&(e.preventDefault(),e.key=x.Enter),(e.key===x.ArrowUp||e.key===x.ArrowLeft)&&e.target instanceof HTMLElement&&e.target.previousSibling&&(e.preventDefault(),e.target.previousSibling instanceof HTMLElement&&e.target.previousSibling.focus()),(e.key===x.ArrowDown||e.key===x.ArrowRight)&&e.target instanceof HTMLElement&&e.target.nextSibling&&(e.preventDefault(),e.target.nextSibling instanceof HTMLElement&&e.target.nextSibling.focus()),e.key===x.Enter&&t.handleClick(r),(i=(o=t.props).handleOnKeyDown)===null||i===void 0||i.call(o,e)},t.renderTimes=function(){for(var e,r=[],o=typeof t.props.format=="string"?t.props.format:"p",i=(e=t.props.intervals)!==null&&e!==void 0?e:a.defaultProps.intervals,s=t.props.selected||t.props.openToDate||V(),c=Et(s),l=t.props.injectTimes&&t.props.injectTimes.sort(function(g,y){return g.getTime()-y.getTime()}),u=60*vc(s),d=u/i,f=0;f=f?e.updateFocusOnPaginate(Math.abs(f-(r-p))):(l=(c=e.YEAR_REFS[r-p])===null||c===void 0?void 0:c.current)===null||l===void 0||l.focus())}},e.isSameDay=function(r,o){return A(r,o)},e.isCurrentYear=function(r){return r===L(V())},e.isRangeStart=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.startDate)},e.isRangeEnd=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.endDate)},e.isInRange=function(r){return bt(r,e.props.startDate,e.props.endDate)},e.isInSelectingRange=function(r){var o=e.props,i=o.selectsStart,s=o.selectsEnd,c=o.selectsRange,l=o.startDate,u=o.endDate;return!(i||s||c)||!e.selectingDate()?!1:i&&u?bt(r,e.selectingDate(),u):s&&l||c&&l&&!u?bt(r,l,e.selectingDate()):!1},e.isSelectingRangeStart=function(r){var o;if(!e.isInSelectingRange(r))return!1;var i=e.props,s=i.startDate,c=i.selectsStart,l=me(V(),r);return c?ge(l,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(l,s??null)},e.isSelectingRangeEnd=function(r){var o;if(!e.isInSelectingRange(r))return!1;var i=e.props,s=i.endDate,c=i.selectsEnd,l=i.selectsRange,u=me(V(),r);return c||l?ge(u,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(u,s??null)},e.isKeyboardSelected=function(r){if(!(e.props.date===void 0||e.props.selected==null||e.props.preSelection==null)){var o=e.props,i=o.minDate,s=o.maxDate,c=o.excludeDates,l=o.includeDates,u=o.filterDate,d=ct(me(e.props.date,r)),f=(i||s||c||l||u)&&Pt(r,e.props);return!e.props.disabledKeyboardNavigation&&!e.props.inline&&!A(d,ct(e.props.selected))&&A(d,ct(e.props.preSelection))&&!f}},e.isSelectedYear=function(r){var o=e.props,i=o.selectsMultiple,s=o.selected,c=o.selectedDates;return i?c==null?void 0:c.some(function(l){return r===L(l)}):!!s&&r===L(s)},e.onYearClick=function(r,o){var i=e.props.date;i!==void 0&&e.handleYearClick(ct(me(i,o)),r)},e.onYearKeyDown=function(r,o){var i,s,c=r.key,l=e.props,u=l.date,d=l.yearItemNumber,f=l.handleOnKeyDown;if(c!==x.Tab&&r.preventDefault(),!e.props.disabledKeyboardNavigation)switch(c){case x.Enter:if(e.props.selected==null)break;e.onYearClick(r,o),(s=(i=e.props).setPreSelection)===null||s===void 0||s.call(i,e.props.selected);break;case x.ArrowRight:if(e.props.preSelection==null)break;e.handleYearNavigation(o+1,_e(e.props.preSelection,1));break;case x.ArrowLeft:if(e.props.preSelection==null)break;e.handleYearNavigation(o-1,Ze(e.props.preSelection,1));break;case x.ArrowUp:{if(u===void 0||d===void 0||e.props.preSelection==null)break;var p=Oe(u,d).startPeriod,h=hn,v=o-h;if(v=p&&oy){var g=d%h;o<=y&&o>y-g?h=g:h+=g,v=o+h}e.handleYearNavigation(v,_e(e.props.preSelection,h));break}}f&&f(r)},e.getYearClassNames=function(r){var o=e.props,i=o.date,s=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=o.filterDate,f=o.yearClassName;return re("react-datepicker__year-text","react-datepicker__year-".concat(r),i?f==null?void 0:f(me(i,r)):void 0,{"react-datepicker__year-text--selected":e.isSelectedYear(r),"react-datepicker__year-text--disabled":(s||c||l||u||d)&&Pt(r,e.props),"react-datepicker__year-text--keyboard-selected":e.isKeyboardSelected(r),"react-datepicker__year-text--range-start":e.isRangeStart(r),"react-datepicker__year-text--range-end":e.isRangeEnd(r),"react-datepicker__year-text--in-range":e.isInRange(r),"react-datepicker__year-text--in-selecting-range":e.isInSelectingRange(r),"react-datepicker__year-text--selecting-range-start":e.isSelectingRangeStart(r),"react-datepicker__year-text--selecting-range-end":e.isSelectingRangeEnd(r),"react-datepicker__year-text--today":e.isCurrentYear(r)})},e.getYearTabIndex=function(r){if(e.props.disabledKeyboardNavigation||e.props.preSelection==null)return"-1";var o=L(e.props.preSelection),i=Pt(r,e.props);return r===o&&!i?"0":"-1"},e.getYearContent=function(r){return e.props.renderYearContent?e.props.renderYearContent(r):r},e}return a.prototype.render=function(){var t=this,e=[],r=this.props,o=r.date,i=r.yearItemNumber,s=r.onYearMouseEnter,c=r.onYearMouseLeave;if(o===void 0)return null;for(var l=Oe(o,i),u=l.startPeriod,d=l.endPeriod,f=function(v){e.push(m.createElement("div",{ref:p.YEAR_REFS[v-u],onClick:function(g){t.onYearClick(g,v)},onKeyDown:function(g){Zn(g)&&(g.preventDefault(),g.key=x.Enter),t.onYearKeyDown(g,v)},tabIndex:Number(p.getYearTabIndex(v)),className:p.getYearClassNames(v),onMouseEnter:p.props.usePointerEvent?void 0:function(g){return s(g,v)},onPointerEnter:p.props.usePointerEvent?function(g){return s(g,v)}:void 0,onMouseLeave:p.props.usePointerEvent?void 0:function(g){return c(g,v)},onPointerLeave:p.props.usePointerEvent?function(g){return c(g,v)}:void 0,key:v,"aria-current":p.isCurrentYear(v)?"date":void 0},p.getYearContent(v)))},p=this,h=u;h<=d;h++)f(h);return m.createElement("div",{className:"react-datepicker__year"},m.createElement("div",{className:"react-datepicker__year-wrapper",onMouseLeave:this.props.usePointerEvent?void 0:this.props.clearSelectingDate,onPointerLeave:this.props.usePointerEvent?this.props.clearSelectingDate:void 0},e))},a}(D.Component);function Rc(n,a,t,e){for(var r=[],o=0;o<2*a+1;o++){var i=n+a-o,s=!0;t&&(s=L(t)<=i),e&&s&&(s=L(e)>=i),s&&r.push(i)}return r}var Nc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;e.renderOptions=function(){var s=e.props.year,c=e.state.yearsList.map(function(d){return m.createElement("div",{className:s===d?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:d,onClick:e.onChange.bind(e,d),"aria-selected":s===d?"true":void 0},s===d?m.createElement("span",{className:"react-datepicker__year-option--selected"},"✓"):"",d)}),l=e.props.minDate?L(e.props.minDate):null,u=e.props.maxDate?L(e.props.maxDate):null;return(!u||!e.state.yearsList.find(function(d){return d===u}))&&c.unshift(m.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:e.incrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),(!l||!e.state.yearsList.find(function(d){return d===l}))&&c.push(m.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:e.decrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),c},e.onChange=function(s){e.props.onChange(s)},e.handleClickOutside=function(){e.props.onCancel()},e.shiftYears=function(s){var c=e.state.yearsList.map(function(l){return l+s});e.setState({yearsList:c})},e.incrementYears=function(){return e.shiftYears(1)},e.decrementYears=function(){return e.shiftYears(-1)};var r=t.yearDropdownItemNumber,o=t.scrollableYearDropdown,i=r||(o?10:5);return e.state={yearsList:Rc(e.props.year,i,e.props.minDate,e.props.maxDate)},e.dropdownRef=D.createRef(),e}return a.prototype.componentDidMount=function(){var t=this.dropdownRef.current;if(t){var e=t.children?Array.from(t.children):null,r=e?e.find(function(o){return o.ariaSelected}):null;t.scrollTop=r&&r instanceof HTMLElement?r.offsetTop+(r.clientHeight-t.clientHeight)/2:(t.scrollHeight-t.clientHeight)/2}},a.prototype.render=function(){var t=re({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return m.createElement(Xt,{className:t,containerRef:this.dropdownRef,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(D.Component),Yc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=t.props.minDate?L(t.props.minDate):1900,r=t.props.maxDate?L(t.props.maxDate):2100,o=[],i=e;i<=r;i++)o.push(m.createElement("option",{key:i,value:i},i));return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:t.props.year,className:"react-datepicker__year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__year-read-view",onClick:function(r){return t.toggleDropdown(r)}},m.createElement("span",{className:"react-datepicker__year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__year-read-view--selected-year"},t.props.year))},t.renderDropdown=function(){return m.createElement(Nc,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown(),e!==t.props.year&&t.props.onChange(e)},t.toggleDropdown=function(e){t.setState({dropdownVisible:!t.state.dropdownVisible},function(){t.props.adjustDateOnChange&&t.handleYearChange(t.props.date,e)})},t.handleYearChange=function(e,r){var o;(o=t.onSelect)===null||o===void 0||o.call(t,e,r),t.setOpen()},t.onSelect=function(e,r){var o,i;(i=(o=t.props).onSelect)===null||i===void 0||i.call(o,e,r)},t.setOpen=function(){var e,r;(r=(e=t.props).setOpen)===null||r===void 0||r.call(e,!0)},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(D.Component),Lc=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],Fc=function(n){var a=(n.className||"").split(/\s+/);return Lc.some(function(t){return a.indexOf(t)>=0})},Ic=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.monthContainer=void 0,e.handleClickOutside=function(r){e.props.onClickOutside(r)},e.setClickOutsideRef=function(){return e.containerRef.current},e.handleDropdownFocus=function(r){var o,i;Fc(r.target)&&((i=(o=e.props).onDropdownFocus)===null||i===void 0||i.call(o,r))},e.getDateInView=function(){var r=e.props,o=r.preSelection,i=r.selected,s=r.openToDate,c=zn(e.props),l=Xn(e.props),u=V(),d=s||i||o;return d||(c&&je(u,c)?c:l&&Ye(u,l)?l:u)},e.increaseMonth=function(){e.setState(function(r){var o=r.date;return{date:he(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.decreaseMonth=function(){e.setState(function(r){var o=r.date;return{date:He(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.handleDayClick=function(r,o,i){e.props.onSelect(r,o,i),e.props.setPreSelection&&e.props.setPreSelection(r)},e.handleDayMouseEnter=function(r){e.setState({selectingDate:r}),e.props.onDayMouseEnter&&e.props.onDayMouseEnter(r)},e.handleMonthMouseLeave=function(){e.setState({selectingDate:void 0}),e.props.onMonthMouseLeave&&e.props.onMonthMouseLeave()},e.handleYearMouseEnter=function(r,o){e.setState({selectingDate:me(V(),o)}),e.props.onYearMouseEnter&&e.props.onYearMouseEnter(r,o)},e.handleYearMouseLeave=function(r,o){e.props.onYearMouseLeave&&e.props.onYearMouseLeave(r,o)},e.handleYearChange=function(r){var o,i,s,c;(i=(o=e.props).onYearChange)===null||i===void 0||i.call(o,r),e.setState({isRenderAriaLiveMessage:!0}),e.props.adjustDateOnChange&&(e.props.onSelect(r),(c=(s=e.props).setOpen)===null||c===void 0||c.call(s,!0)),e.props.setPreSelection&&e.props.setPreSelection(r)},e.getEnabledPreSelectionDateForMonth=function(r){if(!le(r,e.props))return r;for(var o=Se(r),i=ac(r),s=ha(i,o),c=null,l=0;l<=s;l++){var u=pe(o,l);if(!le(u,e.props)){c=u;break}}return c},e.handleMonthChange=function(r){var o,i,s,c=(o=e.getEnabledPreSelectionDateForMonth(r))!==null&&o!==void 0?o:r;e.handleCustomMonthChange(c),e.props.adjustDateOnChange&&(e.props.onSelect(c),(s=(i=e.props).setOpen)===null||s===void 0||s.call(i,!0)),e.props.setPreSelection&&e.props.setPreSelection(c)},e.handleCustomMonthChange=function(r){var o,i;(i=(o=e.props).onMonthChange)===null||i===void 0||i.call(o,r),e.setState({isRenderAriaLiveMessage:!0})},e.handleMonthYearChange=function(r){e.handleYearChange(r),e.handleMonthChange(r)},e.changeYear=function(r){e.setState(function(o){var i=o.date;return{date:me(i,Number(r))}},function(){return e.handleYearChange(e.state.date)})},e.changeMonth=function(r){e.setState(function(o){var i=o.date;return{date:ce(i,Number(r))}},function(){return e.handleMonthChange(e.state.date)})},e.changeMonthYear=function(r){e.setState(function(o){var i=o.date;return{date:me(ce(i,ne(r)),L(r))}},function(){return e.handleMonthYearChange(e.state.date)})},e.header=function(r){r===void 0&&(r=e.state.date);var o=Ne(r,e.props.locale,e.props.calendarStartDay),i=[];return e.props.showWeekNumbers&&i.push(m.createElement("div",{key:"W",className:"react-datepicker__day-name"},e.props.weekLabel||"#")),i.concat([0,1,2,3,4,5,6].map(function(s){var c=pe(o,s),l=e.formatWeekday(c,e.props.locale),u=e.props.weekDayClassName?e.props.weekDayClassName(c):void 0;return m.createElement("div",{key:s,"aria-label":G(c,"EEEE",e.props.locale),className:re("react-datepicker__day-name",u)},l)}))},e.formatWeekday=function(r,o){return e.props.formatWeekDay?oc(r,e.props.formatWeekDay,o):e.props.useWeekdaysShort?sc(r,o):ic(r,o)},e.decreaseYear=function(){e.setState(function(r){var o,i=r.date;return{date:Ze(i,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.clearSelectingDate=function(){e.setState({selectingDate:void 0})},e.renderPreviousButton=function(){var r,o,i;if(!e.props.renderCustomHeader){var s=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?s-1:0,l=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,u=He(e.state.date,l),d;switch(!0){case e.props.showMonthYearPicker:d=on(e.state.date,e.props);break;case e.props.showYearPicker:d=fc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:d=uc(e.state.date,e.props);break;default:d=nn(u,e.props);break}if(!(!((i=e.props.forceShowMonthNavigation)!==null&&i!==void 0?i:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&d||e.props.showTimeSelectOnly)){var f=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--previous"],p=["react-datepicker__navigation","react-datepicker__navigation--previous"],h=e.decreaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(h=e.decreaseYear),d&&e.props.showDisabledMonthNavigation&&(p.push("react-datepicker__navigation--previous--disabled"),h=void 0);var v=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,g=e.props,y=g.previousMonthButtonLabel,_=y===void 0?a.defaultProps.previousMonthButtonLabel:y,w=g.previousYearButtonLabel,b=w===void 0?a.defaultProps.previousYearButtonLabel:w,P=e.props,O=P.previousMonthAriaLabel,C=O===void 0?typeof _=="string"?_:"Previous Month":O,k=P.previousYearAriaLabel,S=k===void 0?typeof b=="string"?b:"Previous Year":k;return m.createElement("button",{type:"button",className:p.join(" "),onClick:h,onKeyDown:e.props.handleOnKeyDown,"aria-label":v?S:C},m.createElement("span",{className:f.join(" ")},v?b:_))}}},e.increaseYear=function(){e.setState(function(r){var o,i=r.date;return{date:_e(i,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.renderNextButton=function(){var r;if(!e.props.renderCustomHeader){var o;switch(!0){case e.props.showMonthYearPicker:o=sn(e.state.date,e.props);break;case e.props.showYearPicker:o=pc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:o=dc(e.state.date,e.props);break;default:o=an(e.state.date,e.props);break}if(!(!((r=e.props.forceShowMonthNavigation)!==null&&r!==void 0?r:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&o||e.props.showTimeSelectOnly)){var i=["react-datepicker__navigation","react-datepicker__navigation--next"],s=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--next"];e.props.showTimeSelect&&i.push("react-datepicker__navigation--next--with-time"),e.props.todayButton&&i.push("react-datepicker__navigation--next--with-today-button");var c=e.increaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(c=e.increaseYear),o&&e.props.showDisabledMonthNavigation&&(i.push("react-datepicker__navigation--next--disabled"),c=void 0);var l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,u=e.props,d=u.nextMonthButtonLabel,f=d===void 0?a.defaultProps.nextMonthButtonLabel:d,p=u.nextYearButtonLabel,h=p===void 0?a.defaultProps.nextYearButtonLabel:p,v=e.props,g=v.nextMonthAriaLabel,y=g===void 0?typeof f=="string"?f:"Next Month":g,_=v.nextYearAriaLabel,w=_===void 0?typeof h=="string"?h:"Next Year":_;return m.createElement("button",{type:"button",className:i.join(" "),onClick:c,onKeyDown:e.props.handleOnKeyDown,"aria-label":l?w:y},m.createElement("span",{className:s.join(" ")},l?h:f))}}},e.renderCurrentMonth=function(r){r===void 0&&(r=e.state.date);var o=["react-datepicker__current-month"];return e.props.showYearDropdown&&o.push("react-datepicker__current-month--hasYearDropdown"),e.props.showMonthDropdown&&o.push("react-datepicker__current-month--hasMonthDropdown"),e.props.showMonthYearDropdown&&o.push("react-datepicker__current-month--hasMonthYearDropdown"),m.createElement("h2",{className:o.join(" ")},G(r,e.props.dateFormat,e.props.locale))},e.renderYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showYearDropdown||r))return m.createElement(Yc,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeYear,year:L(e.state.date)}))},e.renderMonthDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthDropdown||r))return m.createElement(Cc,W({},a.defaultProps,e.props,{month:ne(e.state.date),onChange:e.changeMonth}))},e.renderMonthYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthYearDropdown||r))return m.createElement(Pc,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeMonthYear}))},e.handleTodayButtonClick=function(r){e.props.onSelect(Zr(),r),e.props.setPreSelection&&e.props.setPreSelection(Zr())},e.renderTodayButton=function(){if(!(!e.props.todayButton||e.props.showTimeSelectOnly))return m.createElement("div",{className:"react-datepicker__today-button",onClick:e.handleTodayButtonClick},e.props.todayButton)},e.renderDefaultHeader=function(r){var o=r.monthDate,i=r.i;return m.createElement("div",{className:"react-datepicker__header ".concat(e.props.showTimeSelect?"react-datepicker__header--has-time-select":"")},e.renderCurrentMonth(o),m.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(e.props.dropdownMode),onFocus:e.handleDropdownFocus},e.renderMonthDropdown(i!==0),e.renderMonthYearDropdown(i!==0),e.renderYearDropdown(i!==0)),m.createElement("div",{className:"react-datepicker__day-names"},e.header(o)))},e.renderCustomHeader=function(r){var o,i,s=r.monthDate,c=r.i;if(e.props.showTimeSelect&&!e.state.monthContainer||e.props.showTimeSelectOnly)return null;var l=nn(e.state.date,e.props),u=an(e.state.date,e.props),d=on(e.state.date,e.props),f=sn(e.state.date,e.props),p=!e.props.showMonthYearPicker&&!e.props.showQuarterYearPicker&&!e.props.showYearPicker;return m.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:e.props.onDropdownFocus},(i=(o=e.props).renderCustomHeader)===null||i===void 0?void 0:i.call(o,W(W({},e.state),{customHeaderCount:c,monthDate:s,changeMonth:e.changeMonth,changeYear:e.changeYear,decreaseMonth:e.decreaseMonth,increaseMonth:e.increaseMonth,decreaseYear:e.decreaseYear,increaseYear:e.increaseYear,prevMonthButtonDisabled:l,nextMonthButtonDisabled:u,prevYearButtonDisabled:d,nextYearButtonDisabled:f})),p&&m.createElement("div",{className:"react-datepicker__day-names"},e.header(s)))},e.renderYearHeader=function(r){var o=r.monthDate,i=e.props,s=i.showYearPicker,c=i.yearItemNumber,l=c===void 0?a.defaultProps.yearItemNumber:c,u=Oe(o,l),d=u.startPeriod,f=u.endPeriod;return m.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},s?"".concat(d," - ").concat(f):L(o))},e.renderHeader=function(r){var o=r.monthDate,i=r.i,s=i===void 0?0:i,c={monthDate:o,i:s};switch(!0){case e.props.renderCustomHeader!==void 0:return e.renderCustomHeader(c);case(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker):return e.renderYearHeader(c);default:return e.renderDefaultHeader(c)}},e.renderMonths=function(){var r,o;if(!(e.props.showTimeSelectOnly||e.props.showYearPicker)){for(var i=[],s=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?s-1:0,l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker?_e(e.state.date,c):He(e.state.date,c),u=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,d=0;d0;i.push(m.createElement("div",{key:h,ref:function(y){e.monthContainer=y??void 0},className:"react-datepicker__month-container"},e.renderHeader({monthDate:p,i:d}),m.createElement(xc,W({},a.defaultProps,e.props,{containerRef:e.containerRef,ariaLabelPrefix:e.props.monthAriaLabelPrefix,day:p,onDayClick:e.handleDayClick,handleOnKeyDown:e.props.handleOnDayKeyDown,handleOnMonthKeyDown:e.props.handleOnKeyDown,onDayMouseEnter:e.handleDayMouseEnter,onMouseLeave:e.handleMonthMouseLeave,orderInDisplay:d,selectingDate:e.state.selectingDate,monthShowsDuplicateDaysEnd:v,monthShowsDuplicateDaysStart:g}))))}return i}},e.renderYears=function(){if(!e.props.showTimeSelectOnly&&e.props.showYearPicker)return m.createElement("div",{className:"react-datepicker__year--container"},e.renderHeader({monthDate:e.state.date}),m.createElement(Oc,W({},a.defaultProps,e.props,{selectingDate:e.state.selectingDate,date:e.state.date,onDayClick:e.handleDayClick,clearSelectingDate:e.clearSelectingDate,onYearMouseEnter:e.handleYearMouseEnter,onYearMouseLeave:e.handleYearMouseLeave})))},e.renderTimeSection=function(){if(e.props.showTimeSelect&&(e.state.monthContainer||e.props.showTimeSelectOnly))return m.createElement(Tc,W({},a.defaultProps,e.props,{onChange:e.props.onTimeChange,format:e.props.timeFormat,intervals:e.props.timeIntervals,monthRef:e.state.monthContainer}))},e.renderInputTimeSection=function(){var r=e.props.selected?new Date(e.props.selected):void 0,o=r&&Zt(r)&&!!e.props.selected,i=o?"".concat(ln(r.getHours()),":").concat(ln(r.getMinutes())):"";if(e.props.showTimeInput)return m.createElement(Dc,W({},a.defaultProps,e.props,{date:r,timeString:i,onChange:e.props.onTimeChange}))},e.renderAriaLiveRegion=function(){var r,o=Oe(e.state.date,(r=e.props.yearItemNumber)!==null&&r!==void 0?r:a.defaultProps.yearItemNumber),i=o.startPeriod,s=o.endPeriod,c;return e.props.showYearPicker?c="".concat(i," - ").concat(s):e.props.showMonthYearPicker||e.props.showQuarterYearPicker?c=L(e.state.date):c="".concat(Sr(ne(e.state.date),e.props.locale)," ").concat(L(e.state.date)),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},e.state.isRenderAriaLiveMessage&&c)},e.renderChildren=function(){if(e.props.children)return m.createElement("div",{className:"react-datepicker__children-container"},e.props.children)},e.containerRef=D.createRef(),e.state={date:e.getDateInView(),selectingDate:void 0,monthContainer:void 0,isRenderAriaLiveMessage:!1},e}return Object.defineProperty(a,"defaultProps",{get:function(){return{monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousYearButtonLabel:"Previous Year",nextYearButtonLabel:"Next Year",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next Month",yearItemNumber:mt}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){var t=this;this.props.showTimeSelect&&(this.assignMonthContainer=function(){t.setState({monthContainer:t.monthContainer})}())},a.prototype.componentDidUpdate=function(t){var e=this;if(this.props.preSelection&&(!A(this.props.preSelection,t.preSelection)||this.props.monthSelectedIn!==t.monthSelectedIn)){var r=!ae(this.state.date,this.props.preSelection);this.setState({date:this.props.preSelection},function(){return r&&e.handleCustomMonthChange(e.state.date)})}else this.props.openToDate&&!A(this.props.openToDate,t.openToDate)&&this.setState({date:this.props.openToDate})},a.prototype.render=function(){var t=this.props.container||Xs;return m.createElement(Xt,{onClickOutside:this.handleClickOutside,style:{display:"contents"},ignoreClass:this.props.outsideClickIgnoreClass},m.createElement("div",{style:{display:"contents"},ref:this.containerRef},m.createElement(t,{className:re("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly}),showTime:this.props.showTimeSelect||this.props.showTimeInput,showTimeSelectOnly:this.props.showTimeSelectOnly},this.renderAriaLiveRegion(),this.renderPreviousButton(),this.renderNextButton(),this.renderMonths(),this.renderYears(),this.renderTodayButton(),this.renderTimeSection(),this.renderInputTimeSection(),this.renderChildren())))},a}(D.Component),Ac=function(n){var a=n.icon,t=n.className,e=t===void 0?"":t,r=n.onClick,o="react-datepicker__calendar-icon";if(typeof a=="string")return m.createElement("i",{className:"".concat(o," ").concat(a," ").concat(e),"aria-hidden":"true",onClick:r});if(m.isValidElement(a)){var i=a;return m.cloneElement(i,{className:"".concat(i.props.className||""," ").concat(o," ").concat(e),onClick:function(s){typeof i.props.onClick=="function"&&i.props.onClick(s),typeof r=="function"&&r(s)}})}return m.createElement("svg",{className:"".concat(o," ").concat(e),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",onClick:r},m.createElement("path",{d:"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z"}))},Jn=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.portalRoot=null,e.el=document.createElement("div"),e}return a.prototype.componentDidMount=function(){this.portalRoot=(this.props.portalHost||document).getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),(this.props.portalHost||document.body).appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)},a.prototype.componentWillUnmount=function(){this.portalRoot&&this.portalRoot.removeChild(this.el)},a.prototype.render=function(){return aa.createPortal(this.props.children,this.el)},a}(D.Component),Wc="[tabindex], a, button, input, select, textarea",Hc=function(n){return(n instanceof HTMLAnchorElement||!n.disabled)&&n.tabIndex!==-1},ea=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.getTabChildren=function(){var r;return Array.prototype.slice.call((r=e.tabLoopRef.current)===null||r===void 0?void 0:r.querySelectorAll(Wc),1,-1).filter(Hc)},e.handleFocusStart=function(){var r=e.getTabChildren();r&&r.length>1&&r[r.length-1].focus()},e.handleFocusEnd=function(){var r=e.getTabChildren();r&&r.length>1&&r[0].focus()},e.tabLoopRef=D.createRef(),e}return a.prototype.render=function(){var t;return((t=this.props.enableTabLoop)!==null&&t!==void 0?t:a.defaultProps.enableTabLoop)?m.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},m.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:0,onFocus:this.handleFocusStart}),this.props.children,m.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:0,onFocus:this.handleFocusEnd})):this.props.children},a.defaultProps={enableTabLoop:!0},a}(D.Component);function Bc(n){var a=function(t){var e,r=typeof t.hidePopper=="boolean"?t.hidePopper:!0,o=D.useRef(null),i=zs(W({open:!r,whileElementsMounted:Es,placement:t.popperPlacement,middleware:De([Is({padding:15}),Fs(10),As({element:o})],(e=t.popperModifiers)!==null&&e!==void 0?e:[],!0)},t.popperProps)),s=W(W({},t),{hidePopper:r,popperProps:W(W({},i),{arrowRef:o})});return m.createElement(n,W({},s))};return a}var Qc=function(n){te(a,n);function a(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(a,"defaultProps",{get:function(){return{hidePopper:!0}},enumerable:!1,configurable:!0}),a.prototype.render=function(){var t=this.props,e=t.className,r=t.wrapperClassName,o=t.hidePopper,i=o===void 0?a.defaultProps.hidePopper:o,s=t.popperComponent,c=t.targetComponent,l=t.enableTabLoop,u=t.popperOnKeyDown,d=t.portalId,f=t.portalHost,p=t.popperProps,h=t.showArrow,v=void 0;if(!i){var g=re("react-datepicker-popper",e);v=m.createElement(ea,{enableTabLoop:l},m.createElement("div",{ref:p.refs.setFloating,style:p.floatingStyles,className:g,"data-placement":p.placement,onKeyDown:u},s,h&&m.createElement(js,{ref:p.arrowRef,context:p.context,fill:"currentColor",strokeWidth:1,height:8,width:16,style:{transform:"translateY(-1px)"},className:"react-datepicker__triangle"})))}this.props.popperContainer&&(v=D.createElement(this.props.popperContainer,{},v)),d&&!i&&(v=m.createElement(Jn,{portalId:d,portalHost:f},v));var y=re("react-datepicker-wrapper",r);return m.createElement(m.Fragment,null,m.createElement("div",{ref:p.refs.setReference,className:y},c),v)},a}(D.Component),jc=Bc(Qc),mn="react-datepicker-ignore-onclickoutside";function Vc(n,a){return n&&a?ne(n)!==ne(a)||L(n)!==L(a):n!==a}var ir="Date input not valid.",qc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.calendar=null,e.input=null,e.getPreSelection=function(){return e.props.openToDate?e.props.openToDate:e.props.selectsEnd&&e.props.startDate?e.props.startDate:e.props.selectsStart&&e.props.endDate?e.props.endDate:V()},e.modifyHolidays=function(){var r;return(r=e.props.holidays)===null||r===void 0?void 0:r.reduce(function(o,i){var s=new Date(i.date);return Zt(s)?De(De([],o,!0),[W(W({},i),{date:s})],!1):o},[])},e.calcInitialState=function(){var r,o=e.getPreSelection(),i=zn(e.props),s=Xn(e.props),c=i&&je(o,Et(i))?i:s&&Ye(o,Jr(s))?s:o;return{open:e.props.startOpen||!1,preventFocus:!1,inputValue:null,preSelection:(r=e.props.selectsRange?e.props.startDate:e.props.selected)!==null&&r!==void 0?r:c,highlightDates:cn(e.props.highlightDates),focused:!1,shouldFocusDayInline:!1,isRenderAriaLiveMessage:!1,wasHidden:!1}},e.resetHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!1}))},e.setHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!0}))},e.setHiddenStateOnVisibilityHidden=function(){document.visibilityState==="hidden"&&e.setHiddenStatus()},e.clearPreventFocusTimeout=function(){e.preventFocusTimeout&&clearTimeout(e.preventFocusTimeout)},e.setFocus=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.focus)===null||o===void 0||o.call(r,{preventScroll:!0})},e.setBlur=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.blur)===null||o===void 0||o.call(r),e.cancelFocusInput()},e.deferBlur=function(){requestAnimationFrame(function(){e.setBlur()})},e.setOpen=function(r,o){o===void 0&&(o=!1),e.setState({open:r,preSelection:r&&e.state.open?e.state.preSelection:e.calcInitialState().preSelection,lastPreSelectChange:sr},function(){r||e.setState(function(i){return{focused:o?i.focused:!1}},function(){!o&&e.deferBlur(),e.setState({inputValue:null})})})},e.inputOk=function(){return xe(e.state.preSelection)},e.isCalendarOpen=function(){return e.props.open===void 0?e.state.open&&!e.props.disabled&&!e.props.readOnly:e.props.open},e.handleFocus=function(r){var o,i,s=e.state.wasHidden,c=s?e.state.open:!0;s&&e.resetHiddenStatus(),e.state.preventFocus||((i=(o=e.props).onFocus)===null||i===void 0||i.call(o,r),c&&!e.props.preventOpenOnFocus&&!e.props.readOnly&&e.setOpen(!0)),e.setState({focused:!0})},e.sendFocusBackToInput=function(){e.preventFocusTimeout&&e.clearPreventFocusTimeout(),e.setState({preventFocus:!0},function(){e.preventFocusTimeout=setTimeout(function(){e.setFocus(),e.setState({preventFocus:!1})})})},e.cancelFocusInput=function(){clearTimeout(e.inputFocusTimeout),e.inputFocusTimeout=void 0},e.deferFocusInput=function(){e.cancelFocusInput(),e.inputFocusTimeout=setTimeout(function(){return e.setFocus()},1)},e.handleDropdownFocus=function(){e.cancelFocusInput()},e.handleBlur=function(r){var o,i;(!e.state.open||e.props.withPortal||e.props.showTimeInput)&&((i=(o=e.props).onBlur)===null||i===void 0||i.call(o,r)),e.state.open&&e.props.open===!1&&e.setOpen(!1),e.setState({focused:!1})},e.handleCalendarClickOutside=function(r){var o,i;e.props.inline||e.setOpen(!1),(i=(o=e.props).onClickOutside)===null||i===void 0||i.call(o,r),e.props.withPortal&&r.preventDefault()},e.handleChange=function(){for(var r,o,i,s,c,l=[],u=0;u=F){fe=R;break}f&&fep&&(Y=x.ArrowLeft,fe=le(p,e.props)?k(Y,fe):p),le(fe,e.props)?((Y===x.PageUp||Y===x.Home)&&(Y=x.ArrowRight),(Y===x.PageDown||Y===x.End)&&(Y=x.ArrowLeft),fe=k(Y,fe)):ee=!0,de++}return fe};if(P===x.Enter){r.preventDefault(),e.handleSelect(C,r),!g&&e.setPreSelection(C);return}else if(P===x.Escape){r.preventDefault(),e.setOpen(!1),e.inputOk()||(c=(s=e.props).onInputError)===null||c===void 0||c.call(s,{code:1,msg:ir});return}var N=null;switch(P){case x.ArrowLeft:case x.ArrowRight:case x.ArrowUp:case x.ArrowDown:case x.PageUp:case x.PageDown:case x.Home:case x.End:N=S(P,C);break}if(!N){(u=(l=e.props).onInputError)===null||u===void 0||u.call(l,{code:1,msg:ir});return}if(r.preventDefault(),e.setState({lastPreSelectChange:sr}),w&&e.setSelected(N),e.setPreSelection(N),b){var Q=ne(C),I=ne(N),$=L(C),j=L(N);Q!==I||$!==j?e.setState({shouldFocusDayInline:!0}):e.setState({shouldFocusDayInline:!1})}}},e.onPopperKeyDown=function(r){var o=r.key;o===x.Escape&&(r.preventDefault(),e.sendFocusBackToInput(),e.setOpen(!1))},e.onClearClick=function(r){r&&r.preventDefault&&r.preventDefault(),e.sendFocusBackToInput();var o=e.props,i=o.selectsRange,s=o.onChange;i?s==null||s([null,null],r):s==null||s(null,r),e.setState({inputValue:null})},e.clear=function(){e.onClearClick()},e.onScroll=function(r){typeof e.props.closeOnScroll=="boolean"&&e.props.closeOnScroll?(r.target===document||r.target===document.documentElement||r.target===document.body)&&e.setOpen(!1):typeof e.props.closeOnScroll=="function"&&e.props.closeOnScroll(r)&&e.setOpen(!1)},e.renderCalendar=function(){var r,o;return!e.props.inline&&!e.isCalendarOpen()?null:m.createElement(Ic,W({showMonthYearDropdown:void 0,ref:function(i){e.calendar=i}},e.props,e.state,{setOpen:e.setOpen,dateFormat:(r=e.props.dateFormatCalendar)!==null&&r!==void 0?r:a.defaultProps.dateFormatCalendar,onSelect:e.handleSelect,onClickOutside:e.handleCalendarClickOutside,holidays:mc(e.modifyHolidays()),outsideClickIgnoreClass:mn,onDropdownFocus:e.handleDropdownFocus,onTimeChange:e.handleTimeChange,className:e.props.calendarClassName,container:e.props.calendarContainer,handleOnKeyDown:e.props.onKeyDown,handleOnDayKeyDown:e.onDayKeyDown,setPreSelection:e.setPreSelection,dropdownMode:(o=e.props.dropdownMode)!==null&&o!==void 0?o:a.defaultProps.dropdownMode}),e.props.children)},e.renderAriaLiveRegion=function(){var r=e.props,o=r.dateFormat,i=o===void 0?a.defaultProps.dateFormat:o,s=r.locale,c=e.props.showTimeInput||e.props.showTimeSelect,l=c?"PPPPp":"PPPP",u;return e.props.selectsRange?u="Selected start date: ".concat(se(e.props.startDate,{dateFormat:l,locale:s}),". ").concat(e.props.endDate?"End date: "+se(e.props.endDate,{dateFormat:l,locale:s}):""):e.props.showTimeSelectOnly?u="Selected time: ".concat(se(e.props.selected,{dateFormat:i,locale:s})):e.props.showYearPicker?u="Selected year: ".concat(se(e.props.selected,{dateFormat:"yyyy",locale:s})):e.props.showMonthYearPicker?u="Selected month: ".concat(se(e.props.selected,{dateFormat:"MMMM yyyy",locale:s})):e.props.showQuarterYearPicker?u="Selected quarter: ".concat(se(e.props.selected,{dateFormat:"yyyy, QQQ",locale:s})):u="Selected date: ".concat(se(e.props.selected,{dateFormat:l,locale:s})),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},u)},e.renderDateInput=function(){var r,o,i,s=re(e.props.className,(r={},r[mn]=e.state.open,r)),c=e.props.customInput||m.createElement("input",{type:"text"}),l=e.props.customInputRef||"ref",u=e.props,d=u.dateFormat,f=d===void 0?a.defaultProps.dateFormat:d,p=u.locale,h=typeof e.props.value=="string"?e.props.value:typeof e.state.inputValue=="string"?e.state.inputValue:e.props.selectsRange?Js(e.props.startDate,e.props.endDate,{dateFormat:f,locale:p}):e.props.selectsMultiple?ec((i=e.props.selectedDates)!==null&&i!==void 0?i:[],{dateFormat:f,locale:p}):se(e.props.selected,{dateFormat:f,locale:p});return D.cloneElement(c,(o={},o[l]=function(v){e.input=v},o.value=h,o.onBlur=e.handleBlur,o.onChange=e.handleChange,o.onClick=e.onInputClick,o.onFocus=e.handleFocus,o.onKeyDown=e.onInputKeyDown,o.id=e.props.id,o.name=e.props.name,o.form=e.props.form,o.autoFocus=e.props.autoFocus,o.placeholder=e.props.placeholderText,o.disabled=e.props.disabled,o.autoComplete=e.props.autoComplete,o.className=re(c.props.className,s),o.title=e.props.title,o.readOnly=e.props.readOnly,o.required=e.props.required,o.tabIndex=e.props.tabIndex,o["aria-describedby"]=e.props.ariaDescribedBy,o["aria-invalid"]=e.props.ariaInvalid,o["aria-labelledby"]=e.props.ariaLabelledBy,o["aria-required"]=e.props.ariaRequired,o))},e.renderClearButton=function(){var r=e.props,o=r.isClearable,i=r.disabled,s=r.selected,c=r.startDate,l=r.endDate,u=r.clearButtonTitle,d=r.clearButtonClassName,f=d===void 0?"":d,p=r.ariaLabelClose,h=p===void 0?"Close":p,v=r.selectedDates,g=r.readOnly;return o&&!g&&(s!=null||c!=null||l!=null||v!=null&&v.length)?m.createElement("button",{type:"button",className:re("react-datepicker__close-icon",f,{"react-datepicker__close-icon--disabled":i}),disabled:i,"aria-label":h,onClick:e.onClearClick,title:u,tabIndex:-1}):null},e.state=e.calcInitialState(),e.preventFocusTimeout=void 0,e}return Object.defineProperty(a,"defaultProps",{get:function(){return{allowSameDay:!1,dateFormat:"MM/dd/yyyy",dateFormatCalendar:"LLLL yyyy",disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",preventOpenOnFocus:!1,monthsShown:1,readOnly:!1,withPortal:!1,selectsDisabledDaysInRange:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showTwoColumnMonthYearPicker:!1,showFourColumnMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,showWeekPicker:!1,strictParsing:!1,swapRange:!1,timeIntervals:30,timeCaption:"Time",previousMonthAriaLabel:"Previous Month",previousMonthButtonLabel:"Previous Month",nextMonthAriaLabel:"Next Month",nextMonthButtonLabel:"Next Month",previousYearAriaLabel:"Previous Year",previousYearButtonLabel:"Previous Year",nextYearAriaLabel:"Next Year",nextYearButtonLabel:"Next Year",timeInputLabel:"Time",enableTabLoop:!0,yearItemNumber:mt,focusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null,calendarStartDay:void 0,toggleCalendarOnIconClick:!1,usePointerEvent:!1}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){window.addEventListener("scroll",this.onScroll,!0),document.addEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.componentDidUpdate=function(t,e){var r,o,i,s;t.inline&&Vc(t.selected,this.props.selected)&&this.setPreSelection(this.props.selected),this.state.monthSelectedIn!==void 0&&t.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),t.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:cn(this.props.highlightDates)}),!e.focused&&!Ae(t.selected,this.props.selected)&&this.setState({inputValue:null}),e.open!==this.state.open&&(e.open===!1&&this.state.open===!0&&((o=(r=this.props).onCalendarOpen)===null||o===void 0||o.call(r)),e.open===!0&&this.state.open===!1&&((s=(i=this.props).onCalendarClose)===null||s===void 0||s.call(i)))},a.prototype.componentWillUnmount=function(){this.clearPreventFocusTimeout(),window.removeEventListener("scroll",this.onScroll,!0),document.removeEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.renderInputContainer=function(){var t=this.props,e=t.showIcon,r=t.icon,o=t.calendarIconClassname,i=t.calendarIconClassName,s=t.toggleCalendarOnIconClick,c=this.state.open;return o&&console.warn("calendarIconClassname props is deprecated. should use calendarIconClassName props."),m.createElement("div",{className:"react-datepicker__input-container".concat(e?" react-datepicker__view-calendar-icon":"")},e&&m.createElement(Ac,W({icon:r,className:re(i,!i&&o,c&&"react-datepicker-ignore-onclickoutside")},s?{onClick:this.toggleCalendar}:null)),this.state.isRenderAriaLiveMessage&&this.renderAriaLiveRegion(),this.renderDateInput(),this.renderClearButton())},a.prototype.render=function(){var t=this.renderCalendar();if(this.props.inline)return t;if(this.props.withPortal){var e=this.state.open?m.createElement(ea,{enableTabLoop:this.props.enableTabLoop},m.createElement("div",{className:"react-datepicker__portal",tabIndex:-1,onKeyDown:this.onPortalKeyDown},t)):null;return this.state.open&&this.props.portalId&&(e=m.createElement(Jn,W({portalId:this.props.portalId},this.props),e)),m.createElement("div",null,this.renderInputContainer(),e)}return m.createElement(jc,W({},this.props,{className:this.props.popperClassName,hidePopper:!this.isCalendarOpen(),targetComponent:this.renderInputContainer(),popperComponent:t,popperOnKeyDown:this.onPopperKeyDown,showArrow:this.props.showPopperArrow}))},a}(D.Component),Kc="input",sr="navigate";const Uc=H.div` - background: white; - border-radius: 0.75rem; - padding: 1.5rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; -`,$c=H.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; -`,Gc=H.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`,zc=H.div` - display: flex; - gap: 1rem; - align-items: center; - flex-wrap: wrap; -`,Xc=H.div` - display: flex; - flex-direction: column; - min-width: 150px; -`,Zc=H.label` - font-size: 0.875rem; - font-weight: 500; - color: #374151; - margin-bottom: 0.5rem; -`,Jc=H(qc)` - width: 100%; - padding: 0.5rem 0.75rem; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - font-size: 0.875rem; - color: #111827; - background-color: white; - - &:focus { - outline: none; - border-color: #10b981; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } - - &:hover { - border-color: #9ca3af; - } -`,el=H.button` - padding: 0.5rem 1rem; - background-color: #f3f4f6; - color: #374151; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background-color: #e5e7eb; - border-color: #9ca3af; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`,tl=H.div` - display: flex; - align-items: center; - color: #6b7280; - font-size: 0.875rem; -`,gn=({label:n,selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:i,minDate:s,maxDate:c,placeholderText:l})=>T.jsxs(Xc,{children:[T.jsx(Zc,{children:n}),T.jsx(Jc,{selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:i,minDate:s,maxDate:c,dateFormat:"MMM dd, yyyy",placeholderText:l})]}),rl=({onDateChange:n,initialStartDate:a,initialEndDate:t})=>{const{startDate:e,endDate:r,handleStartDateChange:o,handleEndDateChange:i,handleReset:s}=ia(n,a,t);return T.jsxs(Uc,{children:[T.jsxs($c,{children:[T.jsx(Gc,{children:"Date Range"}),T.jsx(el,{onClick:s,children:"Reset"})]}),T.jsxs(zc,{children:[T.jsx(gn,{label:"Start Date",selected:e,onChange:o,selectsStart:!0,startDate:e,endDate:r,maxDate:r,placeholderText:"Select start date"}),T.jsx(tl,{children:T.jsx("span",{children:"to"})}),T.jsx(gn,{label:"End Date",selected:r,onChange:i,selectsEnd:!0,startDate:e,endDate:r,minDate:e,maxDate:new Date,placeholderText:"Select end date"})]})]})},nl=H.div` - background: white; - border-radius: 0.75rem; - padding: 1.5rem; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; -`,al=H.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; -`,ol=H.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`,il=H.input` - width: 100%; - padding: 0.5rem 0.75rem; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - font-size: 0.875rem; - color: #111827; - background-color: white; - margin-bottom: 1rem; - - &:focus { - outline: none; - border-color: #10b981; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } - - &:hover { - border-color: #9ca3af; - } -`,sl=H.div` - max-height: 200px; - overflow-y: auto; - border: 1px solid #e5e7eb; - border-radius: 0.5rem; - background-color: white; -`,cl=H.label` - display: flex; - align-items: center; - padding: 0.75rem; - cursor: pointer; - border-bottom: 1px solid #f3f4f6; - transition: background-color 0.2s; - - &:last-child { - border-bottom: none; - } - - &:hover { - background-color: #f9fafb; - } - - &:focus-within { - background-color: #f0fdf4; - } -`,ll=H.input` - margin-right: 0.75rem; - width: 1rem; - height: 1rem; - accent-color: #10b981; -`,ul=H.div` - flex: 1; -`,dl=H.div` - font-weight: 500; - color: #111827; - font-size: 0.875rem; -`,fl=H.div` - font-size: 0.75rem; - color: #6b7280; - margin-top: 0.25rem; -`,pl=H.div` - font-size: 0.75rem; - color: #6b7280; - margin-top: 0.5rem; -`,hl=H.button` - padding: 0.5rem 1rem; - background-color: #f3f4f6; - color: #374151; - border: 1px solid #d1d5db; - border-radius: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background-color: #e5e7eb; - border-color: #9ca3af; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`,ml=[{id:1,name:"Forest A",region:"North Region",treeCount:2500,area:"150 ha"},{id:2,name:"Forest B",region:"South Region",treeCount:3200,area:"200 ha"},{id:3,name:"Forest C",region:"East Region",treeCount:1800,area:"120 ha"},{id:4,name:"Forest D",region:"West Region",treeCount:2750,area:"180 ha"},{id:5,name:"Forest E",region:"Central Region",treeCount:4100,area:"250 ha"}],gl=({selectedForests:n=[],onChange:a,forests:t=ml})=>{const[e,r]=D.useState(""),[o,i]=D.useState(t);D.useEffect(()=>{const d=t.filter(f=>f.name.toLowerCase().includes(e.toLowerCase())||f.region.toLowerCase().includes(e.toLowerCase()));i(d)},[e,t]);const s=d=>{a&&(n.includes(d)?a(n.filter(f=>f!==d)):a([...n,d]))},c=()=>{a&&a(t.map(d=>d.id))},l=()=>{a&&a([])},u=()=>{a&&a([]),r("")};return T.jsxs(nl,{children:[T.jsxs(al,{children:[T.jsx(ol,{children:"Forest Selection"}),T.jsx(hl,{onClick:u,children:"Reset"})]}),T.jsx(il,{type:"text",placeholder:"Search forests by name or region...",value:e,onChange:d=>r(d.target.value)}),T.jsxs("div",{className:"flex gap-2 mb-3",children:[T.jsx("button",{onClick:c,className:"px-3 py-1 text-xs bg-green-100 text-green-700 rounded border border-green-200 hover:bg-green-200 transition-colors",children:"Select All"}),T.jsx("button",{onClick:l,className:"px-3 py-1 text-xs bg-gray-100 text-gray-700 rounded border border-gray-200 hover:bg-gray-200 transition-colors",children:"Select None"})]}),T.jsxs(sl,{children:[o.map(d=>T.jsxs(cl,{children:[T.jsx(ll,{type:"checkbox",checked:n.includes(d.id),onChange:()=>s(d.id)}),T.jsxs(ul,{children:[T.jsx(dl,{children:d.name}),T.jsxs(fl,{children:[d.region," • ",d.treeCount," trees • ",d.area]})]})]},d.id)),o.length===0&&T.jsx("div",{className:"p-4 text-center text-gray-500 text-sm",children:"No forests found matching your search."})]}),T.jsxs(pl,{children:[n.length," of ",t.length," forests selected"]})]})},vl=({errors:n})=>!n||Object.keys(n).length===0?null:T.jsxs("div",{className:"mb-4 p-3 bg-red-50 border border-red-200 rounded-lg",children:[T.jsxs("div",{className:"flex items-center mb-2",children:[T.jsx("svg",{className:"w-5 h-5 text-red-500 mr-2",fill:"currentColor",viewBox:"0 0 20 20",children:T.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})}),T.jsx("span",{className:"font-medium text-red-800",children:"Filter Validation Errors"})]}),T.jsx("ul",{className:"text-sm text-red-700 space-y-1",children:Object.entries(n).map(([a,t])=>T.jsxs("li",{children:["• ",t]},a))})]}),ft={MAX_DATE_RANGE_YEARS:5,MAX_SELECTED_FORESTS:10,MILLISECONDS_PER_YEAR:1e3*60*60*24*365},Tt={DATE_ORDER:"Start date must be before or equal to end date",DATE_FUTURE:"End date cannot be in the future",DATE_RANGE_TOO_LARGE:`Date range cannot exceed ${ft.MAX_DATE_RANGE_YEARS} years`,TOO_MANY_FORESTS:`Cannot select more than ${ft.MAX_SELECTED_FORESTS} forests at once`},wl=n=>{if(!n||!n.startDate||!n.endDate)return null;const{startDate:a,endDate:t}=n;return a>t?Tt.DATE_ORDER:t>new Date?Tt.DATE_FUTURE:(t-a)/ft.MILLISECONDS_PER_YEAR>ft.MAX_DATE_RANGE_YEARS?Tt.DATE_RANGE_TOO_LARGE:null},Dl=n=>!n||!Array.isArray(n)?null:n.length>ft.MAX_SELECTED_FORESTS?Tt.TOO_MANY_FORESTS:null,yl=n=>{const a={},t=wl(n.dateRange);t&&(a.dateRange=t);const e=Dl(n.selectedForests);return e&&(a.selectedForests=e),a},vn=()=>({dateRange:{startDate:new Date(new Date().getFullYear(),0,1),endDate:new Date},selectedForests:[]}),bl=H.div` - background: #f9fafb; - border-radius: 0.75rem; - padding: 1.5rem; - margin-bottom: 2rem; -`,kl=H.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1.5rem; -`,_l=H.h2` - font-size: 1.5rem; - font-weight: 700; - color: #111827; - margin: 0; -`,xl=H.p` - color: #6b7280; - margin: 0.5rem 0 0 0; - font-size: 0.875rem; -`,Ml=H.div` - display: grid; - grid-template-columns: 1fr; - gap: 1.5rem; - - @media (min-width: 768px) { - grid-template-columns: 1fr 1fr; - } - - @media (min-width: 1024px) { - grid-template-columns: 1fr 1fr; - } -`,Cl=H.div` - display: flex; - flex-wrap: wrap; - gap: 0.5rem; - margin-top: 1rem; - padding-top: 1rem; - border-top: 1px solid #e5e7eb; -`,Sl=H.span` - display: inline-flex; - align-items: center; - padding: 0.25rem 0.75rem; - background-color: #10b981; - color: white; - border-radius: 9999px; - font-size: 0.75rem; - font-weight: 500; -`,El=H.button` - padding: 0.5rem 1rem; - background-color: #ef4444; - color: white; - border: none; - border-radius: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background-color: #dc2626; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); - } -`,Ol=({onFiltersChange:n,initialFilters:a={}})=>{const[t,e]=oa(),r=D.useRef(!1),o=D.useRef(n),i=D.useRef(!1);D.useEffect(()=>{o.current=n},[n]);const s=D.useCallback(()=>{const w=t.get("startDate"),b=t.get("endDate"),P=t.get("forests"),O={};if(w&&b)try{const C=new Date(w),k=new Date(b);!isNaN(C.getTime())&&!isNaN(k.getTime())&&C<=k&&(O.dateRange={startDate:C,endDate:k})}catch(C){console.warn("Invalid date parameters in URL:",C)}if(P)try{const C=P.split(",").map(k=>parseInt(k,10)).filter(k=>!isNaN(k));C.length>0&&(O.selectedForests=C)}catch(C){console.warn("Invalid forest parameters in URL:",C)}return O},[t]),[c,l]=D.useState(()=>{const w=s();return{...vn(),...a,...w}}),[u,d]=D.useState({}),f=D.useCallback(w=>{const b=yl(w);return d(b),Object.keys(b).length===0},[]),p=D.useCallback(w=>{var P,O;const b=new URLSearchParams;(P=w.dateRange)!=null&&P.startDate&&((O=w.dateRange)!=null&&O.endDate)&&(b.set("startDate",Pr(w.dateRange.startDate)),b.set("endDate",Pr(w.dateRange.endDate))),w.selectedForests&&w.selectedForests.length>0&&b.set("forests",w.selectedForests.join(",")),e(b,{replace:!0})},[e]);D.useEffect(()=>{!r.current&&Object.keys(a).length>0&&(l(w=>({...w,...a})),r.current=!0)},[]);const[h,v]=D.useState([]);D.useEffect(()=>{const w=[];if(c.dateRange.startDate&&c.dateRange.endDate){const b=c.dateRange.startDate.toLocaleDateString(),P=c.dateRange.endDate.toLocaleDateString();w.push(`Date: ${b} - ${P}`)}c.selectedForests.length>0&&w.push(`${c.selectedForests.length} forests selected`),v(w)},[c]),D.useEffect(()=>{if(!i.current){i.current=!0;return}const w=setTimeout(()=>{f(c)&&(p(c),o.current&&o.current(c))},1e3);return()=>clearTimeout(w)},[c,f,p]);const g=D.useCallback(w=>{l(b=>({...b,dateRange:w}))},[]),y=D.useCallback(w=>{l(b=>({...b,selectedForests:w}))},[]),_=D.useCallback(()=>{const w=vn();l(w),d({}),e({},{replace:!0})},[e]);return T.jsxs(bl,{children:[T.jsxs(kl,{children:[T.jsxs("div",{children:[T.jsx(_l,{children:"Global Filters"}),T.jsx(xl,{children:"Filter your data by date range and forest selection"})]}),h.length>0&&T.jsx(El,{onClick:_,children:"Clear All"})]}),T.jsx(vl,{errors:u}),T.jsxs(Ml,{children:[T.jsx(rl,{onDateChange:g,initialStartDate:c.dateRange.startDate,initialEndDate:c.dateRange.endDate}),T.jsx(gl,{selectedForests:c.selectedForests,onChange:y})]}),h.length>0&&T.jsx(Cl,{children:h.map((w,b)=>T.jsx(Sl,{children:w},b))})]})};H.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1.5rem; -`;H.h2` - font-size: 1.5rem; - font-weight: 700; - color: #111827; - margin: 0; -`;H.p` - color: #6b7280; - margin: 0.5rem 0 0 0; - font-size: 0.875rem; -`;H.button` - padding: 0.5rem 1rem; - background-color: #ef4444; - color: white; - border: none; - border-radius: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background-color: #dc2626; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); - } -`;export{Ol as G}; diff --git a/frontend/dist/assets/FormElements-RQ7qOmSO.js b/frontend/dist/assets/FormElements-BsiOcVAQ.js similarity index 98% rename from frontend/dist/assets/FormElements-RQ7qOmSO.js rename to frontend/dist/assets/FormElements-BsiOcVAQ.js index 29248d6a0d..eb172f75a4 100644 --- a/frontend/dist/assets/FormElements-RQ7qOmSO.js +++ b/frontend/dist/assets/FormElements-BsiOcVAQ.js @@ -1,4 +1,4 @@ -import{j as n,d as e,r as u}from"./index-Dzr7PBfw.js";const x=e.span` +import{j as n,d as e,r as u}from"./index-CGkKx7Xv.js";const x=e.span` padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem; diff --git a/frontend/dist/assets/IconButton-CsSKj4cW.js b/frontend/dist/assets/IconButton-vDjz_WRZ.js similarity index 65% rename from frontend/dist/assets/IconButton-CsSKj4cW.js rename to frontend/dist/assets/IconButton-vDjz_WRZ.js index 6fce0813f8..adfbae4e1f 100644 --- a/frontend/dist/assets/IconButton-CsSKj4cW.js +++ b/frontend/dist/assets/IconButton-vDjz_WRZ.js @@ -1 +1 @@ -import{R as e,j as m,o as l,g as i}from"./index-Dzr7PBfw.js";const u=e.forwardRef(({className:o,children:t,"aria-label":s,size:a="md",variant:n="ghost",...r},c)=>m.jsx(l,{className:i("btn-icon",a==="sm"&&"h-8 w-8",a==="md"&&"h-10 w-10",a==="lg"&&"h-12 w-12",o),ref:c,size:"icon",variant:n,"aria-label":s,...r,children:t}));u.displayName="IconButton";export{u as I}; +import{R as e,j as l,o as m,l as i}from"./index-CGkKx7Xv.js";const u=e.forwardRef(({className:o,children:t,"aria-label":s,size:a="md",variant:n="ghost",...r},c)=>l.jsx(m,{className:i("btn-icon",a==="sm"&&"h-8 w-8",a==="md"&&"h-10 w-10",a==="lg"&&"h-12 w-12",o),ref:c,size:"icon",variant:n,"aria-label":s,...r,children:t}));u.displayName="IconButton";export{u as I}; diff --git a/frontend/dist/assets/LandingPage-BfmN78ZN.js b/frontend/dist/assets/LandingPage-BfmN78ZN.js new file mode 100644 index 0000000000..e48081c28c --- /dev/null +++ b/frontend/dist/assets/LandingPage-BfmN78ZN.js @@ -0,0 +1 @@ +import{j as e,L as a}from"./index-CGkKx7Xv.js";import"./IconButton-vDjz_WRZ.js";import"./MapSidebar-jstr5dKK.js";import"./ExportButton-BryKwkQ4.js";import"./FormElements-BsiOcVAQ.js";import"./Table-CfKObwuM.js";import"./ChartComponents-DOzzJtP4.js";import"./TreeDetailModal-DPmuOlrX.js";import{N as i}from"./Navbar-BSLKvp05.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-Bh0nMcUg.js";import"./DarkModeToggle-Cu0JyOh5.js";const n=()=>e.jsxs("section",{className:"pt-20 bg-gradient-to-br from-green-500 to-green-700 dark:from-green-600 dark:to-green-800 min-h-screen flex items-center justify-center relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 opacity-30",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`}}),e.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24",children:e.jsxs("div",{className:"text-center",children:[e.jsxs("h1",{className:"text-4xl md:text-6xl font-bold text-white mb-6",children:["Discover, Monitor & Export",e.jsx("span",{className:"block text-green-200",children:"Real-Time Tree Insights"})]}),e.jsx("p",{className:"text-xl md:text-2xl text-green-100 mb-8 max-w-3xl mx-auto",children:"Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights."}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[e.jsx(a,{to:"/register",className:"bg-white dark:bg-gray-100 text-green-600 dark:text-green-700 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 dark:hover:bg-gray-200 transition-colors",children:"Start Your Free Trial"}),e.jsx("a",{href:"#features",className:"border-2 border-white text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-white hover:text-green-600 dark:hover:bg-gray-100 dark:hover:text-green-700 transition-colors",children:"Learn More"})]})]})})]}),l=({icon:r,title:t,description:s})=>e.jsxs("div",{className:"bg-white dark:bg-gray-900 p-8 rounded-xl shadow-lg dark:shadow-gray-900/50",children:[e.jsx("div",{className:"w-12 h-12 bg-green-100 dark:bg-green-900/30 rounded-lg flex items-center justify-center mb-6",children:r}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:t}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s})]}),o=()=>{const r=[{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Real-Time Analytics",description:"Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics."},{icon:e.jsxs("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),title:"Interactive Mapping",description:"Visualize forests and individual trees with marker clustering and detailed tree information."},{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),title:"Data Export",description:"Export filtered datasets to CSV or XLSX format for reporting and analysis."}];return e.jsx("section",{id:"features",className:"py-20 bg-gray-50 dark:bg-gray-800",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"text-center mb-16",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4",children:"Powerful Features for Tree Management"}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto",children:"Everything you need to monitor, analyze, and export tree data with precision and ease."})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-8",children:r.map((t,s)=>e.jsx(l,{icon:t.icon,title:t.title,description:t.description},s))})]})})},d=()=>{const r=[{value:"10K+",label:"Trees Monitored"},{value:"95%",label:"Survival Rate"},{value:"50+",label:"Forest Projects"},{value:"24/7",label:"Real-Time Data"}];return e.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 p-8 rounded-xl",children:e.jsx("div",{className:"grid grid-cols-2 gap-4",children:r.map((t,s)=>e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-green-600 dark:text-green-400 mb-2",children:t.value}),e.jsx("div",{className:"text-gray-600 dark:text-gray-300",children:t.label})]},s))})})},c=()=>e.jsx("section",{id:"about",className:"py-20 bg-white dark:bg-gray-900",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-6",children:"Empowering Sustainable Forestry"}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-6",children:"Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects."}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-8",children:"Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs."}),e.jsx(a,{to:"/register",className:"bg-green-600 dark:bg-green-500 text-white px-6 py-3 rounded-lg text-lg font-semibold hover:bg-green-700 dark:hover:bg-green-600 transition-colors inline-block",children:"Join Nanwa Today"})]}),e.jsx(d,{})]})})}),x=()=>e.jsx("footer",{className:"bg-gray-900 text-white py-12",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"grid md:grid-cols-4 gap-8",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-bold text-green-400 mb-4",children:"Nanwa"}),e.jsx("p",{className:"text-gray-400",children:"Empowering sustainable forestry through data-driven insights and real-time monitoring."})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Product"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#features",className:"hover:text-white transition-colors",children:"Features"})}),e.jsx("li",{children:e.jsx(a,{to:"/login",className:"hover:text-white transition-colors",children:"Login"})}),e.jsx("li",{children:e.jsx(a,{to:"/register",className:"hover:text-white transition-colors",children:"Register"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Company"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#about",className:"hover:text-white transition-colors",children:"About"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Contact"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Privacy"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Support"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Help Center"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Documentation"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"API"})})]})]})]}),e.jsx("div",{className:"border-t border-gray-800 mt-8 pt-8 text-center text-gray-400",children:e.jsx("p",{children:"© 2024 Nanwa. All rights reserved."})})]})}),k=()=>e.jsxs("div",{className:"min-h-screen bg-white dark:bg-gray-900",children:[e.jsx(i,{}),e.jsx(n,{}),e.jsx(o,{}),e.jsx(c,{}),e.jsx(x,{})]});export{k as LandingPage}; diff --git a/frontend/dist/assets/LandingPage-Dc2ID8Hk.js b/frontend/dist/assets/LandingPage-Dc2ID8Hk.js deleted file mode 100644 index f3bb30cffa..0000000000 --- a/frontend/dist/assets/LandingPage-Dc2ID8Hk.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,L as a}from"./index-Dzr7PBfw.js";import"./IconButton-CsSKj4cW.js";import"./TreeDetailLayout-Cc_P7nbu.js";import"./ExportButton-BvRt6B34.js";import"./FormElements-RQ7qOmSO.js";import"./Table-CZfmBv9T.js";import"./ChartComponents-CUdy75Zt.js";import"./MapSidebar-DZT3HTLm.js";import{N as i}from"./Navbar-BJVIhaUA.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BRnXQ3uS.js";import"./DarkModeToggle-DNnaM-T2.js";const n=()=>e.jsxs("section",{className:"pt-20 bg-gradient-to-br from-green-500 to-green-700 dark:from-green-600 dark:to-green-800 min-h-screen flex items-center justify-center relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 opacity-30",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`}}),e.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24",children:e.jsxs("div",{className:"text-center",children:[e.jsxs("h1",{className:"text-4xl md:text-6xl font-bold text-white mb-6",children:["Discover, Monitor & Export",e.jsx("span",{className:"block text-green-200",children:"Real-Time Tree Insights"})]}),e.jsx("p",{className:"text-xl md:text-2xl text-green-100 mb-8 max-w-3xl mx-auto",children:"Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights."}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[e.jsx(a,{to:"/register",className:"bg-white dark:bg-gray-100 text-green-600 dark:text-green-700 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 dark:hover:bg-gray-200 transition-colors",children:"Start Your Free Trial"}),e.jsx("a",{href:"#features",className:"border-2 border-white text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-white hover:text-green-600 dark:hover:bg-gray-100 dark:hover:text-green-700 transition-colors",children:"Learn More"})]})]})})]}),l=({icon:r,title:t,description:s})=>e.jsxs("div",{className:"bg-white dark:bg-gray-900 p-8 rounded-xl shadow-lg dark:shadow-gray-900/50",children:[e.jsx("div",{className:"w-12 h-12 bg-green-100 dark:bg-green-900/30 rounded-lg flex items-center justify-center mb-6",children:r}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:t}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s})]}),o=()=>{const r=[{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Real-Time Analytics",description:"Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics."},{icon:e.jsxs("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),title:"Interactive Mapping",description:"Visualize forests and individual trees with marker clustering and detailed tree information."},{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),title:"Data Export",description:"Export filtered datasets to CSV or XLSX format for reporting and analysis."}];return e.jsx("section",{id:"features",className:"py-20 bg-gray-50 dark:bg-gray-800",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"text-center mb-16",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4",children:"Powerful Features for Tree Management"}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto",children:"Everything you need to monitor, analyze, and export tree data with precision and ease."})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-8",children:r.map((t,s)=>e.jsx(l,{icon:t.icon,title:t.title,description:t.description},s))})]})})},d=()=>{const r=[{value:"10K+",label:"Trees Monitored"},{value:"95%",label:"Survival Rate"},{value:"50+",label:"Forest Projects"},{value:"24/7",label:"Real-Time Data"}];return e.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 p-8 rounded-xl",children:e.jsx("div",{className:"grid grid-cols-2 gap-4",children:r.map((t,s)=>e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-green-600 dark:text-green-400 mb-2",children:t.value}),e.jsx("div",{className:"text-gray-600 dark:text-gray-300",children:t.label})]},s))})})},c=()=>e.jsx("section",{id:"about",className:"py-20 bg-white dark:bg-gray-900",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-6",children:"Empowering Sustainable Forestry"}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-6",children:"Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects."}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-8",children:"Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs."}),e.jsx(a,{to:"/register",className:"bg-green-600 dark:bg-green-500 text-white px-6 py-3 rounded-lg text-lg font-semibold hover:bg-green-700 dark:hover:bg-green-600 transition-colors inline-block",children:"Join Nanwa Today"})]}),e.jsx(d,{})]})})}),x=()=>e.jsx("footer",{className:"bg-gray-900 text-white py-12",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"grid md:grid-cols-4 gap-8",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-bold text-green-400 mb-4",children:"Nanwa"}),e.jsx("p",{className:"text-gray-400",children:"Empowering sustainable forestry through data-driven insights and real-time monitoring."})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Product"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#features",className:"hover:text-white transition-colors",children:"Features"})}),e.jsx("li",{children:e.jsx(a,{to:"/login",className:"hover:text-white transition-colors",children:"Login"})}),e.jsx("li",{children:e.jsx(a,{to:"/register",className:"hover:text-white transition-colors",children:"Register"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Company"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#about",className:"hover:text-white transition-colors",children:"About"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Contact"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Privacy"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Support"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Help Center"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Documentation"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"API"})})]})]})]}),e.jsx("div",{className:"border-t border-gray-800 mt-8 pt-8 text-center text-gray-400",children:e.jsx("p",{children:"© 2024 Nanwa. All rights reserved."})})]})}),k=()=>e.jsxs("div",{className:"min-h-screen bg-white dark:bg-gray-900",children:[e.jsx(i,{}),e.jsx(n,{}),e.jsx(o,{}),e.jsx(c,{}),e.jsx(x,{})]});export{k as LandingPage}; diff --git a/frontend/dist/assets/LoginPage-LyjmzT4O.js b/frontend/dist/assets/LoginPage-b5sbaCb6.js similarity index 96% rename from frontend/dist/assets/LoginPage-LyjmzT4O.js rename to frontend/dist/assets/LoginPage-b5sbaCb6.js index 7402fb3ba4..8251b0158c 100644 --- a/frontend/dist/assets/LoginPage-LyjmzT4O.js +++ b/frontend/dist/assets/LoginPage-b5sbaCb6.js @@ -1 +1 @@ -import{r as o,j as e,L as f,u as j,a as k}from"./index-Dzr7PBfw.js";import{N as w}from"./Navbar-BJVIhaUA.js";import{F as y,P as v}from"./PasswordInput-BcWvIN9N.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BRnXQ3uS.js";import"./DarkModeToggle-DNnaM-T2.js";import"./IconButton-CsSKj4cW.js";const C=({connectionState:r,onCancel:t,showCancel:l=!0})=>{const[n,i]=o.useState(0),[c,u]=o.useState(0),{isConnecting:s,isColdStart:a,retryAttempt:d,totalAttempts:h,estimatedWaitTime:p,message:g}=r;return o.useEffect(()=>{if(!s){i(0),u(0);return}const x=setInterval(()=>{if(u(m=>m+1),a){const b=Math.min(c/60*100,90);i(b)}else{const b=Math.min(c/10*100,90);i(b)}},1e3);return()=>clearInterval(x)},[s,a,c]),o.useEffect(()=>{!s&&n>0&&i(100)},[s,n]),s?e.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg p-8 max-w-md w-full mx-4 shadow-2xl",children:[e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("div",{className:"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsxs("svg",{className:"w-8 h-8 text-green-600 dark:text-green-400 animate-spin",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:a?"Server Starting Up":"Connecting"})]}),e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-2",children:g}),a&&e.jsxs("div",{className:"text-sm text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsx("p",{children:"The server needs to start up from sleep mode."}),e.jsx("p",{children:"This usually takes 30-60 seconds."})]})]}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex justify-between text-sm text-gray-500 dark:text-gray-400 mb-2",children:[e.jsx("span",{children:"Progress"}),e.jsxs("span",{children:[Math.round(n),"%"]})]}),e.jsx("div",{className:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2",children:e.jsx("div",{className:"bg-green-600 h-2 rounded-full transition-all duration-1000 ease-out",style:{width:`${n}%`}})})]}),d>0&&e.jsx("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg mb-4",children:e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"text-blue-600 dark:text-blue-400",children:["Attempt ",d," of ",h]}),e.jsxs("span",{className:"text-blue-500 dark:text-blue-300",children:[c,"s elapsed"]})]})}),p>0&&e.jsxs("div",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mb-4",children:["Estimated wait time: ",p," seconds"]}),l&&t&&e.jsx("div",{className:"text-center",children:e.jsx("button",{onClick:t,className:"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 text-sm underline",children:"Cancel and try again later"})})]})}):null},N=(r,t)=>{const[l,n]=o.useState(r),[i,c]=o.useState({}),[u,s]=o.useState({}),a=o.useCallback(g=>{const{name:x,value:m}=g.target;n(b=>({...b,[x]:m})),i[x]&&c(b=>({...b,[x]:""}))},[i]),d=o.useCallback(g=>{const{name:x}=g.target;s(m=>({...m,[x]:!0}))},[]),h=o.useCallback(()=>{const g=t(l);return c(g),Object.keys(g).length===0},[l,t]),p=o.useCallback(()=>{n(r),c({}),s({})},[r]);return{values:l,errors:i,touched:u,handleChange:a,handleBlur:d,validateForm:h,resetForm:p,setErrors:c}},S=r=>{const t={};return r.email?/\S+@\S+\.\S+/.test(r.email)||(t.email="Email is invalid"):t.email="Email is required",r.password?r.password.length<6&&(t.password="Password must be at least 6 characters"):t.password="Password is required",t},A=({onSubmit:r,isSubmitting:t,errors:l})=>{const{values:n,errors:i,handleChange:c,handleBlur:u,validateForm:s}=N({email:"",password:""},S),a={...i,...l},d=h=>{h.preventDefault(),s()&&r(n)};return e.jsxs("form",{onSubmit:d,className:"space-y-6",children:[a.general&&e.jsx("div",{className:"bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 text-red-700 dark:text-red-400 px-4 py-3 rounded-lg",children:a.general}),e.jsx(y,{label:"Email address",id:"email",error:a.email,required:!0,children:e.jsx("input",{type:"email",id:"email",name:"email",value:n.email,onChange:c,onBlur:u,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${a.email?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"}`,placeholder:"Enter your email",disabled:t})}),e.jsx(y,{label:"Password",id:"password",error:a.password,required:!0,children:e.jsx(v,{id:"password",name:"password",value:n.password,onChange:c,onBlur:u,error:a.password,placeholder:"Enter your password",disabled:t})}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(E,{disabled:t}),e.jsx(F,{})]}),e.jsx(P,{isSubmitting:t}),e.jsx(T,{})]})},E=({disabled:r})=>e.jsxs("div",{className:"flex items-center",children:[e.jsx("input",{id:"remember-me",name:"remember-me",type:"checkbox",className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700",disabled:r}),e.jsx("label",{htmlFor:"remember-me",className:"ml-2 block text-sm text-gray-900 dark:text-white",children:"Remember me"})]}),F=()=>e.jsx("div",{className:"text-sm",children:e.jsx("a",{href:"#",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Forgot your password?"})}),P=({isSubmitting:r})=>e.jsx("button",{type:"submit",disabled:r,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 dark:bg-green-500 hover:bg-green-700 dark:hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:r?e.jsxs("div",{className:"flex items-center",children:[e.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Signing in..."]}):"Sign in"}),T=()=>e.jsx("div",{className:"text-center",children:e.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["Don't have an account?"," ",e.jsx(f,{to:"/register",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Sign up"})]})}),L=()=>e.jsxs("div",{className:"mt-8 p-4 bg-gray-50 dark:bg-gray-700 rounded-lg",children:[e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 mb-2",children:"Demo credentials:"}),e.jsxs("div",{className:"text-xs text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Admin:"})," admin@nanwa.com / admin123"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"User:"})," user@nanwa.com / user123"]})]})]}),M=()=>{const[r,t]=o.useState({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null}),l=o.useCallback(s=>{const{attempt:a,totalAttempts:d,delay:h,error:p,isColdStart:g}=s;t(x=>({...x,isConnecting:!0,isColdStart:g,retryAttempt:a,totalAttempts:d,estimatedWaitTime:Math.ceil(h/1e3),message:W(a,d,g),error:null}))},[]),n=o.useCallback(()=>{t({isConnecting:!0,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:10,message:"Connecting to server...",error:null})},[]),i=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"Connected successfully!",error:null})},[]),c=o.useCallback(s=>{const a=s&&typeof s=="object"?s.message||String(s):String(s||"Connection failed");t(d=>({...d,isConnecting:!1,error:a,message:"Connection failed. Please try again."}))},[]),u=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null})},[]);return{connectionState:r,handleRetry:l,startConnection:n,connectionSuccess:i,connectionFailed:c,resetConnection:u}},W=(r,t,l)=>r===1&&l?"Server is starting up, this may take up to 60 seconds...":r===2&&l?"Still starting up, please wait...":r===3&&l?"Almost ready, just a few more seconds...":r>=4&&l?"Final attempt, server should be ready soon...":`Retrying connection (${r}/${t})...`,B=()=>{const[r,t]=o.useState({}),[l,n]=o.useState(!1),{login:i}=j();k();const{connectionState:c,handleRetry:u,startConnection:s,connectionSuccess:a,connectionFailed:d,resetConnection:h}=M();return{errors:r,isSubmitting:l,connectionState:c,handleLogin:async x=>{n(!0),t({}),s();try{const m=await i(x.email,x.password,u);m.success?a():(d(new Error(m.error)),t({general:m.error}))}catch(m){d(m),t({general:"Connection failed. Please check your internet connection and try again."})}finally{n(!1)}},handleCancelConnection:()=>{h(),n(!1)}}},V=()=>{const{errors:r,isSubmitting:t,connectionState:l,handleLogin:n,handleCancelConnection:i}=B();return e.jsxs(e.Fragment,{children:[e.jsx(w,{}),e.jsx(C,{connectionState:l,onCancel:i,showCancel:!0}),e.jsx("div",{className:"min-h-screen bg-gradient-to-br from-green-50 to-green-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center p-4",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-2xl p-8 w-full max-w-md",children:[e.jsx(R,{}),e.jsx(A,{onSubmit:n,isSubmitting:t,errors:r}),e.jsx(L,{})]})})]})},R=()=>e.jsxs("div",{className:"text-center mb-8",children:[e.jsx(f,{to:"/",className:"inline-block mb-6",children:e.jsx("h1",{className:"text-3xl font-bold text-green-600 dark:text-green-400",children:"Nanwa"})}),e.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome back"}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Sign in to your account to continue"})]});export{V as LoginPage}; +import{r as o,j as e,L as f,u as j,a as k}from"./index-CGkKx7Xv.js";import{N as w}from"./Navbar-BSLKvp05.js";import{F as y,P as v}from"./PasswordInput-Bff6SLQJ.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-Bh0nMcUg.js";import"./DarkModeToggle-Cu0JyOh5.js";import"./IconButton-vDjz_WRZ.js";const C=({connectionState:r,onCancel:t,showCancel:l=!0})=>{const[n,i]=o.useState(0),[c,u]=o.useState(0),{isConnecting:s,isColdStart:a,retryAttempt:d,totalAttempts:h,estimatedWaitTime:p,message:g}=r;return o.useEffect(()=>{if(!s){i(0),u(0);return}const x=setInterval(()=>{if(u(m=>m+1),a){const b=Math.min(c/60*100,90);i(b)}else{const b=Math.min(c/10*100,90);i(b)}},1e3);return()=>clearInterval(x)},[s,a,c]),o.useEffect(()=>{!s&&n>0&&i(100)},[s,n]),s?e.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg p-8 max-w-md w-full mx-4 shadow-2xl",children:[e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("div",{className:"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsxs("svg",{className:"w-8 h-8 text-green-600 dark:text-green-400 animate-spin",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:a?"Server Starting Up":"Connecting"})]}),e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-2",children:g}),a&&e.jsxs("div",{className:"text-sm text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsx("p",{children:"The server needs to start up from sleep mode."}),e.jsx("p",{children:"This usually takes 30-60 seconds."})]})]}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex justify-between text-sm text-gray-500 dark:text-gray-400 mb-2",children:[e.jsx("span",{children:"Progress"}),e.jsxs("span",{children:[Math.round(n),"%"]})]}),e.jsx("div",{className:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2",children:e.jsx("div",{className:"bg-green-600 h-2 rounded-full transition-all duration-1000 ease-out",style:{width:`${n}%`}})})]}),d>0&&e.jsx("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg mb-4",children:e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"text-blue-600 dark:text-blue-400",children:["Attempt ",d," of ",h]}),e.jsxs("span",{className:"text-blue-500 dark:text-blue-300",children:[c,"s elapsed"]})]})}),p>0&&e.jsxs("div",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mb-4",children:["Estimated wait time: ",p," seconds"]}),l&&t&&e.jsx("div",{className:"text-center",children:e.jsx("button",{onClick:t,className:"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 text-sm underline",children:"Cancel and try again later"})})]})}):null},N=(r,t)=>{const[l,n]=o.useState(r),[i,c]=o.useState({}),[u,s]=o.useState({}),a=o.useCallback(g=>{const{name:x,value:m}=g.target;n(b=>({...b,[x]:m})),i[x]&&c(b=>({...b,[x]:""}))},[i]),d=o.useCallback(g=>{const{name:x}=g.target;s(m=>({...m,[x]:!0}))},[]),h=o.useCallback(()=>{const g=t(l);return c(g),Object.keys(g).length===0},[l,t]),p=o.useCallback(()=>{n(r),c({}),s({})},[r]);return{values:l,errors:i,touched:u,handleChange:a,handleBlur:d,validateForm:h,resetForm:p,setErrors:c}},S=r=>{const t={};return r.email?/\S+@\S+\.\S+/.test(r.email)||(t.email="Email is invalid"):t.email="Email is required",r.password?r.password.length<6&&(t.password="Password must be at least 6 characters"):t.password="Password is required",t},A=({onSubmit:r,isSubmitting:t,errors:l})=>{const{values:n,errors:i,handleChange:c,handleBlur:u,validateForm:s}=N({email:"",password:""},S),a={...i,...l},d=h=>{h.preventDefault(),s()&&r(n)};return e.jsxs("form",{onSubmit:d,className:"space-y-6",children:[a.general&&e.jsx("div",{className:"bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 text-red-700 dark:text-red-400 px-4 py-3 rounded-lg",children:a.general}),e.jsx(y,{label:"Email address",id:"email",error:a.email,required:!0,children:e.jsx("input",{type:"email",id:"email",name:"email",value:n.email,onChange:c,onBlur:u,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${a.email?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"}`,placeholder:"Enter your email",disabled:t})}),e.jsx(y,{label:"Password",id:"password",error:a.password,required:!0,children:e.jsx(v,{id:"password",name:"password",value:n.password,onChange:c,onBlur:u,error:a.password,placeholder:"Enter your password",disabled:t})}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(E,{disabled:t}),e.jsx(F,{})]}),e.jsx(P,{isSubmitting:t}),e.jsx(T,{})]})},E=({disabled:r})=>e.jsxs("div",{className:"flex items-center",children:[e.jsx("input",{id:"remember-me",name:"remember-me",type:"checkbox",className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700",disabled:r}),e.jsx("label",{htmlFor:"remember-me",className:"ml-2 block text-sm text-gray-900 dark:text-white",children:"Remember me"})]}),F=()=>e.jsx("div",{className:"text-sm",children:e.jsx("a",{href:"#",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Forgot your password?"})}),P=({isSubmitting:r})=>e.jsx("button",{type:"submit",disabled:r,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 dark:bg-green-500 hover:bg-green-700 dark:hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:r?e.jsxs("div",{className:"flex items-center",children:[e.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Signing in..."]}):"Sign in"}),T=()=>e.jsx("div",{className:"text-center",children:e.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["Don't have an account?"," ",e.jsx(f,{to:"/register",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Sign up"})]})}),L=()=>e.jsxs("div",{className:"mt-8 p-4 bg-gray-50 dark:bg-gray-700 rounded-lg",children:[e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 mb-2",children:"Demo credentials:"}),e.jsxs("div",{className:"text-xs text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Admin:"})," admin@nanwa.com / admin123"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"User:"})," user@nanwa.com / user123"]})]})]}),M=()=>{const[r,t]=o.useState({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null}),l=o.useCallback(s=>{const{attempt:a,totalAttempts:d,delay:h,error:p,isColdStart:g}=s;t(x=>({...x,isConnecting:!0,isColdStart:g,retryAttempt:a,totalAttempts:d,estimatedWaitTime:Math.ceil(h/1e3),message:W(a,d,g),error:null}))},[]),n=o.useCallback(()=>{t({isConnecting:!0,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:10,message:"Connecting to server...",error:null})},[]),i=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"Connected successfully!",error:null})},[]),c=o.useCallback(s=>{const a=s&&typeof s=="object"?s.message||String(s):String(s||"Connection failed");t(d=>({...d,isConnecting:!1,error:a,message:"Connection failed. Please try again."}))},[]),u=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null})},[]);return{connectionState:r,handleRetry:l,startConnection:n,connectionSuccess:i,connectionFailed:c,resetConnection:u}},W=(r,t,l)=>r===1&&l?"Server is starting up, this may take up to 60 seconds...":r===2&&l?"Still starting up, please wait...":r===3&&l?"Almost ready, just a few more seconds...":r>=4&&l?"Final attempt, server should be ready soon...":`Retrying connection (${r}/${t})...`,B=()=>{const[r,t]=o.useState({}),[l,n]=o.useState(!1),{login:i}=j();k();const{connectionState:c,handleRetry:u,startConnection:s,connectionSuccess:a,connectionFailed:d,resetConnection:h}=M();return{errors:r,isSubmitting:l,connectionState:c,handleLogin:async x=>{n(!0),t({}),s();try{const m=await i(x.email,x.password,u);m.success?a():(d(new Error(m.error)),t({general:m.error}))}catch(m){d(m),t({general:"Connection failed. Please check your internet connection and try again."})}finally{n(!1)}},handleCancelConnection:()=>{h(),n(!1)}}},V=()=>{const{errors:r,isSubmitting:t,connectionState:l,handleLogin:n,handleCancelConnection:i}=B();return e.jsxs(e.Fragment,{children:[e.jsx(w,{}),e.jsx(C,{connectionState:l,onCancel:i,showCancel:!0}),e.jsx("div",{className:"min-h-screen bg-gradient-to-br from-green-50 to-green-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center p-4",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-2xl p-8 w-full max-w-md",children:[e.jsx(R,{}),e.jsx(A,{onSubmit:n,isSubmitting:t,errors:r}),e.jsx(L,{})]})})]})},R=()=>e.jsxs("div",{className:"text-center mb-8",children:[e.jsx(f,{to:"/",className:"inline-block mb-6",children:e.jsx("h1",{className:"text-3xl font-bold text-green-600 dark:text-green-400",children:"Nanwa"})}),e.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome back"}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Sign in to your account to continue"})]});export{V as LoginPage}; diff --git a/frontend/dist/assets/MapPage-BV2c4X5p.js b/frontend/dist/assets/MapPage-BV2c4X5p.js deleted file mode 100644 index d745ce1e1d..0000000000 --- a/frontend/dist/assets/MapPage-BV2c4X5p.js +++ /dev/null @@ -1,119 +0,0 @@ -import{j as M,r as B,R as Mn,d as yt,e as ls}from"./index-Dzr7PBfw.js";import{g as cs}from"./vendor-BtP0CW_r.js";import{G as ds}from"./FilterHeader-CBw4AnG_.js";import{M as fs,a as _s,T as ps}from"./MapSidebar-DZT3HTLm.js";import{E as ms}from"./ExportButton-BvRt6B34.js";import"./useKeyboardNavigation-BRnXQ3uS.js";import"./Table-CZfmBv9T.js";const gs=({filters:x,onExportStart:w,onExportComplete:c,onExportError:b,mockTreeData:P})=>M.jsx("div",{className:"mb-8",children:M.jsxs("div",{className:"flex justify-between items-center mb-4",children:[M.jsxs("div",{children:[M.jsx("h2",{className:"text-3xl font-bold text-gray-900 mb-2",children:"Forest Map"}),M.jsx("p",{className:"text-gray-600",children:"Explore your forests and individual trees with interactive mapping."})]}),M.jsx("div",{className:"flex items-center space-x-4",children:M.jsx(ms,{data:P,fileName:"map_data",filters:x,onExportStart:w,onExportComplete:c,onExportError:b})})]})});function vs(x,w){const c=B.useRef(w);B.useEffect(function(){w!==c.current&&x.attributionControl!=null&&(c.current!=null&&x.attributionControl.removeAttribution(c.current),w!=null&&x.attributionControl.addAttribution(w)),c.current=w},[x,w])}const ys=1;function Ls(x){return Object.freeze({__version:ys,map:x})}const In=B.createContext(null),xs=In.Provider;function Bn(){const x=B.useContext(In);if(x==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of ");return x}function ws(x){function w(c,b){const{instance:P}=x(c).current;return B.useImperativeHandle(b,()=>P),null}return B.forwardRef(w)}function Ps(x,w){const c=B.useRef();B.useEffect(function(){return w!=null&&x.instance.on(w),c.current=w,function(){c.current!=null&&x.instance.off(c.current),c.current=null}},[x,w])}function An(x,w){const c=x.pane??w.pane;return c?{...x,pane:c}:x}var he={exports:{}};/* @preserve - * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com - * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade - */var Cs=he.exports,Tn;function bs(){return Tn||(Tn=1,function(x,w){(function(c,b){b(w)})(Cs,function(c){var b="1.9.4";function P(t){var e,i,n,o;for(i=1,n=arguments.length;i"u"||!L||!L.Mixin)){t=V(t)?t:[t];for(var e=0;e0?Math.floor(t):Math.ceil(t)};Z.prototype={clone:function(){return new Z(this.x,this.y)},add:function(t){return this.clone()._add(z(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(z(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new Z(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new Z(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=_i(this.x),this.y=_i(this.y),this},distanceTo:function(t){t=z(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=z(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=z(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+v(this.x)+", "+v(this.y)+")"}};function z(t,e,i){return t instanceof Z?t:V(t)?new Z(t[0],t[1]):t==null?t:typeof t=="object"&&"x"in t&&"y"in t?new Z(t.x,t.y):new Z(t,e,i)}function q(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=ot(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>=e.x&&n.x<=i.x,u=o.y>=e.y&&n.y<=i.y;return r&&u},overlaps:function(t){t=ot(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>e.x&&n.xe.y&&n.y=e.lat&&o.lat<=i.lat&&n.lng>=e.lng&&o.lng<=i.lng},intersects:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>=e.lat&&n.lat<=i.lat,u=o.lng>=e.lng&&n.lng<=i.lng;return r&&u},overlaps:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>e.lat&&n.late.lng&&n.lng1,Jn=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",f,e),window.removeEventListener("testPassiveEventSupport",f,e)}catch{}return t}(),Qn=function(){return!!document.createElement("canvas").getContext}(),Ne=!!(document.createElementNS&&mi("svg").createSVGRect),to=!!Ne&&function(){var t=document.createElement("div");return t.innerHTML="",(t.firstChild&&t.firstChild.namespaceURI)==="http://www.w3.org/2000/svg"}(),eo=!Ne&&function(){try{var t=document.createElement("div");t.innerHTML='';var e=t.firstChild;return e.style.behavior="url(#default#VML)",e&&typeof e.adj=="object"}catch{return!1}}(),io=navigator.platform.indexOf("Mac")===0,no=navigator.platform.indexOf("Linux")===0;function pt(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var S={ie:ce,ielt9:Hn,edge:vi,webkit:Ie,android:yi,android23:Li,androidStock:jn,opera:Be,chrome:xi,gecko:wi,safari:Gn,phantom:Pi,opera12:Ci,win:Wn,ie3d:bi,webkit3d:Ae,gecko3d:Mi,any3d:Un,mobile:Yt,mobileWebkit:Vn,mobileWebkit3d:qn,msPointer:Ti,pointer:ki,touch:Kn,touchNative:Si,mobileOpera:Yn,mobileGecko:$n,retina:Xn,passiveEvents:Jn,canvas:Qn,svg:Ne,vml:eo,inlineSvg:to,mac:io,linux:no},Ei=S.msPointer?"MSPointerDown":"pointerdown",Oi=S.msPointer?"MSPointerMove":"pointermove",zi=S.msPointer?"MSPointerUp":"pointerup",Zi=S.msPointer?"MSPointerCancel":"pointercancel",Re={touchstart:Ei,touchmove:Oi,touchend:zi,touchcancel:Zi},Ii={touchstart:uo,touchmove:de,touchend:de,touchcancel:de},Rt={},Bi=!1;function oo(t,e,i){return e==="touchstart"&&ho(),Ii[e]?(i=Ii[e].bind(this,i),t.addEventListener(Re[e],i,!1),i):(console.warn("wrong event specified:",e),f)}function so(t,e,i){if(!Re[e]){console.warn("wrong event specified:",e);return}t.removeEventListener(Re[e],i,!1)}function ro(t){Rt[t.pointerId]=t}function ao(t){Rt[t.pointerId]&&(Rt[t.pointerId]=t)}function Ai(t){delete Rt[t.pointerId]}function ho(){Bi||(document.addEventListener(Ei,ro,!0),document.addEventListener(Oi,ao,!0),document.addEventListener(zi,Ai,!0),document.addEventListener(Zi,Ai,!0),Bi=!0)}function de(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){e.touches=[];for(var i in Rt)e.touches.push(Rt[i]);e.changedTouches=[e],t(e)}}function uo(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&et(e),de(t,e)}function lo(t){var e={},i,n;for(n in t)i=t[n],e[n]=i&&i.bind?i.bind(t):i;return t=e,e.type="dblclick",e.detail=2,e.isTrusted=!1,e._simulated=!0,e}var co=200;function fo(t,e){t.addEventListener("dblclick",e);var i=0,n;function o(r){if(r.detail!==1){n=r.detail;return}if(!(r.pointerType==="mouse"||r.sourceCapabilities&&!r.sourceCapabilities.firesTouchEvents)){var u=Fi(r);if(!(u.some(function(p){return p instanceof HTMLLabelElement&&p.attributes.for})&&!u.some(function(p){return p instanceof HTMLInputElement||p instanceof HTMLSelectElement}))){var d=Date.now();d-i<=co?(n++,n===2&&e(lo(r))):n=1,i=d}}}return t.addEventListener("click",o),{dblclick:e,simDblclick:o}}function _o(t,e){t.removeEventListener("dblclick",e.dblclick),t.removeEventListener("click",e.simDblclick)}var De=pe(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),$t=pe(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),Ni=$t==="webkitTransition"||$t==="OTransition"?$t+"End":"transitionend";function Ri(t){return typeof t=="string"?document.getElementById(t):t}function Xt(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];if((!i||i==="auto")&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);i=n?n[e]:null}return i==="auto"?null:i}function H(t,e,i){var n=document.createElement(t);return n.className=e||"",i&&i.appendChild(n),n}function K(t){var e=t.parentNode;e&&e.removeChild(t)}function fe(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function Dt(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function Ht(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function He(t,e){if(t.classList!==void 0)return t.classList.contains(e);var i=_e(t);return i.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(i)}function A(t,e){if(t.classList!==void 0)for(var i=k(e),n=0,o=i.length;n0?2*window.devicePixelRatio:1;function Gi(t){return S.edge?t.wheelDeltaY/2:t.deltaY&&t.deltaMode===0?-t.deltaY/go:t.deltaY&&t.deltaMode===1?-t.deltaY*20:t.deltaY&&t.deltaMode===2?-t.deltaY*60:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?-t.detail*20:t.detail?t.detail/-32765*60:0}function Je(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch{return!1}return i!==t}var vo={__proto__:null,on:I,off:U,stopPropagation:It,disableScrollPropagation:Xe,disableClickPropagation:ee,preventDefault:et,stop:Bt,getPropagationPath:Fi,getMousePosition:ji,getWheelDelta:Gi,isExternalTarget:Je,addListener:I,removeListener:U},Wi=qt.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Zt(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=nt(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=this._duration*1e3;ethis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),n=this._limitCenter(i,this._zoom,$(t));return i.equals(n)||this.panTo(n,e),this._enforcingBounds=!1,this},panInside:function(t,e){e=e||{};var i=z(e.paddingTopLeft||e.padding||[0,0]),n=z(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),r=this.project(t),u=this.getPixelBounds(),d=ot([u.min.add(i),u.max.subtract(n)]),p=d.getSize();if(!d.contains(r)){this._enforcingBounds=!0;var y=r.subtract(d.getCenter()),T=d.extend(r).getSize().subtract(p);o.x+=y.x<0?-T.x:T.x,o.y+=y.y<0?-T.y:T.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=P({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),o=i.divideBy(2).round(),r=n.subtract(o);return!r.x&&!r.y?this:(t.animate&&t.pan?this.panBy(r):(t.pan&&this._rawPanBy(r),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i}))},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=P({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){if(this._container._leaflet_id){var e=t.code,i=t.message||(e===1?"permission denied":e===2?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})}},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e=t.coords.latitude,i=t.coords.longitude,n=new W(e,i),o=n.toBounds(t.coords.accuracy*2),r=this._locateOptions;if(r.setView){var u=this.getBoundsZoom(o);this.setView(n,r.maxZoom?Math.min(u,r.maxZoom):u)}var d={latlng:n,bounds:o,timestamp:t.timestamp};for(var p in t.coords)typeof t.coords[p]=="number"&&(d[p]=t.coords[p]);this.fire("locationfound",d)}},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch{this._container._leaflet_id=void 0,this._containerId=void 0}this._locationWatchId!==void 0&&this.stopLocate(),this._stop(),K(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(ht(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)K(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){var i="leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),n=H("div",i,e||this._mapPane);return t&&(this._panes[t]=n),n},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new st(e,i)},getMinZoom:function(){return this.options.minZoom===void 0?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===void 0?this._layersMaxZoom===void 0?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=$(t),i=z(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),r=this.getMaxZoom(),u=t.getNorthWest(),d=t.getSouthEast(),p=this.getSize().subtract(i),y=ot(this.project(d,n),this.project(u,n)).getSize(),T=S.any3d?this.options.zoomSnap:1,E=p.x/y.x,N=p.y/y.y,it=e?Math.max(E,N):Math.min(E,N);return n=this.getScaleZoom(it,n),T&&(n=Math.round(n/(T/100))*(T/100),n=e?Math.ceil(n/T)*T:Math.floor(n/T)*T),Math.max(o,Math.min(r,n))},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new Z(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){var i=this._getTopLeftPoint(t,e);return new q(i,i.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(t===void 0?this.getZoom():t)},getPane:function(t){return typeof t=="string"?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=e===void 0?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs;e=e===void 0?this._zoom:e;var n=i.zoom(t*i.scale(e));return isNaN(n)?1/0:n},project:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.latLngToPoint(R(t),e)},unproject:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.pointToLatLng(z(t),e)},layerPointToLatLng:function(t){var e=z(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(R(t))._round();return e._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(R(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds($(t))},distance:function(t,e){return this.options.crs.distance(R(t),R(e))},containerPointToLayerPoint:function(t){return z(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return z(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(z(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(R(t)))},mouseEventToContainerPoint:function(t){return ji(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=Ri(t);if(e){if(e._leaflet_id)throw new Error("Map container is already initialized.")}else throw new Error("Map container not found.");I(e,"scroll",this._onScroll,this),this._containerId=l(e)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&S.any3d,A(t,"leaflet-container"+(S.touch?" leaflet-touch":"")+(S.retina?" leaflet-retina":"")+(S.ielt9?" leaflet-oldie":"")+(S.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var e=Xt(t,"position");e!=="absolute"&&e!=="relative"&&e!=="fixed"&&e!=="sticky"&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),X(this._mapPane,new Z(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(A(t.markerPane,"leaflet-zoom-hide"),A(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){X(this._mapPane,new Z(0,0));var n=!this._loaded;this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset");var o=this._zoom!==e;this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){e===void 0&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return ht(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){X(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[l(this._container)]=this;var e=t?U:I;e(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),S.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){ht(this._resizeRequest),this._resizeRequest=nt(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i=[],n,o=e==="mouseout"||e==="mouseover",r=t.target||t.srcElement,u=!1;r;){if(n=this._targets[l(r)],n&&(e==="click"||e==="preclick")&&this._draggableMoved(n)){u=!0;break}if(n&&n.listens(e,!0)&&(o&&!Je(r,t)||(i.push(n),o))||r===this._container)break;r=r.parentNode}return!i.length&&!u&&!o&&this.listens(e,!0)&&(i=[this]),i},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e=t.target||t.srcElement;if(!(!this._loaded||e._leaflet_disable_events||t.type==="click"&&this._isClickDisabled(e))){var i=t.type;i==="mousedown"&&Ve(e),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){if(t.type==="click"){var n=P({},t);n.type="preclick",this._fireDOMEvent(n,n.type,i)}var o=this._findEventTargets(t,e);if(i){for(var r=[],u=0;u0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),n=S.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){Y(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._trunc();return(e&&e.animate)!==!0&&!this.getSize().contains(i)?!1:(this.panBy(i,e),!0)},_createAnimProxy:function(){var t=this._proxy=H("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(e){var i=De,n=this._proxy.style[i];zt(this._proxy,this.project(e.center,e.zoom),this.getZoomScale(e.zoom,1)),n===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){K(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();zt(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n);return i.animate!==!0&&!this.getSize().contains(o)?!1:(nt(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this),!0)},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,A(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&Y(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function yo(t,e){return new D(t,e)}var ft=xt.extend({options:{position:"topright"},initialize:function(t){C(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return A(e,"leaflet-control"),i.indexOf("bottom")!==-1?n.insertBefore(e,n.firstChild):n.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(K(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),ie=function(t){return new ft(t)};D.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},e="leaflet-",i=this._controlContainer=H("div",e+"control-container",this._container);function n(o,r){var u=e+o+" "+e+r;t[o+r]=H("div",u,i)}n("top","left"),n("top","right"),n("bottom","left"),n("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)K(this._controlCorners[t]);K(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Ui=ft.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,n){return i1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=e&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(l(t.target)),i=e.overlay?t.type==="add"?"overlayadd":"overlayremove":t.type==="add"?"baselayerchange":null;i&&this._map.fire(i,e)},_createRadioElement:function(t,e){var i='",n=document.createElement("div");return n.innerHTML=i,n.firstChild},_addItem:function(t){var e=document.createElement("label"),i=this._map.hasLayer(t.layer),n;t.overlay?(n=document.createElement("input"),n.type="checkbox",n.className="leaflet-control-layers-selector",n.defaultChecked=i):n=this._createRadioElement("leaflet-base-layers_"+l(this),i),this._layerControlInputs.push(n),n.layerId=l(t.layer),I(n,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var r=document.createElement("span");e.appendChild(r),r.appendChild(n),r.appendChild(o);var u=t.overlay?this._overlaysList:this._baseLayersList;return u.appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){if(!this._preventClick){var t=this._layerControlInputs,e,i,n=[],o=[];this._handlingClick=!0;for(var r=t.length-1;r>=0;r--)e=t[r],i=this._getLayer(e.layerId).layer,e.checked?n.push(i):e.checked||o.push(i);for(r=0;r=0;o--)e=t[o],i=this._getLayer(e.layerId).layer,e.disabled=i.options.minZoom!==void 0&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section;this._preventClick=!0,I(t,"click",et),this.expand();var e=this;setTimeout(function(){U(t,"click",et),e._preventClick=!1})}}),Lo=function(t,e,i){return new Ui(t,e,i)},Qe=ft.extend({options:{position:"topleft",zoomInText:'',zoomInTitle:"Zoom in",zoomOutText:'',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=H("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){var r=H("a",i,n);return r.innerHTML=t,r.href="#",r.title=e,r.setAttribute("role","button"),r.setAttribute("aria-label",e),ee(r),I(r,"click",Bt),I(r,"click",o,this),I(r,"click",this._refocusOnMap,this),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";Y(this._zoomInButton,e),Y(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),(this._disabled||t._zoom===t.getMinZoom())&&(A(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),(this._disabled||t._zoom===t.getMaxZoom())&&(A(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}});D.mergeOptions({zoomControl:!0}),D.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new Qe,this.addControl(this.zoomControl))});var xo=function(t){return new Qe(t)},Vi=ft.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=H("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=H("div",e,i)),t.imperial&&(this._iScale=H("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,i=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(i)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t),i=e<1e3?e+" m":e/1e3+" km";this._updateScale(this._mScale,i,e/t)},_updateImperial:function(t){var e=t*3.2808399,i,n,o;e>5280?(i=e/5280,n=this._getRoundNum(i),this._updateScale(this._iScale,n+" mi",n/i)):(o=this._getRoundNum(e),this._updateScale(this._iScale,o+" ft",o/e))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),wo=function(t){return new Vi(t)},Po='',ti=ft.extend({options:{position:"bottomright",prefix:''+(S.inlineSvg?Po+" ":"")+"Leaflet"},initialize:function(t){C(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=H("div","leaflet-control-attribution"),ee(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(' ')}}});D.mergeOptions({attributionControl:!0}),D.addInitHook(function(){this.options.attributionControl&&new ti().addTo(this)});var Co=function(t){return new ti(t)};ft.Layers=Ui,ft.Zoom=Qe,ft.Scale=Vi,ft.Attribution=ti,ie.layers=Lo,ie.zoom=xo,ie.scale=wo,ie.attribution=Co;var gt=xt.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});gt.addTo=function(t,e){return t.addHandler(e,this),this};var bo={Events:at},qi=S.touch?"touchstart mousedown":"mousedown",St=qt.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){C(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(I(this._dragStartTarget,qi,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(St._dragging===this&&this.finishDrag(!0),U(this._dragStartTarget,qi,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(this._enabled&&(this._moved=!1,!He(this._element,"leaflet-zoom-anim"))){if(t.touches&&t.touches.length!==1){St._dragging===this&&this.finishDrag();return}if(!(St._dragging||t.shiftKey||t.which!==1&&t.button!==1&&!t.touches)&&(St._dragging=this,this._preventOutline&&Ve(this._element),Ge(),Jt(),!this._moving)){this.fire("down");var e=t.touches?t.touches[0]:t,i=Di(this._element);this._startPoint=new Z(e.clientX,e.clientY),this._startPos=Zt(this._element),this._parentScale=qe(i);var n=t.type==="mousedown";I(document,n?"mousemove":"touchmove",this._onMove,this),I(document,n?"mouseup":"touchend touchcancel",this._onUp,this)}}},_onMove:function(t){if(this._enabled){if(t.touches&&t.touches.length>1){this._moved=!0;return}var e=t.touches&&t.touches.length===1?t.touches[0]:t,i=new Z(e.clientX,e.clientY)._subtract(this._startPoint);!i.x&&!i.y||Math.abs(i.x)+Math.abs(i.y)r&&(u=d,r=p);r>i&&(e[u]=1,ii(t,e,i,n,u),ii(t,e,i,u,o))}function So(t,e){for(var i=[t[0]],n=1,o=0,r=t.length;ne&&(i.push(t[n]),o=n);return oe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function Eo(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function ne(t,e,i,n){var o=e.x,r=e.y,u=i.x-o,d=i.y-r,p=u*u+d*d,y;return p>0&&(y=((t.x-o)*u+(t.y-r)*d)/p,y>1?(o=i.x,r=i.y):y>0&&(o+=u*y,r+=d*y)),u=t.x-o,d=t.y-r,n?u*u+d*d:new Z(o,r)}function lt(t){return!V(t[0])||typeof t[0][0]!="object"&&typeof t[0][0]<"u"}function tn(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),lt(t)}function en(t,e){var i,n,o,r,u,d,p,y;if(!t||t.length===0)throw new Error("latlngs not passed");lt(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);var T=R([0,0]),E=$(t),N=E.getNorthWest().distanceTo(E.getSouthWest())*E.getNorthEast().distanceTo(E.getNorthWest());N<1700&&(T=ei(t));var it=t.length,Q=[];for(i=0;in){p=(r-n)/o,y=[d.x-p*(d.x-u.x),d.y-p*(d.y-u.y)];break}var rt=e.unproject(z(y));return R([rt.lat+T.lat,rt.lng+T.lng])}var Oo={__proto__:null,simplify:$i,pointToSegmentDistance:Xi,closestPointOnSegment:To,clipSegment:Qi,_getEdgeIntersection:ve,_getBitCode:At,_sqClosestPointOnSegment:ne,isFlat:lt,_flat:tn,polylineCenter:en},ni={project:function(t){return new Z(t.lng,t.lat)},unproject:function(t){return new W(t.y,t.x)},bounds:new q([-180,-90],[180,90])},oi={R:6378137,R_MINOR:6356752314245179e-9,bounds:new q([-2003750834279e-5,-1549657073972e-5],[2003750834279e-5,1876465623138e-5]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,o=this.R_MINOR/i,r=Math.sqrt(1-o*o),u=r*Math.sin(n),d=Math.tan(Math.PI/4-n/2)/Math.pow((1-u)/(1+u),r/2);return n=-i*Math.log(Math.max(d,1e-10)),new Z(t.lng*e*i,n)},unproject:function(t){for(var e=180/Math.PI,i=this.R,n=this.R_MINOR/i,o=Math.sqrt(1-n*n),r=Math.exp(-t.y/i),u=Math.PI/2-2*Math.atan(r),d=0,p=.1,y;d<15&&Math.abs(p)>1e-7;d++)y=o*Math.sin(u),y=Math.pow((1-y)/(1+y),o/2),p=Math.PI/2-2*Math.atan(r*y)-u,u+=p;return new W(u*e,t.x*e/i)}},zo={__proto__:null,LonLat:ni,Mercator:oi,SphericalMercator:Ee},Zo=P({},kt,{code:"EPSG:3395",projection:oi,transformation:function(){var t=.5/(Math.PI*oi.R);return Kt(t,.5,-t,.5)}()}),nn=P({},kt,{code:"EPSG:4326",projection:ni,transformation:Kt(1/180,1,-1/180,.5)}),Io=P({},wt,{projection:ni,transformation:Kt(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,n=e.lat-t.lat;return Math.sqrt(i*i+n*n)},infinite:!0});wt.Earth=kt,wt.EPSG3395=Zo,wt.EPSG3857=ze,wt.EPSG900913=Dn,wt.EPSG4326=nn,wt.Simple=Io;var _t=qt.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[l(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[l(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e=t.target;if(e.hasLayer(this)){if(this._map=e,this._zoomAnimated=e._zoomAnimated,this.getEvents){var i=this.getEvents();e.on(i,this),this.once("remove",function(){e.off(i,this)},this)}this.onAdd(e),this.fire("add"),e.fire("layeradd",{layer:this})}}});D.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var e=l(t);return this._layers[e]?this:(this._layers[e]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var e=l(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return l(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){t=t?V(t)?t:[t]:[];for(var e=0,i=t.length;ethis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),this.options.minZoom===void 0&&this._layersMinZoom&&this.getZoom()=2&&e[0]instanceof W&&e[0].equals(e[i-1])&&e.pop(),e},_setLatLngs:function(t){Ct.prototype._setLatLngs.call(this,t),lt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return lt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,i=new Z(e,e);if(t=new q(t.min.subtract(i),t.max.add(i)),this._parts=[],!(!this._pxBounds||!this._pxBounds.intersects(t))){if(this.options.noClip){this._parts=this._rings;return}for(var n=0,o=this._rings.length,r;nt.y!=o.y>t.y&&t.x<(o.x-n.x)*(t.y-n.y)/(o.y-n.y)+n.x&&(e=!e);return e||Ct.prototype._containsPoint.call(this,t,!0)}});function jo(t,e){return new Gt(t,e)}var bt=Pt.extend({initialize:function(t,e){C(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e=V(t)?t:t.features,i,n,o;if(e){for(i=0,n=e.length;i0&&o.push(o[0].slice()),o}function Wt(t,e){return t.feature?P({},t.feature,{geometry:e}):Ce(e)}function Ce(t){return t.type==="Feature"||t.type==="FeatureCollection"?t:{type:"Feature",properties:{},geometry:t}}var hi={toGeoJSON:function(t){return Wt(this,{type:"Point",coordinates:ai(this.getLatLng(),t)})}};ye.include(hi),si.include(hi),Le.include(hi),Ct.include({toGeoJSON:function(t){var e=!lt(this._latlngs),i=Pe(this._latlngs,e?1:0,!1,t);return Wt(this,{type:(e?"Multi":"")+"LineString",coordinates:i})}}),Gt.include({toGeoJSON:function(t){var e=!lt(this._latlngs),i=e&&!lt(this._latlngs[0]),n=Pe(this._latlngs,i?2:e?1:0,!0,t);return e||(n=[n]),Wt(this,{type:(i?"Multi":"")+"Polygon",coordinates:n})}}),Ft.include({toMultiPoint:function(t){var e=[];return this.eachLayer(function(i){e.push(i.toGeoJSON(t).geometry.coordinates)}),Wt(this,{type:"MultiPoint",coordinates:e})},toGeoJSON:function(t){var e=this.feature&&this.feature.geometry&&this.feature.geometry.type;if(e==="MultiPoint")return this.toMultiPoint(t);var i=e==="GeometryCollection",n=[];return this.eachLayer(function(o){if(o.toGeoJSON){var r=o.toGeoJSON(t);if(i)n.push(r.geometry);else{var u=Ce(r);u.type==="FeatureCollection"?n.push.apply(n,u.features):n.push(u)}}}),i?Wt(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}});function rn(t,e){return new bt(t,e)}var Go=rn,be=_t.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,e,i){this._url=t,this._bounds=$(e),C(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(A(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){K(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&Dt(this._image),this},bringToBack:function(){return this._map&&Ht(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=$(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=this._url.tagName==="IMG",e=this._image=t?this._url:H("img");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=f,e.onmousemove=f,e.onload=a(this.fire,this,"load"),e.onerror=a(this._overlayOnError,this,"error"),(this.options.crossOrigin||this.options.crossOrigin==="")&&(e.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t){this._url=e.src;return}e.src=this._url,e.alt=this.options.alt},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),i=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;zt(this._image,i,e)},_reset:function(){var t=this._image,e=new q(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();X(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){ut(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&this.options.zIndex!==void 0&&this.options.zIndex!==null&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),Wo=function(t,e,i){return new be(t,e,i)},an=be.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t=this._url.tagName==="VIDEO",e=this._image=t?this._url:H("video");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=f,e.onmousemove=f,e.onloadeddata=a(this.fire,this,"load"),t){for(var i=e.getElementsByTagName("source"),n=[],o=0;o0?n:[e.src];return}V(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var r=0;ro?(e.height=o+"px",A(t,r)):Y(t,r),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),i=this._getAnchor();X(this._container,e.add(i))},_adjustPan:function(){if(this.options.autoPan){if(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning){this._autopanning=!1;return}var t=this._map,e=parseInt(Xt(this._container,"marginBottom"),10)||0,i=this._container.offsetHeight+e,n=this._containerWidth,o=new Z(this._containerLeft,-i-this._containerBottom);o._add(Zt(this._container));var r=t.layerPointToContainerPoint(o),u=z(this.options.autoPanPadding),d=z(this.options.autoPanPaddingTopLeft||u),p=z(this.options.autoPanPaddingBottomRight||u),y=t.getSize(),T=0,E=0;r.x+n+p.x>y.x&&(T=r.x+n-y.x+p.x),r.x-T-d.x<0&&(T=r.x-d.x),r.y+i+p.y>y.y&&(E=r.y+i-y.y+p.y),r.y-E-d.y<0&&(E=r.y-d.y),(T||E)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([T,E]))}},_getAnchor:function(){return z(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),qo=function(t,e){return new Me(t,e)};D.mergeOptions({closePopupOnClick:!0}),D.include({openPopup:function(t,e,i){return this._initOverlay(Me,t,e,i).openOn(this),this},closePopup:function(t){return t=arguments.length?t:this._popup,t&&t.close(),this}}),_t.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Me,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof Pt||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return this._popup?this._popup.isOpen():!1},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){if(!(!this._popup||!this._map)){Bt(t);var e=t.layer||t.target;if(this._popup._source===e&&!(e instanceof Et)){this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng);return}this._popup._source=e,this.openPopup(t.latlng)}},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){t.originalEvent.keyCode===13&&this._openPopup(t)}});var Te=vt.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){vt.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){vt.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=vt.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip",e=t+" "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=H("div",e),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+l(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i,n=this._map,o=this._container,r=n.latLngToContainerPoint(n.getCenter()),u=n.layerPointToContainerPoint(t),d=this.options.direction,p=o.offsetWidth,y=o.offsetHeight,T=z(this.options.offset),E=this._getAnchor();d==="top"?(e=p/2,i=y):d==="bottom"?(e=p/2,i=0):d==="center"?(e=p/2,i=y/2):d==="right"?(e=0,i=y/2):d==="left"?(e=p,i=y/2):u.xthis.options.maxZoom||in?this._retainParent(o,r,u,n):!1)},_retainChildren:function(t,e,i,n){for(var o=2*t;o<2*t+2;o++)for(var r=2*e;r<2*e+2;r++){var u=new Z(o,r);u.z=i+1;var d=this._tileCoordsToKey(u),p=this._tiles[d];if(p&&p.active){p.retain=!0;continue}else p&&p.loaded&&(p.retain=!0);i+1this.options.maxZoom||this.options.minZoom!==void 0&&o1){this._setView(t,i);return}for(var E=o.min.y;E<=o.max.y;E++)for(var N=o.min.x;N<=o.max.x;N++){var it=new Z(N,E);if(it.z=this._tileZoom,!!this._isValidTile(it)){var Q=this._tiles[this._tileCoordsToKey(it)];Q?Q.current=!0:u.push(it)}}if(u.sort(function(rt,Vt){return rt.distanceTo(r)-Vt.distanceTo(r)}),u.length!==0){this._loading||(this._loading=!0,this.fire("loading"));var ct=document.createDocumentFragment();for(N=0;Ni.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return $(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),o=n.add(i),r=e.unproject(n,t.z),u=e.unproject(o,t.z);return[r,u]},_tileCoordsToBounds:function(t){var e=this._tileCoordsToNwSe(t),i=new st(e[0],e[1]);return this.options.noWrap||(i=this._map.wrapLatLngBounds(i)),i},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var e=t.split(":"),i=new Z(+e[0],+e[1]);return i.z=+e[2],i},_removeTile:function(t){var e=this._tiles[t];e&&(K(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){A(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=f,t.onmousemove=f,S.ielt9&&this.options.opacity<1&&ut(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&nt(a(this._tileReady,this,t,null,o)),X(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);i=this._tiles[n],i&&(i.loaded=+new Date,this._map._fadeAnimated?(ut(i.el,0),ht(this._fadeFrame),this._fadeFrame=nt(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(A(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),S.ielt9||!this._map._fadeAnimated?nt(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new Z(this._wrapX?g(t.x,this._wrapX):t.x,this._wrapY?g(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new q(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function $o(t){return new se(t)}var Ut=se.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,e=C(this,e),e.detectRetina&&S.retina&&e.maxZoom>0?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),typeof e.subdomains=="string"&&(e.subdomains=e.subdomains.split("")),this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&e===void 0&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement("img");return I(i,"load",a(this._tileOnLoad,this,e,i)),I(i,"error",a(this._tileOnError,this,e,i)),(this.options.crossOrigin||this.options.crossOrigin==="")&&(i.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),typeof this.options.referrerPolicy=="string"&&(i.referrerPolicy=this.options.referrerPolicy),i.alt="",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:S.retina?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var i=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=i),e["-y"]=i}return j(this._url,P(e,this.options))},_tileOnLoad:function(t,e){S.ielt9?setTimeout(a(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&e.getAttribute("src")!==n&&(e.src=n),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom,i=this.options.zoomReverse,n=this.options.zoomOffset;return i&&(t=e-t),t+n},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_abortLoading:function(){var t,e;for(t in this._tiles)if(this._tiles[t].coords.z!==this._tileZoom&&(e=this._tiles[t].el,e.onload=f,e.onerror=f,!e.complete)){e.src=G;var i=this._tiles[t].coords;K(e),delete this._tiles[t],this.fire("tileabort",{tile:e,coords:i})}},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute("src",G),se.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(!(!this._map||i&&i.getAttribute("src")===G))return se.prototype._tileReady.call(this,t,e,i)}});function ln(t,e){return new Ut(t,e)}var cn=Ut.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i=P({},this.defaultWmsParams);for(var n in e)n in this.options||(i[n]=e[n]);e=C(this,e);var o=e.detectRetina&&S.retina?2:1,r=this.getTileSize();i.width=r.x*o,i.height=r.y*o,this.wmsParams=i},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,Ut.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,n=ot(i.project(e[0]),i.project(e[1])),o=n.min,r=n.max,u=(this._wmsVersion>=1.3&&this._crs===nn?[o.y,o.x,r.y,r.x]:[o.x,o.y,r.x,r.y]).join(","),d=Ut.prototype.getTileUrl.call(this,t);return d+F(this.wmsParams,d,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+u},setParams:function(t,e){return P(this.wmsParams,t),e||this.redraw(),this}});function Xo(t,e){return new cn(t,e)}Ut.WMS=cn,ln.wms=Xo;var Mt=_t.extend({options:{padding:.1},initialize:function(t){C(this,t),l(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),A(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),r=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t,e));S.any3d?zt(this._container,r,i):X(this._container,r)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new q(i,i.add(e.multiplyBy(1+t*2)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),dn=Mt.extend({options:{tolerance:0},getEvents:function(){var t=Mt.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Mt.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");I(t,"mousemove",this._onMouseMove,this),I(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),I(t,"mouseout",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext("2d")},_destroyContainer:function(){ht(this._redrawRequest),delete this._ctx,K(this._container),U(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){var t;this._redrawBounds=null;for(var e in this._layers)t=this._layers[e],t._update();this._redraw()}},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Mt.prototype._update.call(this);var t=this._bounds,e=this._container,i=t.getSize(),n=S.retina?2:1;X(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",S.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){Mt.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[l(t)]=t;var e=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=e),this._drawLast=e,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,n=e.prev;i?i.prev=n:this._drawLast=n,n?n.next=i:this._drawFirst=i,delete t._order,delete this._layers[l(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(typeof t.options.dashArray=="string"){var e=t.options.dashArray.split(/[, ]+/),i=[],n,o;for(o=0;o')}}catch{}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),Jo={_initContainer:function(){this._container=H("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Mt.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=re("shape");A(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=re("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;K(e),t.removeInteractiveTarget(e),delete this._layers[l(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e||(e=t._stroke=re("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=V(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i||(i=t._fill=re("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,"+65535*360)},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){Dt(t._container)},_bringToBack:function(t){Ht(t._container)}},ke=S.vml?re:mi,ae=Mt.extend({_initContainer:function(){this._container=ke("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=ke("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){K(this._container),U(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Mt.prototype._update.call(this);var t=this._bounds,e=t.getSize(),i=this._container;(!this._svgSize||!this._svgSize.equals(e))&&(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),X(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update")}},_initPath:function(t){var e=t._path=ke("path");t.options.className&&A(e,t.options.className),t.options.interactive&&A(e,"leaflet-interactive"),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){K(t._path),t.removeInteractiveTarget(t._path),delete this._layers[l(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,i=t.options;e&&(i.stroke?(e.setAttribute("stroke",i.color),e.setAttribute("stroke-opacity",i.opacity),e.setAttribute("stroke-width",i.weight),e.setAttribute("stroke-linecap",i.lineCap),e.setAttribute("stroke-linejoin",i.lineJoin),i.dashArray?e.setAttribute("stroke-dasharray",i.dashArray):e.removeAttribute("stroke-dasharray"),i.dashOffset?e.setAttribute("stroke-dashoffset",i.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),i.fill?(e.setAttribute("fill",i.fillColor||i.color),e.setAttribute("fill-opacity",i.fillOpacity),e.setAttribute("fill-rule",i.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,gi(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n=Math.max(Math.round(t._radiusY),1)||i,o="a"+i+","+n+" 0 1,0 ",r=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+o+i*2+",0 "+o+-i*2+",0 ";this._setPath(t,r)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){Dt(t._path)},_bringToBack:function(t){Ht(t._path)}});S.vml&&ae.include(Jo);function _n(t){return S.svg||S.vml?new ae(t):null}D.include({getRenderer:function(t){var e=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return e||(e=this._renderer=this._createRenderer()),this.hasLayer(e)||this.addLayer(e),e},_getPaneRenderer:function(t){if(t==="overlayPane"||t===void 0)return!1;var e=this._paneRenderers[t];return e===void 0&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e},_createRenderer:function(t){return this.options.preferCanvas&&fn(t)||_n(t)}});var pn=Gt.extend({initialize:function(t,e){Gt.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=$(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function Qo(t,e){return new pn(t,e)}ae.create=ke,ae.pointsToPath=gi,bt.geometryToLayer=xe,bt.coordsToLatLng=ri,bt.coordsToLatLngs=we,bt.latLngToCoords=ai,bt.latLngsToCoords=Pe,bt.getFeature=Wt,bt.asFeature=Ce,D.mergeOptions({boxZoom:!0});var mn=gt.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){I(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){U(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){K(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){this._resetStateTimeout!==0&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||t.which!==1&&t.button!==1)return!1;this._clearDeferredResetState(),this._resetState(),Jt(),Ge(),this._startPoint=this._map.mouseEventToContainerPoint(t),I(document,{contextmenu:Bt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=H("div","leaflet-zoom-box",this._container),A(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var e=new q(this._point,this._startPoint),i=e.getSize();X(this._box,e.min),this._box.style.width=i.x+"px",this._box.style.height=i.y+"px"},_finish:function(){this._moved&&(K(this._box),Y(this._container,"leaflet-crosshair")),Qt(),We(),U(document,{contextmenu:Bt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if(!(t.which!==1&&t.button!==1)&&(this._finish(),!!this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0);var e=new st(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(e).fire("boxzoomend",{boxZoomBounds:e})}},_onKeyDown:function(t){t.keyCode===27&&(this._finish(),this._clearDeferredResetState(),this._resetState())}});D.addInitHook("addHandler","boxZoom",mn),D.mergeOptions({doubleClickZoom:!0});var gn=gt.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,o=t.originalEvent.shiftKey?i-n:i+n;e.options.doubleClickZoom==="center"?e.setZoom(o):e.setZoomAround(t.containerPoint,o)}});D.addInitHook("addHandler","doubleClickZoom",gn),D.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var vn=gt.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new St(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}A(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){Y(this._map._container,"leaflet-grab"),Y(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var e=$(this._map.options.maxBounds);this._offsetLimit=ot(this._map.latLngToContainerPoint(e.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(e.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(i),this._times.push(e),this._prunePositions(e)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){if(!(!this._viscosity||!this._offsetLimit)){var t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit;t.xe.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,r=(n+e+i)%t-e-i,u=Math.abs(o+i)0?r:-r))-e;this._delta=0,this._startTime=null,u&&(t.options.scrollWheelZoom==="center"?t.setZoom(e+u):t.setZoomAround(this._lastMousePos,e+u))}});D.addInitHook("addHandler","scrollWheelZoom",Ln);var ts=600;D.mergeOptions({tapHold:S.touchNative&&S.safari&&S.mobile,tapTolerance:15});var xn=gt.extend({addHooks:function(){I(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){U(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(clearTimeout(this._holdTimeout),t.touches.length===1){var e=t.touches[0];this._startPos=this._newPos=new Z(e.clientX,e.clientY),this._holdTimeout=setTimeout(a(function(){this._cancel(),this._isTapValid()&&(I(document,"touchend",et),I(document,"touchend touchcancel",this._cancelClickPrevent),this._simulateEvent("contextmenu",e))},this),ts),I(document,"touchend touchcancel contextmenu",this._cancel,this),I(document,"touchmove",this._onMove,this)}},_cancelClickPrevent:function t(){U(document,"touchend",et),U(document,"touchend touchcancel",t)},_cancel:function(){clearTimeout(this._holdTimeout),U(document,"touchend touchcancel contextmenu",this._cancel,this),U(document,"touchmove",this._onMove,this)},_onMove:function(t){var e=t.touches[0];this._newPos=new Z(e.clientX,e.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){var i=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});i._simulated=!0,e.target.dispatchEvent(i)}});D.addInitHook("addHandler","tapHold",xn),D.mergeOptions({touchZoom:S.touch,bounceAtZoomLimits:!0});var wn=gt.extend({addHooks:function(){A(this._map._container,"leaflet-touch-zoom"),I(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){Y(this._map._container,"leaflet-touch-zoom"),U(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e=this._map;if(!(!t.touches||t.touches.length!==2||e._animatingZoom||this._zooming)){var i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=e.getSize()._divideBy(2),this._startLatLng=e.containerPointToLatLng(this._centerPoint),e.options.touchZoom!=="center"&&(this._pinchStartLatLng=e.containerPointToLatLng(i.add(n)._divideBy(2))),this._startDist=i.distanceTo(n),this._startZoom=e.getZoom(),this._moved=!1,this._zooming=!0,e._stop(),I(document,"touchmove",this._onTouchMove,this),I(document,"touchend touchcancel",this._onTouchEnd,this),et(t)}},_onTouchMove:function(t){if(!(!t.touches||t.touches.length!==2||!this._zooming)){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),o=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&o>1)&&(this._zoom=e._limitZoom(this._zoom)),e.options.touchZoom==="center"){if(this._center=this._startLatLng,o===1)return}else{var r=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(o===1&&r.x===0&&r.y===0)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),ht(this._animRequest);var u=a(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=nt(u,this,!0),et(t)}},_onTouchEnd:function(){if(!this._moved||!this._zooming){this._zooming=!1;return}this._zooming=!1,ht(this._animRequest),U(document,"touchmove",this._onTouchMove,this),U(document,"touchend touchcancel",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))}});D.addInitHook("addHandler","touchZoom",wn),D.BoxZoom=mn,D.DoubleClickZoom=gn,D.Drag=vn,D.Keyboard=yn,D.ScrollWheelZoom=Ln,D.TapHold=xn,D.TouchZoom=wn,c.Bounds=q,c.Browser=S,c.CRS=wt,c.Canvas=dn,c.Circle=si,c.CircleMarker=Le,c.Class=xt,c.Control=ft,c.DivIcon=un,c.DivOverlay=vt,c.DomEvent=vo,c.DomUtil=mo,c.Draggable=St,c.Evented=qt,c.FeatureGroup=Pt,c.GeoJSON=bt,c.GridLayer=se,c.Handler=gt,c.Icon=jt,c.ImageOverlay=be,c.LatLng=W,c.LatLngBounds=st,c.Layer=_t,c.LayerGroup=Ft,c.LineUtil=Oo,c.Map=D,c.Marker=ye,c.Mixin=bo,c.Path=Et,c.Point=Z,c.PolyUtil=Mo,c.Polygon=Gt,c.Polyline=Ct,c.Popup=Me,c.PosAnimation=Wi,c.Projection=zo,c.Rectangle=pn,c.Renderer=Mt,c.SVG=ae,c.SVGOverlay=hn,c.TileLayer=Ut,c.Tooltip=Te,c.Transformation=Oe,c.Util=Nn,c.VideoOverlay=an,c.bind=a,c.bounds=ot,c.canvas=fn,c.circle=Ho,c.circleMarker=Do,c.control=ie,c.divIcon=Yo,c.extend=P,c.featureGroup=Ao,c.geoJSON=rn,c.geoJson=Go,c.gridLayer=$o,c.icon=No,c.imageOverlay=Wo,c.latLng=R,c.latLngBounds=$,c.layerGroup=Bo,c.map=yo,c.marker=Ro,c.point=z,c.polygon=jo,c.polyline=Fo,c.popup=qo,c.rectangle=Qo,c.setOptions=C,c.stamp=l,c.svg=_n,c.svgOverlay=Vo,c.tileLayer=ln,c.tooltip=Ko,c.transformation=Kt,c.version=b,c.videoOverlay=Uo;var es=window.L;c.noConflict=function(){return window.L=es,this},window.L=c})}(he,he.exports)),he.exports}var di=bs();const Tt=cs(di);function Ms(x,w,c){return Object.freeze({instance:x,context:w,container:c})}function Ts(x,w){return w==null?function(b,P){const s=B.useRef();return s.current||(s.current=x(b,P)),s}:function(b,P){const s=B.useRef();s.current||(s.current=x(b,P));const a=B.useRef(b),{instance:h}=s.current;return B.useEffect(function(){a.current!==b&&(w(h,b,a.current),a.current=b)},[h,b,P]),s}}function ks(x,w){B.useEffect(function(){return(w.layerContainer??w.map).addLayer(x.instance),function(){var s;(s=w.layerContainer)==null||s.removeLayer(x.instance),w.map.removeLayer(x.instance)}},[w,x])}function Ss(x){return function(c){const b=Bn(),P=x(An(c,b),b);return vs(b.map,c.attribution),Ps(P.current,c.eventHandlers),ks(P.current,b),P}}function Es(x,w){const c=Ts(x,w),b=Ss(c);return ws(b)}function Os(x,w,c){const{opacity:b,zIndex:P}=w;b!=null&&b!==c.opacity&&x.setOpacity(b),P!=null&&P!==c.zIndex&&x.setZIndex(P)}function fi(){return Bn().map}function li(){return li=Object.assign||function(x){for(var w=1;w(m==null?void 0:m.map)??null,[m]);const C=B.useCallback(O=>{if(O!==null&&m===null){const j=new di.Map(O,g);c!=null&&_!=null?j.setView(c,_):x!=null&&j.fitBounds(x,w),l!=null&&j.whenReady(l),k(Ls(j))}},[]);B.useEffect(()=>()=>{m==null||m.map.remove()},[m]);const F=m?Mn.createElement(xs,{value:m},b):a??null;return Mn.createElement("div",li({},v,{ref:C}),F)}const Zs=B.forwardRef(zs),Is=Es(function({url:w,...c},b){const P=new di.TileLayer(w,An(c,b));return Ms(P,b)},function(w,c,b){Os(w,c,b);const{url:P}=c;P!=null&&P!==b.url&&w.setUrl(P)});var ue={exports:{}},Bs=ue.exports,kn;function As(){return kn||(kn=1,function(x,w){(function(c,b){b(w)})(Bs,function(c){var b=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnEveryZoom:!1,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyShapePositions:null,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(s){L.Util.setOptions(this,s),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var a=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,a?this._withAnimation:this._noAnimation),this._markerCluster=a?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(s){if(s instanceof L.LayerGroup)return this.addLayers([s]);if(!s.getLatLng)return this._nonPointGroup.addLayer(s),this.fire("layeradd",{layer:s}),this;if(!this._map)return this._needsClustering.push(s),this.fire("layeradd",{layer:s}),this;if(this.hasLayer(s))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(s,this._maxZoom),this.fire("layeradd",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var a=s,h=this._zoom;if(s.__parent)for(;a.__parent._zoom>=h;)a=a.__parent;return this._currentShownBounds.contains(a.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(s,a):this._animationAddLayerNonAnimated(s,a)),this},removeLayer:function(s){return s instanceof L.LayerGroup?this.removeLayers([s]):s.getLatLng?this._map?s.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(s)),this._removeLayer(s,!0),this.fire("layerremove",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),s.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(s)&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,s)&&this.hasLayer(s)&&this._needsRemoving.push({layer:s,latlng:s._latlng}),this.fire("layerremove",{layer:s}),this):(this._nonPointGroup.removeLayer(s),this.fire("layerremove",{layer:s}),this)},addLayers:function(s,a){if(!L.Util.isArray(s))return this.addLayer(s);var h=this._featureGroup,l=this._nonPointGroup,_=this.options.chunkedLoading,g=this.options.chunkInterval,f=this.options.chunkProgress,v=s.length,m=0,k=!0,C;if(this._map){var F=new Date().getTime(),O=L.bind(function(){var V=new Date().getTime();for(this._map&&this._unspiderfy&&this._unspiderfy();mg)break}if(C=s[m],C instanceof L.LayerGroup){k&&(s=s.slice(),k=!1),this._extractNonGroupLayers(C,s),v=s.length;continue}if(!C.getLatLng){l.addLayer(C),a||this.fire("layeradd",{layer:C});continue}if(!this.hasLayer(C)&&(this._addLayer(C,this._maxZoom),a||this.fire("layeradd",{layer:C}),C.__parent&&C.__parent.getChildCount()===2)){var G=C.__parent.getAllChildMarkers(),tt=G[0]===C?G[1]:G[0];h.removeLayer(tt)}}f&&f(m,v,new Date().getTime()-F),m===v?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(O,this.options.chunkDelay)},this);O()}else for(var j=this._needsClustering;m=0;a--)s.extend(this._needsClustering[a].getLatLng());return s.extend(this._nonPointGroup.getBounds()),s},eachLayer:function(s,a){var h=this._needsClustering.slice(),l=this._needsRemoving,_,g,f;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(h),g=h.length-1;g>=0;g--){for(_=!0,f=l.length-1;f>=0;f--)if(l[f].layer===h[g]){_=!1;break}_&&s.call(a,h[g])}this._nonPointGroup.eachLayer(s,a)},getLayers:function(){var s=[];return this.eachLayer(function(a){s.push(a)}),s},getLayer:function(s){var a=null;return s=parseInt(s,10),this.eachLayer(function(h){L.stamp(h)===s&&(a=h)}),a},hasLayer:function(s){if(!s)return!1;var a,h=this._needsClustering;for(a=h.length-1;a>=0;a--)if(h[a]===s)return!0;for(h=this._needsRemoving,a=h.length-1;a>=0;a--)if(h[a].layer===s)return!1;return!!(s.__parent&&s.__parent._group===this)||this._nonPointGroup.hasLayer(s)},zoomToShowLayer:function(s,a){var h=this._map;typeof a!="function"&&(a=function(){});var l=function(){(h.hasLayer(s)||h.hasLayer(s.__parent))&&!this._inZoomAnimation&&(this._map.off("moveend",l,this),this.off("animationend",l,this),h.hasLayer(s)?a():s.__parent._icon&&(this.once("spiderfied",a,this),s.__parent.spiderfy()))};s._icon&&this._map.getBounds().contains(s.getLatLng())?a():s.__parent._zoom=0;h--)if(s[h]===a)return s.splice(h,1),!0},_removeFromGridUnclustered:function(s,a){for(var h=this._map,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom());a>=_&&l[a].removeObject(s,h.project(s.getLatLng(),a));a--);},_childMarkerDragStart:function(s){s.target.__dragStart=s.target._latlng},_childMarkerMoved:function(s){if(!this._ignoreMove&&!s.target.__dragStart){var a=s.target._popup&&s.target._popup.isOpen();this._moveChild(s.target,s.oldLatLng,s.latlng),a&&s.target.openPopup()}},_moveChild:function(s,a,h){s._latlng=a,this.removeLayer(s),s._latlng=h,this.addLayer(s)},_childMarkerDragEnd:function(s){var a=s.target.__dragStart;delete s.target.__dragStart,a&&this._moveChild(s.target,a,s.target._latlng)},_removeLayer:function(s,a,h){var l=this._gridClusters,_=this._gridUnclustered,g=this._featureGroup,f=this._map,v=Math.floor(this._map.getMinZoom());a&&this._removeFromGridUnclustered(s,this._maxZoom);var m=s.__parent,k=m._markers,C;for(this._arraySplice(k,s);m&&(m._childCount--,m._boundsNeedUpdate=!0,!(m._zoom"+a+"
",className:"marker-cluster"+h,iconSize:new L.Point(40,40)})},_bindEvents:function(){var s=this._map,a=this.options.spiderfyOnMaxZoom,h=this.options.showCoverageOnHover,l=this.options.zoomToBoundsOnClick,_=this.options.spiderfyOnEveryZoom;(a||l||_)&&this.on("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),h&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),s.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(s){var a=s.layer,h=a;if(!(s.type==="clusterkeypress"&&s.originalEvent&&s.originalEvent.keyCode!==13)){for(;h._childClusters.length===1;)h=h._childClusters[0];h._zoom===this._maxZoom&&h._childCount===a._childCount&&this.options.spiderfyOnMaxZoom?a.spiderfy():this.options.zoomToBoundsOnClick&&a.zoomToBounds(),this.options.spiderfyOnEveryZoom&&a.spiderfy(),s.originalEvent&&s.originalEvent.keyCode===13&&this._map._container.focus()}},_showCoverage:function(s){var a=this._map;this._inZoomAnimation||(this._shownPolygon&&a.removeLayer(this._shownPolygon),s.layer.getChildCount()>2&&s.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(s.layer.getConvexHull(),this.options.polygonOptions),a.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var s=this.options.spiderfyOnMaxZoom,a=this.options.showCoverageOnHover,h=this.options.zoomToBoundsOnClick,l=this.options.spiderfyOnEveryZoom,_=this._map;(s||h||l)&&this.off("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),a&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),_.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var s=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,s),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),s),this._currentShownBounds=s}},_generateInitialClusters:function(){var s=Math.ceil(this._map.getMaxZoom()),a=Math.floor(this._map.getMinZoom()),h=this.options.maxClusterRadius,l=h;typeof h!="function"&&(l=function(){return h}),this.options.disableClusteringAtZoom!==null&&(s=this.options.disableClusteringAtZoom-1),this._maxZoom=s,this._gridClusters={},this._gridUnclustered={};for(var _=s;_>=a;_--)this._gridClusters[_]=new L.DistanceGrid(l(_)),this._gridUnclustered[_]=new L.DistanceGrid(l(_));this._topClusterLevel=new this._markerCluster(this,a-1)},_addLayer:function(s,a){var h=this._gridClusters,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom()),g,f;for(this.options.singleMarkerMode&&this._overrideMarkerIcon(s),s.on(this._childMarkerEventHandlers,this);a>=_;a--){g=this._map.project(s.getLatLng(),a);var v=h[a].getNearObject(g);if(v){v._addChild(s),s.__parent=v;return}if(v=l[a].getNearObject(g),v){var m=v.__parent;m&&this._removeLayer(v,!1);var k=new this._markerCluster(this,a,v,s);h[a].addObject(k,this._map.project(k._cLatLng,a)),v.__parent=k,s.__parent=k;var C=k;for(f=a-1;f>m._zoom;f--)C=new this._markerCluster(this,f,C),h[f].addObject(C,this._map.project(v.getLatLng(),f));m._addChild(C),this._removeFromGridUnclustered(v,a);return}l[a].addObject(s,g)}this._topClusterLevel._addChild(s),s.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(s){s instanceof L.MarkerCluster&&s._iconNeedsUpdate&&s._updateIcon()})},_enqueue:function(s){this._queue.push(s),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var s=0;ss?(this._animationStart(),this._animationZoomOut(this._zoom,s)):this._moveEnd()},_getExpandedVisibleBounds:function(){if(this.options.removeOutsideVisibleBounds){if(L.Browser.mobile)return this._checkBoundsMaxLat(this._map.getBounds())}else return this._mapBoundsInfinite;return this._checkBoundsMaxLat(this._map.getBounds().pad(1))},_checkBoundsMaxLat:function(s){var a=this._maxLat;return a!==void 0&&(s.getNorth()>=a&&(s._northEast.lat=1/0),s.getSouth()<=-a&&(s._southWest.lat=-1/0)),s},_animationAddLayerNonAnimated:function(s,a){if(a===s)this._featureGroup.addLayer(s);else if(a._childCount===2){a._addToMap();var h=a.getAllChildMarkers();this._featureGroup.removeLayer(h[0]),this._featureGroup.removeLayer(h[1])}else a._updateIcon()},_extractNonGroupLayers:function(s,a){var h=s.getLayers(),l=0,_;for(a=a||[];l=0;g--)k=m[g],h.contains(k._latlng)||l.removeLayer(k)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(h,a),l.eachLayer(function(f){!(f instanceof L.MarkerCluster)&&f._icon&&f.clusterShow()}),this._topClusterLevel._recursively(h,s,a,function(f){f._recursivelyRestoreChildPositions(a)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(h,s,_,function(f){l.removeLayer(f),f.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(s,a){this._animationZoomOutSingle(this._topClusterLevel,s-1,a),this._topClusterLevel._recursivelyAddChildrenToMap(null,a,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),s,this._getExpandedVisibleBounds())},_animationAddLayer:function(s,a){var h=this,l=this._featureGroup;l.addLayer(s),a!==s&&(a._childCount>2?(a._updateIcon(),this._forceLayout(),this._animationStart(),s._setPos(this._map.latLngToLayerPoint(a.getLatLng())),s.clusterHide(),this._enqueue(function(){l.removeLayer(s),s.clusterShow(),h._animationEnd()})):(this._forceLayout(),h._animationStart(),h._animationZoomOutSingle(a,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(s,a,h){var l=this._getExpandedVisibleBounds(),_=Math.floor(this._map.getMinZoom());s._recursivelyAnimateChildrenInAndAddSelfToMap(l,_,a+1,h);var g=this;this._forceLayout(),s._recursivelyBecomeVisible(l,h),this._enqueue(function(){if(s._childCount===1){var f=s._markers[0];this._ignoreMove=!0,f.setLatLng(f.getLatLng()),this._ignoreMove=!1,f.clusterShow&&f.clusterShow()}else s._recursively(l,h,_,function(v){v._recursivelyRemoveChildrenFromMap(l,_,a+1)});g._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroup=function(s){return new L.MarkerClusterGroup(s)};var P=L.MarkerCluster=L.Marker.extend({options:L.Icon.prototype.options,initialize:function(s,a,h,l){L.Marker.prototype.initialize.call(this,h?h._cLatLng||h.getLatLng():new L.LatLng(0,0),{icon:this,pane:s.options.clusterPane}),this._group=s,this._zoom=a,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,h&&this._addChild(h),l&&this._addChild(l)},getAllChildMarkers:function(s,a){s=s||[];for(var h=this._childClusters.length-1;h>=0;h--)this._childClusters[h].getAllChildMarkers(s,a);for(var l=this._markers.length-1;l>=0;l--)a&&this._markers[l].__dragStart||s.push(this._markers[l]);return s},getChildCount:function(){return this._childCount},zoomToBounds:function(s){for(var a=this._childClusters.slice(),h=this._group._map,l=h.getBoundsZoom(this._bounds),_=this._zoom+1,g=h.getZoom(),f;a.length>0&&l>_;){_++;var v=[];for(f=0;f_?this._group._map.setView(this._latlng,_):l<=g?this._group._map.setView(this._latlng,g+1):this._group._map.fitBounds(this._bounds,s)},getBounds:function(){var s=new L.LatLngBounds;return s.extend(this._bounds),s},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(s,a){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(s),s instanceof L.MarkerCluster?(a||(this._childClusters.push(s),s.__parent=this),this._childCount+=s._childCount):(a||this._markers.push(s),this._childCount++),this.__parent&&this.__parent._addChild(s,!0)},_setClusterCenter:function(s){this._cLatLng||(this._cLatLng=s._cLatLng||s._latlng)},_resetBounds:function(){var s=this._bounds;s._southWest&&(s._southWest.lat=1/0,s._southWest.lng=1/0),s._northEast&&(s._northEast.lat=-1/0,s._northEast.lng=-1/0)},_recalculateBounds:function(){var s=this._markers,a=this._childClusters,h=0,l=0,_=this._childCount,g,f,v,m;if(_!==0){for(this._resetBounds(),g=0;g=0;g--)f=_[g],f._icon&&(f._setPos(a),f.clusterHide())},function(l){var _=l._childClusters,g,f;for(g=_.length-1;g>=0;g--)f=_[g],f._icon&&(f._setPos(a),f.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(s,a,h,l){this._recursively(s,l,a,function(_){_._recursivelyAnimateChildrenIn(s,_._group._map.latLngToLayerPoint(_.getLatLng()).round(),h),_._isSingleParent()&&h-1===l?(_.clusterShow(),_._recursivelyRemoveChildrenFromMap(s,a,h)):_.clusterHide(),_._addToMap()})},_recursivelyBecomeVisible:function(s,a){this._recursively(s,this._group._map.getMinZoom(),a,null,function(h){h.clusterShow()})},_recursivelyAddChildrenToMap:function(s,a,h){this._recursively(h,this._group._map.getMinZoom()-1,a,function(l){if(a!==l._zoom)for(var _=l._markers.length-1;_>=0;_--){var g=l._markers[_];h.contains(g._latlng)&&(s&&(g._backupLatlng=g.getLatLng(),g.setLatLng(s),g.clusterHide&&g.clusterHide()),l._group._featureGroup.addLayer(g))}},function(l){l._addToMap(s)})},_recursivelyRestoreChildPositions:function(s){for(var a=this._markers.length-1;a>=0;a--){var h=this._markers[a];h._backupLatlng&&(h.setLatLng(h._backupLatlng),delete h._backupLatlng)}if(s-1===this._zoom)for(var l=this._childClusters.length-1;l>=0;l--)this._childClusters[l]._restorePosition();else for(var _=this._childClusters.length-1;_>=0;_--)this._childClusters[_]._recursivelyRestoreChildPositions(s)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(s,a,h,l){var _,g;this._recursively(s,a-1,h-1,function(f){for(g=f._markers.length-1;g>=0;g--)_=f._markers[g],(!l||!l.contains(_._latlng))&&(f._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())},function(f){for(g=f._childClusters.length-1;g>=0;g--)_=f._childClusters[g],(!l||!l.contains(_._latlng))&&(f._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())})},_recursively:function(s,a,h,l,_){var g=this._childClusters,f=this._zoom,v,m;if(a<=f&&(l&&l(this),_&&f===h&&_(this)),f=0;v--)m=g[v],m._boundsNeedUpdate&&m._recalculateBounds(),s.intersects(m._bounds)&&m._recursively(s,a,h,l,_)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}});L.Marker.include({clusterHide:function(){var s=this.options.opacity;return this.setOpacity(0),this.options.opacity=s,this},clusterShow:function(){return this.setOpacity(this.options.opacity)}}),L.DistanceGrid=function(s){this._cellSize=s,this._sqCellSize=s*s,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},f=g[h]=g[h]||[],v=L.Util.stamp(s);this._objectPoint[v]=a,f.push(s)},updateObject:function(s,a){this.removeObject(s),this.addObject(s,a)},removeObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},f=g[h]=g[h]||[],v,m;for(delete this._objectPoint[L.Util.stamp(s)],v=0,m=f.length;v=0;g--){if(f=a[g],v=this.getDistant(f,s),v>0)_.push(f);else continue;v>h&&(h=v,l=f)}return{maxPoint:l,newPoints:_}},buildConvexHull:function(s,a){var h=[],l=this.findMostDistantPointFromBaseLine(s,a);return l.maxPoint?(h=h.concat(this.buildConvexHull([s[0],l.maxPoint],l.newPoints)),h=h.concat(this.buildConvexHull([l.maxPoint,s[1]],l.newPoints)),h):[s[0]]},getConvexHull:function(s){var a=!1,h=!1,l=!1,_=!1,g=null,f=null,v=null,m=null,k=null,C=null,F;for(F=s.length-1;F>=0;F--){var O=s[F];(a===!1||O.lat>a)&&(g=O,a=O.lat),(h===!1||O.latl)&&(v=O,l=O.lng),(_===!1||O.lng<_)&&(m=O,_=O.lng)}h!==a?(C=f,k=g):(C=m,k=v);var j=[].concat(this.buildConvexHull([C,k],s),this.buildConvexHull([k,C],s));return j}}}(),L.MarkerCluster.include({getConvexHull:function(){var s=this.getAllChildMarkers(),a=[],h,l;for(l=s.length-1;l>=0;l--)h=s[l].getLatLng(),a.push(h);return L.QuickHull.getConvexHull(a)}}),L.MarkerCluster.include({_2PI:Math.PI*2,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(!(this._group._spiderfied===this||this._group._inZoomAnimation)){var s=this.getAllChildMarkers(null,!0),a=this._group,h=a._map,l=h.latLngToLayerPoint(this._latlng),_;this._group._unspiderfy(),this._group._spiderfied=this,this._group.options.spiderfyShapePositions?_=this._group.options.spiderfyShapePositions(s.length,l):s.length>=this._circleSpiralSwitchover?_=this._generatePointsSpiral(s.length,l):(l.y+=10,_=this._generatePointsCircle(s.length,l)),this._animationSpiderfy(s,_)}},unspiderfy:function(s){this._group._inZoomAnimation||(this._animationUnspiderfy(s),this._group._spiderfied=null)},_generatePointsCircle:function(s,a){var h=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+s),l=h/this._2PI,_=this._2PI/s,g=[],f,v;for(l=Math.max(l,35),g.length=s,f=0;f=0;m--)m=0;g--)_=l[g],h.removeLayer(_),_._preSpiderfyLatlng&&(_.setLatLng(_._preSpiderfyLatlng),delete _._preSpiderfyLatlng),_.setZIndexOffset&&_.setZIndexOffset(0),_._spiderLeg&&(a.removeLayer(_._spiderLeg),delete _._spiderLeg);s.fire("unspiderfied",{cluster:this,markers:l}),s._ignoreMove=!1,s._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(s,a){var h=this._group,l=h._map,_=h._featureGroup,g=this._group.options.spiderLegPolylineOptions,f,v,m,k;for(h._ignoreMove=!0,f=0;f=0;F--)G=_.layerPointToLatLng(a[F]),O=s[F],O._preSpiderfyLatlng=O._latlng,O.setLatLng(G),O.clusterShow&&O.clusterShow(),m&&(j=O._spiderLeg,V=j._path,V.style.strokeDashoffset=0,j.setStyle({opacity:C}));this.setOpacity(.3),l._ignoreMove=!1,setTimeout(function(){l._animationEnd(),l.fire("spiderfied",{cluster:h,markers:s})},200)},_animationUnspiderfy:function(s){var a=this,h=this._group,l=h._map,_=h._featureGroup,g=s?l._latLngToNewLayerPoint(this._latlng,s.zoom,s.center):l.latLngToLayerPoint(this._latlng),f=this.getAllChildMarkers(null,!0),v=L.Path.SVG,m,k,C,F,O,j;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),k=f.length-1;k>=0;k--)m=f[k],m._preSpiderfyLatlng&&(m.closePopup(),m.setLatLng(m._preSpiderfyLatlng),delete m._preSpiderfyLatlng,j=!0,m._setPos&&(m._setPos(g),j=!1),m.clusterHide&&(m.clusterHide(),j=!1),j&&_.removeLayer(m),v&&(C=m._spiderLeg,F=C._path,O=F.getTotalLength()+.1,F.style.strokeDashoffset=O,C.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var V=0;for(k=f.length-1;k>=0;k--)m=f[k],m._spiderLeg&&V++;for(k=f.length-1;k>=0;k--)m=f[k],m._spiderLeg&&(m.clusterShow&&m.clusterShow(),m.setZIndexOffset&&m.setZIndexOffset(0),V>1&&_.removeLayer(m),l.removeLayer(m._spiderLeg),delete m._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:f})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(s){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(s))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(s){this._spiderfied&&this._spiderfied.unspiderfy(s)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(s){s._spiderLeg&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow(),s.setZIndexOffset&&s.setZIndexOffset(0),this._map.removeLayer(s._spiderLeg),delete s._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(s){return s?s instanceof L.MarkerClusterGroup?s=s._topClusterLevel.getAllChildMarkers():s instanceof L.LayerGroup?s=s._layers:s instanceof L.MarkerCluster?s=s.getAllChildMarkers():s instanceof L.Marker&&(s=[s]):s=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(s),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(s),this},_flagParentsIconsNeedUpdate:function(s){var a,h;for(a in s)for(h=s[a].__parent;h;)h._iconNeedsUpdate=!0,h=h.__parent},_refreshSingleMarkerModeMarkers:function(s){var a,h;for(a in s)h=s[a],this.hasLayer(h)&&h.setIcon(this._overrideMarkerIcon(h))}}),L.Marker.include({refreshIconOptions:function(s,a){var h=this.options.icon;return L.setOptions(h,s),this.setIcon(h),a&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),c.MarkerClusterGroup=b,c.MarkerCluster=P,Object.defineProperty(c,"__esModule",{value:!0})})}(ue,ue.exports)),ue.exports}As();const Sn={healthy:"#10b981",warning:"#f59e0b",critical:"#ef4444"},En={healthy:"background: #d1fae5; color: #065f46;",warning:"background: #fef3c7; color: #92400e;",critical:"background: #fee2e2; color: #991b1b;"},ci={small:{dimension:"30px",fontSize:"12px",threshold:0},medium:{dimension:"40px",fontSize:"14px",threshold:10},large:{dimension:"50px",fontSize:"16px",threshold:50}},Ns={size:20,emoji:"🌳",className:"custom-tree-marker"},Rs={backgroundColor:"#10b981",className:"custom-cluster-icon",iconSize:[30,30]},On=(x="healthy")=>{const w=Sn[x]||Sn.healthy,{size:c,emoji:b,className:P}=Ns;return Tt.divIcon({className:P,html:Ds(w,c,b),iconSize:[c,c],iconAnchor:[c/2,c/2]})},Ds=(x,w,c)=>` -
- ${c} -
-`,Hs=x=>{const w=Fs(x),{dimension:c,fontSize:b}=ci[w],{backgroundColor:P,className:s,iconSize:a}=Rs;return Tt.divIcon({html:js(P,c,b,x),className:s,iconSize:a})},Fs=x=>x>ci.large.threshold?"large":x>ci.medium.threshold?"medium":"small",js=(x,w,c,b)=>` -
${b}
-`,zn=x=>{const w=En[x.health]||En.healthy;return Gs(x,w)},Gs=(x,w)=>` -
-

${x.name}

-

Species: ${x.species}

-

Height: ${x.height}m

-

Health: - ${x.health} -

-
-`,Ws=({trees:x,onTreeClick:w,zoom:c})=>{const b=fi();return B.useEffect(()=>{if(!(!b||!x.length)){if(b.eachLayer(P=>{P instanceof Tt.MarkerClusterGroup&&b.removeLayer(P)}),c<12){const P=Tt.markerClusterGroup({chunkedLoading:!0,spiderfyOnMaxZoom:!0,showCoverageOnHover:!1,zoomToBoundsOnClick:!0,maxClusterRadius:50,iconCreateFunction:s=>{const a=s.getChildCount();return Hs(a)}});x.forEach(s=>{const a=Tt.marker([s.lat,s.lng],{icon:On(s.health)});a.bindPopup(zn(s)),a.on("click",()=>w(s)),P.addLayer(a)}),b.addLayer(P)}else x.forEach(P=>{const s=Tt.marker([P.lat,P.lng],{icon:On(P.health)});s.bindPopup(zn(P)),s.on("click",()=>w(P)),s.addTo(b)});return()=>{b.eachLayer(P=>{P instanceof Tt.MarkerClusterGroup&&b.removeLayer(P)})}}},[b,x,w,c]),null},Us=({onMapReady:x,onMapError:w})=>{const c=fi();return B.useEffect(()=>{const b=()=>{x&&x()},P=s=>{console.error("Map error:",s),w&&w(s)};return c.whenReady(()=>{b()}),c.on("tileerror",P),()=>{c.off("tileerror",P)}},[c,x,w]),null},Vs=({onZoomChange:x})=>{const w=fi();return B.useEffect(()=>{const c=()=>{x&&x(w.getZoom())};return w.on("zoomend",c),()=>{w.off("zoomend",c)}},[w]),null},qs=yt.div` - height: 600px; - width: 100%; - border-radius: 0.75rem; - overflow: hidden; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; - position: relative; -`,Ks=yt.div` - background: white; - padding: 1rem 1.5rem; - border-bottom: 1px solid #e5e7eb; - display: flex; - justify-content: space-between; - align-items: center; -`,Ys=yt.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`,$s=yt.div` - display: flex; - gap: 0.5rem; -`,Zn=yt.button` - padding: 0.5rem; - background: white; - border: 1px solid #d1d5db; - border-radius: 0.375rem; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background: #f9fafb; - border-color: #9ca3af; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`,Xs=yt.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.9); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - border-radius: 0.75rem; -`,Js=yt.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.95); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - border-radius: 0.75rem; -`,Qs=yt.div` - text-align: center; - padding: 2rem; - max-width: 300px; -`,tr=({onCenterMap:x,onFitBounds:w})=>M.jsxs(Ks,{children:[M.jsx(Ys,{children:"Forest Map"}),M.jsxs($s,{children:[M.jsx(Zn,{onClick:x,title:"Center Map",children:M.jsxs("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]})}),M.jsx(Zn,{onClick:w,title:"Fit to Bounds",children:M.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})})})]})]});delete Tt.Icon.Default.prototype._getIconUrl;Tt.Icon.Default.mergeOptions({iconRetinaUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png",iconUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png",shadowUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png"});const er=({trees:x=[{id:1,lat:59.3293,lng:18.0686,name:"Tree A-001",health:"healthy",height:2.4,species:"Pine"},{id:2,lat:59.33,lng:18.069,name:"Tree A-002",health:"healthy",height:2.1,species:"Oak"},{id:3,lat:59.3285,lng:18.0675,name:"Tree A-003",health:"warning",height:1.8,species:"Birch"},{id:4,lat:59.331,lng:18.07,name:"Tree A-004",health:"critical",height:1.5,species:"Spruce"},{id:5,lat:59.3275,lng:18.066,name:"Tree A-005",health:"healthy",height:2.7,species:"Pine"},{id:6,lat:59.332,lng:18.071,name:"Tree A-006",health:"healthy",height:2.3,species:"Oak"},{id:7,lat:59.3265,lng:18.065,name:"Tree A-007",health:"warning",height:1.9,species:"Birch"},{id:8,lat:59.333,lng:18.072,name:"Tree A-008",health:"healthy",height:2.5,species:"Spruce"}],onTreeSelect:w,filters:c={},loading:b=!1,error:P=null})=>{const[s,a]=B.useState(13),[h,l]=B.useState(null),[_,g]=B.useState(!0),[f,v]=B.useState(null),m=x.filter(G=>{if(c.selectedForests&&c.selectedForests.length>0){const tt=G.id<=4?1:2;if(!c.selectedForests.includes(tt))return!1}if(c.dateRange){const tt=new Date(2023,G.id%12,G.id%28+1);if(ttc.dateRange.endDate)return!1}return!0}),k=B.useCallback(G=>{l(G),w&&w(G)},[w]),C=B.useCallback(G=>{a(G)},[]),F=B.useCallback(()=>{g(!1),v(null)},[]),O=B.useCallback(G=>{g(!1),v((G==null?void 0:G.message)||"Failed to load map")},[]),j=B.useCallback(()=>{g(!0),v(null),setTimeout(()=>{g(!1)},1e3)},[]),V=B.useCallback(()=>{if(m.length===0)return;const G=m.reduce((Ot,Nt)=>Ot+Nt.lat,0),tt=m.reduce((Ot,Nt)=>Ot+Nt.lng,0),Lt=G/m.length,le=tt/m.length;console.log("Center map at:",Lt,le)},[m]),dt=B.useCallback(()=>{if(m.length===0)return;const G=m.reduce((tt,Lt)=>({minLat:Math.min(tt.minLat,Lt.lat),maxLat:Math.max(tt.maxLat,Lt.lat),minLng:Math.min(tt.minLng,Lt.lng),maxLng:Math.max(tt.maxLng,Lt.lng)}),{minLat:m[0].lat,maxLat:m[0].lat,minLng:m[0].lng,maxLng:m[0].lng});console.log("Fit bounds:",G)},[m]);return M.jsxs("div",{children:[M.jsxs(tr,{children:[M.jsx(MapTitle,{children:"Forest Map"}),M.jsxs(MapControls,{children:[M.jsx(ControlButton,{onClick:V,title:"Center Map",children:M.jsxs("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]})}),M.jsx(ControlButton,{onClick:dt,title:"Fit to Bounds",children:M.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})})})]})]}),M.jsxs(qs,{children:[M.jsxs(Zs,{center:[59.3293,18.0686],zoom:13,style:{height:"100%",width:"100%"},children:[M.jsx(Is,{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",attribution:'© OpenStreetMap contributors'}),M.jsx(Us,{onMapReady:F,onMapError:O}),M.jsx(Vs,{onZoomChange:C}),M.jsx(Ws,{trees:m,onTreeClick:k,zoom:s})]}),(_||b)&&M.jsx(Xs,{children:M.jsxs("div",{className:"text-center",children:[M.jsx(ls,{}),M.jsx("p",{className:"mt-2 text-sm text-gray-600",children:"Loading map..."})]})}),(f||P)&&M.jsx(Js,{children:M.jsxs(Qs,{children:[M.jsx("svg",{className:"w-12 h-12 text-red-500 mx-auto mb-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:M.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),M.jsx("h4",{className:"text-lg font-semibold text-gray-900 mb-2",children:"Map Error"}),M.jsx("p",{className:"text-sm text-gray-600 mb-4",children:f||P}),M.jsx("button",{onClick:j,className:"px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors text-sm",children:"Retry"})]})})]}),M.jsxs("div",{className:"mt-4 p-4 bg-white rounded-lg border border-gray-200",children:[M.jsx("h4",{className:"font-medium text-gray-900 mb-2",children:"Legend"}),M.jsxs("div",{className:"flex flex-wrap gap-4 text-sm",children:[M.jsxs("div",{className:"flex items-center",children:[M.jsx("div",{className:"w-4 h-4 bg-green-500 rounded-full mr-2"}),M.jsx("span",{children:"Healthy Trees"})]}),M.jsxs("div",{className:"flex items-center",children:[M.jsx("div",{className:"w-4 h-4 bg-yellow-500 rounded-full mr-2"}),M.jsx("span",{children:"Warning"})]}),M.jsxs("div",{className:"flex items-center",children:[M.jsx("div",{className:"w-4 h-4 bg-red-500 rounded-full mr-2"}),M.jsx("span",{children:"Critical"})]}),M.jsx("div",{className:"flex items-center text-gray-500",children:M.jsxs("span",{children:["Showing ",m.length," of ",x.length," trees"]})}),M.jsxs("div",{className:"flex items-center text-gray-500",children:[M.jsxs("span",{children:["Zoom level: ",s]}),s<12&&M.jsx("span",{className:"ml-4 text-xs",children:"(Clustering enabled)"})]})]})]})]})},ir=()=>{const[x,w]=B.useState({}),c=B.useCallback(P=>{w(P),console.log("Map filters changed:",P)},[]),b=B.useCallback(()=>{w({})},[]);return{filters:x,handleFiltersChange:c,resetFilters:b}},nr=()=>{const[x,w]=B.useState(null),[c,b]=B.useState(!1),P=B.useCallback(h=>{w(h),b(!0)},[]),s=B.useCallback(()=>{w(null),b(!1)},[]),a=B.useCallback(()=>{w(null),b(!1)},[]);return{selectedTree:x,isModalOpen:c,handleTreeSelect:P,handleCloseTreeDetail:s,clearSelection:a}},or=yt.div` - min-height: 100vh; - background-color: #f9fafb; -`,sr=yt.main` - margin-left: 250px; - padding: 2rem; -`,rr=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],_r=()=>{const{filters:x,handleFiltersChange:w}=ir(),{selectedTree:c,isModalOpen:b,handleTreeSelect:P,handleCloseTreeDetail:s}=nr(),a=()=>{console.log("Export started")},h=(_,g)=>{console.log(`Export completed: ${_} with ${g} records`)},l=_=>{console.error("Export error:",_)};return M.jsxs(or,{children:[M.jsx(fs,{}),M.jsx(_s,{}),M.jsx(sr,{children:M.jsxs("div",{className:"max-w-7xl mx-auto",children:[M.jsx(gs,{filters:x,onExportStart:a,onExportComplete:h,onExportError:l,mockTreeData:rr}),M.jsx(ds,{onFiltersChange:w}),M.jsx(ps,{tree:c,isOpen:b,onClose:s}),M.jsx(er,{onTreeSelect:P,filters:x})]})})]})};export{_r as MapPage}; diff --git a/frontend/dist/assets/MapPage-DVu2-W4J.js b/frontend/dist/assets/MapPage-DVu2-W4J.js new file mode 100644 index 0000000000..ba2c1e42d9 --- /dev/null +++ b/frontend/dist/assets/MapPage-DVu2-W4J.js @@ -0,0 +1,113 @@ +import{r as z,R as Mn,d as zt,j as S,e as In}from"./index-CGkKx7Xv.js";import{g as cs}from"./vendor-BtP0CW_r.js";import{u as ds,D as fs,a as _s,G as ms,t as ps}from"./useSidebarState-Ctkpd6zX.js";import{E as gs}from"./ExportButton-BryKwkQ4.js";import{T as vs}from"./TreeDetailModal-DPmuOlrX.js";import"./DarkModeToggle-Cu0JyOh5.js";import"./IconButton-vDjz_WRZ.js";import"./useKeyboardNavigation-Bh0nMcUg.js";import"./Table-CfKObwuM.js";function ys(x,w){const f=z.useRef(w);z.useEffect(function(){w!==f.current&&x.attributionControl!=null&&(f.current!=null&&x.attributionControl.removeAttribution(f.current),w!=null&&x.attributionControl.addAttribution(w)),f.current=w},[x,w])}const Ls=1;function xs(x){return Object.freeze({__version:Ls,map:x})}const Bn=z.createContext(null),ws=Bn.Provider;function An(){const x=z.useContext(Bn);if(x==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of ");return x}function Ps(x){function w(f,b){const{instance:P}=x(f).current;return z.useImperativeHandle(b,()=>P),null}return z.forwardRef(w)}function Cs(x,w){const f=z.useRef();z.useEffect(function(){return w!=null&&x.instance.on(w),f.current=w,function(){f.current!=null&&x.instance.off(f.current),f.current=null}},[x,w])}function Nn(x,w){const f=x.pane??w.pane;return f?{...x,pane:f}:x}var ue={exports:{}};/* @preserve + * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com + * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */var bs=ue.exports,Tn;function Ms(){return Tn||(Tn=1,function(x,w){(function(f,b){b(w)})(bs,function(f){var b="1.9.4";function P(t){var e,i,n,o;for(i=1,n=arguments.length;i"u"||!L||!L.Mixin)){t=H(t)?t:[t];for(var e=0;e0?Math.floor(t):Math.ceil(t)};I.prototype={clone:function(){return new I(this.x,this.y)},add:function(t){return this.clone()._add(Z(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(Z(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new I(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new I(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=_i(this.x),this.y=_i(this.y),this},distanceTo:function(t){t=Z(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=Z(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=Z(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+v(this.x)+", "+v(this.y)+")"}};function Z(t,e,i){return t instanceof I?t:H(t)?new I(t[0],t[1]):t==null?t:typeof t=="object"&&"x"in t&&"y"in t?new I(t.x,t.y):new I(t,e,i)}function q(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=rt(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>=e.x&&n.x<=i.x,u=o.y>=e.y&&n.y<=i.y;return r&&u},overlaps:function(t){t=rt(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>e.x&&n.xe.y&&n.y=e.lat&&o.lat<=i.lat&&n.lng>=e.lng&&o.lng<=i.lng},intersects:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>=e.lat&&n.lat<=i.lat,u=o.lng>=e.lng&&n.lng<=i.lng;return r&&u},overlaps:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>e.lat&&n.late.lng&&n.lng1,Qn=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",d,e),window.removeEventListener("testPassiveEventSupport",d,e)}catch{}return t}(),to=function(){return!!document.createElement("canvas").getContext}(),Ne=!!(document.createElementNS&&pi("svg").createSVGRect),eo=!!Ne&&function(){var t=document.createElement("div");return t.innerHTML="",(t.firstChild&&t.firstChild.namespaceURI)==="http://www.w3.org/2000/svg"}(),io=!Ne&&function(){try{var t=document.createElement("div");t.innerHTML='';var e=t.firstChild;return e.style.behavior="url(#default#VML)",e&&typeof e.adj=="object"}catch{return!1}}(),no=navigator.platform.indexOf("Mac")===0,oo=navigator.platform.indexOf("Linux")===0;function gt(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var k={ie:ce,ielt9:Hn,edge:vi,webkit:Ie,android:yi,android23:Li,androidStock:Gn,opera:Be,chrome:xi,gecko:wi,safari:Wn,phantom:Pi,opera12:Ci,win:Un,ie3d:bi,webkit3d:Ae,gecko3d:Mi,any3d:Vn,mobile:Xt,mobileWebkit:qn,mobileWebkit3d:Kn,msPointer:Ti,pointer:Si,touch:Yn,touchNative:ki,mobileOpera:Xn,mobileGecko:$n,retina:Jn,passiveEvents:Qn,canvas:to,svg:Ne,vml:io,inlineSvg:eo,mac:no,linux:oo},Ei=k.msPointer?"MSPointerDown":"pointerdown",Oi=k.msPointer?"MSPointerMove":"pointermove",zi=k.msPointer?"MSPointerUp":"pointerup",Zi=k.msPointer?"MSPointerCancel":"pointercancel",Re={touchstart:Ei,touchmove:Oi,touchend:zi,touchcancel:Zi},Ii={touchstart:lo,touchmove:de,touchend:de,touchcancel:de},Dt={},Bi=!1;function so(t,e,i){return e==="touchstart"&&uo(),Ii[e]?(i=Ii[e].bind(this,i),t.addEventListener(Re[e],i,!1),i):(console.warn("wrong event specified:",e),d)}function ro(t,e,i){if(!Re[e]){console.warn("wrong event specified:",e);return}t.removeEventListener(Re[e],i,!1)}function ao(t){Dt[t.pointerId]=t}function ho(t){Dt[t.pointerId]&&(Dt[t.pointerId]=t)}function Ai(t){delete Dt[t.pointerId]}function uo(){Bi||(document.addEventListener(Ei,ao,!0),document.addEventListener(Oi,ho,!0),document.addEventListener(zi,Ai,!0),document.addEventListener(Zi,Ai,!0),Bi=!0)}function de(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){e.touches=[];for(var i in Dt)e.touches.push(Dt[i]);e.changedTouches=[e],t(e)}}function lo(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&nt(e),de(t,e)}function co(t){var e={},i,n;for(n in t)i=t[n],e[n]=i&&i.bind?i.bind(t):i;return t=e,e.type="dblclick",e.detail=2,e.isTrusted=!1,e._simulated=!0,e}var fo=200;function _o(t,e){t.addEventListener("dblclick",e);var i=0,n;function o(r){if(r.detail!==1){n=r.detail;return}if(!(r.pointerType==="mouse"||r.sourceCapabilities&&!r.sourceCapabilities.firesTouchEvents)){var u=Hi(r);if(!(u.some(function(m){return m instanceof HTMLLabelElement&&m.attributes.for})&&!u.some(function(m){return m instanceof HTMLInputElement||m instanceof HTMLSelectElement}))){var c=Date.now();c-i<=fo?(n++,n===2&&e(co(r))):n=1,i=c}}}return t.addEventListener("click",o),{dblclick:e,simDblclick:o}}function mo(t,e){t.removeEventListener("dblclick",e.dblclick),t.removeEventListener("click",e.simDblclick)}var De=me(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),$t=me(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),Ni=$t==="webkitTransition"||$t==="OTransition"?$t+"End":"transitionend";function Ri(t){return typeof t=="string"?document.getElementById(t):t}function Jt(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];if((!i||i==="auto")&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);i=n?n[e]:null}return i==="auto"?null:i}function G(t,e,i){var n=document.createElement(t);return n.className=e||"",i&&i.appendChild(n),n}function K(t){var e=t.parentNode;e&&e.removeChild(t)}function fe(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function Ft(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function Ht(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function Fe(t,e){if(t.classList!==void 0)return t.classList.contains(e);var i=_e(t);return i.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(i)}function A(t,e){if(t.classList!==void 0)for(var i=T(e),n=0,o=i.length;n0?2*window.devicePixelRatio:1;function Gi(t){return k.edge?t.wheelDeltaY/2:t.deltaY&&t.deltaMode===0?-t.deltaY/vo:t.deltaY&&t.deltaMode===1?-t.deltaY*20:t.deltaY&&t.deltaMode===2?-t.deltaY*60:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?-t.detail*20:t.detail?t.detail/-32765*60:0}function Je(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch{return!1}return i!==t}var yo={__proto__:null,on:B,off:V,stopPropagation:At,disableScrollPropagation:$e,disableClickPropagation:ie,preventDefault:nt,stop:Nt,getPropagationPath:Hi,getMousePosition:ji,getWheelDelta:Gi,isExternalTarget:Je,addListener:B,removeListener:V},Wi=Kt.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Bt(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=it(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=this._duration*1e3;ethis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),n=this._limitCenter(i,this._zoom,$(t));return i.equals(n)||this.panTo(n,e),this._enforcingBounds=!1,this},panInside:function(t,e){e=e||{};var i=Z(e.paddingTopLeft||e.padding||[0,0]),n=Z(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),r=this.project(t),u=this.getPixelBounds(),c=rt([u.min.add(i),u.max.subtract(n)]),m=c.getSize();if(!c.contains(r)){this._enforcingBounds=!0;var y=r.subtract(c.getCenter()),M=c.extend(r).getSize().subtract(m);o.x+=y.x<0?-M.x:M.x,o.y+=y.y<0?-M.y:M.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=P({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),o=i.divideBy(2).round(),r=n.subtract(o);return!r.x&&!r.y?this:(t.animate&&t.pan?this.panBy(r):(t.pan&&this._rawPanBy(r),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i}))},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=P({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){if(this._container._leaflet_id){var e=t.code,i=t.message||(e===1?"permission denied":e===2?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})}},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e=t.coords.latitude,i=t.coords.longitude,n=new U(e,i),o=n.toBounds(t.coords.accuracy*2),r=this._locateOptions;if(r.setView){var u=this.getBoundsZoom(o);this.setView(n,r.maxZoom?Math.min(u,r.maxZoom):u)}var c={latlng:n,bounds:o,timestamp:t.timestamp};for(var m in t.coords)typeof t.coords[m]=="number"&&(c[m]=t.coords[m]);this.fire("locationfound",c)}},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch{this._container._leaflet_id=void 0,this._containerId=void 0}this._locationWatchId!==void 0&&this.stopLocate(),this._stop(),K(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(lt(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)K(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){var i="leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),n=G("div",i,e||this._mapPane);return t&&(this._panes[t]=n),n},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new at(e,i)},getMinZoom:function(){return this.options.minZoom===void 0?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===void 0?this._layersMaxZoom===void 0?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=$(t),i=Z(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),r=this.getMaxZoom(),u=t.getNorthWest(),c=t.getSouthEast(),m=this.getSize().subtract(i),y=rt(this.project(c,n),this.project(u,n)).getSize(),M=k.any3d?this.options.zoomSnap:1,E=m.x/y.x,N=m.y/y.y,ot=e?Math.max(E,N):Math.min(E,N);return n=this.getScaleZoom(ot,n),M&&(n=Math.round(n/(M/100))*(M/100),n=e?Math.ceil(n/M)*M:Math.floor(n/M)*M),Math.max(o,Math.min(r,n))},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new I(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){var i=this._getTopLeftPoint(t,e);return new q(i,i.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(t===void 0?this.getZoom():t)},getPane:function(t){return typeof t=="string"?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=e===void 0?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs;e=e===void 0?this._zoom:e;var n=i.zoom(t*i.scale(e));return isNaN(n)?1/0:n},project:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.latLngToPoint(D(t),e)},unproject:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.pointToLatLng(Z(t),e)},layerPointToLatLng:function(t){var e=Z(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(D(t))._round();return e._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(D(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds($(t))},distance:function(t,e){return this.options.crs.distance(D(t),D(e))},containerPointToLayerPoint:function(t){return Z(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return Z(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(Z(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(D(t)))},mouseEventToContainerPoint:function(t){return ji(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=Ri(t);if(e){if(e._leaflet_id)throw new Error("Map container is already initialized.")}else throw new Error("Map container not found.");B(e,"scroll",this._onScroll,this),this._containerId=l(e)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&k.any3d,A(t,"leaflet-container"+(k.touch?" leaflet-touch":"")+(k.retina?" leaflet-retina":"")+(k.ielt9?" leaflet-oldie":"")+(k.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var e=Jt(t,"position");e!=="absolute"&&e!=="relative"&&e!=="fixed"&&e!=="sticky"&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),J(this._mapPane,new I(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(A(t.markerPane,"leaflet-zoom-hide"),A(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){J(this._mapPane,new I(0,0));var n=!this._loaded;this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset");var o=this._zoom!==e;this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){e===void 0&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return lt(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){J(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[l(this._container)]=this;var e=t?V:B;e(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),k.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){lt(this._resizeRequest),this._resizeRequest=it(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i=[],n,o=e==="mouseout"||e==="mouseover",r=t.target||t.srcElement,u=!1;r;){if(n=this._targets[l(r)],n&&(e==="click"||e==="preclick")&&this._draggableMoved(n)){u=!0;break}if(n&&n.listens(e,!0)&&(o&&!Je(r,t)||(i.push(n),o))||r===this._container)break;r=r.parentNode}return!i.length&&!u&&!o&&this.listens(e,!0)&&(i=[this]),i},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e=t.target||t.srcElement;if(!(!this._loaded||e._leaflet_disable_events||t.type==="click"&&this._isClickDisabled(e))){var i=t.type;i==="mousedown"&&Ve(e),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){if(t.type==="click"){var n=P({},t);n.type="preclick",this._fireDOMEvent(n,n.type,i)}var o=this._findEventTargets(t,e);if(i){for(var r=[],u=0;u0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),n=k.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){Y(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._trunc();return(e&&e.animate)!==!0&&!this.getSize().contains(i)?!1:(this.panBy(i,e),!0)},_createAnimProxy:function(){var t=this._proxy=G("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(e){var i=De,n=this._proxy.style[i];It(this._proxy,this.project(e.center,e.zoom),this.getZoomScale(e.zoom,1)),n===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){K(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();It(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n);return i.animate!==!0&&!this.getSize().contains(o)?!1:(it(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this),!0)},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,A(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&Y(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function Lo(t,e){return new F(t,e)}var _t=wt.extend({options:{position:"topright"},initialize:function(t){C(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return A(e,"leaflet-control"),i.indexOf("bottom")!==-1?n.insertBefore(e,n.firstChild):n.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(K(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),ne=function(t){return new _t(t)};F.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},e="leaflet-",i=this._controlContainer=G("div",e+"control-container",this._container);function n(o,r){var u=e+o+" "+e+r;t[o+r]=G("div",u,i)}n("top","left"),n("top","right"),n("bottom","left"),n("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)K(this._controlCorners[t]);K(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Ui=_t.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,n){return i1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=e&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(l(t.target)),i=e.overlay?t.type==="add"?"overlayadd":"overlayremove":t.type==="add"?"baselayerchange":null;i&&this._map.fire(i,e)},_createRadioElement:function(t,e){var i='",n=document.createElement("div");return n.innerHTML=i,n.firstChild},_addItem:function(t){var e=document.createElement("label"),i=this._map.hasLayer(t.layer),n;t.overlay?(n=document.createElement("input"),n.type="checkbox",n.className="leaflet-control-layers-selector",n.defaultChecked=i):n=this._createRadioElement("leaflet-base-layers_"+l(this),i),this._layerControlInputs.push(n),n.layerId=l(t.layer),B(n,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var r=document.createElement("span");e.appendChild(r),r.appendChild(n),r.appendChild(o);var u=t.overlay?this._overlaysList:this._baseLayersList;return u.appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){if(!this._preventClick){var t=this._layerControlInputs,e,i,n=[],o=[];this._handlingClick=!0;for(var r=t.length-1;r>=0;r--)e=t[r],i=this._getLayer(e.layerId).layer,e.checked?n.push(i):e.checked||o.push(i);for(r=0;r=0;o--)e=t[o],i=this._getLayer(e.layerId).layer,e.disabled=i.options.minZoom!==void 0&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section;this._preventClick=!0,B(t,"click",nt),this.expand();var e=this;setTimeout(function(){V(t,"click",nt),e._preventClick=!1})}}),xo=function(t,e,i){return new Ui(t,e,i)},Qe=_t.extend({options:{position:"topleft",zoomInText:'',zoomInTitle:"Zoom in",zoomOutText:'',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=G("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){var r=G("a",i,n);return r.innerHTML=t,r.href="#",r.title=e,r.setAttribute("role","button"),r.setAttribute("aria-label",e),ie(r),B(r,"click",Nt),B(r,"click",o,this),B(r,"click",this._refocusOnMap,this),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";Y(this._zoomInButton,e),Y(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),(this._disabled||t._zoom===t.getMinZoom())&&(A(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),(this._disabled||t._zoom===t.getMaxZoom())&&(A(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}});F.mergeOptions({zoomControl:!0}),F.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new Qe,this.addControl(this.zoomControl))});var wo=function(t){return new Qe(t)},Vi=_t.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=G("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=G("div",e,i)),t.imperial&&(this._iScale=G("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,i=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(i)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t),i=e<1e3?e+" m":e/1e3+" km";this._updateScale(this._mScale,i,e/t)},_updateImperial:function(t){var e=t*3.2808399,i,n,o;e>5280?(i=e/5280,n=this._getRoundNum(i),this._updateScale(this._iScale,n+" mi",n/i)):(o=this._getRoundNum(e),this._updateScale(this._iScale,o+" ft",o/e))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),Po=function(t){return new Vi(t)},Co='',ti=_t.extend({options:{position:"bottomright",prefix:''+(k.inlineSvg?Co+" ":"")+"Leaflet"},initialize:function(t){C(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=G("div","leaflet-control-attribution"),ie(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(' ')}}});F.mergeOptions({attributionControl:!0}),F.addInitHook(function(){this.options.attributionControl&&new ti().addTo(this)});var bo=function(t){return new ti(t)};_t.Layers=Ui,_t.Zoom=Qe,_t.Scale=Vi,_t.Attribution=ti,ne.layers=xo,ne.zoom=wo,ne.scale=Po,ne.attribution=bo;var yt=wt.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});yt.addTo=function(t,e){return t.addHandler(e,this),this};var Mo={Events:ut},qi=k.touch?"touchstart mousedown":"mousedown",Et=Kt.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){C(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(B(this._dragStartTarget,qi,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Et._dragging===this&&this.finishDrag(!0),V(this._dragStartTarget,qi,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(this._enabled&&(this._moved=!1,!Fe(this._element,"leaflet-zoom-anim"))){if(t.touches&&t.touches.length!==1){Et._dragging===this&&this.finishDrag();return}if(!(Et._dragging||t.shiftKey||t.which!==1&&t.button!==1&&!t.touches)&&(Et._dragging=this,this._preventOutline&&Ve(this._element),Ge(),Qt(),!this._moving)){this.fire("down");var e=t.touches?t.touches[0]:t,i=Di(this._element);this._startPoint=new I(e.clientX,e.clientY),this._startPos=Bt(this._element),this._parentScale=qe(i);var n=t.type==="mousedown";B(document,n?"mousemove":"touchmove",this._onMove,this),B(document,n?"mouseup":"touchend touchcancel",this._onUp,this)}}},_onMove:function(t){if(this._enabled){if(t.touches&&t.touches.length>1){this._moved=!0;return}var e=t.touches&&t.touches.length===1?t.touches[0]:t,i=new I(e.clientX,e.clientY)._subtract(this._startPoint);!i.x&&!i.y||Math.abs(i.x)+Math.abs(i.y)r&&(u=c,r=m);r>i&&(e[u]=1,ii(t,e,i,n,u),ii(t,e,i,u,o))}function Eo(t,e){for(var i=[t[0]],n=1,o=0,r=t.length;ne&&(i.push(t[n]),o=n);return oe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function Oo(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function oe(t,e,i,n){var o=e.x,r=e.y,u=i.x-o,c=i.y-r,m=u*u+c*c,y;return m>0&&(y=((t.x-o)*u+(t.y-r)*c)/m,y>1?(o=i.x,r=i.y):y>0&&(o+=u*y,r+=c*y)),u=t.x-o,c=t.y-r,n?u*u+c*c:new I(o,r)}function dt(t){return!H(t[0])||typeof t[0][0]!="object"&&typeof t[0][0]<"u"}function tn(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),dt(t)}function en(t,e){var i,n,o,r,u,c,m,y;if(!t||t.length===0)throw new Error("latlngs not passed");dt(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);var M=D([0,0]),E=$(t),N=E.getNorthWest().distanceTo(E.getSouthWest())*E.getNorthEast().distanceTo(E.getNorthWest());N<1700&&(M=ei(t));var ot=t.length,et=[];for(i=0;in){m=(r-n)/o,y=[c.x-m*(c.x-u.x),c.y-m*(c.y-u.y)];break}var ht=e.unproject(Z(y));return D([ht.lat+M.lat,ht.lng+M.lng])}var zo={__proto__:null,simplify:Xi,pointToSegmentDistance:$i,closestPointOnSegment:So,clipSegment:Qi,_getEdgeIntersection:ve,_getBitCode:Rt,_sqClosestPointOnSegment:oe,isFlat:dt,_flat:tn,polylineCenter:en},ni={project:function(t){return new I(t.lng,t.lat)},unproject:function(t){return new U(t.y,t.x)},bounds:new q([-180,-90],[180,90])},oi={R:6378137,R_MINOR:6356752314245179e-9,bounds:new q([-2003750834279e-5,-1549657073972e-5],[2003750834279e-5,1876465623138e-5]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,o=this.R_MINOR/i,r=Math.sqrt(1-o*o),u=r*Math.sin(n),c=Math.tan(Math.PI/4-n/2)/Math.pow((1-u)/(1+u),r/2);return n=-i*Math.log(Math.max(c,1e-10)),new I(t.lng*e*i,n)},unproject:function(t){for(var e=180/Math.PI,i=this.R,n=this.R_MINOR/i,o=Math.sqrt(1-n*n),r=Math.exp(-t.y/i),u=Math.PI/2-2*Math.atan(r),c=0,m=.1,y;c<15&&Math.abs(m)>1e-7;c++)y=o*Math.sin(u),y=Math.pow((1-y)/(1+y),o/2),m=Math.PI/2-2*Math.atan(r*y)-u,u+=m;return new U(u*e,t.x*e/i)}},Zo={__proto__:null,LonLat:ni,Mercator:oi,SphericalMercator:Ee},Io=P({},kt,{code:"EPSG:3395",projection:oi,transformation:function(){var t=.5/(Math.PI*oi.R);return Yt(t,.5,-t,.5)}()}),nn=P({},kt,{code:"EPSG:4326",projection:ni,transformation:Yt(1/180,1,-1/180,.5)}),Bo=P({},Pt,{projection:ni,transformation:Yt(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,n=e.lat-t.lat;return Math.sqrt(i*i+n*n)},infinite:!0});Pt.Earth=kt,Pt.EPSG3395=Io,Pt.EPSG3857=ze,Pt.EPSG900913=Fn,Pt.EPSG4326=nn,Pt.Simple=Bo;var mt=Kt.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[l(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[l(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e=t.target;if(e.hasLayer(this)){if(this._map=e,this._zoomAnimated=e._zoomAnimated,this.getEvents){var i=this.getEvents();e.on(i,this),this.once("remove",function(){e.off(i,this)},this)}this.onAdd(e),this.fire("add"),e.fire("layeradd",{layer:this})}}});F.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var e=l(t);return this._layers[e]?this:(this._layers[e]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var e=l(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return l(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){t=t?H(t)?t:[t]:[];for(var e=0,i=t.length;ethis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),this.options.minZoom===void 0&&this._layersMinZoom&&this.getZoom()=2&&e[0]instanceof U&&e[0].equals(e[i-1])&&e.pop(),e},_setLatLngs:function(t){bt.prototype._setLatLngs.call(this,t),dt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return dt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,i=new I(e,e);if(t=new q(t.min.subtract(i),t.max.add(i)),this._parts=[],!(!this._pxBounds||!this._pxBounds.intersects(t))){if(this.options.noClip){this._parts=this._rings;return}for(var n=0,o=this._rings.length,r;nt.y!=o.y>t.y&&t.x<(o.x-n.x)*(t.y-n.y)/(o.y-n.y)+n.x&&(e=!e);return e||bt.prototype._containsPoint.call(this,t,!0)}});function Go(t,e){return new Wt(t,e)}var Mt=Ct.extend({initialize:function(t,e){C(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e=H(t)?t:t.features,i,n,o;if(e){for(i=0,n=e.length;i0&&o.push(o[0].slice()),o}function Ut(t,e){return t.feature?P({},t.feature,{geometry:e}):Ce(e)}function Ce(t){return t.type==="Feature"||t.type==="FeatureCollection"?t:{type:"Feature",properties:{},geometry:t}}var hi={toGeoJSON:function(t){return Ut(this,{type:"Point",coordinates:ai(this.getLatLng(),t)})}};ye.include(hi),si.include(hi),Le.include(hi),bt.include({toGeoJSON:function(t){var e=!dt(this._latlngs),i=Pe(this._latlngs,e?1:0,!1,t);return Ut(this,{type:(e?"Multi":"")+"LineString",coordinates:i})}}),Wt.include({toGeoJSON:function(t){var e=!dt(this._latlngs),i=e&&!dt(this._latlngs[0]),n=Pe(this._latlngs,i?2:e?1:0,!0,t);return e||(n=[n]),Ut(this,{type:(i?"Multi":"")+"Polygon",coordinates:n})}}),jt.include({toMultiPoint:function(t){var e=[];return this.eachLayer(function(i){e.push(i.toGeoJSON(t).geometry.coordinates)}),Ut(this,{type:"MultiPoint",coordinates:e})},toGeoJSON:function(t){var e=this.feature&&this.feature.geometry&&this.feature.geometry.type;if(e==="MultiPoint")return this.toMultiPoint(t);var i=e==="GeometryCollection",n=[];return this.eachLayer(function(o){if(o.toGeoJSON){var r=o.toGeoJSON(t);if(i)n.push(r.geometry);else{var u=Ce(r);u.type==="FeatureCollection"?n.push.apply(n,u.features):n.push(u)}}}),i?Ut(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}});function rn(t,e){return new Mt(t,e)}var Wo=rn,be=mt.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,e,i){this._url=t,this._bounds=$(e),C(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(A(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){K(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&Ft(this._image),this},bringToBack:function(){return this._map&&Ht(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=$(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=this._url.tagName==="IMG",e=this._image=t?this._url:G("img");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=d,e.onmousemove=d,e.onload=a(this.fire,this,"load"),e.onerror=a(this._overlayOnError,this,"error"),(this.options.crossOrigin||this.options.crossOrigin==="")&&(e.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t){this._url=e.src;return}e.src=this._url,e.alt=this.options.alt},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),i=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;It(this._image,i,e)},_reset:function(){var t=this._image,e=new q(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();J(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){ct(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&this.options.zIndex!==void 0&&this.options.zIndex!==null&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),Uo=function(t,e,i){return new be(t,e,i)},an=be.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t=this._url.tagName==="VIDEO",e=this._image=t?this._url:G("video");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=d,e.onmousemove=d,e.onloadeddata=a(this.fire,this,"load"),t){for(var i=e.getElementsByTagName("source"),n=[],o=0;o0?n:[e.src];return}H(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var r=0;ro?(e.height=o+"px",A(t,r)):Y(t,r),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),i=this._getAnchor();J(this._container,e.add(i))},_adjustPan:function(){if(this.options.autoPan){if(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning){this._autopanning=!1;return}var t=this._map,e=parseInt(Jt(this._container,"marginBottom"),10)||0,i=this._container.offsetHeight+e,n=this._containerWidth,o=new I(this._containerLeft,-i-this._containerBottom);o._add(Bt(this._container));var r=t.layerPointToContainerPoint(o),u=Z(this.options.autoPanPadding),c=Z(this.options.autoPanPaddingTopLeft||u),m=Z(this.options.autoPanPaddingBottomRight||u),y=t.getSize(),M=0,E=0;r.x+n+m.x>y.x&&(M=r.x+n-y.x+m.x),r.x-M-c.x<0&&(M=r.x-c.x),r.y+i+m.y>y.y&&(E=r.y+i-y.y+m.y),r.y-E-c.y<0&&(E=r.y-c.y),(M||E)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([M,E]))}},_getAnchor:function(){return Z(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),Ko=function(t,e){return new Me(t,e)};F.mergeOptions({closePopupOnClick:!0}),F.include({openPopup:function(t,e,i){return this._initOverlay(Me,t,e,i).openOn(this),this},closePopup:function(t){return t=arguments.length?t:this._popup,t&&t.close(),this}}),mt.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Me,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof Ct||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return this._popup?this._popup.isOpen():!1},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){if(!(!this._popup||!this._map)){Nt(t);var e=t.layer||t.target;if(this._popup._source===e&&!(e instanceof Ot)){this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng);return}this._popup._source=e,this.openPopup(t.latlng)}},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){t.originalEvent.keyCode===13&&this._openPopup(t)}});var Te=Lt.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){Lt.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){Lt.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=Lt.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip",e=t+" "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=G("div",e),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+l(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i,n=this._map,o=this._container,r=n.latLngToContainerPoint(n.getCenter()),u=n.layerPointToContainerPoint(t),c=this.options.direction,m=o.offsetWidth,y=o.offsetHeight,M=Z(this.options.offset),E=this._getAnchor();c==="top"?(e=m/2,i=y):c==="bottom"?(e=m/2,i=0):c==="center"?(e=m/2,i=y/2):c==="right"?(e=0,i=y/2):c==="left"?(e=m,i=y/2):u.xthis.options.maxZoom||in?this._retainParent(o,r,u,n):!1)},_retainChildren:function(t,e,i,n){for(var o=2*t;o<2*t+2;o++)for(var r=2*e;r<2*e+2;r++){var u=new I(o,r);u.z=i+1;var c=this._tileCoordsToKey(u),m=this._tiles[c];if(m&&m.active){m.retain=!0;continue}else m&&m.loaded&&(m.retain=!0);i+1this.options.maxZoom||this.options.minZoom!==void 0&&o1){this._setView(t,i);return}for(var E=o.min.y;E<=o.max.y;E++)for(var N=o.min.x;N<=o.max.x;N++){var ot=new I(N,E);if(ot.z=this._tileZoom,!!this._isValidTile(ot)){var et=this._tiles[this._tileCoordsToKey(ot)];et?et.current=!0:u.push(ot)}}if(u.sort(function(ht,qt){return ht.distanceTo(r)-qt.distanceTo(r)}),u.length!==0){this._loading||(this._loading=!0,this.fire("loading"));var ft=document.createDocumentFragment();for(N=0;Ni.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return $(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),o=n.add(i),r=e.unproject(n,t.z),u=e.unproject(o,t.z);return[r,u]},_tileCoordsToBounds:function(t){var e=this._tileCoordsToNwSe(t),i=new at(e[0],e[1]);return this.options.noWrap||(i=this._map.wrapLatLngBounds(i)),i},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var e=t.split(":"),i=new I(+e[0],+e[1]);return i.z=+e[2],i},_removeTile:function(t){var e=this._tiles[t];e&&(K(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){A(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=d,t.onmousemove=d,k.ielt9&&this.options.opacity<1&&ct(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&it(a(this._tileReady,this,t,null,o)),J(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);i=this._tiles[n],i&&(i.loaded=+new Date,this._map._fadeAnimated?(ct(i.el,0),lt(this._fadeFrame),this._fadeFrame=it(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(A(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),k.ielt9||!this._map._fadeAnimated?it(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new I(this._wrapX?g(t.x,this._wrapX):t.x,this._wrapY?g(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new q(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function $o(t){return new re(t)}var Vt=re.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,e=C(this,e),e.detectRetina&&k.retina&&e.maxZoom>0?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),typeof e.subdomains=="string"&&(e.subdomains=e.subdomains.split("")),this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&e===void 0&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement("img");return B(i,"load",a(this._tileOnLoad,this,e,i)),B(i,"error",a(this._tileOnError,this,e,i)),(this.options.crossOrigin||this.options.crossOrigin==="")&&(i.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),typeof this.options.referrerPolicy=="string"&&(i.referrerPolicy=this.options.referrerPolicy),i.alt="",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:k.retina?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var i=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=i),e["-y"]=i}return R(this._url,P(e,this.options))},_tileOnLoad:function(t,e){k.ielt9?setTimeout(a(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&e.getAttribute("src")!==n&&(e.src=n),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom,i=this.options.zoomReverse,n=this.options.zoomOffset;return i&&(t=e-t),t+n},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_abortLoading:function(){var t,e;for(t in this._tiles)if(this._tiles[t].coords.z!==this._tileZoom&&(e=this._tiles[t].el,e.onload=d,e.onerror=d,!e.complete)){e.src=W;var i=this._tiles[t].coords;K(e),delete this._tiles[t],this.fire("tileabort",{tile:e,coords:i})}},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute("src",W),re.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(!(!this._map||i&&i.getAttribute("src")===W))return re.prototype._tileReady.call(this,t,e,i)}});function ln(t,e){return new Vt(t,e)}var cn=Vt.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i=P({},this.defaultWmsParams);for(var n in e)n in this.options||(i[n]=e[n]);e=C(this,e);var o=e.detectRetina&&k.retina?2:1,r=this.getTileSize();i.width=r.x*o,i.height=r.y*o,this.wmsParams=i},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,Vt.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,n=rt(i.project(e[0]),i.project(e[1])),o=n.min,r=n.max,u=(this._wmsVersion>=1.3&&this._crs===nn?[o.y,o.x,r.y,r.x]:[o.x,o.y,r.x,r.y]).join(","),c=Vt.prototype.getTileUrl.call(this,t);return c+j(this.wmsParams,c,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+u},setParams:function(t,e){return P(this.wmsParams,t),e||this.redraw(),this}});function Jo(t,e){return new cn(t,e)}Vt.WMS=cn,ln.wms=Jo;var Tt=mt.extend({options:{padding:.1},initialize:function(t){C(this,t),l(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),A(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),r=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t,e));k.any3d?It(this._container,r,i):J(this._container,r)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new q(i,i.add(e.multiplyBy(1+t*2)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),dn=Tt.extend({options:{tolerance:0},getEvents:function(){var t=Tt.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Tt.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");B(t,"mousemove",this._onMouseMove,this),B(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),B(t,"mouseout",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext("2d")},_destroyContainer:function(){lt(this._redrawRequest),delete this._ctx,K(this._container),V(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){var t;this._redrawBounds=null;for(var e in this._layers)t=this._layers[e],t._update();this._redraw()}},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Tt.prototype._update.call(this);var t=this._bounds,e=this._container,i=t.getSize(),n=k.retina?2:1;J(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",k.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){Tt.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[l(t)]=t;var e=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=e),this._drawLast=e,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,n=e.prev;i?i.prev=n:this._drawLast=n,n?n.next=i:this._drawFirst=i,delete t._order,delete this._layers[l(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(typeof t.options.dashArray=="string"){var e=t.options.dashArray.split(/[, ]+/),i=[],n,o;for(o=0;o')}}catch{}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),Qo={_initContainer:function(){this._container=G("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Tt.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=ae("shape");A(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=ae("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;K(e),t.removeInteractiveTarget(e),delete this._layers[l(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e||(e=t._stroke=ae("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=H(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i||(i=t._fill=ae("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,"+65535*360)},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){Ft(t._container)},_bringToBack:function(t){Ht(t._container)}},Se=k.vml?ae:pi,he=Tt.extend({_initContainer:function(){this._container=Se("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=Se("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){K(this._container),V(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Tt.prototype._update.call(this);var t=this._bounds,e=t.getSize(),i=this._container;(!this._svgSize||!this._svgSize.equals(e))&&(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),J(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update")}},_initPath:function(t){var e=t._path=Se("path");t.options.className&&A(e,t.options.className),t.options.interactive&&A(e,"leaflet-interactive"),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){K(t._path),t.removeInteractiveTarget(t._path),delete this._layers[l(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,i=t.options;e&&(i.stroke?(e.setAttribute("stroke",i.color),e.setAttribute("stroke-opacity",i.opacity),e.setAttribute("stroke-width",i.weight),e.setAttribute("stroke-linecap",i.lineCap),e.setAttribute("stroke-linejoin",i.lineJoin),i.dashArray?e.setAttribute("stroke-dasharray",i.dashArray):e.removeAttribute("stroke-dasharray"),i.dashOffset?e.setAttribute("stroke-dashoffset",i.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),i.fill?(e.setAttribute("fill",i.fillColor||i.color),e.setAttribute("fill-opacity",i.fillOpacity),e.setAttribute("fill-rule",i.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,gi(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n=Math.max(Math.round(t._radiusY),1)||i,o="a"+i+","+n+" 0 1,0 ",r=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+o+i*2+",0 "+o+-i*2+",0 ";this._setPath(t,r)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){Ft(t._path)},_bringToBack:function(t){Ht(t._path)}});k.vml&&he.include(Qo);function _n(t){return k.svg||k.vml?new he(t):null}F.include({getRenderer:function(t){var e=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return e||(e=this._renderer=this._createRenderer()),this.hasLayer(e)||this.addLayer(e),e},_getPaneRenderer:function(t){if(t==="overlayPane"||t===void 0)return!1;var e=this._paneRenderers[t];return e===void 0&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e},_createRenderer:function(t){return this.options.preferCanvas&&fn(t)||_n(t)}});var mn=Wt.extend({initialize:function(t,e){Wt.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=$(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function ts(t,e){return new mn(t,e)}he.create=Se,he.pointsToPath=gi,Mt.geometryToLayer=xe,Mt.coordsToLatLng=ri,Mt.coordsToLatLngs=we,Mt.latLngToCoords=ai,Mt.latLngsToCoords=Pe,Mt.getFeature=Ut,Mt.asFeature=Ce,F.mergeOptions({boxZoom:!0});var pn=yt.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){B(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){V(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){K(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){this._resetStateTimeout!==0&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||t.which!==1&&t.button!==1)return!1;this._clearDeferredResetState(),this._resetState(),Qt(),Ge(),this._startPoint=this._map.mouseEventToContainerPoint(t),B(document,{contextmenu:Nt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=G("div","leaflet-zoom-box",this._container),A(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var e=new q(this._point,this._startPoint),i=e.getSize();J(this._box,e.min),this._box.style.width=i.x+"px",this._box.style.height=i.y+"px"},_finish:function(){this._moved&&(K(this._box),Y(this._container,"leaflet-crosshair")),te(),We(),V(document,{contextmenu:Nt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if(!(t.which!==1&&t.button!==1)&&(this._finish(),!!this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0);var e=new at(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(e).fire("boxzoomend",{boxZoomBounds:e})}},_onKeyDown:function(t){t.keyCode===27&&(this._finish(),this._clearDeferredResetState(),this._resetState())}});F.addInitHook("addHandler","boxZoom",pn),F.mergeOptions({doubleClickZoom:!0});var gn=yt.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,o=t.originalEvent.shiftKey?i-n:i+n;e.options.doubleClickZoom==="center"?e.setZoom(o):e.setZoomAround(t.containerPoint,o)}});F.addInitHook("addHandler","doubleClickZoom",gn),F.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var vn=yt.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new Et(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}A(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){Y(this._map._container,"leaflet-grab"),Y(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var e=$(this._map.options.maxBounds);this._offsetLimit=rt(this._map.latLngToContainerPoint(e.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(e.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(i),this._times.push(e),this._prunePositions(e)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){if(!(!this._viscosity||!this._offsetLimit)){var t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit;t.xe.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,r=(n+e+i)%t-e-i,u=Math.abs(o+i)0?r:-r))-e;this._delta=0,this._startTime=null,u&&(t.options.scrollWheelZoom==="center"?t.setZoom(e+u):t.setZoomAround(this._lastMousePos,e+u))}});F.addInitHook("addHandler","scrollWheelZoom",Ln);var es=600;F.mergeOptions({tapHold:k.touchNative&&k.safari&&k.mobile,tapTolerance:15});var xn=yt.extend({addHooks:function(){B(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){V(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(clearTimeout(this._holdTimeout),t.touches.length===1){var e=t.touches[0];this._startPos=this._newPos=new I(e.clientX,e.clientY),this._holdTimeout=setTimeout(a(function(){this._cancel(),this._isTapValid()&&(B(document,"touchend",nt),B(document,"touchend touchcancel",this._cancelClickPrevent),this._simulateEvent("contextmenu",e))},this),es),B(document,"touchend touchcancel contextmenu",this._cancel,this),B(document,"touchmove",this._onMove,this)}},_cancelClickPrevent:function t(){V(document,"touchend",nt),V(document,"touchend touchcancel",t)},_cancel:function(){clearTimeout(this._holdTimeout),V(document,"touchend touchcancel contextmenu",this._cancel,this),V(document,"touchmove",this._onMove,this)},_onMove:function(t){var e=t.touches[0];this._newPos=new I(e.clientX,e.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){var i=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});i._simulated=!0,e.target.dispatchEvent(i)}});F.addInitHook("addHandler","tapHold",xn),F.mergeOptions({touchZoom:k.touch,bounceAtZoomLimits:!0});var wn=yt.extend({addHooks:function(){A(this._map._container,"leaflet-touch-zoom"),B(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){Y(this._map._container,"leaflet-touch-zoom"),V(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e=this._map;if(!(!t.touches||t.touches.length!==2||e._animatingZoom||this._zooming)){var i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=e.getSize()._divideBy(2),this._startLatLng=e.containerPointToLatLng(this._centerPoint),e.options.touchZoom!=="center"&&(this._pinchStartLatLng=e.containerPointToLatLng(i.add(n)._divideBy(2))),this._startDist=i.distanceTo(n),this._startZoom=e.getZoom(),this._moved=!1,this._zooming=!0,e._stop(),B(document,"touchmove",this._onTouchMove,this),B(document,"touchend touchcancel",this._onTouchEnd,this),nt(t)}},_onTouchMove:function(t){if(!(!t.touches||t.touches.length!==2||!this._zooming)){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),o=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&o>1)&&(this._zoom=e._limitZoom(this._zoom)),e.options.touchZoom==="center"){if(this._center=this._startLatLng,o===1)return}else{var r=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(o===1&&r.x===0&&r.y===0)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),lt(this._animRequest);var u=a(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=it(u,this,!0),nt(t)}},_onTouchEnd:function(){if(!this._moved||!this._zooming){this._zooming=!1;return}this._zooming=!1,lt(this._animRequest),V(document,"touchmove",this._onTouchMove,this),V(document,"touchend touchcancel",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))}});F.addInitHook("addHandler","touchZoom",wn),F.BoxZoom=pn,F.DoubleClickZoom=gn,F.Drag=vn,F.Keyboard=yn,F.ScrollWheelZoom=Ln,F.TapHold=xn,F.TouchZoom=wn,f.Bounds=q,f.Browser=k,f.CRS=Pt,f.Canvas=dn,f.Circle=si,f.CircleMarker=Le,f.Class=wt,f.Control=_t,f.DivIcon=un,f.DivOverlay=Lt,f.DomEvent=yo,f.DomUtil=go,f.Draggable=Et,f.Evented=Kt,f.FeatureGroup=Ct,f.GeoJSON=Mt,f.GridLayer=re,f.Handler=yt,f.Icon=Gt,f.ImageOverlay=be,f.LatLng=U,f.LatLngBounds=at,f.Layer=mt,f.LayerGroup=jt,f.LineUtil=zo,f.Map=F,f.Marker=ye,f.Mixin=Mo,f.Path=Ot,f.Point=I,f.PolyUtil=To,f.Polygon=Wt,f.Polyline=bt,f.Popup=Me,f.PosAnimation=Wi,f.Projection=Zo,f.Rectangle=mn,f.Renderer=Tt,f.SVG=he,f.SVGOverlay=hn,f.TileLayer=Vt,f.Tooltip=Te,f.Transformation=Oe,f.Util=Rn,f.VideoOverlay=an,f.bind=a,f.bounds=rt,f.canvas=fn,f.circle=Ho,f.circleMarker=Fo,f.control=ne,f.divIcon=Xo,f.extend=P,f.featureGroup=No,f.geoJSON=rn,f.geoJson=Wo,f.gridLayer=$o,f.icon=Ro,f.imageOverlay=Uo,f.latLng=D,f.latLngBounds=$,f.layerGroup=Ao,f.map=Lo,f.marker=Do,f.point=Z,f.polygon=Go,f.polyline=jo,f.popup=Ko,f.rectangle=ts,f.setOptions=C,f.stamp=l,f.svg=_n,f.svgOverlay=qo,f.tileLayer=ln,f.tooltip=Yo,f.transformation=Yt,f.version=b,f.videoOverlay=Vo;var is=window.L;f.noConflict=function(){return window.L=is,this},window.L=f})}(ue,ue.exports)),ue.exports}var di=Ms();const St=cs(di);function Ts(x,w,f){return Object.freeze({instance:x,context:w,container:f})}function Ss(x,w){return w==null?function(b,P){const s=z.useRef();return s.current||(s.current=x(b,P)),s}:function(b,P){const s=z.useRef();s.current||(s.current=x(b,P));const a=z.useRef(b),{instance:h}=s.current;return z.useEffect(function(){a.current!==b&&(w(h,b,a.current),a.current=b)},[h,b,P]),s}}function ks(x,w){z.useEffect(function(){return(w.layerContainer??w.map).addLayer(x.instance),function(){var s;(s=w.layerContainer)==null||s.removeLayer(x.instance),w.map.removeLayer(x.instance)}},[w,x])}function Es(x){return function(f){const b=An(),P=x(Nn(f,b),b);return ys(b.map,f.attribution),Cs(P.current,f.eventHandlers),ks(P.current,b),P}}function Os(x,w){const f=Ss(x,w),b=Es(f);return Ps(b)}function zs(x,w,f){const{opacity:b,zIndex:P}=w;b!=null&&b!==f.opacity&&x.setOpacity(b),P!=null&&P!==f.zIndex&&x.setZIndex(P)}function fi(){return An().map}function li(){return li=Object.assign||function(x){for(var w=1;w(p==null?void 0:p.map)??null,[p]);const C=z.useCallback(O=>{if(O!==null&&p===null){const R=new di.Map(O,g);f!=null&&_!=null?R.setView(f,_):x!=null&&R.fitBounds(x,w),l!=null&&R.whenReady(l),T(xs(R))}},[]);z.useEffect(()=>()=>{p==null||p.map.remove()},[p]);const j=p?Mn.createElement(ws,{value:p},b):a??null;return Mn.createElement("div",li({},v,{ref:C}),j)}const Is=z.forwardRef(Zs),Bs=Os(function({url:w,...f},b){const P=new di.TileLayer(w,Nn(f,b));return Ts(P,b)},function(w,f,b){zs(w,f,b);const{url:P}=f;P!=null&&P!==b.url&&w.setUrl(P)});var le={exports:{}},As=le.exports,Sn;function Ns(){return Sn||(Sn=1,function(x,w){(function(f,b){b(w)})(As,function(f){var b=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnEveryZoom:!1,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyShapePositions:null,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(s){L.Util.setOptions(this,s),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var a=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,a?this._withAnimation:this._noAnimation),this._markerCluster=a?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(s){if(s instanceof L.LayerGroup)return this.addLayers([s]);if(!s.getLatLng)return this._nonPointGroup.addLayer(s),this.fire("layeradd",{layer:s}),this;if(!this._map)return this._needsClustering.push(s),this.fire("layeradd",{layer:s}),this;if(this.hasLayer(s))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(s,this._maxZoom),this.fire("layeradd",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var a=s,h=this._zoom;if(s.__parent)for(;a.__parent._zoom>=h;)a=a.__parent;return this._currentShownBounds.contains(a.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(s,a):this._animationAddLayerNonAnimated(s,a)),this},removeLayer:function(s){return s instanceof L.LayerGroup?this.removeLayers([s]):s.getLatLng?this._map?s.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(s)),this._removeLayer(s,!0),this.fire("layerremove",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),s.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(s)&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,s)&&this.hasLayer(s)&&this._needsRemoving.push({layer:s,latlng:s._latlng}),this.fire("layerremove",{layer:s}),this):(this._nonPointGroup.removeLayer(s),this.fire("layerremove",{layer:s}),this)},addLayers:function(s,a){if(!L.Util.isArray(s))return this.addLayer(s);var h=this._featureGroup,l=this._nonPointGroup,_=this.options.chunkedLoading,g=this.options.chunkInterval,d=this.options.chunkProgress,v=s.length,p=0,T=!0,C;if(this._map){var j=new Date().getTime(),O=L.bind(function(){var H=new Date().getTime();for(this._map&&this._unspiderfy&&this._unspiderfy();pg)break}if(C=s[p],C instanceof L.LayerGroup){T&&(s=s.slice(),T=!1),this._extractNonGroupLayers(C,s),v=s.length;continue}if(!C.getLatLng){l.addLayer(C),a||this.fire("layeradd",{layer:C});continue}if(!this.hasLayer(C)&&(this._addLayer(C,this._maxZoom),a||this.fire("layeradd",{layer:C}),C.__parent&&C.__parent.getChildCount()===2)){var W=C.__parent.getAllChildMarkers(),st=W[0]===C?W[1]:W[0];h.removeLayer(st)}}d&&d(p,v,new Date().getTime()-j),p===v?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(O,this.options.chunkDelay)},this);O()}else for(var R=this._needsClustering;p=0;a--)s.extend(this._needsClustering[a].getLatLng());return s.extend(this._nonPointGroup.getBounds()),s},eachLayer:function(s,a){var h=this._needsClustering.slice(),l=this._needsRemoving,_,g,d;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(h),g=h.length-1;g>=0;g--){for(_=!0,d=l.length-1;d>=0;d--)if(l[d].layer===h[g]){_=!1;break}_&&s.call(a,h[g])}this._nonPointGroup.eachLayer(s,a)},getLayers:function(){var s=[];return this.eachLayer(function(a){s.push(a)}),s},getLayer:function(s){var a=null;return s=parseInt(s,10),this.eachLayer(function(h){L.stamp(h)===s&&(a=h)}),a},hasLayer:function(s){if(!s)return!1;var a,h=this._needsClustering;for(a=h.length-1;a>=0;a--)if(h[a]===s)return!0;for(h=this._needsRemoving,a=h.length-1;a>=0;a--)if(h[a].layer===s)return!1;return!!(s.__parent&&s.__parent._group===this)||this._nonPointGroup.hasLayer(s)},zoomToShowLayer:function(s,a){var h=this._map;typeof a!="function"&&(a=function(){});var l=function(){(h.hasLayer(s)||h.hasLayer(s.__parent))&&!this._inZoomAnimation&&(this._map.off("moveend",l,this),this.off("animationend",l,this),h.hasLayer(s)?a():s.__parent._icon&&(this.once("spiderfied",a,this),s.__parent.spiderfy()))};s._icon&&this._map.getBounds().contains(s.getLatLng())?a():s.__parent._zoom=0;h--)if(s[h]===a)return s.splice(h,1),!0},_removeFromGridUnclustered:function(s,a){for(var h=this._map,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom());a>=_&&l[a].removeObject(s,h.project(s.getLatLng(),a));a--);},_childMarkerDragStart:function(s){s.target.__dragStart=s.target._latlng},_childMarkerMoved:function(s){if(!this._ignoreMove&&!s.target.__dragStart){var a=s.target._popup&&s.target._popup.isOpen();this._moveChild(s.target,s.oldLatLng,s.latlng),a&&s.target.openPopup()}},_moveChild:function(s,a,h){s._latlng=a,this.removeLayer(s),s._latlng=h,this.addLayer(s)},_childMarkerDragEnd:function(s){var a=s.target.__dragStart;delete s.target.__dragStart,a&&this._moveChild(s.target,a,s.target._latlng)},_removeLayer:function(s,a,h){var l=this._gridClusters,_=this._gridUnclustered,g=this._featureGroup,d=this._map,v=Math.floor(this._map.getMinZoom());a&&this._removeFromGridUnclustered(s,this._maxZoom);var p=s.__parent,T=p._markers,C;for(this._arraySplice(T,s);p&&(p._childCount--,p._boundsNeedUpdate=!0,!(p._zoom"+a+"",className:"marker-cluster"+h,iconSize:new L.Point(40,40)})},_bindEvents:function(){var s=this._map,a=this.options.spiderfyOnMaxZoom,h=this.options.showCoverageOnHover,l=this.options.zoomToBoundsOnClick,_=this.options.spiderfyOnEveryZoom;(a||l||_)&&this.on("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),h&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),s.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(s){var a=s.layer,h=a;if(!(s.type==="clusterkeypress"&&s.originalEvent&&s.originalEvent.keyCode!==13)){for(;h._childClusters.length===1;)h=h._childClusters[0];h._zoom===this._maxZoom&&h._childCount===a._childCount&&this.options.spiderfyOnMaxZoom?a.spiderfy():this.options.zoomToBoundsOnClick&&a.zoomToBounds(),this.options.spiderfyOnEveryZoom&&a.spiderfy(),s.originalEvent&&s.originalEvent.keyCode===13&&this._map._container.focus()}},_showCoverage:function(s){var a=this._map;this._inZoomAnimation||(this._shownPolygon&&a.removeLayer(this._shownPolygon),s.layer.getChildCount()>2&&s.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(s.layer.getConvexHull(),this.options.polygonOptions),a.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var s=this.options.spiderfyOnMaxZoom,a=this.options.showCoverageOnHover,h=this.options.zoomToBoundsOnClick,l=this.options.spiderfyOnEveryZoom,_=this._map;(s||h||l)&&this.off("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),a&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),_.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var s=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,s),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),s),this._currentShownBounds=s}},_generateInitialClusters:function(){var s=Math.ceil(this._map.getMaxZoom()),a=Math.floor(this._map.getMinZoom()),h=this.options.maxClusterRadius,l=h;typeof h!="function"&&(l=function(){return h}),this.options.disableClusteringAtZoom!==null&&(s=this.options.disableClusteringAtZoom-1),this._maxZoom=s,this._gridClusters={},this._gridUnclustered={};for(var _=s;_>=a;_--)this._gridClusters[_]=new L.DistanceGrid(l(_)),this._gridUnclustered[_]=new L.DistanceGrid(l(_));this._topClusterLevel=new this._markerCluster(this,a-1)},_addLayer:function(s,a){var h=this._gridClusters,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom()),g,d;for(this.options.singleMarkerMode&&this._overrideMarkerIcon(s),s.on(this._childMarkerEventHandlers,this);a>=_;a--){g=this._map.project(s.getLatLng(),a);var v=h[a].getNearObject(g);if(v){v._addChild(s),s.__parent=v;return}if(v=l[a].getNearObject(g),v){var p=v.__parent;p&&this._removeLayer(v,!1);var T=new this._markerCluster(this,a,v,s);h[a].addObject(T,this._map.project(T._cLatLng,a)),v.__parent=T,s.__parent=T;var C=T;for(d=a-1;d>p._zoom;d--)C=new this._markerCluster(this,d,C),h[d].addObject(C,this._map.project(v.getLatLng(),d));p._addChild(C),this._removeFromGridUnclustered(v,a);return}l[a].addObject(s,g)}this._topClusterLevel._addChild(s),s.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(s){s instanceof L.MarkerCluster&&s._iconNeedsUpdate&&s._updateIcon()})},_enqueue:function(s){this._queue.push(s),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var s=0;ss?(this._animationStart(),this._animationZoomOut(this._zoom,s)):this._moveEnd()},_getExpandedVisibleBounds:function(){if(this.options.removeOutsideVisibleBounds){if(L.Browser.mobile)return this._checkBoundsMaxLat(this._map.getBounds())}else return this._mapBoundsInfinite;return this._checkBoundsMaxLat(this._map.getBounds().pad(1))},_checkBoundsMaxLat:function(s){var a=this._maxLat;return a!==void 0&&(s.getNorth()>=a&&(s._northEast.lat=1/0),s.getSouth()<=-a&&(s._southWest.lat=-1/0)),s},_animationAddLayerNonAnimated:function(s,a){if(a===s)this._featureGroup.addLayer(s);else if(a._childCount===2){a._addToMap();var h=a.getAllChildMarkers();this._featureGroup.removeLayer(h[0]),this._featureGroup.removeLayer(h[1])}else a._updateIcon()},_extractNonGroupLayers:function(s,a){var h=s.getLayers(),l=0,_;for(a=a||[];l=0;g--)T=p[g],h.contains(T._latlng)||l.removeLayer(T)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(h,a),l.eachLayer(function(d){!(d instanceof L.MarkerCluster)&&d._icon&&d.clusterShow()}),this._topClusterLevel._recursively(h,s,a,function(d){d._recursivelyRestoreChildPositions(a)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(h,s,_,function(d){l.removeLayer(d),d.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(s,a){this._animationZoomOutSingle(this._topClusterLevel,s-1,a),this._topClusterLevel._recursivelyAddChildrenToMap(null,a,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),s,this._getExpandedVisibleBounds())},_animationAddLayer:function(s,a){var h=this,l=this._featureGroup;l.addLayer(s),a!==s&&(a._childCount>2?(a._updateIcon(),this._forceLayout(),this._animationStart(),s._setPos(this._map.latLngToLayerPoint(a.getLatLng())),s.clusterHide(),this._enqueue(function(){l.removeLayer(s),s.clusterShow(),h._animationEnd()})):(this._forceLayout(),h._animationStart(),h._animationZoomOutSingle(a,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(s,a,h){var l=this._getExpandedVisibleBounds(),_=Math.floor(this._map.getMinZoom());s._recursivelyAnimateChildrenInAndAddSelfToMap(l,_,a+1,h);var g=this;this._forceLayout(),s._recursivelyBecomeVisible(l,h),this._enqueue(function(){if(s._childCount===1){var d=s._markers[0];this._ignoreMove=!0,d.setLatLng(d.getLatLng()),this._ignoreMove=!1,d.clusterShow&&d.clusterShow()}else s._recursively(l,h,_,function(v){v._recursivelyRemoveChildrenFromMap(l,_,a+1)});g._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroup=function(s){return new L.MarkerClusterGroup(s)};var P=L.MarkerCluster=L.Marker.extend({options:L.Icon.prototype.options,initialize:function(s,a,h,l){L.Marker.prototype.initialize.call(this,h?h._cLatLng||h.getLatLng():new L.LatLng(0,0),{icon:this,pane:s.options.clusterPane}),this._group=s,this._zoom=a,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,h&&this._addChild(h),l&&this._addChild(l)},getAllChildMarkers:function(s,a){s=s||[];for(var h=this._childClusters.length-1;h>=0;h--)this._childClusters[h].getAllChildMarkers(s,a);for(var l=this._markers.length-1;l>=0;l--)a&&this._markers[l].__dragStart||s.push(this._markers[l]);return s},getChildCount:function(){return this._childCount},zoomToBounds:function(s){for(var a=this._childClusters.slice(),h=this._group._map,l=h.getBoundsZoom(this._bounds),_=this._zoom+1,g=h.getZoom(),d;a.length>0&&l>_;){_++;var v=[];for(d=0;d_?this._group._map.setView(this._latlng,_):l<=g?this._group._map.setView(this._latlng,g+1):this._group._map.fitBounds(this._bounds,s)},getBounds:function(){var s=new L.LatLngBounds;return s.extend(this._bounds),s},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(s,a){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(s),s instanceof L.MarkerCluster?(a||(this._childClusters.push(s),s.__parent=this),this._childCount+=s._childCount):(a||this._markers.push(s),this._childCount++),this.__parent&&this.__parent._addChild(s,!0)},_setClusterCenter:function(s){this._cLatLng||(this._cLatLng=s._cLatLng||s._latlng)},_resetBounds:function(){var s=this._bounds;s._southWest&&(s._southWest.lat=1/0,s._southWest.lng=1/0),s._northEast&&(s._northEast.lat=-1/0,s._northEast.lng=-1/0)},_recalculateBounds:function(){var s=this._markers,a=this._childClusters,h=0,l=0,_=this._childCount,g,d,v,p;if(_!==0){for(this._resetBounds(),g=0;g=0;g--)d=_[g],d._icon&&(d._setPos(a),d.clusterHide())},function(l){var _=l._childClusters,g,d;for(g=_.length-1;g>=0;g--)d=_[g],d._icon&&(d._setPos(a),d.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(s,a,h,l){this._recursively(s,l,a,function(_){_._recursivelyAnimateChildrenIn(s,_._group._map.latLngToLayerPoint(_.getLatLng()).round(),h),_._isSingleParent()&&h-1===l?(_.clusterShow(),_._recursivelyRemoveChildrenFromMap(s,a,h)):_.clusterHide(),_._addToMap()})},_recursivelyBecomeVisible:function(s,a){this._recursively(s,this._group._map.getMinZoom(),a,null,function(h){h.clusterShow()})},_recursivelyAddChildrenToMap:function(s,a,h){this._recursively(h,this._group._map.getMinZoom()-1,a,function(l){if(a!==l._zoom)for(var _=l._markers.length-1;_>=0;_--){var g=l._markers[_];h.contains(g._latlng)&&(s&&(g._backupLatlng=g.getLatLng(),g.setLatLng(s),g.clusterHide&&g.clusterHide()),l._group._featureGroup.addLayer(g))}},function(l){l._addToMap(s)})},_recursivelyRestoreChildPositions:function(s){for(var a=this._markers.length-1;a>=0;a--){var h=this._markers[a];h._backupLatlng&&(h.setLatLng(h._backupLatlng),delete h._backupLatlng)}if(s-1===this._zoom)for(var l=this._childClusters.length-1;l>=0;l--)this._childClusters[l]._restorePosition();else for(var _=this._childClusters.length-1;_>=0;_--)this._childClusters[_]._recursivelyRestoreChildPositions(s)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(s,a,h,l){var _,g;this._recursively(s,a-1,h-1,function(d){for(g=d._markers.length-1;g>=0;g--)_=d._markers[g],(!l||!l.contains(_._latlng))&&(d._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())},function(d){for(g=d._childClusters.length-1;g>=0;g--)_=d._childClusters[g],(!l||!l.contains(_._latlng))&&(d._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())})},_recursively:function(s,a,h,l,_){var g=this._childClusters,d=this._zoom,v,p;if(a<=d&&(l&&l(this),_&&d===h&&_(this)),d=0;v--)p=g[v],p._boundsNeedUpdate&&p._recalculateBounds(),s.intersects(p._bounds)&&p._recursively(s,a,h,l,_)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}});L.Marker.include({clusterHide:function(){var s=this.options.opacity;return this.setOpacity(0),this.options.opacity=s,this},clusterShow:function(){return this.setOpacity(this.options.opacity)}}),L.DistanceGrid=function(s){this._cellSize=s,this._sqCellSize=s*s,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},d=g[h]=g[h]||[],v=L.Util.stamp(s);this._objectPoint[v]=a,d.push(s)},updateObject:function(s,a){this.removeObject(s),this.addObject(s,a)},removeObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},d=g[h]=g[h]||[],v,p;for(delete this._objectPoint[L.Util.stamp(s)],v=0,p=d.length;v=0;g--){if(d=a[g],v=this.getDistant(d,s),v>0)_.push(d);else continue;v>h&&(h=v,l=d)}return{maxPoint:l,newPoints:_}},buildConvexHull:function(s,a){var h=[],l=this.findMostDistantPointFromBaseLine(s,a);return l.maxPoint?(h=h.concat(this.buildConvexHull([s[0],l.maxPoint],l.newPoints)),h=h.concat(this.buildConvexHull([l.maxPoint,s[1]],l.newPoints)),h):[s[0]]},getConvexHull:function(s){var a=!1,h=!1,l=!1,_=!1,g=null,d=null,v=null,p=null,T=null,C=null,j;for(j=s.length-1;j>=0;j--){var O=s[j];(a===!1||O.lat>a)&&(g=O,a=O.lat),(h===!1||O.latl)&&(v=O,l=O.lng),(_===!1||O.lng<_)&&(p=O,_=O.lng)}h!==a?(C=d,T=g):(C=p,T=v);var R=[].concat(this.buildConvexHull([C,T],s),this.buildConvexHull([T,C],s));return R}}}(),L.MarkerCluster.include({getConvexHull:function(){var s=this.getAllChildMarkers(),a=[],h,l;for(l=s.length-1;l>=0;l--)h=s[l].getLatLng(),a.push(h);return L.QuickHull.getConvexHull(a)}}),L.MarkerCluster.include({_2PI:Math.PI*2,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(!(this._group._spiderfied===this||this._group._inZoomAnimation)){var s=this.getAllChildMarkers(null,!0),a=this._group,h=a._map,l=h.latLngToLayerPoint(this._latlng),_;this._group._unspiderfy(),this._group._spiderfied=this,this._group.options.spiderfyShapePositions?_=this._group.options.spiderfyShapePositions(s.length,l):s.length>=this._circleSpiralSwitchover?_=this._generatePointsSpiral(s.length,l):(l.y+=10,_=this._generatePointsCircle(s.length,l)),this._animationSpiderfy(s,_)}},unspiderfy:function(s){this._group._inZoomAnimation||(this._animationUnspiderfy(s),this._group._spiderfied=null)},_generatePointsCircle:function(s,a){var h=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+s),l=h/this._2PI,_=this._2PI/s,g=[],d,v;for(l=Math.max(l,35),g.length=s,d=0;d=0;p--)p=0;g--)_=l[g],h.removeLayer(_),_._preSpiderfyLatlng&&(_.setLatLng(_._preSpiderfyLatlng),delete _._preSpiderfyLatlng),_.setZIndexOffset&&_.setZIndexOffset(0),_._spiderLeg&&(a.removeLayer(_._spiderLeg),delete _._spiderLeg);s.fire("unspiderfied",{cluster:this,markers:l}),s._ignoreMove=!1,s._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(s,a){var h=this._group,l=h._map,_=h._featureGroup,g=this._group.options.spiderLegPolylineOptions,d,v,p,T;for(h._ignoreMove=!0,d=0;d=0;j--)W=_.layerPointToLatLng(a[j]),O=s[j],O._preSpiderfyLatlng=O._latlng,O.setLatLng(W),O.clusterShow&&O.clusterShow(),p&&(R=O._spiderLeg,H=R._path,H.style.strokeDashoffset=0,R.setStyle({opacity:C}));this.setOpacity(.3),l._ignoreMove=!1,setTimeout(function(){l._animationEnd(),l.fire("spiderfied",{cluster:h,markers:s})},200)},_animationUnspiderfy:function(s){var a=this,h=this._group,l=h._map,_=h._featureGroup,g=s?l._latLngToNewLayerPoint(this._latlng,s.zoom,s.center):l.latLngToLayerPoint(this._latlng),d=this.getAllChildMarkers(null,!0),v=L.Path.SVG,p,T,C,j,O,R;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),T=d.length-1;T>=0;T--)p=d[T],p._preSpiderfyLatlng&&(p.closePopup(),p.setLatLng(p._preSpiderfyLatlng),delete p._preSpiderfyLatlng,R=!0,p._setPos&&(p._setPos(g),R=!1),p.clusterHide&&(p.clusterHide(),R=!1),R&&_.removeLayer(p),v&&(C=p._spiderLeg,j=C._path,O=j.getTotalLength()+.1,j.style.strokeDashoffset=O,C.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var H=0;for(T=d.length-1;T>=0;T--)p=d[T],p._spiderLeg&&H++;for(T=d.length-1;T>=0;T--)p=d[T],p._spiderLeg&&(p.clusterShow&&p.clusterShow(),p.setZIndexOffset&&p.setZIndexOffset(0),H>1&&_.removeLayer(p),l.removeLayer(p._spiderLeg),delete p._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:d})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(s){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(s))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(s){this._spiderfied&&this._spiderfied.unspiderfy(s)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(s){s._spiderLeg&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow(),s.setZIndexOffset&&s.setZIndexOffset(0),this._map.removeLayer(s._spiderLeg),delete s._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(s){return s?s instanceof L.MarkerClusterGroup?s=s._topClusterLevel.getAllChildMarkers():s instanceof L.LayerGroup?s=s._layers:s instanceof L.MarkerCluster?s=s.getAllChildMarkers():s instanceof L.Marker&&(s=[s]):s=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(s),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(s),this},_flagParentsIconsNeedUpdate:function(s){var a,h;for(a in s)for(h=s[a].__parent;h;)h._iconNeedsUpdate=!0,h=h.__parent},_refreshSingleMarkerModeMarkers:function(s){var a,h;for(a in s)h=s[a],this.hasLayer(h)&&h.setIcon(this._overrideMarkerIcon(h))}}),L.Marker.include({refreshIconOptions:function(s,a){var h=this.options.icon;return L.setOptions(h,s),this.setIcon(h),a&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),f.MarkerClusterGroup=b,f.MarkerCluster=P,Object.defineProperty(f,"__esModule",{value:!0})})}(le,le.exports)),le.exports}Ns();const kn={healthy:"#10b981",warning:"#f59e0b",critical:"#ef4444"},En={healthy:"background: #d1fae5; color: #065f46;",warning:"background: #fef3c7; color: #92400e;",critical:"background: #fee2e2; color: #991b1b;"},ci={small:{dimension:"30px",fontSize:"12px",threshold:0},medium:{dimension:"40px",fontSize:"14px",threshold:10},large:{dimension:"50px",fontSize:"16px",threshold:50}},Rs={size:20,emoji:"🌳",className:"custom-tree-marker"},Ds={backgroundColor:"#10b981",className:"custom-cluster-icon",iconSize:[30,30]},On=(x="healthy")=>{const w=kn[x]||kn.healthy,{size:f,emoji:b,className:P}=Rs;return St.divIcon({className:P,html:Fs(w,f,b),iconSize:[f,f],iconAnchor:[f/2,f/2]})},Fs=(x,w,f)=>` +
+ ${f} +
+`,Hs=x=>{const w=js(x),{dimension:f,fontSize:b}=ci[w],{backgroundColor:P,className:s,iconSize:a}=Ds;return St.divIcon({html:Gs(P,f,b,x),className:s,iconSize:a})},js=x=>x>ci.large.threshold?"large":x>ci.medium.threshold?"medium":"small",Gs=(x,w,f,b)=>` +
${b}
+`,zn=x=>{const w=En[x.health]||En.healthy;return Ws(x,w)},Ws=(x,w)=>` +
+

${x.name}

+

Species: ${x.species}

+

Height: ${x.height}m

+

Health: + ${x.health} +

+
+`,Us=({trees:x,onTreeClick:w,zoom:f})=>{const b=fi();return z.useEffect(()=>{if(!(!b||!x.length)){if(b.eachLayer(P=>{P instanceof St.MarkerClusterGroup&&b.removeLayer(P)}),f<12){const P=St.markerClusterGroup({chunkedLoading:!0,spiderfyOnMaxZoom:!0,showCoverageOnHover:!1,zoomToBoundsOnClick:!0,maxClusterRadius:50,iconCreateFunction:s=>{const a=s.getChildCount();return Hs(a)}});x.forEach(s=>{const a=St.marker([s.lat,s.lng],{icon:On(s.health)});a.bindPopup(zn(s)),a.on("click",()=>w(s)),P.addLayer(a)}),b.addLayer(P)}else x.forEach(P=>{const s=St.marker([P.lat,P.lng],{icon:On(P.health)});s.bindPopup(zn(P)),s.on("click",()=>w(P)),s.addTo(b)});return()=>{b.eachLayer(P=>{P instanceof St.MarkerClusterGroup&&b.removeLayer(P)})}}},[b,x,w,f]),null},Vs=({onMapReady:x,onMapError:w})=>{const f=fi();return z.useEffect(()=>{const b=()=>{x&&x()},P=s=>{console.error("Map error:",s),w&&w(s)};return f.whenReady(()=>{b()}),f.on("tileerror",P),()=>{f.off("tileerror",P)}},[f,x,w]),null},qs=({onZoomChange:x})=>{const w=fi();return z.useEffect(()=>{const f=()=>{x&&x(w.getZoom())};return w.on("zoomend",f),()=>{w.off("zoomend",f)}},[w]),null},Ks=zt.div` + height: 600px; + width: 100%; + border-radius: 0.75rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; + position: relative; +`,Ys=zt.div` + background: white; + padding: 1rem 1.5rem; + border-bottom: 1px solid #e5e7eb; + display: flex; + justify-content: space-between; + align-items: center; +`,Xs=zt.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`,$s=zt.div` + display: flex; + gap: 0.5rem; +`,Zn=zt.button` + padding: 0.5rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.375rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #f9fafb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,Js=zt.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`,Qs=zt.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.95); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`,tr=zt.div` + text-align: center; + padding: 2rem; + max-width: 300px; +`;delete St.Icon.Default.prototype._getIconUrl;St.Icon.Default.mergeOptions({iconRetinaUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png",iconUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png",shadowUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png"});const er=({trees:x=[],onTreeSelect:w,filters:f={},loading:b=!1,error:P=null})=>{const[s,a]=z.useState(13),[h,l]=z.useState(null),[_,g]=z.useState(!0),[d,v]=z.useState(null),p=x,T=z.useCallback(W=>{l(W),w&&w(W)},[w]),C=z.useCallback(W=>{a(W)},[]),j=z.useCallback(()=>{g(!1),v(null)},[]),O=z.useCallback(W=>{g(!1),v((W==null?void 0:W.message)||"Failed to load map")},[]),R=z.useCallback(()=>{g(!0),v(null),setTimeout(()=>{g(!1)},1e3)},[]),H=z.useCallback(()=>{if(p.length===0)return;const W=p.reduce((pt,xt)=>pt+xt.lat,0),st=p.reduce((pt,xt)=>pt+xt.lng,0),tt=W/p.length,Zt=st/p.length;console.log("Center map at:",tt,Zt)},[p]),X=z.useCallback(()=>{if(p.length===0)return;const W=p.reduce((st,tt)=>({minLat:Math.min(st.minLat,tt.lat),maxLat:Math.max(st.maxLat,tt.lat),minLng:Math.min(st.minLng,tt.lng),maxLng:Math.max(st.maxLng,tt.lng)}),{minLat:p[0].lat,maxLat:p[0].lat,minLng:p[0].lng,maxLng:p[0].lng});console.log("Fit bounds:",W)},[p]);return S.jsxs("div",{children:[S.jsxs(Ys,{children:[S.jsx(Xs,{children:"Forest Map"}),S.jsxs($s,{children:[S.jsx(Zn,{onClick:H,title:"Center Map",children:S.jsxs("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]})}),S.jsx(Zn,{onClick:X,title:"Fit to Bounds",children:S.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})})})]})]}),S.jsxs(Ks,{children:[S.jsxs(Is,{center:[59.3293,18.0686],zoom:13,style:{height:"100%",width:"100%"},children:[S.jsx(Bs,{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",attribution:'© OpenStreetMap contributors'}),S.jsx(Vs,{onMapReady:j,onMapError:O}),S.jsx(qs,{onZoomChange:C}),S.jsx(Us,{trees:p,onTreeClick:T,zoom:s})]}),(_||b)&&S.jsx(Js,{children:S.jsxs("div",{className:"text-center",children:[S.jsx(In,{}),S.jsx("p",{className:"mt-2 text-sm text-gray-600",children:"Loading map..."})]})}),(d||P)&&S.jsx(Qs,{children:S.jsxs(tr,{children:[S.jsx("svg",{className:"w-12 h-12 text-red-500 mx-auto mb-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),S.jsx("h4",{className:"text-lg font-semibold text-gray-900 mb-2",children:"Map Error"}),S.jsx("p",{className:"text-sm text-gray-600 mb-4",children:d||P}),S.jsx("button",{onClick:R,className:"px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors text-sm",children:"Retry"})]})})]}),S.jsxs("div",{className:"mt-4 p-4 bg-white rounded-lg border border-gray-200",children:[S.jsx("h4",{className:"font-medium text-gray-900 mb-2",children:"Legend"}),S.jsxs("div",{className:"flex flex-wrap gap-4 text-sm",children:[S.jsxs("div",{className:"flex items-center",children:[S.jsx("div",{className:"w-4 h-4 bg-green-500 rounded-full mr-2"}),S.jsx("span",{children:"Healthy Trees"})]}),S.jsxs("div",{className:"flex items-center",children:[S.jsx("div",{className:"w-4 h-4 bg-yellow-500 rounded-full mr-2"}),S.jsx("span",{children:"Warning"})]}),S.jsxs("div",{className:"flex items-center",children:[S.jsx("div",{className:"w-4 h-4 bg-red-500 rounded-full mr-2"}),S.jsx("span",{children:"Critical"})]}),S.jsx("div",{className:"flex items-center text-gray-500",children:S.jsxs("span",{children:["Showing ",p.length," of ",x.length," trees"]})}),S.jsxs("div",{className:"flex items-center text-gray-500",children:[S.jsxs("span",{children:["Zoom level: ",s]}),s<12&&S.jsx("span",{className:"ml-4 text-xs",children:"(Clustering enabled)"})]})]})]})]})},ir=()=>{const[x,w]=z.useState({}),f=z.useCallback(P=>{w(P),console.log("Map filters changed:",P)},[]),b=z.useCallback(()=>{w({})},[]);return{filters:x,handleFiltersChange:f,resetFilters:b}},nr=()=>{const[x,w]=z.useState(null),[f,b]=z.useState(!1),P=z.useCallback(h=>{w(h),b(!0)},[]),s=z.useCallback(()=>{w(null),b(!1)},[]),a=z.useCallback(()=>{w(null),b(!1)},[]);return{selectedTree:x,isModalOpen:f,handleTreeSelect:P,handleCloseTreeDetail:s,clearSelection:a}},fr=()=>{const{sidebarOpen:x,toggleSidebar:w,closeSidebar:f}=ds(),{filters:b,handleFiltersChange:P}=ir(),{selectedTree:s,isModalOpen:a,handleTreeSelect:h,handleCloseTreeDetail:l}=nr(),[_,g]=z.useState([]),[d,v]=z.useState(!0),[p,T]=z.useState(null);z.useEffect(()=>{(async()=>{v(!0),T(null);try{const H={};b.selectedForests&&b.selectedForests.length>0&&(H.forestIds=b.selectedForests.join(",")),b.dateRange&&(H.startDate=b.dateRange.startDate.toISOString(),H.endDate=b.dateRange.endDate.toISOString());const X=await ps.getAll(H);let W=[];X.data&&Array.isArray(X.data.trees)?W=X.data.trees:X.data&&Array.isArray(X.data)?W=X.data:Array.isArray(X)&&(W=X);const st=W.map(tt=>{var Zt,pt,xt,it;return{...tt,lat:((pt=(Zt=tt.location)==null?void 0:Zt.coordinates)==null?void 0:pt[1])||tt.lat||59.3293,lng:((it=(xt=tt.location)==null?void 0:xt.coordinates)==null?void 0:it[0])||tt.lng||18.0686,name:tt.treeId||tt.name||`Tree ${tt._id}`,health:tt.health||"healthy"}});g(st)}catch(H){console.error("Failed to fetch trees:",H),T(H.message||"Failed to load trees"),g([])}finally{v(!1)}})()},[b]);const C=z.useCallback(()=>{console.log("Export started")},[]),j=z.useCallback(R=>{console.log(`Export completed: ${R}`)},[]),O=z.useCallback(R=>{console.error("Export error:",R)},[]);return S.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[S.jsx(fs,{onToggleSidebar:w}),S.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[S.jsx(_s,{isOpen:x,onClose:f}),S.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:S.jsxs("div",{className:"max-w-7xl mx-auto",children:[S.jsx("div",{className:"mb-8",children:S.jsxs("div",{className:"flex justify-between items-center mb-4",children:[S.jsxs("div",{children:[S.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Forest Map"}),S.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Explore your forests and individual trees with interactive mapping."})]}),S.jsx("div",{className:"flex items-center space-x-4",children:S.jsx(gs,{filters:b,onExportStart:C,onExportComplete:j,onExportError:O})})]})}),S.jsx(ms,{onFiltersChange:P}),S.jsx(vs,{tree:s,isOpen:a,onClose:l}),d?S.jsx("div",{className:"flex justify-center items-center h-96 bg-white dark:bg-gray-800 rounded-lg shadow",children:S.jsx(In,{text:"Loading trees..."})}):S.jsx(er,{trees:_,onTreeSelect:h,filters:b,loading:d,error:p})]})})]})]})};export{fr as MapPage}; diff --git a/frontend/dist/assets/MapSidebar-DZT3HTLm.js b/frontend/dist/assets/MapSidebar-DZT3HTLm.js deleted file mode 100644 index e84c16e054..0000000000 --- a/frontend/dist/assets/MapSidebar-DZT3HTLm.js +++ /dev/null @@ -1,194 +0,0 @@ -import{r as x,j as e,d as t,p as f,L as j,u}from"./index-Dzr7PBfw.js";import{u as k}from"./useKeyboardNavigation-BRnXQ3uS.js";import{b as g,c as i,d as l,T as v}from"./Table-CZfmBv9T.js";const w=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],y=(r,n)=>{const[o,s]=x.useState([]);return x.useEffect(()=>{r&&n&&s(w)},[r,n]),o},L=r=>x.useCallback(()=>{r&&(navigator.share?navigator.share({title:`Tree Details - ${r.name}`,text:`Check out this tree: ${r.name} (${r.species})`,url:window.location.href}):(navigator.clipboard.writeText(window.location.href),alert("Tree URL copied to clipboard!")))},[r]),M=t.div` - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.5); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - padding: 1rem; -`,C=t.div` - background: white; - border-radius: 0.75rem; - max-width: 800px; - width: 100%; - max-height: 90vh; - overflow-y: auto; - box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); - position: relative; -`,N=t.div` - display: flex; - justify-content: space-between; - align-items: center; - padding: 1.5rem; - border-bottom: 1px solid #e5e7eb; - background: #f9fafb; - border-radius: 0.75rem 0.75rem 0 0; -`,H=t.h2` - font-size: 1.5rem; - font-weight: 700; - color: #111827; - margin: 0; -`,T=t.button` - padding: 0.5rem; - background: transparent; - border: none; - border-radius: 0.375rem; - cursor: pointer; - color: #6b7280; - transition: all 0.2s; - - &:hover { - background: #f3f4f6; - color: #111827; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`,I=t.div` - padding: 1.5rem; -`,z=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),B=({isOpen:r,onClose:n,title:o,children:s,containerRef:d})=>{const c=m=>{m.target===m.currentTarget&&n()};return r?e.jsx(M,{onClick:c,children:e.jsxs(C,{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":"modal-title",children:[e.jsxs(N,{children:[e.jsx(H,{id:"modal-title",children:o}),e.jsx(T,{onClick:n,"aria-label":"Close modal",children:e.jsx(z,{})})]}),e.jsx(I,{children:s})]})}):null},S=t.div` - background: #f9fafb; - border-radius: 0.75rem; - padding: 1.5rem; - border: 1px solid #e5e7eb; -`,V=t.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0 0 1rem 0; -`,W=t.div` - display: flex; - justify-content: space-between; - align-items: center; - padding: 0.5rem 0; - border-bottom: 1px solid #e5e7eb; - - &:last-child { - border-bottom: none; - } -`,D=t.span` - color: #6b7280; - font-size: 0.875rem; -`,A=t.span` - font-weight: 500; - color: #111827; - font-size: 0.875rem; -`,p=({title:r,children:n})=>e.jsxs(S,{children:[e.jsx(V,{children:r}),n]}),a=({label:r,children:n})=>e.jsxs(W,{children:[e.jsxs(D,{children:[r,":"]}),e.jsx(A,{children:n})]}),P=t.span` - padding: 0.25rem 0.75rem; - border-radius: 9999px; - font-size: 0.75rem; - font-weight: 500; - - ${r=>{switch(r.health){case"healthy":return"background: #d1fae5; color: #065f46;";case"warning":return"background: #fef3c7; color: #92400e;";case"critical":return"background: #fee2e2; color: #991b1b;";default:return"background: #f3f4f6; color: #374151;"}}} -`,b=({health:r,children:n})=>e.jsx(P,{health:r,children:n||r}),E=({tree:r})=>e.jsxs(p,{title:"Basic Information",children:[e.jsx(a,{label:"Tree ID",children:r.name}),e.jsx(a,{label:"Species",children:r.species}),e.jsxs(a,{label:"Current Height",children:[r.height,"m"]}),e.jsx(a,{label:"Health Status",children:e.jsx(b,{health:r.health,children:r.health})}),e.jsx(a,{label:"Planted Date",children:"March 15, 2023"})]}),F=({tree:r})=>e.jsxs(p,{title:"Location & Contract",children:[e.jsx(a,{label:"Latitude",children:r.lat.toFixed(6)}),e.jsx(a,{label:"Longitude",children:r.lng.toFixed(6)}),e.jsxs(a,{label:"Forest",children:["Forest ",r.id<=4?"A":"B"]}),e.jsx(a,{label:"Contract Status",children:e.jsx("span",{className:"px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs",children:"Active"})}),e.jsx(a,{label:"Last Inspection",children:"Jan 15, 2024"})]}),$=t.div` - margin-bottom: 2rem; -`,G=t.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0 0 1rem 0; -`,R=t(v)` - background: white; - border-radius: 0.5rem; - overflow: hidden; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); -`,J=t.thead` - background: #f3f4f6; -`,K=({measurementHistory:r})=>e.jsxs($,{children:[e.jsx(G,{children:"Measurement History (Last 10 Entries)"}),e.jsxs(R,{children:[e.jsx(J,{children:e.jsxs(g,{children:[e.jsx(i,{children:"Date"}),e.jsx(i,{children:"Height (m)"}),e.jsx(i,{children:"Diameter (cm)"}),e.jsx(i,{children:"Health"})]})}),e.jsx("tbody",{children:r.slice(0,10).map((n,o)=>e.jsxs(g,{children:[e.jsx(l,{children:f(n.date)}),e.jsx(l,{children:n.height}),e.jsx(l,{children:n.diameter}),e.jsx(l,{children:e.jsx(b,{health:n.health,children:n.health})})]},o))})]})]}),U=t.div` - display: grid; - grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); - gap: 1rem; - margin-top: 1rem; -`,q=t.div` - background: #f9fafb; - border-radius: 0.5rem; - padding: 1rem; - text-align: center; - border: 1px solid #e5e7eb; -`,O=t.div` - width: 100%; - height: 100px; - background: #e5e7eb; - border-radius: 0.5rem; - display: flex; - align-items: center; - justify-content: center; - color: #6b7280; - font-size: 0.875rem; - margin-bottom: 0.5rem; -`,Q=()=>e.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"})}),h=({caption:r})=>e.jsxs(q,{children:[e.jsx(O,{children:e.jsx(Q,{})}),e.jsx("div",{className:"text-xs text-gray-600",children:r})]}),X=()=>e.jsxs(U,{children:[e.jsx(h,{caption:"Latest Photo"}),e.jsx(h,{caption:"Growth Progress"}),e.jsx(h,{caption:"Planting Day"})]}),Y=t.button` - padding: 0.75rem 1.5rem; - background: #10b981; - color: white; - border: none; - border-radius: 0.5rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background: #059669; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`,Z=t(j)` - padding: 0.75rem 1.5rem; - background: #3b82f6; - color: white; - border: none; - border-radius: 0.5rem; - font-weight: 500; - text-decoration: none; - display: inline-flex; - align-items: center; - gap: 0.5rem; - transition: all 0.2s; - - &:hover { - background: #2563eb; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); - } -`,_=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"})}),ee=()=>e.jsx("svg",{className:"w-4 h-4 mr-2 inline",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z"})}),re=({tree:r,onShare:n})=>e.jsxs("div",{className:"flex justify-end space-x-3",children:[e.jsxs(Z,{to:`/tree/${r.id}`,children:[e.jsx(_,{}),"View Full Page"]}),e.jsxs(Y,{onClick:n,children:[e.jsx(ee,{}),"Share Tree"]})]}),te=t.div` - display: grid; - grid-template-columns: 1fr; - gap: 1.5rem; - margin-bottom: 2rem; - - @media (min-width: 768px) { - grid-template-columns: 1fr 1fr; - } -`,ne=t.div` - margin-bottom: 2rem; -`,oe=t.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0 0 1rem 0; -`,ce=({tree:r,isOpen:n,onClose:o})=>{const{containerRef:s}=k({onEscape:o,trapFocus:!0,autoFocus:!0}),d=y(r,n),c=L(r);return r?e.jsxs(B,{isOpen:n,onClose:o,title:r.name,containerRef:s,children:[e.jsxs(te,{children:[e.jsx(E,{tree:r}),e.jsx(F,{tree:r})]}),e.jsx(K,{measurementHistory:d}),e.jsxs(ne,{children:[e.jsx(oe,{children:"Tree Images"}),e.jsx(X,{})]}),e.jsx(re,{tree:r,onShare:c})]}):null},ae=t.header` - background: white; - border-bottom: 1px solid #e5e7eb; - padding: 1rem 0; -`,he=()=>{const{user:r,logout:n,isAdmin:o}=u(),s=async()=>{await n()};return e.jsx(ae,{children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx("div",{className:"flex items-center",children:e.jsx("h1",{className:"text-2xl font-bold text-green-600",children:"Nanwa Map View"})}),e.jsxs("div",{className:"flex items-center space-x-4",children:[e.jsxs("div",{className:"text-sm text-gray-700",children:["Welcome, ",e.jsx("span",{className:"font-medium",children:r==null?void 0:r.name}),o()&&e.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 text-red-800 text-xs rounded-full",children:"Admin"})]}),e.jsx("button",{onClick:s,className:"text-gray-700 hover:text-green-600 transition-colors",children:e.jsx("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})})})]})]})})})},se=t.aside` - background: white; - border-right: 1px solid #e5e7eb; - width: 250px; - position: fixed; - top: 0; - left: 0; - height: 100vh; - overflow-y: auto; - z-index: 10; -`,xe=()=>{const{isAdmin:r}=u();return e.jsx(se,{children:e.jsx("div",{className:"p-6",children:e.jsxs("nav",{className:"space-y-2",children:[e.jsxs("a",{href:"/dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[e.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),e.jsxs("a",{href:"#map",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 bg-green-50 rounded-lg",children:[e.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),e.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[e.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),r()&&e.jsxs("a",{href:"#audit",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 hover:text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:[e.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})})};export{b as H,he as M,ce as T,xe as a,L as u}; diff --git a/frontend/dist/assets/TreeDetailLayout-Cc_P7nbu.js b/frontend/dist/assets/MapSidebar-jstr5dKK.js similarity index 68% rename from frontend/dist/assets/TreeDetailLayout-Cc_P7nbu.js rename to frontend/dist/assets/MapSidebar-jstr5dKK.js index 9eced7a8cf..defd99d9ac 100644 --- a/frontend/dist/assets/TreeDetailLayout-Cc_P7nbu.js +++ b/frontend/dist/assets/MapSidebar-jstr5dKK.js @@ -1,4 +1,4 @@ -import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-Dzr7PBfw.js";import{H as k}from"./MapSidebar-DZT3HTLm.js";const I=w.forwardRef(({loading:n,loadingText:o="Loading...",children:i,...m},g)=>e.jsx(v,{ref:g,loading:n,...m,children:n?o:i}));I.displayName="LoadingButton";const T=({className:n="",...o})=>e.jsx("svg",{className:n,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 12H5M12 19l-7-7 7-7"})}),y=r.header` +import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-CGkKx7Xv.js";import{H as k}from"./TreeDetailModal-DPmuOlrX.js";const I=w.forwardRef(({loading:o,loadingText:n="Loading...",children:i,...m},g)=>e.jsx(v,{ref:g,loading:o,...m,children:o?n:i}));I.displayName="LoadingButton";const T=({className:o="",...n})=>e.jsx("svg",{className:o,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...n,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 12H5M12 19l-7-7 7-7"})}),y=r.header` background: white; border-bottom: 1px solid #e5e7eb; padding: 1rem 0; @@ -53,21 +53,21 @@ import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-Dzr7PBfw.js";impor &:hover { background: #059669; } -`,M=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})}),S=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})}),D=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z"})}),J=({onPrevious:n,onNext:o,onShare:i,hasPrevious:m,hasNext:g})=>e.jsx(y,{children:e.jsxs(z,{children:[e.jsxs(B,{to:"/map",children:[e.jsx(T,{}),"Back to Map"]}),e.jsxs(H,{children:[e.jsxs(b,{onClick:n,disabled:!m,children:[e.jsx(M,{}),"Previous"]}),e.jsxs(b,{onClick:o,disabled:!g,children:["Next",e.jsx(S,{})]}),e.jsxs(b,{onClick:i,children:[e.jsx(D,{}),"Share"]})]})]})}),N=r.div` +`,M=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"})}),S=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})}),D=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z"})}),J=({onPrevious:o,onNext:n,onShare:i,hasPrevious:m,hasNext:g})=>e.jsx(y,{children:e.jsxs(z,{children:[e.jsxs(B,{to:"/map",children:[e.jsx(T,{}),"Back to Map"]}),e.jsxs(H,{children:[e.jsxs(b,{onClick:o,disabled:!m,children:[e.jsx(M,{}),"Previous"]}),e.jsxs(b,{onClick:n,disabled:!g,children:["Next",e.jsx(S,{})]}),e.jsxs(b,{onClick:i,children:[e.jsx(D,{}),"Share"]})]})]})}),N=r.div` display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1.5rem; -`,s=r.div` +`,t=r.div` padding: 1rem; background: #f9fafb; border-radius: 0.5rem; border: 1px solid #e5e7eb; -`,t=r.div` +`,d=r.div` font-size: 0.875rem; color: #6b7280; margin-bottom: 0.5rem; -`,d=r.div` +`,s=r.div` font-size: 1.125rem; font-weight: 600; color: #111827; @@ -82,7 +82,7 @@ import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-Dzr7PBfw.js";impor padding: 2rem; box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); border: 1px solid #e5e7eb; -`,q=({tree:n})=>e.jsxs(R,{children:[e.jsx($,{children:"Tree Information"}),e.jsxs(N,{children:[e.jsxs(s,{children:[e.jsx(t,{children:"Current Height"}),e.jsxs(d,{children:[n.height,"m"]})]}),e.jsxs(s,{children:[e.jsx(t,{children:"Health Status"}),e.jsx(d,{children:e.jsx(k,{health:n.health,children:n.health})})]}),e.jsxs(s,{children:[e.jsx(t,{children:"Species"}),e.jsx(d,{children:n.species})]}),e.jsxs(s,{children:[e.jsx(t,{children:"Planted Date"}),e.jsx(d,{children:"Mar 15, 2023"})]})]})]}),P=r.div` +`,q=({tree:o})=>e.jsxs(R,{children:[e.jsx($,{children:"Tree Information"}),e.jsxs(N,{children:[e.jsxs(t,{children:[e.jsx(d,{children:"Current Height"}),e.jsxs(s,{children:[o.height,"m"]})]}),e.jsxs(t,{children:[e.jsx(d,{children:"Health Status"}),e.jsx(s,{children:e.jsx(k,{health:o.health,children:o.health})})]}),e.jsxs(t,{children:[e.jsx(d,{children:"Species"}),e.jsx(s,{children:o.species})]}),e.jsxs(t,{children:[e.jsx(d,{children:"Planted Date"}),e.jsx(s,{children:"Mar 15, 2023"})]})]})]}),P=r.div` display: flex; flex-direction: column; gap: 2rem; @@ -115,7 +115,7 @@ import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-Dzr7PBfw.js";impor font-size: 1.125rem; font-weight: 600; color: #111827; -`,K=({tree:n})=>e.jsxs(P,{children:[e.jsxs(p,{children:[e.jsx(f,{children:"Location"}),e.jsxs(j,{children:[e.jsxs(a,{children:[e.jsx(l,{children:"Latitude"}),e.jsx(c,{children:n.lat.toFixed(6)})]}),e.jsxs(a,{children:[e.jsx(l,{children:"Longitude"}),e.jsx(c,{children:n.lng.toFixed(6)})]})]})]}),e.jsxs(p,{children:[e.jsx(f,{children:"Contract Details"}),e.jsxs(j,{children:[e.jsxs(a,{children:[e.jsx(l,{children:"Status"}),e.jsx(c,{children:e.jsx("span",{className:"px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs",children:"Active"})})]}),e.jsxs(a,{children:[e.jsx(l,{children:"Last Inspection"}),e.jsx(c,{children:"Jan 15, 2024"})]})]})]})]}),W=r.div` +`,K=({tree:o})=>e.jsxs(P,{children:[e.jsxs(p,{children:[e.jsx(f,{children:"Location"}),e.jsxs(j,{children:[e.jsxs(a,{children:[e.jsx(l,{children:"Latitude"}),e.jsx(c,{children:o.lat.toFixed(6)})]}),e.jsxs(a,{children:[e.jsx(l,{children:"Longitude"}),e.jsx(c,{children:o.lng.toFixed(6)})]})]})]}),e.jsxs(p,{children:[e.jsx(f,{children:"Contract Details"}),e.jsxs(j,{children:[e.jsxs(a,{children:[e.jsx(l,{children:"Status"}),e.jsx(c,{children:e.jsx("span",{className:"px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs",children:"Active"})})]}),e.jsxs(a,{children:[e.jsx(l,{children:"Last Inspection"}),e.jsx(c,{children:"Jan 15, 2024"})]})]})]})]}),W=r.div` background: white; border-radius: 0.75rem; padding: 2rem; @@ -149,7 +149,7 @@ import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-Dzr7PBfw.js";impor font-size: 0.875rem; font-weight: 600; color: #374151; -`,O=({measurements:n})=>e.jsxs(W,{children:[e.jsx(A,{children:"Measurement History"}),e.jsxs(G,{children:[e.jsx(F,{children:e.jsxs(u,{children:[e.jsx(x,{children:"Date"}),e.jsx(x,{children:"Height (m)"}),e.jsx(x,{children:"Diameter (cm)"}),e.jsx(x,{children:"Health"})]})}),e.jsx("tbody",{children:n.slice(0,10).map((o,i)=>e.jsxs(u,{children:[e.jsx(h,{children:L(o.date)}),e.jsx(h,{children:o.height}),e.jsx(h,{children:o.diameter}),e.jsx(h,{children:e.jsx(k,{health:o.health,children:o.health})})]},i))})]})]}),Q=r.div` +`,O=({measurements:o})=>e.jsxs(W,{children:[e.jsx(A,{children:"Measurement History"}),e.jsxs(G,{children:[e.jsx(F,{children:e.jsxs(u,{children:[e.jsx(x,{children:"Date"}),e.jsx(x,{children:"Height (m)"}),e.jsx(x,{children:"Diameter (cm)"}),e.jsx(x,{children:"Health"})]})}),e.jsx("tbody",{children:o.slice(0,10).map((n,i)=>e.jsxs(u,{children:[e.jsx(h,{children:L(n.date)}),e.jsx(h,{children:n.height}),e.jsx(h,{children:n.diameter}),e.jsx(h,{children:e.jsx(k,{health:n.health,children:n.health})})]},i))})]})]}),Q=r.div` min-height: 100vh; background-color: #f9fafb; `,U=r.main` @@ -184,4 +184,38 @@ import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-Dzr7PBfw.js";impor display: flex; flex-direction: column; gap: 2rem; +`;r.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; + + @media (prefers-color-scheme: dark) { + background: #1f2937; + border-bottom-color: #374151; + } + + .dark & { + background: #1f2937; + border-bottom-color: #374151; + } +`;r.aside` + background: white; + border-right: 1px solid #e5e7eb; + width: 250px; + position: fixed; + top: 0; + left: 0; + height: 100vh; + overflow-y: auto; + z-index: 10; + + @media (prefers-color-scheme: dark) { + background: #1f2937; + border-right-color: #374151; + } + + .dark & { + background: #1f2937; + border-right-color: #374151; + } `;export{T as B,_ as C,U as M,Q as P,J as T,X as a,Y as b,Z as c,ee as d,q as e,O as f,K as g}; diff --git a/frontend/dist/assets/Navbar-BJVIhaUA.js b/frontend/dist/assets/Navbar-BSLKvp05.js similarity index 90% rename from frontend/dist/assets/Navbar-BJVIhaUA.js rename to frontend/dist/assets/Navbar-BSLKvp05.js index a859c4d12d..fc0b52cc5e 100644 --- a/frontend/dist/assets/Navbar-BJVIhaUA.js +++ b/frontend/dist/assets/Navbar-BSLKvp05.js @@ -1 +1 @@ -import{j as e,L as o,r as n}from"./index-Dzr7PBfw.js";import{u as g}from"./useKeyboardNavigation-BRnXQ3uS.js";import{D as l}from"./DarkModeToggle-DNnaM-T2.js";import{I as m}from"./IconButton-CsSKj4cW.js";const h=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})}),f=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),p=({className:r=""})=>e.jsx(o,{to:"/",className:`text-2xl font-extrabold text-green-600 dark:text-green-400 tracking-tight ${r}`,children:"Nanwa"}),c=()=>{const r="text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 transition-colors px-4 py-2 text-base font-medium";return e.jsxs(e.Fragment,{children:[e.jsx("a",{href:"#features",className:r,children:"Features"}),e.jsx("a",{href:"#about",className:r,children:"About"}),e.jsx(o,{to:"/login",className:r,children:"Login"}),e.jsx(o,{to:"/register",className:"ml-2 bg-green-600 dark:bg-green-500 text-white px-4 py-2 rounded-lg hover:bg-green-700 dark:hover:bg-green-600 transition-colors text-base font-medium",children:"Get Started"})]})},j=({isOpen:r})=>r?e.jsx("div",{className:"md:hidden border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-4 pb-4 space-y-1",children:e.jsx(c,{})}):null,N=()=>{const[r,t]=n.useState(!1),a=n.useRef(null),{containerRef:x,focusFirst:i}=g({onEscape:()=>t(!1),trapFocus:r,autoFocus:!1}),d=()=>{t(!r)};n.useEffect(()=>{setTimeout(r?()=>{i()}:()=>{var s;(s=a.current)==null||s.focus()},100)},[r,i]);const u=s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d())};return e.jsxs("nav",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm border-b border-gray-200 dark:border-gray-700",children:[e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center h-16",children:[e.jsx(p,{}),e.jsxs("div",{className:"hidden md:flex items-center gap-4",children:[e.jsx(c,{}),e.jsx(l,{size:"sm"})]}),e.jsxs("div",{className:"md:hidden flex items-center gap-2",children:[e.jsx(l,{size:"sm"}),e.jsx(m,{ref:a,"aria-label":"Toggle menu",className:"text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400",onClick:d,onKeyDown:u,children:r?e.jsx(f,{className:"h-6 w-6"}):e.jsx(h,{className:"h-6 w-6"})})]})]})}),e.jsx("div",{ref:x,children:e.jsx(j,{isOpen:r})})]})};export{N}; +import{j as e,L as o,r as n}from"./index-CGkKx7Xv.js";import{u as g}from"./useKeyboardNavigation-Bh0nMcUg.js";import{D as l}from"./DarkModeToggle-Cu0JyOh5.js";import{I as m}from"./IconButton-vDjz_WRZ.js";const h=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})}),f=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),p=({className:r=""})=>e.jsx(o,{to:"/",className:`text-2xl font-extrabold text-green-600 dark:text-green-400 tracking-tight ${r}`,children:"Nanwa"}),c=()=>{const r="text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 transition-colors px-4 py-2 text-base font-medium";return e.jsxs(e.Fragment,{children:[e.jsx("a",{href:"#features",className:r,children:"Features"}),e.jsx("a",{href:"#about",className:r,children:"About"}),e.jsx(o,{to:"/login",className:r,children:"Login"}),e.jsx(o,{to:"/register",className:"ml-2 bg-green-600 dark:bg-green-500 text-white px-4 py-2 rounded-lg hover:bg-green-700 dark:hover:bg-green-600 transition-colors text-base font-medium",children:"Get Started"})]})},j=({isOpen:r})=>r?e.jsx("div",{className:"md:hidden border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-4 pb-4 space-y-1",children:e.jsx(c,{})}):null,N=()=>{const[r,t]=n.useState(!1),a=n.useRef(null),{containerRef:x,focusFirst:i}=g({onEscape:()=>t(!1),trapFocus:r,autoFocus:!1}),d=()=>{t(!r)};n.useEffect(()=>{setTimeout(r?()=>{i()}:()=>{var s;(s=a.current)==null||s.focus()},100)},[r,i]);const u=s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d())};return e.jsxs("nav",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm border-b border-gray-200 dark:border-gray-700",children:[e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center h-16",children:[e.jsx(p,{}),e.jsxs("div",{className:"hidden md:flex items-center gap-4",children:[e.jsx(c,{}),e.jsx(l,{size:"sm"})]}),e.jsxs("div",{className:"md:hidden flex items-center gap-2",children:[e.jsx(l,{size:"sm"}),e.jsx(m,{ref:a,"aria-label":"Toggle menu",className:"text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400",onClick:d,onKeyDown:u,children:r?e.jsx(f,{className:"h-6 w-6"}):e.jsx(h,{className:"h-6 w-6"})})]})]})}),e.jsx("div",{ref:x,children:e.jsx(j,{isOpen:r})})]})};export{N}; diff --git a/frontend/dist/assets/PasswordInput-BcWvIN9N.js b/frontend/dist/assets/PasswordInput-Bff6SLQJ.js similarity index 97% rename from frontend/dist/assets/PasswordInput-BcWvIN9N.js rename to frontend/dist/assets/PasswordInput-Bff6SLQJ.js index 3b514e3ce9..9b0c07f501 100644 --- a/frontend/dist/assets/PasswordInput-BcWvIN9N.js +++ b/frontend/dist/assets/PasswordInput-Bff6SLQJ.js @@ -1 +1 @@ -import{j as e,r as u}from"./index-Dzr7PBfw.js";const j=({label:r,id:s,error:t,required:a=!1,children:n,className:d=""})=>e.jsxs("div",{className:d,children:[e.jsxs("label",{htmlFor:s,className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[r,a&&e.jsx("span",{className:"text-red-500 ml-1",children:"*"})]}),n,t&&e.jsx("p",{id:`${s}-error`,className:"mt-1 text-sm text-red-600 dark:text-red-400",children:t})]}),y=({id:r,name:s,value:t,onChange:a,onBlur:n,className:d="",placeholder:c="",disabled:i=!1,error:l="",...x})=>{const[o,p]=u.useState(!1),h=()=>{p(!o)};return e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:o?"text":"password",id:r,name:s,value:t,onChange:a,onBlur:n,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${l?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"} ${d}`,placeholder:c,disabled:i,"aria-describedby":l?`${r}-error`:void 0,...x}),e.jsx("button",{type:"button",onClick:h,className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:i,"aria-label":o?"Hide password":"Show password",children:o?e.jsx(g,{className:"h-5 w-5 text-gray-400"}):e.jsx(m,{className:"h-5 w-5 text-gray-400"})})]})},m=({className:r})=>e.jsxs("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]}),g=({className:r})=>e.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})});export{j as F,y as P}; +import{j as e,r as u}from"./index-CGkKx7Xv.js";const j=({label:r,id:s,error:t,required:a=!1,children:n,className:d=""})=>e.jsxs("div",{className:d,children:[e.jsxs("label",{htmlFor:s,className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[r,a&&e.jsx("span",{className:"text-red-500 ml-1",children:"*"})]}),n,t&&e.jsx("p",{id:`${s}-error`,className:"mt-1 text-sm text-red-600 dark:text-red-400",children:t})]}),y=({id:r,name:s,value:t,onChange:a,onBlur:n,className:d="",placeholder:c="",disabled:i=!1,error:l="",...x})=>{const[o,p]=u.useState(!1),h=()=>{p(!o)};return e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:o?"text":"password",id:r,name:s,value:t,onChange:a,onBlur:n,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${l?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"} ${d}`,placeholder:c,disabled:i,"aria-describedby":l?`${r}-error`:void 0,...x}),e.jsx("button",{type:"button",onClick:h,className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:i,"aria-label":o?"Hide password":"Show password",children:o?e.jsx(g,{className:"h-5 w-5 text-gray-400"}):e.jsx(m,{className:"h-5 w-5 text-gray-400"})})]})},m=({className:r})=>e.jsxs("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]}),g=({className:r})=>e.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})});export{j as F,y as P}; diff --git a/frontend/dist/assets/RegisterPage-D_5fYFtm.js b/frontend/dist/assets/RegisterPage-Cf4V_AZ4.js similarity index 97% rename from frontend/dist/assets/RegisterPage-D_5fYFtm.js rename to frontend/dist/assets/RegisterPage-Cf4V_AZ4.js index fd5a7109ad..58da583572 100644 --- a/frontend/dist/assets/RegisterPage-D_5fYFtm.js +++ b/frontend/dist/assets/RegisterPage-Cf4V_AZ4.js @@ -1,4 +1,4 @@ -import{j as r,d as c,r as l,u as b,L as x}from"./index-Dzr7PBfw.js";import{F as u,P as h}from"./PasswordInput-BcWvIN9N.js";import"./vendor-BtP0CW_r.js";const j=c.div` +import{j as r,d as c,r as l,u as b,L as x}from"./index-CGkKx7Xv.js";import{F as u,P as h}from"./PasswordInput-Bff6SLQJ.js";import"./vendor-BtP0CW_r.js";const j=c.div` width: 100%; height: 4px; background-color: #e5e7eb; diff --git a/frontend/dist/assets/Table-CZfmBv9T.js b/frontend/dist/assets/Table-CfKObwuM.js similarity index 97% rename from frontend/dist/assets/Table-CZfmBv9T.js rename to frontend/dist/assets/Table-CfKObwuM.js index 40bfcae1b9..85bb5cd523 100644 --- a/frontend/dist/assets/Table-CZfmBv9T.js +++ b/frontend/dist/assets/Table-CfKObwuM.js @@ -1,4 +1,4 @@ -import{d as r}from"./index-Dzr7PBfw.js";const e=()=>{const o=document.documentElement.classList.contains("dark");return{containerBg:o?"#1f2937":"#ffffff",containerBorder:o?"#374151":"#e5e7eb",containerShadow:o?"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)":"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",headerBg:o?"#374151":"#f9fafb",headerBorder:o?"#4b5563":"#e5e7eb",headerText:o?"#f9fafb":"#111827",cellText:o?"#e5e7eb":"#111827",cellBorder:o?"#4b5563":"#f3f4f6",cellHover:o?"#374151":"#f9fafb",cellHeaderText:o?"#d1d5db":"#374151",cellHeaderHover:o?"#4b5563":"#f3f4f6",mutedText:o?"#9ca3af":"#6b7280",sortIcon:o?"#6b7280":"#9ca3af"}},t=r.div` +import{d as r}from"./index-CGkKx7Xv.js";const e=()=>{const o=document.documentElement.classList.contains("dark");return{containerBg:o?"#1f2937":"#ffffff",containerBorder:o?"#374151":"#e5e7eb",containerShadow:o?"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)":"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",headerBg:o?"#374151":"#f9fafb",headerBorder:o?"#4b5563":"#e5e7eb",headerText:o?"#f9fafb":"#111827",cellText:o?"#e5e7eb":"#111827",cellBorder:o?"#4b5563":"#f3f4f6",cellHover:o?"#374151":"#f9fafb",cellHeaderText:o?"#d1d5db":"#374151",cellHeaderHover:o?"#4b5563":"#f3f4f6",mutedText:o?"#9ca3af":"#6b7280",sortIcon:o?"#6b7280":"#9ca3af"}},t=r.div` background: ${()=>e().containerBg}; border-radius: 0.75rem; box-shadow: ${()=>e().containerShadow}; diff --git a/frontend/dist/assets/TreeDetailModal-DPmuOlrX.js b/frontend/dist/assets/TreeDetailModal-DPmuOlrX.js new file mode 100644 index 0000000000..77f7f5bf08 --- /dev/null +++ b/frontend/dist/assets/TreeDetailModal-DPmuOlrX.js @@ -0,0 +1,180 @@ +import{r as m,j as e,d as t,p as f,L as j}from"./index-CGkKx7Xv.js";import{u as p}from"./useKeyboardNavigation-Bh0nMcUg.js";import{b as g,c as s,d as l,T as w}from"./Table-CfKObwuM.js";const k=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],v=(r,n)=>{const[a,i]=m.useState([]);return m.useEffect(()=>{r&&n&&i(k)},[r,n]),a},y=r=>m.useCallback(()=>{r&&(navigator.share?navigator.share({title:`Tree Details - ${r.name}`,text:`Check out this tree: ${r.name} (${r.species})`,url:window.location.href}):(navigator.clipboard.writeText(window.location.href),alert("Tree URL copied to clipboard!")))},[r]),T=t.div` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + padding: 1rem; +`,C=t.div` + background: white; + border-radius: 0.75rem; + max-width: 800px; + width: 100%; + max-height: 90vh; + overflow-y: auto; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + position: relative; +`,I=t.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 1.5rem; + border-bottom: 1px solid #e5e7eb; + background: #f9fafb; + border-radius: 0.75rem 0.75rem 0 0; +`,L=t.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`,M=t.button` + padding: 0.5rem; + background: transparent; + border: none; + border-radius: 0.375rem; + cursor: pointer; + color: #6b7280; + transition: all 0.2s; + + &:hover { + background: #f3f4f6; + color: #111827; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,H=t.div` + padding: 1.5rem; +`,S=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),B=({isOpen:r,onClose:n,title:a,children:i,containerRef:d})=>{const c=x=>{x.target===x.currentTarget&&n()};return r?e.jsx(T,{onClick:c,children:e.jsxs(C,{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":"modal-title",children:[e.jsxs(I,{children:[e.jsx(L,{id:"modal-title",children:a}),e.jsx(M,{onClick:n,"aria-label":"Close modal",children:e.jsx(S,{})})]}),e.jsx(H,{children:i})]})}):null},z=t.div` + background: #f9fafb; + border-radius: 0.75rem; + padding: 1.5rem; + border: 1px solid #e5e7eb; +`,D=t.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`,N=t.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.5rem 0; + border-bottom: 1px solid #e5e7eb; + + &:last-child { + border-bottom: none; + } +`,F=t.span` + color: #6b7280; + font-size: 0.875rem; +`,P=t.span` + font-weight: 500; + color: #111827; + font-size: 0.875rem; +`,u=({title:r,children:n})=>e.jsxs(z,{children:[e.jsx(D,{children:r}),n]}),o=({label:r,children:n})=>e.jsxs(N,{children:[e.jsxs(F,{children:[r,":"]}),e.jsx(P,{children:n})]}),$=t.span` + padding: 0.25rem 0.75rem; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + + ${r=>{switch(r.health){case"healthy":return"background: #d1fae5; color: #065f46;";case"warning":return"background: #fef3c7; color: #92400e;";case"critical":return"background: #fee2e2; color: #991b1b;";default:return"background: #f3f4f6; color: #374151;"}}} +`,b=({health:r,children:n})=>e.jsx($,{health:r,children:n||r}),E=({tree:r})=>e.jsxs(u,{title:"Basic Information",children:[e.jsx(o,{label:"Tree ID",children:r.name}),e.jsx(o,{label:"Species",children:r.species}),e.jsxs(o,{label:"Current Height",children:[r.height,"m"]}),e.jsx(o,{label:"Health Status",children:e.jsx(b,{health:r.health,children:r.health})}),e.jsx(o,{label:"Planted Date",children:"March 15, 2023"})]}),G=({tree:r})=>e.jsxs(u,{title:"Location & Contract",children:[e.jsx(o,{label:"Latitude",children:r.lat.toFixed(6)}),e.jsx(o,{label:"Longitude",children:r.lng.toFixed(6)}),e.jsxs(o,{label:"Forest",children:["Forest ",r.id<=4?"A":"B"]}),e.jsx(o,{label:"Contract Status",children:e.jsx("span",{className:"px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs",children:"Active"})}),e.jsx(o,{label:"Last Inspection",children:"Jan 15, 2024"})]}),R=t.div` + margin-bottom: 2rem; +`,V=t.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`,W=t(w)` + background: white; + border-radius: 0.5rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +`,A=t.thead` + background: #f3f4f6; +`,J=({measurementHistory:r})=>e.jsxs(R,{children:[e.jsx(V,{children:"Measurement History (Last 10 Entries)"}),e.jsxs(W,{children:[e.jsx(A,{children:e.jsxs(g,{children:[e.jsx(s,{children:"Date"}),e.jsx(s,{children:"Height (m)"}),e.jsx(s,{children:"Diameter (cm)"}),e.jsx(s,{children:"Health"})]})}),e.jsx("tbody",{children:r.slice(0,10).map((n,a)=>e.jsxs(g,{children:[e.jsx(l,{children:f(n.date)}),e.jsx(l,{children:n.height}),e.jsx(l,{children:n.diameter}),e.jsx(l,{children:e.jsx(b,{health:n.health,children:n.health})})]},a))})]})]}),K=t.div` + display: grid; + grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + gap: 1rem; + margin-top: 1rem; +`,U=t.div` + background: #f9fafb; + border-radius: 0.5rem; + padding: 1rem; + text-align: center; + border: 1px solid #e5e7eb; +`,q=t.div` + width: 100%; + height: 100px; + background: #e5e7eb; + border-radius: 0.5rem; + display: flex; + align-items: center; + justify-content: center; + color: #6b7280; + font-size: 0.875rem; + margin-bottom: 0.5rem; +`,O=()=>e.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"})}),h=({caption:r})=>e.jsxs(U,{children:[e.jsx(q,{children:e.jsx(O,{})}),e.jsx("div",{className:"text-xs text-gray-600",children:r})]}),Q=()=>e.jsxs(K,{children:[e.jsx(h,{caption:"Latest Photo"}),e.jsx(h,{caption:"Growth Progress"}),e.jsx(h,{caption:"Planting Day"})]}),X=t.button` + padding: 0.75rem 1.5rem; + background: #10b981; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #059669; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,Y=t(j)` + padding: 0.75rem 1.5rem; + background: #3b82f6; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + text-decoration: none; + display: inline-flex; + align-items: center; + gap: 0.5rem; + transition: all 0.2s; + + &:hover { + background: #2563eb; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); + } +`,Z=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"})}),_=()=>e.jsx("svg",{className:"w-4 h-4 mr-2 inline",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z"})}),ee=({tree:r,onShare:n})=>e.jsxs("div",{className:"flex justify-end space-x-3",children:[e.jsxs(Y,{to:`/tree/${r.id}`,children:[e.jsx(Z,{}),"View Full Page"]}),e.jsxs(X,{onClick:n,children:[e.jsx(_,{}),"Share Tree"]})]}),re=t.div` + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + margin-bottom: 2rem; + + @media (min-width: 768px) { + grid-template-columns: 1fr 1fr; + } +`,te=t.div` + margin-bottom: 2rem; +`,ne=t.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`,se=({tree:r,isOpen:n,onClose:a})=>{const{containerRef:i}=p({onEscape:a,trapFocus:!0,autoFocus:!0}),d=v(r,n),c=y(r);return r?e.jsxs(B,{isOpen:n,onClose:a,title:r.name,containerRef:i,children:[e.jsxs(re,{children:[e.jsx(E,{tree:r}),e.jsx(G,{tree:r})]}),e.jsx(J,{measurementHistory:d}),e.jsxs(te,{children:[e.jsx(ne,{children:"Tree Images"}),e.jsx(Q,{})]}),e.jsx(ee,{tree:r,onShare:c})]}):null};export{b as H,se as T,y as u}; diff --git a/frontend/dist/assets/TreeDetailPage-BIoNlDES.js b/frontend/dist/assets/TreeDetailPage-BIoNlDES.js new file mode 100644 index 0000000000..5251a8505a --- /dev/null +++ b/frontend/dist/assets/TreeDetailPage-BIoNlDES.js @@ -0,0 +1,8 @@ +import{r as n,a as f,m as j,u as P,j as e,e as S,d as v}from"./index-CGkKx7Xv.js";import"./IconButton-vDjz_WRZ.js";import{P as g,T as x,M as T,a as y,b as N,c as b,C as A,d as D,e as M,f as k,g as w}from"./MapSidebar-jstr5dKK.js";import"./ExportButton-BryKwkQ4.js";import"./FormElements-BsiOcVAQ.js";import"./Table-CfKObwuM.js";import"./ChartComponents-DOzzJtP4.js";import{u as C}from"./TreeDetailModal-DPmuOlrX.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-Bh0nMcUg.js";const p=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],E=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],I=s=>{const[r,t]=n.useState(null),[a,h]=n.useState([]),[i,c]=n.useState(!0),[u,l]=n.useState(null);return n.useEffect(()=>{s&&(async()=>{try{c(!0),l(null),await new Promise(d=>setTimeout(d,500));const o=p.find(d=>d.id===parseInt(s));if(!o){l("Tree not found");return}t(o),h(E)}catch{l("Failed to load tree data")}finally{c(!1)}})()},[s]),{tree:r,measurements:a,loading:i,error:u,trees:p}},B=(s,r)=>{const t=f(),a=n.useMemo(()=>r.findIndex(l=>l.id===parseInt(s)),[r,s]),h=a>0,i=a{h&&t(`/tree/${r[a-1].id}`)},[t,r,a,h]),u=n.useCallback(()=>{i&&t(`/tree/${r[a+1].id}`)},[t,r,a,i]);return{hasPrevious:h,hasNext:i,handlePreviousTree:c,handleNextTree:u,currentIndex:a}},H=v.div` + background: #fee2e2; + color: #991b1b; + padding: 1rem; + border-radius: 0.5rem; + border: 1px solid #fecaca; + text-align: center; +`,Q=()=>{const{id:s}=j(),{user:r}=P(),{tree:t,measurements:a,loading:h,error:i,trees:c}=I(s),{hasPrevious:u,hasNext:l,handlePreviousTree:m,handleNextTree:o}=B(s,c),d=C(t);return h?e.jsxs(g,{children:[e.jsx(x,{onPrevious:m,onNext:o,onShare:d,hasPrevious:!1,hasNext:!1}),e.jsx(T,{children:e.jsx(S,{text:"Loading tree details..."})})]}):i||!t?e.jsxs(g,{children:[e.jsx(x,{onPrevious:m,onNext:o,onShare:d,hasPrevious:!1,hasNext:!1}),e.jsx(T,{children:e.jsx(H,{children:i||"Tree not found"})})]}):e.jsxs(g,{children:[e.jsx(x,{onPrevious:m,onNext:o,onShare:d,hasPrevious:u,hasNext:l}),e.jsxs(T,{children:[e.jsxs(y,{children:[e.jsx(N,{children:t.name}),e.jsxs(b,{children:[t.species," • Forest ",t.id<=4?"A":"B"]})]}),e.jsxs(A,{children:[e.jsxs(D,{children:[e.jsx(M,{tree:t}),e.jsx(k,{measurements:a})]}),e.jsx(w,{tree:t})]})]})]})};export{Q as TreeDetailPage}; diff --git a/frontend/dist/assets/TreeDetailPage-De7lDWqg.js b/frontend/dist/assets/TreeDetailPage-De7lDWqg.js deleted file mode 100644 index f5ff6aff2b..0000000000 --- a/frontend/dist/assets/TreeDetailPage-De7lDWqg.js +++ /dev/null @@ -1,8 +0,0 @@ -import{r as n,a as f,m as j,u as P,j as e,e as S,d as v}from"./index-Dzr7PBfw.js";import"./IconButton-CsSKj4cW.js";import{P as g,T as x,M as T,a as y,b as N,c as b,C as A,d as D,e as M,f as k,g as w}from"./TreeDetailLayout-Cc_P7nbu.js";import"./ExportButton-BvRt6B34.js";import"./FormElements-RQ7qOmSO.js";import"./Table-CZfmBv9T.js";import"./ChartComponents-CUdy75Zt.js";import{u as C}from"./MapSidebar-DZT3HTLm.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BRnXQ3uS.js";const p=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],E=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],I=s=>{const[r,t]=n.useState(null),[a,h]=n.useState([]),[i,c]=n.useState(!0),[u,l]=n.useState(null);return n.useEffect(()=>{s&&(async()=>{try{c(!0),l(null),await new Promise(d=>setTimeout(d,500));const o=p.find(d=>d.id===parseInt(s));if(!o){l("Tree not found");return}t(o),h(E)}catch{l("Failed to load tree data")}finally{c(!1)}})()},[s]),{tree:r,measurements:a,loading:i,error:u,trees:p}},B=(s,r)=>{const t=f(),a=n.useMemo(()=>r.findIndex(l=>l.id===parseInt(s)),[r,s]),h=a>0,i=a{h&&t(`/tree/${r[a-1].id}`)},[t,r,a,h]),u=n.useCallback(()=>{i&&t(`/tree/${r[a+1].id}`)},[t,r,a,i]);return{hasPrevious:h,hasNext:i,handlePreviousTree:c,handleNextTree:u,currentIndex:a}},H=v.div` - background: #fee2e2; - color: #991b1b; - padding: 1rem; - border-radius: 0.5rem; - border: 1px solid #fecaca; - text-align: center; -`,Q=()=>{const{id:s}=j(),{user:r}=P(),{tree:t,measurements:a,loading:h,error:i,trees:c}=I(s),{hasPrevious:u,hasNext:l,handlePreviousTree:m,handleNextTree:o}=B(s,c),d=C(t);return h?e.jsxs(g,{children:[e.jsx(x,{onPrevious:m,onNext:o,onShare:d,hasPrevious:!1,hasNext:!1}),e.jsx(T,{children:e.jsx(S,{text:"Loading tree details..."})})]}):i||!t?e.jsxs(g,{children:[e.jsx(x,{onPrevious:m,onNext:o,onShare:d,hasPrevious:!1,hasNext:!1}),e.jsx(T,{children:e.jsx(H,{children:i||"Tree not found"})})]}):e.jsxs(g,{children:[e.jsx(x,{onPrevious:m,onNext:o,onShare:d,hasPrevious:u,hasNext:l}),e.jsxs(T,{children:[e.jsxs(y,{children:[e.jsx(N,{children:t.name}),e.jsxs(b,{children:[t.species," • Forest ",t.id<=4?"A":"B"]})]}),e.jsxs(A,{children:[e.jsxs(D,{children:[e.jsx(M,{tree:t}),e.jsx(k,{measurements:a})]}),e.jsx(w,{tree:t})]})]})]})};export{Q as TreeDetailPage}; diff --git a/frontend/dist/assets/index-3rMZFSc5.css b/frontend/dist/assets/index-3rMZFSc5.css new file mode 100644 index 0000000000..8d4d624711 --- /dev/null +++ b/frontend/dist/assets/index-3rMZFSc5.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}.dark{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}body{font-feature-settings:"rlig" 1,"calt" 1;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}body:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}*{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.\!container{width:100%!important}.container{width:100%}@media (min-width: 320px){.\!container{max-width:320px!important}.container{max-width:320px}}@media (min-width: 640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width: 768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width: 1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width: 1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width: 1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn:disabled{pointer-events:none;opacity:.5}.btn-primary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-secondary:disabled{pointer-events:none;opacity:.5}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(77 124 15 / var(--tw-bg-opacity, 1))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-outline:disabled{pointer-events:none;opacity:.5}.btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.btn-outline:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.btn-outline:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.btn-outline:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-72{height:18rem}.h-8{height:2rem}.h-96{height:24rem}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-700{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-20{padding-top:5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.skip-link{position:absolute;left:0;top:0;z-index:50;--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));padding:.5rem 1rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.skip-link:focus{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-offset-2:focus{outline-offset:2px}.focus\:outline-blue-500:focus{outline-color:#3b82f6}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-red-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-gray-100:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-green-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:from-gray-900:is(.dark *){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-600:is(.dark *){--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-green-800:is(.dark *){--tw-gradient-to: #166534 var(--tw-gradient-to-position)}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-green-700:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-gray-900\/50:is(.dark *){--tw-shadow-color: rgb(17 24 39 / .5);--tw-shadow: var(--tw-shadow-colored)}.dark\:hover\:bg-gray-100:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-200:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/20:hover:is(.dark *){background-color:#14532d33}.dark\:hover\:bg-green-900\/30:hover:is(.dark *){background-color:#14532d4d}.dark\:hover\:bg-red-900\/30:hover:is(.dark *){background-color:#7f1d1d4d}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-700:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 768px){.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:sticky{position:sticky}.lg\:z-10{z-index:10}.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:hidden{display:none}.lg\:w-64{width:16rem}.lg\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:p-8{padding:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>svg\]\:opacity-70>svg{opacity:.7}@media (min-width: 768px){.md\:\[\&\>svg\]\:h-20>svg{height:5rem}.md\:\[\&\>svg\]\:w-20>svg{width:5rem}} diff --git a/frontend/dist/assets/index-CGkKx7Xv.js b/frontend/dist/assets/index-CGkKx7Xv.js new file mode 100644 index 0000000000..10f19bb355 --- /dev/null +++ b/frontend/dist/assets/index-CGkKx7Xv.js @@ -0,0 +1,189 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-BfmN78ZN.js","assets/IconButton-vDjz_WRZ.js","assets/MapSidebar-jstr5dKK.js","assets/TreeDetailModal-DPmuOlrX.js","assets/useKeyboardNavigation-Bh0nMcUg.js","assets/Table-CfKObwuM.js","assets/ExportButton-BryKwkQ4.js","assets/FormElements-BsiOcVAQ.js","assets/ChartComponents-DOzzJtP4.js","assets/Navbar-BSLKvp05.js","assets/DarkModeToggle-Cu0JyOh5.js","assets/vendor-BtP0CW_r.js","assets/LoginPage-b5sbaCb6.js","assets/PasswordInput-Bff6SLQJ.js","assets/RegisterPage-Cf4V_AZ4.js","assets/DashboardPage-DOe_EIif.js","assets/useSidebarState-Ctkpd6zX.js","assets/useSidebarState-DdjxYr1F.css","assets/MapPage-DVu2-W4J.js","assets/MapPage-25t4MxmA.css","assets/TreeDetailPage-BIoNlDES.js","assets/AdminPage-BfI5jmjy.js","assets/ErrorPages-CFbRbfCl.js"])))=>i.map(i=>d[i]); +var fn=Object.defineProperty;var hn=(e,t,r)=>t in e?fn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var Oe=(e,t,r)=>hn(e,typeof t!="symbol"?t+"":t,r);import{r as hr,g as Rt,a as pr}from"./vendor-BtP0CW_r.js";function pn(e,t){for(var r=0;rn[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const a of o)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(o){const a={};return o.integrity&&(a.integrity=o.integrity),o.referrerPolicy&&(a.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?a.credentials="include":o.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(o){if(o.ep)return;o.ep=!0;const a=r(o);fetch(o.href,a)}})();var at={exports:{}},xe={};/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Mt;function mn(){if(Mt)return xe;Mt=1;var e=hr(),t=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,o=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,a={key:!0,ref:!0,__self:!0,__source:!0};function s(c,i,u){var d,l={},h=null,m=null;u!==void 0&&(h=""+u),i.key!==void 0&&(h=""+i.key),i.ref!==void 0&&(m=i.ref);for(d in i)n.call(i,d)&&!a.hasOwnProperty(d)&&(l[d]=i[d]);if(c&&c.defaultProps)for(d in i=c.defaultProps,i)l[d]===void 0&&(l[d]=i[d]);return{$$typeof:t,type:c,key:h,ref:m,props:l,_owner:o.current}}return xe.Fragment=r,xe.jsx=s,xe.jsxs=s,xe}var Bt;function gn(){return Bt||(Bt=1,at.exports=mn()),at.exports}var p=gn(),f=hr();const N=Rt(f),vn=pn({__proto__:null,default:N},[f]);var ke={},Ut;function yn(){if(Ut)return ke;Ut=1;var e=pr();return ke.createRoot=e.createRoot,ke.hydrateRoot=e.hydrateRoot,ke}var xn=yn();const wn=Rt(xn),bn="modulepreload",Sn=function(e){return"/"+e},Ft={},K=function(t,r,n){let o=Promise.resolve();if(r&&r.length>0){let s=function(u){return Promise.all(u.map(d=>Promise.resolve(d).then(l=>({status:"fulfilled",value:l}),l=>({status:"rejected",reason:l}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),i=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));o=s(r.map(u=>{if(u=Sn(u),u in Ft)return;Ft[u]=!0;const d=u.endsWith(".css"),l=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${l}`))return;const h=document.createElement("link");if(h.rel=d?"stylesheet":bn,d||(h.as="script"),h.crossOrigin="",h.href=u,i&&h.setAttribute("nonce",i),document.head.appendChild(h),d)return new Promise((m,v)=>{h.addEventListener("load",m),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${u}`)))})}))}function a(s){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=s,window.dispatchEvent(c),!c.defaultPrevented)throw s}return o.then(s=>{for(const c of s||[])c.status==="rejected"&&a(c.reason);return t().catch(a)})};var En=pr();const Ms=Rt(En);/** + * @remix-run/router v1.23.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Se(){return Se=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function mr(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Cn(){return Math.random().toString(36).substr(2,8)}function qt(e,t){return{usr:e.state,key:e.key,idx:t}}function ft(e,t,r,n){return r===void 0&&(r=null),Se({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?fe(t):t,{state:r,key:t&&t.key||n||Cn()})}function We(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function fe(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function Pn(e,t,r,n){n===void 0&&(n={});let{window:o=document.defaultView,v5Compat:a=!1}=n,s=o.history,c=Y.Pop,i=null,u=d();u==null&&(u=0,s.replaceState(Se({},s.state,{idx:u}),""));function d(){return(s.state||{idx:null}).idx}function l(){c=Y.Pop;let g=d(),b=g==null?null:g-u;u=g,i&&i({action:c,location:y.location,delta:b})}function h(g,b){c=Y.Push;let S=ft(y.location,g,b);u=d()+1;let x=qt(S,u),R=y.createHref(S);try{s.pushState(x,"",R)}catch(j){if(j instanceof DOMException&&j.name==="DataCloneError")throw j;o.location.assign(R)}a&&i&&i({action:c,location:y.location,delta:1})}function m(g,b){c=Y.Replace;let S=ft(y.location,g,b);u=d();let x=qt(S,u),R=y.createHref(S);s.replaceState(x,"",R),a&&i&&i({action:c,location:y.location,delta:0})}function v(g){let b=o.location.origin!=="null"?o.location.origin:o.location.href,S=typeof g=="string"?g:We(g);return S=S.replace(/ $/,"%20"),T(b,"No window.location.(origin|href) available to create URL for href: "+S),new URL(S,b)}let y={get action(){return c},get location(){return e(o,s)},listen(g){if(i)throw new Error("A history only accepts one active listener");return o.addEventListener(Wt,l),i=g,()=>{o.removeEventListener(Wt,l),i=null}},createHref(g){return t(o,g)},createURL:v,encodeLocation(g){let b=v(g);return{pathname:b.pathname,search:b.search,hash:b.hash}},push:h,replace:m,go(g){return s.go(g)}};return y}var Gt;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Gt||(Gt={}));function jn(e,t,r){return r===void 0&&(r="/"),_n(e,t,r)}function _n(e,t,r,n){let o=typeof t=="string"?fe(t):t,a=Ct(o.pathname||"/",r);if(a==null)return null;let s=gr(e);Tn(s);let c=null;for(let i=0;c==null&&i{let i={relativePath:c===void 0?a.path||"":c,caseSensitive:a.caseSensitive===!0,childrenIndex:s,route:a};i.relativePath.startsWith("/")&&(T(i.relativePath.startsWith(n),'Absolute route path "'+i.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),i.relativePath=i.relativePath.slice(n.length));let u=H([n,i.relativePath]),d=r.concat(i);a.children&&a.children.length>0&&(T(a.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),gr(a.children,t,d,u)),!(a.path==null&&!a.index)&&t.push({path:u,score:$n(u,a.index),routesMeta:d})};return e.forEach((a,s)=>{var c;if(a.path===""||!((c=a.path)!=null&&c.includes("?")))o(a,s);else for(let i of vr(a.path))o(a,s,i)}),t}function vr(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,o=r.endsWith("?"),a=r.replace(/\?$/,"");if(n.length===0)return o?[a,""]:[a];let s=vr(n.join("/")),c=[];return c.push(...s.map(i=>i===""?a:[a,i].join("/"))),o&&c.push(...s),c.map(i=>e.startsWith("/")&&i===""?"/":i)}function Tn(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:Dn(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const In=/^:[\w-]+$/,An=3,On=2,kn=1,Nn=10,Ln=-2,Vt=e=>e==="*";function $n(e,t){let r=e.split("/"),n=r.length;return r.some(Vt)&&(n+=Ln),t&&(n+=On),r.filter(o=>!Vt(o)).reduce((o,a)=>o+(In.test(a)?An:a===""?kn:Nn),n)}function Dn(e,t){return e.length===t.length&&e.slice(0,-1).every((n,o)=>n===t[o])?e[e.length-1]-t[t.length-1]:0}function zn(e,t,r){let{routesMeta:n}=e,o={},a="/",s=[];for(let c=0;c{let{paramName:h,isOptional:m}=d;if(h==="*"){let y=c[l]||"";s=a.slice(0,a.length-y.length).replace(/(.)\/+$/,"$1")}const v=c[l];return m&&!v?u[h]=void 0:u[h]=(v||"").replace(/%2F/g,"/"),u},{}),pathname:a,pathnameBase:s,pattern:e}}function Bn(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),mr(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,c,i)=>(n.push({paramName:c,isOptional:i!=null}),i?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),n]}function Un(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return mr(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function Ct(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function Fn(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:o=""}=typeof e=="string"?fe(e):e;return{pathname:r?r.startsWith("/")?r:Wn(r,t):t,search:Vn(n),hash:Jn(o)}}function Wn(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?r.length>1&&r.pop():o!=="."&&r.push(o)}),r.length>1?r.join("/"):"/"}function st(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function qn(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function Pt(e,t){let r=qn(e);return t?r.map((n,o)=>o===r.length-1?n.pathname:n.pathnameBase):r.map(n=>n.pathnameBase)}function jt(e,t,r,n){n===void 0&&(n=!1);let o;typeof e=="string"?o=fe(e):(o=Se({},e),T(!o.pathname||!o.pathname.includes("?"),st("?","pathname","search",o)),T(!o.pathname||!o.pathname.includes("#"),st("#","pathname","hash",o)),T(!o.search||!o.search.includes("#"),st("#","search","hash",o)));let a=e===""||o.pathname==="",s=a?"/":o.pathname,c;if(s==null)c=r;else{let l=t.length-1;if(!n&&s.startsWith("..")){let h=s.split("/");for(;h[0]==="..";)h.shift(),l-=1;o.pathname=h.join("/")}c=l>=0?t[l]:"/"}let i=Fn(o,c),u=s&&s!=="/"&&s.endsWith("/"),d=(a||s===".")&&r.endsWith("/");return!i.pathname.endsWith("/")&&(u||d)&&(i.pathname+="/"),i}const H=e=>e.join("/").replace(/\/\/+/g,"/"),Gn=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Vn=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Jn=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function Yn(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const yr=["post","put","patch","delete"];new Set(yr);const Hn=["get",...yr];new Set(Hn);/** + * React Router v6.30.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Ee(){return Ee=Object.assign?Object.assign.bind():function(e){for(var t=1;t{c.current=!0}),f.useCallback(function(u,d){if(d===void 0&&(d={}),!c.current)return;if(typeof u=="number"){n.go(u);return}let l=jt(u,JSON.parse(s),a,d.relative==="path");e==null&&t!=="/"&&(l.pathname=l.pathname==="/"?t:H([t,l.pathname])),(d.replace?n.replace:n.push)(l,d.state,d)},[t,n,s,a,e])}function Bs(){let{matches:e}=f.useContext(W),t=e[e.length-1];return t?t.params:{}}function br(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=f.useContext(X),{matches:o}=f.useContext(W),{pathname:a}=pe(),s=JSON.stringify(Pt(o,n.v7_relativeSplatPath));return f.useMemo(()=>jt(e,JSON.parse(s),a,r==="path"),[e,s,a,r])}function Qn(e,t){return eo(e,t)}function eo(e,t,r,n){he()||T(!1);let{navigator:o}=f.useContext(X),{matches:a}=f.useContext(W),s=a[a.length-1],c=s?s.params:{};s&&s.pathname;let i=s?s.pathnameBase:"/";s&&s.route;let u=pe(),d;if(t){var l;let g=typeof t=="string"?fe(t):t;i==="/"||(l=g.pathname)!=null&&l.startsWith(i)||T(!1),d=g}else d=u;let h=d.pathname||"/",m=h;if(i!=="/"){let g=i.replace(/^\//,"").split("/");m="/"+h.replace(/^\//,"").split("/").slice(g.length).join("/")}let v=jn(e,{pathname:m}),y=ao(v&&v.map(g=>Object.assign({},g,{params:Object.assign({},c,g.params),pathname:H([i,o.encodeLocation?o.encodeLocation(g.pathname).pathname:g.pathname]),pathnameBase:g.pathnameBase==="/"?i:H([i,o.encodeLocation?o.encodeLocation(g.pathnameBase).pathname:g.pathnameBase])})),a,r,n);return t&&y?f.createElement(Je.Provider,{value:{location:Ee({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:Y.Pop}},y):y}function to(){let e=lo(),t=Yn(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},t),r?f.createElement("pre",{style:o},r):null,null)}const ro=f.createElement(to,null);class no extends f.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?f.createElement(W.Provider,{value:this.props.routeContext},f.createElement(xr.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function oo(e){let{routeContext:t,match:r,children:n}=e,o=f.useContext(_t);return o&&o.static&&o.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=r.route.id),f.createElement(W.Provider,{value:t},n)}function ao(e,t,r,n){var o;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var a;if(!r)return null;if(r.errors)e=r.matches;else if((a=n)!=null&&a.v7_partialHydration&&t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let s=e,c=(o=r)==null?void 0:o.errors;if(c!=null){let d=s.findIndex(l=>l.route.id&&(c==null?void 0:c[l.route.id])!==void 0);d>=0||T(!1),s=s.slice(0,Math.min(s.length,d+1))}let i=!1,u=-1;if(r&&n&&n.v7_partialHydration)for(let d=0;d=0?s=s.slice(0,u+1):s=[s[0]];break}}}return s.reduceRight((d,l,h)=>{let m,v=!1,y=null,g=null;r&&(m=c&&l.route.id?c[l.route.id]:void 0,y=l.route.errorElement||ro,i&&(u<0&&h===0?(fo("route-fallback"),v=!0,g=null):u===h&&(v=!0,g=l.route.hydrateFallbackElement||null)));let b=t.concat(s.slice(0,h+1)),S=()=>{let x;return m?x=y:v?x=g:l.route.Component?x=f.createElement(l.route.Component,null):l.route.element?x=l.route.element:x=d,f.createElement(oo,{match:l,routeContext:{outlet:d,matches:b,isDataRoute:r!=null},children:x})};return r&&(l.route.ErrorBoundary||l.route.errorElement||h===0)?f.createElement(no,{location:r.location,revalidation:r.revalidation,component:y,error:m,children:S(),routeContext:{outlet:null,matches:b,isDataRoute:!0}}):S()},null)}var Sr=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Sr||{}),Er=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Er||{});function so(e){let t=f.useContext(_t);return t||T(!1),t}function io(e){let t=f.useContext(Kn);return t||T(!1),t}function co(e){let t=f.useContext(W);return t||T(!1),t}function Rr(e){let t=co(),r=t.matches[t.matches.length-1];return r.route.id||T(!1),r.route.id}function lo(){var e;let t=f.useContext(xr),r=io(),n=Rr();return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function uo(){let{router:e}=so(Sr.UseNavigateStable),t=Rr(Er.UseNavigateStable),r=f.useRef(!1);return wr(()=>{r.current=!0}),f.useCallback(function(o,a){a===void 0&&(a={}),r.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,Ee({fromRouteId:t},a)))},[e,t])}const Jt={};function fo(e,t,r){Jt[e]||(Jt[e]=!0)}function ho(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function po(e){let{to:t,replace:r,state:n,relative:o}=e;he()||T(!1);let{future:a,static:s}=f.useContext(X),{matches:c}=f.useContext(W),{pathname:i}=pe(),u=Ye(),d=jt(t,Pt(c,a.v7_relativeSplatPath),i,o==="path"),l=JSON.stringify(d);return f.useEffect(()=>u(JSON.parse(l),{replace:r,state:n,relative:o}),[u,l,o,r,n]),null}function B(e){T(!1)}function mo(e){let{basename:t="/",children:r=null,location:n,navigationType:o=Y.Pop,navigator:a,static:s=!1,future:c}=e;he()&&T(!1);let i=t.replace(/^\/*/,"/"),u=f.useMemo(()=>({basename:i,navigator:a,static:s,future:Ee({v7_relativeSplatPath:!1},c)}),[i,c,a,s]);typeof n=="string"&&(n=fe(n));let{pathname:d="/",search:l="",hash:h="",state:m=null,key:v="default"}=n,y=f.useMemo(()=>{let g=Ct(d,i);return g==null?null:{location:{pathname:g,search:l,hash:h,state:m,key:v},navigationType:o}},[i,d,l,h,m,v,o]);return y==null?null:f.createElement(X.Provider,{value:u},f.createElement(Je.Provider,{children:r,value:y}))}function go(e){let{children:t,location:r}=e;return Qn(ht(t),r)}new Promise(()=>{});function ht(e,t){t===void 0&&(t=[]);let r=[];return f.Children.forEach(e,(n,o)=>{if(!f.isValidElement(n))return;let a=[...t,o];if(n.type===f.Fragment){r.push.apply(r,ht(n.props.children,a));return}n.type!==B&&T(!1),!n.props.index||!n.props.children||T(!1);let s={id:n.props.id||a.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(s.children=ht(n.props.children,a)),r.push(s)}),r}/** + * React Router DOM v6.30.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function pt(){return pt=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[o]=e[o]);return r}function yo(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function xo(e,t){return e.button===0&&(!t||t==="_self")&&!yo(e)}function mt(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,r)=>{let n=e[r];return t.concat(Array.isArray(n)?n.map(o=>[r,o]):[[r,n]])},[]))}function wo(e,t){let r=mt(e);return t&&t.forEach((n,o)=>{r.has(o)||t.getAll(o).forEach(a=>{r.append(o,a)})}),r}const bo=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],So="6";try{window.__reactRouterVersion=So}catch{}const Eo="startTransition",Yt=vn[Eo];function Ro(e){let{basename:t,children:r,future:n,window:o}=e,a=f.useRef();a.current==null&&(a.current=Rn({window:o,v5Compat:!0}));let s=a.current,[c,i]=f.useState({action:s.action,location:s.location}),{v7_startTransition:u}=n||{},d=f.useCallback(l=>{u&&Yt?Yt(()=>i(l)):i(l)},[i,u]);return f.useLayoutEffect(()=>s.listen(d),[s,d]),f.useEffect(()=>ho(n),[n]),f.createElement(mo,{basename:t,children:r,location:c.location,navigationType:c.action,navigator:s,future:n})}const Co=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Po=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Us=f.forwardRef(function(t,r){let{onClick:n,relative:o,reloadDocument:a,replace:s,state:c,target:i,to:u,preventScrollReset:d,viewTransition:l}=t,h=vo(t,bo),{basename:m}=f.useContext(X),v,y=!1;if(typeof u=="string"&&Po.test(u)&&(v=u,Co))try{let x=new URL(window.location.href),R=u.startsWith("//")?new URL(x.protocol+u):new URL(u),j=Ct(R.pathname,m);R.origin===x.origin&&j!=null?u=j+R.search+R.hash:y=!0}catch{}let g=Xn(u,{relative:o}),b=jo(u,{replace:s,state:c,target:i,preventScrollReset:d,relative:o,viewTransition:l});function S(x){n&&n(x),x.defaultPrevented||b(x)}return f.createElement("a",pt({},h,{href:v||g,onClick:y||a?n:S,ref:r,target:i}))});var Ht;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ht||(Ht={}));var Kt;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Kt||(Kt={}));function jo(e,t){let{target:r,replace:n,state:o,preventScrollReset:a,relative:s,viewTransition:c}=t===void 0?{}:t,i=Ye(),u=pe(),d=br(e,{relative:s});return f.useCallback(l=>{if(xo(l,r)){l.preventDefault();let h=n!==void 0?n:We(u)===We(d);i(e,{replace:h,state:o,preventScrollReset:a,relative:s,viewTransition:c})}},[u,i,d,n,o,r,e,a,s,c])}function Fs(e){let t=f.useRef(mt(e)),r=f.useRef(!1),n=pe(),o=f.useMemo(()=>wo(n.search,r.current?null:t.current),[n.search]),a=Ye(),s=f.useCallback((c,i)=>{const u=mt(typeof c=="function"?c(o):c);r.current=!0,a("?"+u,i)},[a,o]);return[o,s]}const _o="https://project-final-frontend-4bia.onrender.com/api",To=["failed to fetch","network request failed","timeout","connection refused","service unavailable","internal server error"],J={maxAttempts:4,maxDelay:2e4,coldStartTimeouts:[15e3,2e4,25e3,3e4],retryDelays:[5e3,1e4,15e3,2e4]},Io=e=>{if(!e||!e.message)return!1;const t=e.message.toLowerCase();return To.some(r=>t.includes(r))},Ao=e=>J.retryDelays[e-1]||J.maxDelay,Cr=()=>{try{return localStorage.getItem("authToken")}catch(e){return console.warn("Failed to retrieve auth token from localStorage:",e),null}},Xt=(e={})=>{const t={"Content-Type":"application/json",...e},r=Cr();return r&&(t.Authorization=`Bearer ${r}`),t},Oo=(e={})=>{const t={...e},r=Cr();return r&&(t.Authorization=`Bearer ${r}`),t};class ko{constructor(){this.baseURL=_o}async request(t,r={}){const n=`${this.baseURL}${t}`,{retryAttempts:o=0,onRetry:a}=r,s=oi.abort(),s),d=await fetch(n,{...c,signal:i.signal});if(clearTimeout(u),!d.ok){const l=await d.json().catch(()=>({})),h=new Error(l.message||`HTTP error! status: ${d.status}`);throw h.status=d.status,h}return await d.json()}catch(i){if(i.name==="AbortError"){const d=new Error("Request timeout");throw d.name="AbortError",d.status=408,d}if(Io(i)&&osetTimeout(h,l)),this.request(t,{...r,retryAttempts:d,onRetry:a})}throw console.error("API request failed:",i),i}}async get(t,r={}){const n=new URLSearchParams(r).toString(),o=n?`${t}?${n}`:t;return this.request(o,{method:"GET"})}async post(t,r={},n={}){return this.request(t,{method:"POST",body:JSON.stringify(r),...n})}async put(t,r={}){return this.request(t,{method:"PUT",body:JSON.stringify(r)})}async patch(t,r={}){return this.request(t,{method:"PATCH",body:JSON.stringify(r)})}async delete(t){return this.request(t,{method:"DELETE"})}async uploadFile(t,r){return this.request(t,{method:"POST",body:r,headers:Oo()})}async downloadFile(t,r={},n){const o=new URLSearchParams(r).toString(),a=`${this.baseURL}${t}${o?`?${o}`:""}`;try{const s=await fetch(a,{method:"GET",headers:Xt()});if(!s.ok){const d=await s.json().catch(()=>({})),l=new Error(d.message||`HTTP error! status: ${s.status}`);throw l.status=s.status,l}const c=await s.blob(),i=window.URL.createObjectURL(c),u=document.createElement("a");return u.href=i,u.download=n||"download",document.body.appendChild(u),u.click(),document.body.removeChild(u),window.URL.revokeObjectURL(i),{success:!0,filename:n}}catch(s){throw console.error("File download failed:",s),s}}}const Q=new ko,it={register:(e,t={})=>Q.post("/auth/register",e,t),login:(e,t={})=>Q.post("/auth/login",e,t),logout:()=>Q.post("/auth/logout"),logoutAll:()=>Q.post("/auth/logout-all"),refreshToken:()=>Q.post("/auth/refresh"),getProfile:()=>Q.get("/auth/profile"),updateProfile:e=>Q.put("/auth/profile",e)},Pr=f.createContext(),No=()=>{const e=f.useContext(Pr);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},Lo=({children:e})=>{const[t,r]=f.useState(null),[n,o]=f.useState(!0),a=Ye();f.useEffect(()=>{const l=localStorage.getItem("authToken"),h=localStorage.getItem("userData");if(l&&h)try{r(JSON.parse(h))}catch(m){console.error("Error parsing user data:",m),localStorage.removeItem("authToken"),localStorage.removeItem("userData")}o(!1)},[]);const d={user:t,loading:n,login:async(l,h,m)=>{try{o(!0);const v=await it.login({email:l,password:h},{onRetry:m}),{token:y,user:g}=v.data;return localStorage.setItem("authToken",y),localStorage.setItem("userData",JSON.stringify(g)),r(g),a("/dashboard"),{success:!0}}catch(v){return{success:!1,error:v.message}}finally{o(!1)}},register:async(l,h,m)=>{try{if(o(!0),h!==m)throw new Error("Passwords do not match");const v=await it.register({email:l,password:h}),{token:y,user:g}=v.data;return localStorage.setItem("authToken",y),localStorage.setItem("userData",JSON.stringify(g)),r(g),a("/dashboard"),{success:!0}}catch(v){return{success:!1,error:v.message}}finally{o(!1)}},logout:async()=>{try{await it.logout()}catch(l){console.error("Logout API call failed:",l)}finally{localStorage.removeItem("authToken"),localStorage.removeItem("userData"),r(null),a("/")}},isAdmin:()=>(t==null?void 0:t.role)==="admin"};return p.jsx(Pr.Provider,{value:d,children:e})},$o=()=>{const{user:e,loading:t}=No();return{user:e,loading:t,isAuthenticated:!!e,isLoading:t}};var O=function(){return O=Object.assign||function(t){for(var r,n=1,o=arguments.length;n0?A(me,--L):0,ce--,I===10&&(ce=1,Ke--),I}function D(){return I=L2||vt(I)>3?"":" "}function Vo(e,t){for(;--t&&D()&&!(I<48||I>102||I>57&&I<65||I>70&&I<97););return Ze(e,ze()+(t<6&&te()==32&&D()==32))}function yt(e){for(;D();)switch(I){case e:return L;case 34:case 39:e!==34&&e!==39&&yt(I);break;case 40:e===41&&yt(e);break;case 92:D();break}return L}function Jo(e,t){for(;D()&&e+I!==57;)if(e+I===84&&te()===47)break;return"/*"+Ze(t,L-1)+"*"+It(e===47?e:D())}function Yo(e){for(;!vt(te());)D();return Ze(e,L)}function Ho(e){return qo(Me("",null,null,null,[""],e=Wo(e),0,[0],e))}function Me(e,t,r,n,o,a,s,c,i){for(var u=0,d=0,l=s,h=0,m=0,v=0,y=1,g=1,b=1,S=0,x="",R=o,j=a,P=n,E=x;g;)switch(v=S,S=D()){case 40:if(v!=108&&A(E,l-1)==58){De(E+=w(ct(S),"&","&\f"),"&\f",Tr(u?c[u-1]:0))!=-1&&(b=-1);break}case 34:case 39:case 91:E+=ct(S);break;case 9:case 10:case 13:case 32:E+=Go(v);break;case 92:E+=Vo(ze()-1,7);continue;case 47:switch(te()){case 42:case 47:we(Ko(Jo(D(),ze()),t,r,i),i);break;default:E+="/"}break;case 123*y:c[u++]=z(E)*b;case 125*y:case 59:case 0:switch(S){case 0:case 125:g=0;case 59+d:b==-1&&(E=w(E,/\f/g,"")),m>0&&z(E)-l&&we(m>32?er(E+";",n,r,l-1,i):er(w(E," ","")+";",n,r,l-2,i),i);break;case 59:E+=";";default:if(we(P=Qt(E,t,r,u,d,o,c,x,R=[],j=[],l,a),a),S===123)if(d===0)Me(E,t,P,P,R,a,l,c,j);else switch(h===99&&A(E,3)===110?100:h){case 100:case 108:case 109:case 115:Me(e,P,P,n&&we(Qt(e,P,P,0,0,o,c,x,o,R=[],l,j),j),o,j,l,c,n?R:j);break;default:Me(E,P,P,P,[""],j,0,c,j)}}u=d=m=0,y=b=1,x=E="",l=s;break;case 58:l=1+z(E),m=v;default:if(y<1){if(S==123)--y;else if(S==125&&y++==0&&Fo()==125)continue}switch(E+=It(S),S*y){case 38:b=d>0?1:(E+="\f",-1);break;case 44:c[u++]=(z(E)-1)*b,b=1;break;case 64:te()===45&&(E+=ct(D())),h=te(),d=l=z(x=E+=Yo(ze())),S++;break;case 45:v===45&&z(E)==2&&(y=0)}}return a}function Qt(e,t,r,n,o,a,s,c,i,u,d,l){for(var h=o-1,m=o===0?a:[""],v=Ar(m),y=0,g=0,b=0;y0?m[S]+" "+x:w(x,/&\f/g,m[S])))&&(i[b++]=R);return Xe(e,t,r,o===0?He:c,i,u,d,l)}function Ko(e,t,r,n){return Xe(e,t,r,jr,It(Uo()),ie(e,2,-2),0,n)}function er(e,t,r,n,o){return Xe(e,t,r,Tt,ie(e,0,n),ie(e,n+1,-1),n,o)}function kr(e,t,r){switch(Mo(e,t)){case 5103:return C+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return C+e+e;case 4789:return be+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return C+e+be+e+_+e+e;case 5936:switch(A(e,t+11)){case 114:return C+e+_+w(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return C+e+_+w(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return C+e+_+w(e,/[svh]\w+-[tblr]{2}/,"lr")+e}case 6828:case 4268:case 2903:return C+e+_+e+e;case 6165:return C+e+_+"flex-"+e+e;case 5187:return C+e+w(e,/(\w+).+(:[^]+)/,C+"box-$1$2"+_+"flex-$1$2")+e;case 5443:return C+e+_+"flex-item-"+w(e,/flex-|-self/g,"")+(U(e,/flex-|baseline/)?"":_+"grid-row-"+w(e,/flex-|-self/g,""))+e;case 4675:return C+e+_+"flex-line-pack"+w(e,/align-content|flex-|-self/g,"")+e;case 5548:return C+e+_+w(e,"shrink","negative")+e;case 5292:return C+e+_+w(e,"basis","preferred-size")+e;case 6060:return C+"box-"+w(e,"-grow","")+C+e+_+w(e,"grow","positive")+e;case 4554:return C+w(e,/([^-])(transform)/g,"$1"+C+"$2")+e;case 6187:return w(w(w(e,/(zoom-|grab)/,C+"$1"),/(image-set)/,C+"$1"),e,"")+e;case 5495:case 3959:return w(e,/(image-set\([^]*)/,C+"$1$`$1");case 4968:return w(w(e,/(.+:)(flex-)?(.*)/,C+"box-pack:$3"+_+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+C+e+e;case 4200:if(!U(e,/flex-|baseline/))return _+"grid-column-align"+ie(e,t)+e;break;case 2592:case 3360:return _+w(e,"template-","")+e;case 4384:case 3616:return r&&r.some(function(n,o){return t=o,U(n.props,/grid-\w+-end/)})?~De(e+(r=r[t].value),"span",0)?e:_+w(e,"-start","")+e+_+"grid-row-span:"+(~De(r,"span",0)?U(r,/\d+/):+U(r,/\d+/)-+U(e,/\d+/))+";":_+w(e,"-start","")+e;case 4896:case 4128:return r&&r.some(function(n){return U(n.props,/grid-\w+-start/)})?e:_+w(w(e,"-end","-span"),"span ","")+e;case 4095:case 3583:case 4068:case 2532:return w(e,/(.+)-inline(.+)/,C+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(z(e)-1-t>6)switch(A(e,t+1)){case 109:if(A(e,t+4)!==45)break;case 102:return w(e,/(.+:)(.+)-([^]+)/,"$1"+C+"$2-$3$1"+be+(A(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~De(e,"stretch",0)?kr(w(e,"stretch","fill-available"),t,r)+e:e}break;case 5152:case 5920:return w(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(n,o,a,s,c,i,u){return _+o+":"+a+u+(s?_+o+"-span:"+(c?i:+i-+a)+u:"")+e});case 4949:if(A(e,t+6)===121)return w(e,":",":"+C)+e;break;case 6444:switch(A(e,A(e,14)===45?18:11)){case 120:return w(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+C+(A(e,14)===45?"inline-":"")+"box$3$1"+C+"$2$3$1"+_+"$2box$3")+e;case 100:return w(e,":",":"+_)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return w(e,"scroll-","scroll-snap-")+e}return e}function qe(e,t){for(var r="",n=0;n-1&&!e.return)switch(e.type){case Tt:e.return=kr(e.value,e.length,r);return;case _r:return qe([V(e,{value:w(e.value,"@","@"+C)})],n);case He:if(e.length)return Bo(r=e.props,function(o){switch(U(o,n=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":ae(V(e,{props:[w(o,/:(read-\w+)/,":"+be+"$1")]})),ae(V(e,{props:[o]})),gt(e,{props:Zt(r,n)});break;case"::placeholder":ae(V(e,{props:[w(o,/:(plac\w+)/,":"+C+"input-$1")]})),ae(V(e,{props:[w(o,/:(plac\w+)/,":"+be+"$1")]})),ae(V(e,{props:[w(o,/:(plac\w+)/,_+"input-$1")]})),ae(V(e,{props:[o]})),gt(e,{props:Zt(r,n)});break}return""})}}var ta={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},k={},le=typeof process<"u"&&k!==void 0&&(k.REACT_APP_SC_ATTR||k.SC_ATTR)||"data-styled",Nr="active",Lr="data-styled-version",Qe="6.1.19",At=`/*!sc*/ +`,Ge=typeof window<"u"&&typeof document<"u",ra=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process<"u"&&k!==void 0&&k.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&k.REACT_APP_SC_DISABLE_SPEEDY!==""?k.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&k.REACT_APP_SC_DISABLE_SPEEDY:typeof process<"u"&&k!==void 0&&k.SC_DISABLE_SPEEDY!==void 0&&k.SC_DISABLE_SPEEDY!==""&&k.SC_DISABLE_SPEEDY!=="false"&&k.SC_DISABLE_SPEEDY),et=Object.freeze([]),ue=Object.freeze({});function na(e,t,r){return r===void 0&&(r=ue),e.theme!==r.theme&&e.theme||t||r.theme}var $r=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),oa=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,aa=/(^-|-$)/g;function tr(e){return e.replace(oa,"-").replace(aa,"")}var sa=/(a)(d)/gi,Ne=52,rr=function(e){return String.fromCharCode(e+(e>25?39:97))};function xt(e){var t,r="";for(t=Math.abs(e);t>Ne;t=t/Ne|0)r=rr(t%Ne)+r;return(rr(t%Ne)+r).replace(sa,"$1-$2")}var lt,Dr=5381,se=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},zr=function(e){return se(Dr,e)};function Mr(e){return xt(zr(e)>>>0)}function ia(e){return e.displayName||e.name||"Component"}function ut(e){return typeof e=="string"&&!0}var Br=typeof Symbol=="function"&&Symbol.for,Ur=Br?Symbol.for("react.memo"):60115,ca=Br?Symbol.for("react.forward_ref"):60112,la={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},ua={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Fr={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},da=((lt={})[ca]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},lt[Ur]=Fr,lt);function nr(e){return("type"in(t=e)&&t.type.$$typeof)===Ur?Fr:"$$typeof"in e?da[e.$$typeof]:la;var t}var fa=Object.defineProperty,ha=Object.getOwnPropertyNames,or=Object.getOwnPropertySymbols,pa=Object.getOwnPropertyDescriptor,ma=Object.getPrototypeOf,ar=Object.prototype;function Wr(e,t,r){if(typeof t!="string"){if(ar){var n=ma(t);n&&n!==ar&&Wr(e,n,r)}var o=ha(t);or&&(o=o.concat(or(t)));for(var a=nr(e),s=nr(t),c=0;c0?" Args: ".concat(t.join(", ")):""))}var ga=function(){function e(t){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=t}return e.prototype.indexOfGroup=function(t){for(var r=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,o=n.length,a=o;t>=a;)if((a<<=1)<0)throw Pe(16,"".concat(t));this.groupSizes=new Uint32Array(a),this.groupSizes.set(n),this.length=a;for(var s=o;s=this.length||this.groupSizes[t]===0)return r;for(var n=this.groupSizes[t],o=this.indexOfGroup(t),a=o+n,s=o;s=0){var n=document.createTextNode(r);return this.element.insertBefore(n,this.nodes[t]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(t){this.element.removeChild(this.nodes[t]),this.length--},e.prototype.getRule=function(t){return t0&&(g+="".concat(b,","))}),i+="".concat(v).concat(y,'{content:"').concat(g,'"}').concat(At)},d=0;d0?".".concat(t):h},d=i.slice();d.push(function(h){h.type===He&&h.value.includes("&")&&(h.props[0]=h.props[0].replace(ja,r).replace(n,u))}),s.prefix&&d.push(ea),d.push(Xo);var l=function(h,m,v,y){m===void 0&&(m=""),v===void 0&&(v=""),y===void 0&&(y="&"),t=y,r=m,n=new RegExp("\\".concat(r,"\\b"),"g");var g=h.replace(_a,""),b=Ho(v||m?"".concat(v," ").concat(m," { ").concat(g," }"):g);s.namespace&&(b=Vr(b,s.namespace));var S=[];return qe(b,Zo(d.concat(Qo(function(x){return S.push(x)})))),S};return l.hash=i.length?i.reduce(function(h,m){return m.name||Pe(15),se(h,m.name)},Dr).toString():"",l}var Ia=new Gr,St=Ta(),Jr=N.createContext({shouldForwardProp:void 0,styleSheet:Ia,stylis:St});Jr.Consumer;N.createContext(void 0);function cr(){return f.useContext(Jr)}var Yr=function(){function e(t,r){var n=this;this.inject=function(o,a){a===void 0&&(a=St);var s=n.name+a.hash;o.hasNameForId(n.id,s)||o.insertRules(n.id,s,a(n.rules,s,"@keyframes"))},this.name=t,this.id="sc-keyframes-".concat(t),this.rules=r,kt(this,function(){throw Pe(12,String(n.name))})}return e.prototype.getName=function(t){return t===void 0&&(t=St),this.name+t.hash},e}(),Aa=function(e){return e>="A"&&e<="Z"};function lr(e){for(var t="",r=0;r>>0);if(!r.hasNameForId(this.componentId,s)){var c=n(a,".".concat(s),void 0,this.componentId);r.insertRules(this.componentId,s,c)}o=ee(o,s),this.staticRulesId=s}else{for(var i=se(this.baseHash,n.hash),u="",d=0;d>>0);r.hasNameForId(this.componentId,m)||r.insertRules(this.componentId,m,n(u,".".concat(m),void 0,this.componentId)),o=ee(o,m)}}return o},e}(),Xr=N.createContext(void 0);Xr.Consumer;var dt={};function La(e,t,r){var n=Ot(e),o=e,a=!ut(e),s=t.attrs,c=s===void 0?et:s,i=t.componentId,u=i===void 0?function(R,j){var P=typeof R!="string"?"sc":tr(R);dt[P]=(dt[P]||0)+1;var E="".concat(P,"-").concat(Mr(Qe+P+dt[P]));return j?"".concat(j,"-").concat(E):E}(t.displayName,t.parentComponentId):i,d=t.displayName,l=d===void 0?function(R){return ut(R)?"styled.".concat(R):"Styled(".concat(ia(R),")")}(e):d,h=t.displayName&&t.componentId?"".concat(tr(t.displayName),"-").concat(t.componentId):t.componentId||u,m=n&&o.attrs?o.attrs.concat(c).filter(Boolean):c,v=t.shouldForwardProp;if(n&&o.shouldForwardProp){var y=o.shouldForwardProp;if(t.shouldForwardProp){var g=t.shouldForwardProp;v=function(R,j){return y(R,j)&&g(R,j)}}else v=y}var b=new Na(r,h,n?o.componentStyle:void 0);function S(R,j){return function(P,E,oe){var je=P.attrs,on=P.componentStyle,an=P.defaultProps,sn=P.foldedComponentIds,cn=P.styledComponentId,ln=P.target,un=N.useContext(Xr),dn=cr(),rt=P.shouldForwardProp||dn.shouldForwardProp,Dt=na(E,un,an)||ue,M=function(Te,ve,Ie){for(var ye,Z=O(O({},ve),{className:void 0,theme:Ie}),ot=0;ote||"40px"}; + height: ${({size:e})=>e||"40px"}; + border: 3px solid #f3f3f3; + border-top: 3px solid #007bff; + border-radius: 50%; + animation: ${$a} 1s linear infinite; + + ${({color:e})=>e&&` + border-top-color: ${e}; + `} +`,za=({size:e="40px",color:t="#007bff",className:r="",...n})=>p.jsx(Da,{size:e,color:t,className:r,...n}),Ma=$.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 200px; + padding: 2rem; + + ${({fullscreen:e})=>e&&` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + z-index: 9999; + min-height: 100vh; + `} +`,Ba=$.div` + margin-bottom: 1rem; +`,Ua=$.p` + color: #666; + font-size: 0.9rem; + margin: 0; + text-align: center; +`,Qr=({text:e="Loading...",size:t="40px",fullscreen:r=!1,className:n="",spinnerColor:o="#007bff"})=>p.jsxs(Ma,{fullscreen:r,className:n,role:"status","aria-live":"polite","aria-label":e,children:[p.jsx(Ba,{children:p.jsx(za,{size:t,color:o})}),p.jsx(Ua,{children:e})]}),$e=({children:e})=>{const{isAuthenticated:t,isLoading:r}=$o();return r?p.jsx(Qr,{text:"Authenticating...",fullscreen:!0,size:"48px"}):t?e:p.jsx(po,{to:"/login",replace:!0})},en=f.createContext(),Fa=(e,t)=>{switch(t.type){case"ADD_TOAST":return[...e,t.toast];case"REMOVE_TOAST":return e.filter(r=>r.id!==t.id);case"CLEAR_ALL":return[];default:return e}},Wa=({children:e})=>{const[t,r]=f.useReducer(Fa,[]),n=f.useCallback(l=>{const h=Date.now()+Math.random(),m={id:h,type:"info",duration:5e3,...l};return r({type:"ADD_TOAST",toast:m}),m.duration>0&&setTimeout(()=>{r({type:"REMOVE_TOAST",id:h})},m.duration),h},[]),o=f.useCallback(l=>{r({type:"REMOVE_TOAST",id:l})},[]),a=f.useCallback(()=>{r({type:"CLEAR_ALL"})},[]),s=f.useCallback((l,h={})=>n({message:l,type:"success",...h}),[n]),c=f.useCallback((l,h={})=>n({message:l,type:"error",duration:7e3,...h}),[n]),i=f.useCallback((l,h={})=>n({message:l,type:"warning",duration:6e3,...h}),[n]),u=f.useCallback((l,h={})=>n({message:l,type:"info",...h}),[n]),d={toasts:t,addToast:n,removeToast:o,clearAll:a,showSuccess:s,showError:c,showWarning:i,showInfo:u};return p.jsx(en.Provider,{value:d,children:e})},qa=()=>{const e=f.useContext(en);if(!e)throw new Error("useToast must be used within a ToastProvider");return e},tn=f.createContext(),Ws=()=>{const e=f.useContext(tn);if(!e)throw new Error("useDarkMode must be used within a DarkModeProvider");return e},Ga=({children:e})=>{const[t,r]=f.useState(()=>{if(typeof window<"u"){const i=localStorage.getItem("darkMode");return i!==null?JSON.parse(i):window.matchMedia("(prefers-color-scheme: dark)").matches}return!1}),[n,o]=f.useState(!1),a=()=>{r(i=>!i)},s=i=>{r(i)};f.useEffect(()=>{if(!n&&typeof window<"u"){const i=localStorage.getItem("darkMode");if(i!==null){const u=JSON.parse(i);r(u)}else{const u=window.matchMedia("(prefers-color-scheme: dark)").matches;r(u)}o(!0)}},[n]),f.useEffect(()=>{n&&typeof window<"u"&&(localStorage.setItem("darkMode",JSON.stringify(t)),t?(document.documentElement.classList.add("dark"),document.body.style.colorScheme="dark"):(document.documentElement.classList.remove("dark"),document.body.style.colorScheme="light"))},[t,n]),f.useEffect(()=>{const i=window.matchMedia("(prefers-color-scheme: dark)"),u=d=>{localStorage.getItem("darkMode")===null&&r(d.matches)};return i.addEventListener("change",u),()=>i.removeEventListener("change",u)},[]);const c={isDarkMode:t,toggleDarkMode:a,setDarkMode:s,isInitialized:n};return p.jsx(tn.Provider,{value:c,children:e})},F={SUCCESS:"success",ERROR:"error",WARNING:"warning",INFO:"info"},fr={[F.SUCCESS]:"#28a745",[F.ERROR]:"#dc3545",[F.WARNING]:"#ffc107",[F.INFO]:"#17a2b8"},Va={[F.SUCCESS]:"Success",[F.ERROR]:"Error",[F.WARNING]:"Warning",[F.INFO]:"Info"},$t=e=>fr[e]||fr[F.INFO],Ja=e=>Va[e]||"Notification",Ya=$.div` + width: 20px; + height: 20px; + flex-shrink: 0; + margin-top: 0.125rem; + + svg { + width: 100%; + height: 100%; + fill: ${({$type:e})=>$t(e)}; + } +`,Ha=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"})}),Ka=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"})}),Xa=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z"})}),Za=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z"})}),Qa=e=>{switch(e){case"success":return p.jsx(Ha,{});case"error":return p.jsx(Ka,{});case"warning":return p.jsx(Xa,{});case"info":default:return p.jsx(Za,{})}},es=({type:e})=>p.jsx(Ya,{$type:e,children:Qa(e)}),ts=e=>{const[t,r]=f.useState(100);return f.useEffect(()=>{if(e>0){const n=setInterval(()=>{r(o=>{const a=o-100/(e/100);return a<=0?0:a})},100);return()=>clearInterval(n)}},[e]),t},rs=Lt` + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0); + opacity: 1; + } +`,ns=Lt` + from { + transform: translateX(0); + opacity: 1; + } + to { + transform: translateX(100%); + opacity: 0; + } +`,os=$.div` + position: fixed; + top: 1rem; + right: 1rem; + z-index: 9999; + display: flex; + flex-direction: column; + gap: 0.5rem; + max-width: 420px; + + @media (max-width: 768px) { + left: 1rem; + right: 1rem; + max-width: none; + } +`,as=$.div` + ${({$isExiting:e})=>Nt` + animation: ${e?ns:rs} 0.3s ease-out; + `} +`,ss=$.div` + background: white; + border-radius: 8px; + padding: 1rem; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + border-left: 4px solid ${({$type:e})=>$t(e)}; + display: flex; + align-items: flex-start; + gap: 0.75rem; + position: relative; + + &:focus-within { + outline: 2px solid #007bff; + outline-offset: 2px; + } +`,is=$.div` + flex: 1; + + h4 { + margin: 0 0 0.25rem 0; + font-size: 0.9rem; + font-weight: 600; + color: #333; + } + + p { + margin: 0; + font-size: 0.875rem; + line-height: 1.4; + color: #666; + } +`,cs=$.button` + background: none; + border: none; + cursor: pointer; + padding: 0.25rem; + color: #999; + flex-shrink: 0; + border-radius: 4px; + + &:hover { + color: #666; + background-color: rgba(0, 0, 0, 0.05); + } + + &:focus { + outline: 2px solid #007bff; + outline-offset: 2px; + } + + svg { + width: 16px; + height: 16px; + fill: currentColor; + } +`,ls=$.div` + position: absolute; + bottom: 0; + left: 0; + height: 3px; + background-color: ${({$type:e})=>$t(e)}; + border-radius: 0 0 8px 8px; + width: ${({$progress:e})=>e}%; + transition: width 0.1s linear; +`,us=({toast:e,onRemove:t})=>{const[r,n]=f.useState(!1),o=ts(e.duration),a=()=>{n(!0),setTimeout(()=>t(e.id),300)};return p.jsx(as,{$isExiting:r,children:p.jsxs(ss,{$type:e.type,role:"alert","aria-live":"polite","aria-atomic":"true",children:[p.jsx(es,{type:e.type}),p.jsxs(is,{children:[p.jsx("h4",{children:e.title||Ja(e.type)}),p.jsx("p",{children:e.message})]}),p.jsx(cs,{onClick:a,"aria-label":"Close notification",type:"button",children:p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}),e.duration>0&&p.jsx(ls,{$type:e.type,$progress:o})]})})},ds=()=>{const{toasts:e,removeToast:t}=qa();return p.jsx(os,{"aria-live":"polite","aria-label":"Notifications",children:e.map(r=>p.jsx(us,{toast:r,onRemove:t},r.id))})};function rn(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;tp.jsx("div",{className:ne("bg-white rounded-lg p-8 max-w-2xl w-full shadow-lg text-center",e),...r,children:t}),ps=({className:e,children:t,...r})=>p.jsx("h1",{className:ne("text-red-600 text-3xl mb-4 font-semibold",e),...r,children:t}),ms=({className:e,children:t,...r})=>p.jsx("p",{className:ne("text-gray-600 text-lg leading-relaxed mb-8",e),...r,children:t}),gs=({className:e,error:t,errorInfo:r,...n})=>p.jsxs("details",{className:ne("mb-8 text-left",e),...n,children:[p.jsx("summary",{className:"cursor-pointer text-blue-600 font-medium mb-2 hover:text-blue-800",children:"Show technical details"}),p.jsxs("pre",{className:"bg-gray-50 p-4 rounded overflow-x-auto text-sm text-gray-700 whitespace-pre-wrap break-words",children:[t==null?void 0:t.toString(),r==null?void 0:r.componentStack]})]}),vs={primary:"btn-primary",secondary:"btn-secondary",outline:"btn-outline",ghost:"btn-ghost",link:"btn-link",destructive:"btn-destructive",success:"btn-success"},ys={sm:"h-8 px-3 text-xs",md:"h-10 px-4 py-2",lg:"h-12 px-8",xl:"h-14 px-10 text-lg",icon:"h-10 w-10"},Fe=N.forwardRef(({className:e,variant:t="primary",size:r="md",disabled:n=!1,loading:o=!1,children:a,...s},c)=>p.jsxs("button",{className:ne("btn",vs[t],ys[r],n&&"btn-disabled",o&&"btn-loading",e),ref:c,disabled:n||o,...s,children:[o&&p.jsx("span",{className:"btn-spinner","aria-hidden":"true",children:p.jsxs("svg",{className:"animate-spin h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[p.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),p.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),a]}));Fe.displayName="Button";const nn=N.forwardRef(({className:e,orientation:t="horizontal",size:r="md",variant:n="outline",children:o,...a},s)=>{const c=N.Children.map(o,i=>N.isValidElement(i)?N.cloneElement(i,{size:i.props.size||r,variant:i.props.variant||n}):i);return p.jsx("div",{className:ne("btn-group",t==="horizontal"&&"btn-group-horizontal",t==="vertical"&&"btn-group-vertical",e),ref:s,...a,children:c})});nn.displayName="ButtonGroup";const xs=({onRetry:e,onReload:t,onReportError:r})=>p.jsxs(nn,{className:"flex gap-4 justify-center flex-wrap",children:[p.jsx(Fe,{onClick:e,variant:"primary",children:"Try Again"}),p.jsx(Fe,{onClick:t,variant:"secondary",children:"Refresh Page"}),p.jsx(Fe,{onClick:r,variant:"secondary",children:"Report Error"})]}),tt=e=>{if(!e)return null;const t=new Date(e);return isNaN(t.getTime())?null:t},qs=e=>{const t=tt(e);return t?t.toLocaleString():"Invalid date"},Gs=e=>{const t=tt(e);return t?t.toLocaleDateString():"Invalid date"},Vs=e=>{const t=tt(e);return t?t.toISOString().split("T")[0]:""},ws=e=>{const t=tt(e);return t?t.toISOString():null},bs=({children:e,className:t,...r})=>p.jsx("div",{className:ne("min-h-screen flex items-center justify-center p-8 bg-gray-50",t),role:"alert","aria-live":"assertive",...r,children:e});class Ss extends N.Component{constructor(r){super(r);Oe(this,"handleRetry",()=>{this.setState({hasError:!1,error:null,errorInfo:null})});Oe(this,"handleReload",()=>{window.location.reload()});Oe(this,"handleReportError",()=>{this.errorReporting.reportError(this.state.error,this.state.errorInfo)});this.state={hasError:!1,error:null,errorInfo:null},this.errorReporting={reportError:(n,o)=>{const a={error:n==null?void 0:n.toString(),stack:n==null?void 0:n.stack,componentStack:o==null?void 0:o.componentStack,userAgent:navigator.userAgent,timestamp:ws(new Date),url:window.location.href};navigator.clipboard.writeText(JSON.stringify(a,null,2)).then(()=>{alert("Error details copied to clipboard. Please send this to support.")}).catch(()=>{alert("Failed to copy error details. Please try again.")})},logError:(n,o)=>{console.error("Error caught by boundary:",n,o)}}}static getDerivedStateFromError(r){return{hasError:!0}}componentDidCatch(r,n){this.setState({error:r,errorInfo:n}),this.errorReporting.logError(r,n)}render(){return this.state.hasError?p.jsx(bs,{children:p.jsxs(hs,{children:[p.jsx(ps,{children:"Oops! Something went wrong"}),p.jsx(ms,{children:"We're sorry, but something unexpected happened. You can try refreshing the page or contact support if the problem persists."}),this.state.error&&p.jsx(gs,{error:this.state.error,errorInfo:this.state.errorInfo}),p.jsx(xs,{onRetry:this.handleRetry,onReload:this.handleReload,onReportError:this.handleReportError})]})}):this.props.children}}const Es=({children:e})=>e,Rs=f.lazy(()=>K(()=>import("./LandingPage-BfmN78ZN.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(e=>({default:e.LandingPage}))),Cs=f.lazy(()=>K(()=>import("./LoginPage-b5sbaCb6.js"),__vite__mapDeps([12,9,4,10,1,13,11])).then(e=>({default:e.LoginPage}))),Ps=f.lazy(()=>K(()=>import("./RegisterPage-Cf4V_AZ4.js"),__vite__mapDeps([14,13,11])).then(e=>({default:e.RegisterPage}))),js=f.lazy(()=>K(()=>import("./DashboardPage-DOe_EIif.js"),__vite__mapDeps([15,8,11,16,10,1,17,6])).then(e=>({default:e.DashboardPage}))),_s=f.lazy(()=>K(()=>import("./MapPage-DVu2-W4J.js"),__vite__mapDeps([18,11,16,10,1,17,6,3,4,5,19])).then(e=>({default:e.MapPage}))),Ts=f.lazy(()=>K(()=>import("./TreeDetailPage-BIoNlDES.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,11])).then(e=>({default:e.TreeDetailPage}))),Is=f.lazy(()=>K(()=>import("./AdminPage-BfI5jmjy.js"),__vite__mapDeps([21,5,7,11])).then(e=>({default:e.AdminPage}))),As=f.lazy(()=>K(()=>import("./ErrorPages-CFbRbfCl.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,11])).then(e=>({default:e.NotFoundPage}))),Os=()=>p.jsx(Ss,{children:p.jsx(Ro,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:p.jsx(Ga,{children:p.jsx(Wa,{children:p.jsx(Lo,{children:p.jsxs(Es,{children:[p.jsx(f.Suspense,{fallback:p.jsx(Qr,{fullscreen:!0,text:"Loading page..."}),children:p.jsxs(go,{children:[p.jsx(B,{path:"/",element:p.jsx(Rs,{})}),p.jsx(B,{path:"/login",element:p.jsx(Cs,{})}),p.jsx(B,{path:"/register",element:p.jsx(Ps,{})}),p.jsx(B,{path:"/dashboard",element:p.jsx($e,{children:p.jsx(js,{})})}),p.jsx(B,{path:"/map",element:p.jsx($e,{children:p.jsx(_s,{})})}),p.jsx(B,{path:"/tree/:id",element:p.jsx($e,{children:p.jsx(Ts,{})})}),p.jsx(B,{path:"/admin",element:p.jsx($e,{children:p.jsx(Is,{})})}),p.jsx(B,{path:"*",element:p.jsx(As,{})})]})}),p.jsx(ds,{})]})})})})})}),ks=(e="root")=>{const t=document.getElementById(e);if(!t)throw new Error(`Root element with id '${e}' not found in the document`);return t},Ns=e=>wn.createRoot(e),Ls=e=>{e.render(p.jsx(N.StrictMode,{children:p.jsx(Os,{})}))},$s=()=>{try{const e=ks(),t=Ns(e);Ls(t)}catch(e){throw console.error("Failed to initialize application:",e),e}};$s();export{ko as A,nn as B,Us as L,po as N,N as R,Ye as a,En as b,fs as c,$ as d,Qr as e,vn as f,Ms as g,Fs as h,Vs as i,p as j,Ws as k,ne as l,Bs as m,qs as n,Fe as o,Gs as p,f as r,No as u}; diff --git a/frontend/dist/assets/index-CnE9ecPt.css b/frontend/dist/assets/index-CnE9ecPt.css deleted file mode 100644 index e481187698..0000000000 --- a/frontend/dist/assets/index-CnE9ecPt.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}.dark{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}body{font-feature-settings:"rlig" 1,"calt" 1;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}body:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}*{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.\!container{width:100%!important}.container{width:100%}@media (min-width: 320px){.\!container{max-width:320px!important}.container{max-width:320px}}@media (min-width: 640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width: 768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width: 1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width: 1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width: 1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn:disabled{pointer-events:none;opacity:.5}.btn-primary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-secondary:disabled{pointer-events:none;opacity:.5}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(77 124 15 / var(--tw-bg-opacity, 1))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-outline:disabled{pointer-events:none;opacity:.5}.btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.btn-outline:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.btn-outline:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.btn-outline:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-72{height:18rem}.h-8{height:2rem}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-700{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-20{padding-top:5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.skip-link{position:absolute;left:0;top:0;z-index:50;--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));padding:.5rem 1rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.skip-link:focus{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-offset-2:focus{outline-offset:2px}.focus\:outline-blue-500:focus{outline-color:#3b82f6}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-red-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-gray-100:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-green-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:from-gray-900:is(.dark *){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-600:is(.dark *){--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-green-800:is(.dark *){--tw-gradient-to: #166534 var(--tw-gradient-to-position)}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-green-700:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-gray-900\/50:is(.dark *){--tw-shadow-color: rgb(17 24 39 / .5);--tw-shadow: var(--tw-shadow-colored)}.dark\:hover\:bg-gray-100:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-200:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/30:hover:is(.dark *){background-color:#14532d4d}.dark\:hover\:bg-red-900\/30:hover:is(.dark *){background-color:#7f1d1d4d}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-700:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 768px){.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:sticky{position:sticky}.lg\:z-10{z-index:10}.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:hidden{display:none}.lg\:w-64{width:16rem}.lg\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:p-8{padding:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>svg\]\:opacity-70>svg{opacity:.7}@media (min-width: 768px){.md\:\[\&\>svg\]\:h-20>svg{height:5rem}.md\:\[\&\>svg\]\:w-20>svg{width:5rem}} diff --git a/frontend/dist/assets/index-Dzr7PBfw.js b/frontend/dist/assets/index-Dzr7PBfw.js deleted file mode 100644 index 0167b90fb5..0000000000 --- a/frontend/dist/assets/index-Dzr7PBfw.js +++ /dev/null @@ -1,189 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-Dc2ID8Hk.js","assets/IconButton-CsSKj4cW.js","assets/TreeDetailLayout-Cc_P7nbu.js","assets/MapSidebar-DZT3HTLm.js","assets/useKeyboardNavigation-BRnXQ3uS.js","assets/Table-CZfmBv9T.js","assets/ExportButton-BvRt6B34.js","assets/vendor-BtP0CW_r.js","assets/FormElements-RQ7qOmSO.js","assets/ChartComponents-CUdy75Zt.js","assets/Navbar-BJVIhaUA.js","assets/DarkModeToggle-DNnaM-T2.js","assets/LoginPage-LyjmzT4O.js","assets/PasswordInput-BcWvIN9N.js","assets/RegisterPage-D_5fYFtm.js","assets/DashboardPage-BXlBG99y.js","assets/FilterHeader-CBw4AnG_.js","assets/FilterHeader-DdjxYr1F.css","assets/MapPage-BV2c4X5p.js","assets/MapPage-25t4MxmA.css","assets/TreeDetailPage-De7lDWqg.js","assets/AdminPage-DQw11YmQ.js","assets/ErrorPages-pitdcj5q.js"])))=>i.map(i=>d[i]); -var fn=Object.defineProperty;var dn=(e,t,r)=>t in e?fn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var Oe=(e,t,r)=>dn(e,typeof t!="symbol"?t+"":t,r);import{r as dr,g as Ct,a as hr}from"./vendor-BtP0CW_r.js";function hn(e,t){for(var r=0;rn[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const a of o)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(o){const a={};return o.integrity&&(a.integrity=o.integrity),o.referrerPolicy&&(a.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?a.credentials="include":o.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(o){if(o.ep)return;o.ep=!0;const a=r(o);fetch(o.href,a)}})();var at={exports:{}},xe={};/** - * @license React - * react-jsx-runtime.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Bt;function pn(){if(Bt)return xe;Bt=1;var e=dr(),t=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,o=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,a={key:!0,ref:!0,__self:!0,__source:!0};function s(c,i,f){var u,l={},h=null,m=null;f!==void 0&&(h=""+f),i.key!==void 0&&(h=""+i.key),i.ref!==void 0&&(m=i.ref);for(u in i)n.call(i,u)&&!a.hasOwnProperty(u)&&(l[u]=i[u]);if(c&&c.defaultProps)for(u in i=c.defaultProps,i)l[u]===void 0&&(l[u]=i[u]);return{$$typeof:t,type:c,key:h,ref:m,props:l,_owner:o.current}}return xe.Fragment=r,xe.jsx=s,xe.jsxs=s,xe}var Mt;function mn(){return Mt||(Mt=1,at.exports=pn()),at.exports}var p=mn(),d=dr();const N=Ct(d),gn=hn({__proto__:null,default:N},[d]);var ke={},Ft;function vn(){if(Ft)return ke;Ft=1;var e=hr();return ke.createRoot=e.createRoot,ke.hydrateRoot=e.hydrateRoot,ke}var yn=vn();const xn=Ct(yn),bn="modulepreload",wn=function(e){return"/"+e},Ut={},K=function(t,r,n){let o=Promise.resolve();if(r&&r.length>0){let s=function(f){return Promise.all(f.map(u=>Promise.resolve(u).then(l=>({status:"fulfilled",value:l}),l=>({status:"rejected",reason:l}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),i=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));o=s(r.map(f=>{if(f=wn(f),f in Ut)return;Ut[f]=!0;const u=f.endsWith(".css"),l=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${f}"]${l}`))return;const h=document.createElement("link");if(h.rel=u?"stylesheet":bn,u||(h.as="script"),h.crossOrigin="",h.href=f,i&&h.setAttribute("nonce",i),document.head.appendChild(h),u)return new Promise((m,v)=>{h.addEventListener("load",m),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${f}`)))})}))}function a(s){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=s,window.dispatchEvent(c),!c.defaultPrevented)throw s}return o.then(s=>{for(const c of s||[])c.status==="rejected"&&a(c.reason);return t().catch(a)})};var Sn=hr();const Bs=Ct(Sn);/** - * @remix-run/router v1.23.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Se(){return Se=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function pr(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Cn(){return Math.random().toString(36).substr(2,8)}function qt(e,t){return{usr:e.state,key:e.key,idx:t}}function dt(e,t,r,n){return r===void 0&&(r=null),Se({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?de(t):t,{state:r,key:t&&t.key||n||Cn()})}function We(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function de(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function Rn(e,t,r,n){n===void 0&&(n={});let{window:o=document.defaultView,v5Compat:a=!1}=n,s=o.history,c=Y.Pop,i=null,f=u();f==null&&(f=0,s.replaceState(Se({},s.state,{idx:f}),""));function u(){return(s.state||{idx:null}).idx}function l(){c=Y.Pop;let g=u(),w=g==null?null:g-f;f=g,i&&i({action:c,location:y.location,delta:w})}function h(g,w){c=Y.Push;let S=dt(y.location,g,w);f=u()+1;let x=qt(S,f),C=y.createHref(S);try{s.pushState(x,"",C)}catch(j){if(j instanceof DOMException&&j.name==="DataCloneError")throw j;o.location.assign(C)}a&&i&&i({action:c,location:y.location,delta:1})}function m(g,w){c=Y.Replace;let S=dt(y.location,g,w);f=u();let x=qt(S,f),C=y.createHref(S);s.replaceState(x,"",C),a&&i&&i({action:c,location:y.location,delta:0})}function v(g){let w=o.location.origin!=="null"?o.location.origin:o.location.href,S=typeof g=="string"?g:We(g);return S=S.replace(/ $/,"%20"),A(w,"No window.location.(origin|href) available to create URL for href: "+S),new URL(S,w)}let y={get action(){return c},get location(){return e(o,s)},listen(g){if(i)throw new Error("A history only accepts one active listener");return o.addEventListener(Wt,l),i=g,()=>{o.removeEventListener(Wt,l),i=null}},createHref(g){return t(o,g)},createURL:v,encodeLocation(g){let w=v(g);return{pathname:w.pathname,search:w.search,hash:w.hash}},push:h,replace:m,go(g){return s.go(g)}};return y}var Gt;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Gt||(Gt={}));function Pn(e,t,r){return r===void 0&&(r="/"),jn(e,t,r)}function jn(e,t,r,n){let o=typeof t=="string"?de(t):t,a=Rt(o.pathname||"/",r);if(a==null)return null;let s=mr(e);_n(s);let c=null;for(let i=0;c==null&&i{let i={relativePath:c===void 0?a.path||"":c,caseSensitive:a.caseSensitive===!0,childrenIndex:s,route:a};i.relativePath.startsWith("/")&&(A(i.relativePath.startsWith(n),'Absolute route path "'+i.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),i.relativePath=i.relativePath.slice(n.length));let f=H([n,i.relativePath]),u=r.concat(i);a.children&&a.children.length>0&&(A(a.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+f+'".')),mr(a.children,t,u,f)),!(a.path==null&&!a.index)&&t.push({path:f,score:Ln(f,a.index),routesMeta:u})};return e.forEach((a,s)=>{var c;if(a.path===""||!((c=a.path)!=null&&c.includes("?")))o(a,s);else for(let i of gr(a.path))o(a,s,i)}),t}function gr(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,o=r.endsWith("?"),a=r.replace(/\?$/,"");if(n.length===0)return o?[a,""]:[a];let s=gr(n.join("/")),c=[];return c.push(...s.map(i=>i===""?a:[a,i].join("/"))),o&&c.push(...s),c.map(i=>e.startsWith("/")&&i===""?"/":i)}function _n(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:$n(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const An=/^:[\w-]+$/,Tn=3,In=2,On=1,kn=10,Nn=-2,Vt=e=>e==="*";function Ln(e,t){let r=e.split("/"),n=r.length;return r.some(Vt)&&(n+=Nn),t&&(n+=In),r.filter(o=>!Vt(o)).reduce((o,a)=>o+(An.test(a)?Tn:a===""?On:kn),n)}function $n(e,t){return e.length===t.length&&e.slice(0,-1).every((n,o)=>n===t[o])?e[e.length-1]-t[t.length-1]:0}function Dn(e,t,r){let{routesMeta:n}=e,o={},a="/",s=[];for(let c=0;c{let{paramName:h,isOptional:m}=u;if(h==="*"){let y=c[l]||"";s=a.slice(0,a.length-y.length).replace(/(.)\/+$/,"$1")}const v=c[l];return m&&!v?f[h]=void 0:f[h]=(v||"").replace(/%2F/g,"/"),f},{}),pathname:a,pathnameBase:s,pattern:e}}function Bn(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),pr(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,c,i)=>(n.push({paramName:c,isOptional:i!=null}),i?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),n]}function Mn(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return pr(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function Rt(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function Fn(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:o=""}=typeof e=="string"?de(e):e;return{pathname:r?r.startsWith("/")?r:Un(r,t):t,search:Gn(n),hash:Vn(o)}}function Un(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?r.length>1&&r.pop():o!=="."&&r.push(o)}),r.length>1?r.join("/"):"/"}function st(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function Wn(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function Pt(e,t){let r=Wn(e);return t?r.map((n,o)=>o===r.length-1?n.pathname:n.pathnameBase):r.map(n=>n.pathnameBase)}function jt(e,t,r,n){n===void 0&&(n=!1);let o;typeof e=="string"?o=de(e):(o=Se({},e),A(!o.pathname||!o.pathname.includes("?"),st("?","pathname","search",o)),A(!o.pathname||!o.pathname.includes("#"),st("#","pathname","hash",o)),A(!o.search||!o.search.includes("#"),st("#","search","hash",o)));let a=e===""||o.pathname==="",s=a?"/":o.pathname,c;if(s==null)c=r;else{let l=t.length-1;if(!n&&s.startsWith("..")){let h=s.split("/");for(;h[0]==="..";)h.shift(),l-=1;o.pathname=h.join("/")}c=l>=0?t[l]:"/"}let i=Fn(o,c),f=s&&s!=="/"&&s.endsWith("/"),u=(a||s===".")&&r.endsWith("/");return!i.pathname.endsWith("/")&&(f||u)&&(i.pathname+="/"),i}const H=e=>e.join("/").replace(/\/\/+/g,"/"),qn=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Gn=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Vn=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function Jn(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const vr=["post","put","patch","delete"];new Set(vr);const Yn=["get",...vr];new Set(Yn);/** - * React Router v6.30.1 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Ee(){return Ee=Object.assign?Object.assign.bind():function(e){for(var t=1;t{c.current=!0}),d.useCallback(function(f,u){if(u===void 0&&(u={}),!c.current)return;if(typeof f=="number"){n.go(f);return}let l=jt(f,JSON.parse(s),a,u.relative==="path");e==null&&t!=="/"&&(l.pathname=l.pathname==="/"?t:H([t,l.pathname])),(u.replace?n.replace:n.push)(l,u.state,u)},[t,n,s,a,e])}function Ms(){let{matches:e}=d.useContext(W),t=e[e.length-1];return t?t.params:{}}function br(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=d.useContext(X),{matches:o}=d.useContext(W),{pathname:a}=pe(),s=JSON.stringify(Pt(o,n.v7_relativeSplatPath));return d.useMemo(()=>jt(e,JSON.parse(s),a,r==="path"),[e,s,a,r])}function Zn(e,t){return Qn(e,t)}function Qn(e,t,r,n){he()||A(!1);let{navigator:o}=d.useContext(X),{matches:a}=d.useContext(W),s=a[a.length-1],c=s?s.params:{};s&&s.pathname;let i=s?s.pathnameBase:"/";s&&s.route;let f=pe(),u;if(t){var l;let g=typeof t=="string"?de(t):t;i==="/"||(l=g.pathname)!=null&&l.startsWith(i)||A(!1),u=g}else u=f;let h=u.pathname||"/",m=h;if(i!=="/"){let g=i.replace(/^\//,"").split("/");m="/"+h.replace(/^\//,"").split("/").slice(g.length).join("/")}let v=Pn(e,{pathname:m}),y=oo(v&&v.map(g=>Object.assign({},g,{params:Object.assign({},c,g.params),pathname:H([i,o.encodeLocation?o.encodeLocation(g.pathname).pathname:g.pathname]),pathnameBase:g.pathnameBase==="/"?i:H([i,o.encodeLocation?o.encodeLocation(g.pathnameBase).pathname:g.pathnameBase])})),a,r,n);return t&&y?d.createElement(Je.Provider,{value:{location:Ee({pathname:"/",search:"",hash:"",state:null,key:"default"},u),navigationType:Y.Pop}},y):y}function eo(){let e=co(),t=Jn(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return d.createElement(d.Fragment,null,d.createElement("h2",null,"Unexpected Application Error!"),d.createElement("h3",{style:{fontStyle:"italic"}},t),r?d.createElement("pre",{style:o},r):null,null)}const to=d.createElement(eo,null);class ro extends d.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?d.createElement(W.Provider,{value:this.props.routeContext},d.createElement(yr.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function no(e){let{routeContext:t,match:r,children:n}=e,o=d.useContext(_t);return o&&o.static&&o.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=r.route.id),d.createElement(W.Provider,{value:t},n)}function oo(e,t,r,n){var o;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var a;if(!r)return null;if(r.errors)e=r.matches;else if((a=n)!=null&&a.v7_partialHydration&&t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let s=e,c=(o=r)==null?void 0:o.errors;if(c!=null){let u=s.findIndex(l=>l.route.id&&(c==null?void 0:c[l.route.id])!==void 0);u>=0||A(!1),s=s.slice(0,Math.min(s.length,u+1))}let i=!1,f=-1;if(r&&n&&n.v7_partialHydration)for(let u=0;u=0?s=s.slice(0,f+1):s=[s[0]];break}}}return s.reduceRight((u,l,h)=>{let m,v=!1,y=null,g=null;r&&(m=c&&l.route.id?c[l.route.id]:void 0,y=l.route.errorElement||to,i&&(f<0&&h===0?(uo("route-fallback"),v=!0,g=null):f===h&&(v=!0,g=l.route.hydrateFallbackElement||null)));let w=t.concat(s.slice(0,h+1)),S=()=>{let x;return m?x=y:v?x=g:l.route.Component?x=d.createElement(l.route.Component,null):l.route.element?x=l.route.element:x=u,d.createElement(no,{match:l,routeContext:{outlet:u,matches:w,isDataRoute:r!=null},children:x})};return r&&(l.route.ErrorBoundary||l.route.errorElement||h===0)?d.createElement(ro,{location:r.location,revalidation:r.revalidation,component:y,error:m,children:S(),routeContext:{outlet:null,matches:w,isDataRoute:!0}}):S()},null)}var wr=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(wr||{}),Sr=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Sr||{});function ao(e){let t=d.useContext(_t);return t||A(!1),t}function so(e){let t=d.useContext(Hn);return t||A(!1),t}function io(e){let t=d.useContext(W);return t||A(!1),t}function Er(e){let t=io(),r=t.matches[t.matches.length-1];return r.route.id||A(!1),r.route.id}function co(){var e;let t=d.useContext(yr),r=so(),n=Er();return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function lo(){let{router:e}=ao(wr.UseNavigateStable),t=Er(Sr.UseNavigateStable),r=d.useRef(!1);return xr(()=>{r.current=!0}),d.useCallback(function(o,a){a===void 0&&(a={}),r.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,Ee({fromRouteId:t},a)))},[e,t])}const Jt={};function uo(e,t,r){Jt[e]||(Jt[e]=!0)}function fo(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function ho(e){let{to:t,replace:r,state:n,relative:o}=e;he()||A(!1);let{future:a,static:s}=d.useContext(X),{matches:c}=d.useContext(W),{pathname:i}=pe(),f=Ye(),u=jt(t,Pt(c,a.v7_relativeSplatPath),i,o==="path"),l=JSON.stringify(u);return d.useEffect(()=>f(JSON.parse(l),{replace:r,state:n,relative:o}),[f,l,o,r,n]),null}function M(e){A(!1)}function po(e){let{basename:t="/",children:r=null,location:n,navigationType:o=Y.Pop,navigator:a,static:s=!1,future:c}=e;he()&&A(!1);let i=t.replace(/^\/*/,"/"),f=d.useMemo(()=>({basename:i,navigator:a,static:s,future:Ee({v7_relativeSplatPath:!1},c)}),[i,c,a,s]);typeof n=="string"&&(n=de(n));let{pathname:u="/",search:l="",hash:h="",state:m=null,key:v="default"}=n,y=d.useMemo(()=>{let g=Rt(u,i);return g==null?null:{location:{pathname:g,search:l,hash:h,state:m,key:v},navigationType:o}},[i,u,l,h,m,v,o]);return y==null?null:d.createElement(X.Provider,{value:f},d.createElement(Je.Provider,{children:r,value:y}))}function mo(e){let{children:t,location:r}=e;return Zn(ht(t),r)}new Promise(()=>{});function ht(e,t){t===void 0&&(t=[]);let r=[];return d.Children.forEach(e,(n,o)=>{if(!d.isValidElement(n))return;let a=[...t,o];if(n.type===d.Fragment){r.push.apply(r,ht(n.props.children,a));return}n.type!==M&&A(!1),!n.props.index||!n.props.children||A(!1);let s={id:n.props.id||a.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(s.children=ht(n.props.children,a)),r.push(s)}),r}/** - * React Router DOM v6.30.1 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function pt(){return pt=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[o]=e[o]);return r}function vo(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function yo(e,t){return e.button===0&&(!t||t==="_self")&&!vo(e)}function mt(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,r)=>{let n=e[r];return t.concat(Array.isArray(n)?n.map(o=>[r,o]):[[r,n]])},[]))}function xo(e,t){let r=mt(e);return t&&t.forEach((n,o)=>{r.has(o)||t.getAll(o).forEach(a=>{r.append(o,a)})}),r}const bo=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],wo="6";try{window.__reactRouterVersion=wo}catch{}const So="startTransition",Yt=gn[So];function Eo(e){let{basename:t,children:r,future:n,window:o}=e,a=d.useRef();a.current==null&&(a.current=En({window:o,v5Compat:!0}));let s=a.current,[c,i]=d.useState({action:s.action,location:s.location}),{v7_startTransition:f}=n||{},u=d.useCallback(l=>{f&&Yt?Yt(()=>i(l)):i(l)},[i,f]);return d.useLayoutEffect(()=>s.listen(u),[s,u]),d.useEffect(()=>fo(n),[n]),d.createElement(po,{basename:t,children:r,location:c.location,navigationType:c.action,navigator:s,future:n})}const Co=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Ro=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Fs=d.forwardRef(function(t,r){let{onClick:n,relative:o,reloadDocument:a,replace:s,state:c,target:i,to:f,preventScrollReset:u,viewTransition:l}=t,h=go(t,bo),{basename:m}=d.useContext(X),v,y=!1;if(typeof f=="string"&&Ro.test(f)&&(v=f,Co))try{let x=new URL(window.location.href),C=f.startsWith("//")?new URL(x.protocol+f):new URL(f),j=Rt(C.pathname,m);C.origin===x.origin&&j!=null?f=j+C.search+C.hash:y=!0}catch{}let g=Kn(f,{relative:o}),w=Po(f,{replace:s,state:c,target:i,preventScrollReset:u,relative:o,viewTransition:l});function S(x){n&&n(x),x.defaultPrevented||w(x)}return d.createElement("a",pt({},h,{href:v||g,onClick:y||a?n:S,ref:r,target:i}))});var Ht;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ht||(Ht={}));var Kt;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Kt||(Kt={}));function Po(e,t){let{target:r,replace:n,state:o,preventScrollReset:a,relative:s,viewTransition:c}=t===void 0?{}:t,i=Ye(),f=pe(),u=br(e,{relative:s});return d.useCallback(l=>{if(yo(l,r)){l.preventDefault();let h=n!==void 0?n:We(f)===We(u);i(e,{replace:h,state:o,preventScrollReset:a,relative:s,viewTransition:c})}},[f,i,u,n,o,r,e,a,s,c])}function Us(e){let t=d.useRef(mt(e)),r=d.useRef(!1),n=pe(),o=d.useMemo(()=>xo(n.search,r.current?null:t.current),[n.search]),a=Ye(),s=d.useCallback((c,i)=>{const f=mt(typeof c=="function"?c(o):c);r.current=!0,a("?"+f,i)},[a,o]);return[o,s]}const jo="https://project-final-frontend-4bia.onrender.com/api",_o=["failed to fetch","network request failed","timeout","connection refused","service unavailable","internal server error"],J={maxAttempts:4,maxDelay:2e4,coldStartTimeouts:[15e3,2e4,25e3,3e4],retryDelays:[5e3,1e4,15e3,2e4]},Ao=e=>{if(!e||!e.message)return!1;const t=e.message.toLowerCase();return _o.some(r=>t.includes(r))},To=e=>J.retryDelays[e-1]||J.maxDelay,Cr=()=>{try{return localStorage.getItem("authToken")}catch(e){return console.warn("Failed to retrieve auth token from localStorage:",e),null}},Io=(e={})=>{const t={"Content-Type":"application/json",...e},r=Cr();return r&&(t.Authorization=`Bearer ${r}`),t},Oo=(e={})=>{const t={...e},r=Cr();return r&&(t.Authorization=`Bearer ${r}`),t};class ko{constructor(){this.baseURL=jo}async request(t,r={}){const n=`${this.baseURL}${t}`,{retryAttempts:o=0,onRetry:a}=r,s=oi.abort(),s),u=await fetch(n,{...c,signal:i.signal});if(clearTimeout(f),!u.ok){const l=await u.json().catch(()=>({})),h=new Error(l.message||`HTTP error! status: ${u.status}`);throw h.status=u.status,h}return await u.json()}catch(i){if(i.name==="AbortError"){const u=new Error("Request timeout");throw u.name="AbortError",u.status=408,u}if(Ao(i)&&osetTimeout(h,l)),this.request(t,{...r,retryAttempts:u,onRetry:a})}throw console.error("API request failed:",i),i}}async get(t,r={}){const n=new URLSearchParams(r).toString(),o=n?`${t}?${n}`:t;return this.request(o,{method:"GET"})}async post(t,r={},n={}){return this.request(t,{method:"POST",body:JSON.stringify(r),...n})}async put(t,r={}){return this.request(t,{method:"PUT",body:JSON.stringify(r)})}async patch(t,r={}){return this.request(t,{method:"PATCH",body:JSON.stringify(r)})}async delete(t){return this.request(t,{method:"DELETE"})}async uploadFile(t,r){return this.request(t,{method:"POST",body:r,headers:Oo()})}}const Q=new ko,it={register:(e,t={})=>Q.post("/auth/register",e,t),login:(e,t={})=>Q.post("/auth/login",e,t),logout:()=>Q.post("/auth/logout"),logoutAll:()=>Q.post("/auth/logout-all"),refreshToken:()=>Q.post("/auth/refresh"),getProfile:()=>Q.get("/auth/profile"),updateProfile:e=>Q.put("/auth/profile",e)},Rr=d.createContext(),No=()=>{const e=d.useContext(Rr);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},Lo=({children:e})=>{const[t,r]=d.useState(null),[n,o]=d.useState(!0),a=Ye();d.useEffect(()=>{const l=localStorage.getItem("authToken"),h=localStorage.getItem("userData");if(l&&h)try{r(JSON.parse(h))}catch(m){console.error("Error parsing user data:",m),localStorage.removeItem("authToken"),localStorage.removeItem("userData")}o(!1)},[]);const u={user:t,loading:n,login:async(l,h,m)=>{try{o(!0);const v=await it.login({email:l,password:h},{onRetry:m}),{token:y,user:g}=v.data;return localStorage.setItem("authToken",y),localStorage.setItem("userData",JSON.stringify(g)),r(g),a("/dashboard"),{success:!0}}catch(v){return{success:!1,error:v.message}}finally{o(!1)}},register:async(l,h,m)=>{try{if(o(!0),h!==m)throw new Error("Passwords do not match");const v=await it.register({email:l,password:h}),{token:y,user:g}=v.data;return localStorage.setItem("authToken",y),localStorage.setItem("userData",JSON.stringify(g)),r(g),a("/dashboard"),{success:!0}}catch(v){return{success:!1,error:v.message}}finally{o(!1)}},logout:async()=>{try{await it.logout()}catch(l){console.error("Logout API call failed:",l)}finally{localStorage.removeItem("authToken"),localStorage.removeItem("userData"),r(null),a("/")}},isAdmin:()=>(t==null?void 0:t.role)==="admin"};return p.jsx(Rr.Provider,{value:u,children:e})},$o=()=>{const{user:e,loading:t}=No();return{user:e,loading:t,isAuthenticated:!!e,isLoading:t}};var O=function(){return O=Object.assign||function(t){for(var r,n=1,o=arguments.length;n0?I(me,--L):0,ce--,T===10&&(ce=1,Ke--),T}function D(){return T=L2||vt(T)>3?"":" "}function Vo(e,t){for(;--t&&D()&&!(T<48||T>102||T>57&&T<65||T>70&&T<97););return Ze(e,ze()+(t<6&&te()==32&&D()==32))}function yt(e){for(;D();)switch(T){case e:return L;case 34:case 39:e!==34&&e!==39&&yt(T);break;case 40:e===41&&yt(e);break;case 92:D();break}return L}function Jo(e,t){for(;D()&&e+T!==57;)if(e+T===84&&te()===47)break;return"/*"+Ze(t,L-1)+"*"+Tt(e===47?e:D())}function Yo(e){for(;!vt(te());)D();return Ze(e,L)}function Ho(e){return qo(Be("",null,null,null,[""],e=Wo(e),0,[0],e))}function Be(e,t,r,n,o,a,s,c,i){for(var f=0,u=0,l=s,h=0,m=0,v=0,y=1,g=1,w=1,S=0,x="",C=o,j=a,P=n,E=x;g;)switch(v=S,S=D()){case 40:if(v!=108&&I(E,l-1)==58){De(E+=b(ct(S),"&","&\f"),"&\f",_r(f?c[f-1]:0))!=-1&&(w=-1);break}case 34:case 39:case 91:E+=ct(S);break;case 9:case 10:case 13:case 32:E+=Go(v);break;case 92:E+=Vo(ze()-1,7);continue;case 47:switch(te()){case 42:case 47:be(Ko(Jo(D(),ze()),t,r,i),i);break;default:E+="/"}break;case 123*y:c[f++]=z(E)*w;case 125*y:case 59:case 0:switch(S){case 0:case 125:g=0;case 59+u:w==-1&&(E=b(E,/\f/g,"")),m>0&&z(E)-l&&be(m>32?Qt(E+";",n,r,l-1,i):Qt(b(E," ","")+";",n,r,l-2,i),i);break;case 59:E+=";";default:if(be(P=Zt(E,t,r,f,u,o,c,x,C=[],j=[],l,a),a),S===123)if(u===0)Be(E,t,P,P,C,a,l,c,j);else switch(h===99&&I(E,3)===110?100:h){case 100:case 108:case 109:case 115:Be(e,P,P,n&&be(Zt(e,P,P,0,0,o,c,x,o,C=[],l,j),j),o,j,l,c,n?C:j);break;default:Be(E,P,P,P,[""],j,0,c,j)}}f=u=m=0,y=w=1,x=E="",l=s;break;case 58:l=1+z(E),m=v;default:if(y<1){if(S==123)--y;else if(S==125&&y++==0&&Uo()==125)continue}switch(E+=Tt(S),S*y){case 38:w=u>0?1:(E+="\f",-1);break;case 44:c[f++]=(z(E)-1)*w,w=1;break;case 64:te()===45&&(E+=ct(D())),h=te(),u=l=z(x=E+=Yo(ze())),S++;break;case 45:v===45&&z(E)==2&&(y=0)}}return a}function Zt(e,t,r,n,o,a,s,c,i,f,u,l){for(var h=o-1,m=o===0?a:[""],v=Tr(m),y=0,g=0,w=0;y0?m[S]+" "+x:b(x,/&\f/g,m[S])))&&(i[w++]=C);return Xe(e,t,r,o===0?He:c,i,f,u,l)}function Ko(e,t,r,n){return Xe(e,t,r,Pr,Tt(Fo()),ie(e,2,-2),0,n)}function Qt(e,t,r,n,o){return Xe(e,t,r,At,ie(e,0,n),ie(e,n+1,-1),n,o)}function Or(e,t,r){switch(Bo(e,t)){case 5103:return R+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return R+e+e;case 4789:return we+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return R+e+we+e+_+e+e;case 5936:switch(I(e,t+11)){case 114:return R+e+_+b(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return R+e+_+b(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return R+e+_+b(e,/[svh]\w+-[tblr]{2}/,"lr")+e}case 6828:case 4268:case 2903:return R+e+_+e+e;case 6165:return R+e+_+"flex-"+e+e;case 5187:return R+e+b(e,/(\w+).+(:[^]+)/,R+"box-$1$2"+_+"flex-$1$2")+e;case 5443:return R+e+_+"flex-item-"+b(e,/flex-|-self/g,"")+(F(e,/flex-|baseline/)?"":_+"grid-row-"+b(e,/flex-|-self/g,""))+e;case 4675:return R+e+_+"flex-line-pack"+b(e,/align-content|flex-|-self/g,"")+e;case 5548:return R+e+_+b(e,"shrink","negative")+e;case 5292:return R+e+_+b(e,"basis","preferred-size")+e;case 6060:return R+"box-"+b(e,"-grow","")+R+e+_+b(e,"grow","positive")+e;case 4554:return R+b(e,/([^-])(transform)/g,"$1"+R+"$2")+e;case 6187:return b(b(b(e,/(zoom-|grab)/,R+"$1"),/(image-set)/,R+"$1"),e,"")+e;case 5495:case 3959:return b(e,/(image-set\([^]*)/,R+"$1$`$1");case 4968:return b(b(e,/(.+:)(flex-)?(.*)/,R+"box-pack:$3"+_+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+R+e+e;case 4200:if(!F(e,/flex-|baseline/))return _+"grid-column-align"+ie(e,t)+e;break;case 2592:case 3360:return _+b(e,"template-","")+e;case 4384:case 3616:return r&&r.some(function(n,o){return t=o,F(n.props,/grid-\w+-end/)})?~De(e+(r=r[t].value),"span",0)?e:_+b(e,"-start","")+e+_+"grid-row-span:"+(~De(r,"span",0)?F(r,/\d+/):+F(r,/\d+/)-+F(e,/\d+/))+";":_+b(e,"-start","")+e;case 4896:case 4128:return r&&r.some(function(n){return F(n.props,/grid-\w+-start/)})?e:_+b(b(e,"-end","-span"),"span ","")+e;case 4095:case 3583:case 4068:case 2532:return b(e,/(.+)-inline(.+)/,R+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(z(e)-1-t>6)switch(I(e,t+1)){case 109:if(I(e,t+4)!==45)break;case 102:return b(e,/(.+:)(.+)-([^]+)/,"$1"+R+"$2-$3$1"+we+(I(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~De(e,"stretch",0)?Or(b(e,"stretch","fill-available"),t,r)+e:e}break;case 5152:case 5920:return b(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(n,o,a,s,c,i,f){return _+o+":"+a+f+(s?_+o+"-span:"+(c?i:+i-+a)+f:"")+e});case 4949:if(I(e,t+6)===121)return b(e,":",":"+R)+e;break;case 6444:switch(I(e,I(e,14)===45?18:11)){case 120:return b(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+R+(I(e,14)===45?"inline-":"")+"box$3$1"+R+"$2$3$1"+_+"$2box$3")+e;case 100:return b(e,":",":"+_)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return b(e,"scroll-","scroll-snap-")+e}return e}function qe(e,t){for(var r="",n=0;n-1&&!e.return)switch(e.type){case At:e.return=Or(e.value,e.length,r);return;case jr:return qe([V(e,{value:b(e.value,"@","@"+R)})],n);case He:if(e.length)return Mo(r=e.props,function(o){switch(F(o,n=/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":ae(V(e,{props:[b(o,/:(read-\w+)/,":"+we+"$1")]})),ae(V(e,{props:[o]})),gt(e,{props:Xt(r,n)});break;case"::placeholder":ae(V(e,{props:[b(o,/:(plac\w+)/,":"+R+"input-$1")]})),ae(V(e,{props:[b(o,/:(plac\w+)/,":"+we+"$1")]})),ae(V(e,{props:[b(o,/:(plac\w+)/,_+"input-$1")]})),ae(V(e,{props:[o]})),gt(e,{props:Xt(r,n)});break}return""})}}var ta={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},k={},le=typeof process<"u"&&k!==void 0&&(k.REACT_APP_SC_ATTR||k.SC_ATTR)||"data-styled",kr="active",Nr="data-styled-version",Qe="6.1.19",It=`/*!sc*/ -`,Ge=typeof window<"u"&&typeof document<"u",ra=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process<"u"&&k!==void 0&&k.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&k.REACT_APP_SC_DISABLE_SPEEDY!==""?k.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&k.REACT_APP_SC_DISABLE_SPEEDY:typeof process<"u"&&k!==void 0&&k.SC_DISABLE_SPEEDY!==void 0&&k.SC_DISABLE_SPEEDY!==""&&k.SC_DISABLE_SPEEDY!=="false"&&k.SC_DISABLE_SPEEDY),et=Object.freeze([]),ue=Object.freeze({});function na(e,t,r){return r===void 0&&(r=ue),e.theme!==r.theme&&e.theme||t||r.theme}var Lr=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),oa=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,aa=/(^-|-$)/g;function er(e){return e.replace(oa,"-").replace(aa,"")}var sa=/(a)(d)/gi,Ne=52,tr=function(e){return String.fromCharCode(e+(e>25?39:97))};function xt(e){var t,r="";for(t=Math.abs(e);t>Ne;t=t/Ne|0)r=tr(t%Ne)+r;return(tr(t%Ne)+r).replace(sa,"$1-$2")}var lt,$r=5381,se=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},Dr=function(e){return se($r,e)};function zr(e){return xt(Dr(e)>>>0)}function ia(e){return e.displayName||e.name||"Component"}function ut(e){return typeof e=="string"&&!0}var Br=typeof Symbol=="function"&&Symbol.for,Mr=Br?Symbol.for("react.memo"):60115,ca=Br?Symbol.for("react.forward_ref"):60112,la={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},ua={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Fr={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},fa=((lt={})[ca]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},lt[Mr]=Fr,lt);function rr(e){return("type"in(t=e)&&t.type.$$typeof)===Mr?Fr:"$$typeof"in e?fa[e.$$typeof]:la;var t}var da=Object.defineProperty,ha=Object.getOwnPropertyNames,nr=Object.getOwnPropertySymbols,pa=Object.getOwnPropertyDescriptor,ma=Object.getPrototypeOf,or=Object.prototype;function Ur(e,t,r){if(typeof t!="string"){if(or){var n=ma(t);n&&n!==or&&Ur(e,n,r)}var o=ha(t);nr&&(o=o.concat(nr(t)));for(var a=rr(e),s=rr(t),c=0;c0?" Args: ".concat(t.join(", ")):""))}var ga=function(){function e(t){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=t}return e.prototype.indexOfGroup=function(t){for(var r=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,o=n.length,a=o;t>=a;)if((a<<=1)<0)throw Pe(16,"".concat(t));this.groupSizes=new Uint32Array(a),this.groupSizes.set(n),this.length=a;for(var s=o;s=this.length||this.groupSizes[t]===0)return r;for(var n=this.groupSizes[t],o=this.indexOfGroup(t),a=o+n,s=o;s=0){var n=document.createTextNode(r);return this.element.insertBefore(n,this.nodes[t]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(t){this.element.removeChild(this.nodes[t]),this.length--},e.prototype.getRule=function(t){return t0&&(g+="".concat(w,","))}),i+="".concat(v).concat(y,'{content:"').concat(g,'"}').concat(It)},u=0;u0?".".concat(t):h},u=i.slice();u.push(function(h){h.type===He&&h.value.includes("&")&&(h.props[0]=h.props[0].replace(ja,r).replace(n,f))}),s.prefix&&u.push(ea),u.push(Xo);var l=function(h,m,v,y){m===void 0&&(m=""),v===void 0&&(v=""),y===void 0&&(y="&"),t=y,r=m,n=new RegExp("\\".concat(r,"\\b"),"g");var g=h.replace(_a,""),w=Ho(v||m?"".concat(v," ").concat(m," { ").concat(g," }"):g);s.namespace&&(w=Gr(w,s.namespace));var S=[];return qe(w,Zo(u.concat(Qo(function(x){return S.push(x)})))),S};return l.hash=i.length?i.reduce(function(h,m){return m.name||Pe(15),se(h,m.name)},$r).toString():"",l}var Ta=new qr,St=Aa(),Vr=N.createContext({shouldForwardProp:void 0,styleSheet:Ta,stylis:St});Vr.Consumer;N.createContext(void 0);function ir(){return d.useContext(Vr)}var Jr=function(){function e(t,r){var n=this;this.inject=function(o,a){a===void 0&&(a=St);var s=n.name+a.hash;o.hasNameForId(n.id,s)||o.insertRules(n.id,s,a(n.rules,s,"@keyframes"))},this.name=t,this.id="sc-keyframes-".concat(t),this.rules=r,kt(this,function(){throw Pe(12,String(n.name))})}return e.prototype.getName=function(t){return t===void 0&&(t=St),this.name+t.hash},e}(),Ia=function(e){return e>="A"&&e<="Z"};function cr(e){for(var t="",r=0;r>>0);if(!r.hasNameForId(this.componentId,s)){var c=n(a,".".concat(s),void 0,this.componentId);r.insertRules(this.componentId,s,c)}o=ee(o,s),this.staticRulesId=s}else{for(var i=se(this.baseHash,n.hash),f="",u=0;u>>0);r.hasNameForId(this.componentId,m)||r.insertRules(this.componentId,m,n(f,".".concat(m),void 0,this.componentId)),o=ee(o,m)}}return o},e}(),Kr=N.createContext(void 0);Kr.Consumer;var ft={};function La(e,t,r){var n=Ot(e),o=e,a=!ut(e),s=t.attrs,c=s===void 0?et:s,i=t.componentId,f=i===void 0?function(C,j){var P=typeof C!="string"?"sc":er(C);ft[P]=(ft[P]||0)+1;var E="".concat(P,"-").concat(zr(Qe+P+ft[P]));return j?"".concat(j,"-").concat(E):E}(t.displayName,t.parentComponentId):i,u=t.displayName,l=u===void 0?function(C){return ut(C)?"styled.".concat(C):"Styled(".concat(ia(C),")")}(e):u,h=t.displayName&&t.componentId?"".concat(er(t.displayName),"-").concat(t.componentId):t.componentId||f,m=n&&o.attrs?o.attrs.concat(c).filter(Boolean):c,v=t.shouldForwardProp;if(n&&o.shouldForwardProp){var y=o.shouldForwardProp;if(t.shouldForwardProp){var g=t.shouldForwardProp;v=function(C,j){return y(C,j)&&g(C,j)}}else v=y}var w=new Na(r,h,n?o.componentStyle:void 0);function S(C,j){return function(P,E,oe){var je=P.attrs,nn=P.componentStyle,on=P.defaultProps,an=P.foldedComponentIds,sn=P.styledComponentId,cn=P.target,ln=N.useContext(Kr),un=ir(),rt=P.shouldForwardProp||un.shouldForwardProp,Dt=na(E,ln,on)||ue,B=function(Ae,ve,Te){for(var ye,Z=O(O({},ve),{className:void 0,theme:Te}),ot=0;ote||"40px"}; - height: ${({size:e})=>e||"40px"}; - border: 3px solid #f3f3f3; - border-top: 3px solid #007bff; - border-radius: 50%; - animation: ${$a} 1s linear infinite; - - ${({color:e})=>e&&` - border-top-color: ${e}; - `} -`,za=({size:e="40px",color:t="#007bff",className:r="",...n})=>p.jsx(Da,{size:e,color:t,className:r,...n}),Ba=$.div` - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - min-height: 200px; - padding: 2rem; - - ${({fullscreen:e})=>e&&` - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.9); - z-index: 9999; - min-height: 100vh; - `} -`,Ma=$.div` - margin-bottom: 1rem; -`,Fa=$.p` - color: #666; - font-size: 0.9rem; - margin: 0; - text-align: center; -`,Zr=({text:e="Loading...",size:t="40px",fullscreen:r=!1,className:n="",spinnerColor:o="#007bff"})=>p.jsxs(Ba,{fullscreen:r,className:n,role:"status","aria-live":"polite","aria-label":e,children:[p.jsx(Ma,{children:p.jsx(za,{size:t,color:o})}),p.jsx(Fa,{children:e})]}),$e=({children:e})=>{const{isAuthenticated:t,isLoading:r}=$o();return r?p.jsx(Zr,{text:"Authenticating...",fullscreen:!0,size:"48px"}):t?e:p.jsx(ho,{to:"/login",replace:!0})},Qr=d.createContext(),Ua=(e,t)=>{switch(t.type){case"ADD_TOAST":return[...e,t.toast];case"REMOVE_TOAST":return e.filter(r=>r.id!==t.id);case"CLEAR_ALL":return[];default:return e}},Wa=({children:e})=>{const[t,r]=d.useReducer(Ua,[]),n=d.useCallback(l=>{const h=Date.now()+Math.random(),m={id:h,type:"info",duration:5e3,...l};return r({type:"ADD_TOAST",toast:m}),m.duration>0&&setTimeout(()=>{r({type:"REMOVE_TOAST",id:h})},m.duration),h},[]),o=d.useCallback(l=>{r({type:"REMOVE_TOAST",id:l})},[]),a=d.useCallback(()=>{r({type:"CLEAR_ALL"})},[]),s=d.useCallback((l,h={})=>n({message:l,type:"success",...h}),[n]),c=d.useCallback((l,h={})=>n({message:l,type:"error",duration:7e3,...h}),[n]),i=d.useCallback((l,h={})=>n({message:l,type:"warning",duration:6e3,...h}),[n]),f=d.useCallback((l,h={})=>n({message:l,type:"info",...h}),[n]),u={toasts:t,addToast:n,removeToast:o,clearAll:a,showSuccess:s,showError:c,showWarning:i,showInfo:f};return p.jsx(Qr.Provider,{value:u,children:e})},qa=()=>{const e=d.useContext(Qr);if(!e)throw new Error("useToast must be used within a ToastProvider");return e},en=d.createContext(),Ws=()=>{const e=d.useContext(en);if(!e)throw new Error("useDarkMode must be used within a DarkModeProvider");return e},Ga=({children:e})=>{const[t,r]=d.useState(()=>{const s=localStorage.getItem("darkMode");return s!==null?JSON.parse(s):window.matchMedia("(prefers-color-scheme: dark)").matches}),n=()=>{r(s=>!s)},o=s=>{r(s)};d.useEffect(()=>{localStorage.setItem("darkMode",JSON.stringify(t)),t?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[t]),d.useEffect(()=>{const s=window.matchMedia("(prefers-color-scheme: dark)"),c=i=>{localStorage.getItem("darkMode")===null&&r(i.matches)};return s.addEventListener("change",c),()=>s.removeEventListener("change",c)},[]);const a={isDarkMode:t,toggleDarkMode:n,setDarkMode:o};return p.jsx(en.Provider,{value:a,children:e})},U={SUCCESS:"success",ERROR:"error",WARNING:"warning",INFO:"info"},fr={[U.SUCCESS]:"#28a745",[U.ERROR]:"#dc3545",[U.WARNING]:"#ffc107",[U.INFO]:"#17a2b8"},Va={[U.SUCCESS]:"Success",[U.ERROR]:"Error",[U.WARNING]:"Warning",[U.INFO]:"Info"},$t=e=>fr[e]||fr[U.INFO],Ja=e=>Va[e]||"Notification",Ya=$.div` - width: 20px; - height: 20px; - flex-shrink: 0; - margin-top: 0.125rem; - - svg { - width: 100%; - height: 100%; - fill: ${({$type:e})=>$t(e)}; - } -`,Ha=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"})}),Ka=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"})}),Xa=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z"})}),Za=()=>p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z"})}),Qa=e=>{switch(e){case"success":return p.jsx(Ha,{});case"error":return p.jsx(Ka,{});case"warning":return p.jsx(Xa,{});case"info":default:return p.jsx(Za,{})}},es=({type:e})=>p.jsx(Ya,{$type:e,children:Qa(e)}),ts=e=>{const[t,r]=d.useState(100);return d.useEffect(()=>{if(e>0){const n=setInterval(()=>{r(o=>{const a=o-100/(e/100);return a<=0?0:a})},100);return()=>clearInterval(n)}},[e]),t},rs=Lt` - from { - transform: translateX(100%); - opacity: 0; - } - to { - transform: translateX(0); - opacity: 1; - } -`,ns=Lt` - from { - transform: translateX(0); - opacity: 1; - } - to { - transform: translateX(100%); - opacity: 0; - } -`,os=$.div` - position: fixed; - top: 1rem; - right: 1rem; - z-index: 9999; - display: flex; - flex-direction: column; - gap: 0.5rem; - max-width: 420px; - - @media (max-width: 768px) { - left: 1rem; - right: 1rem; - max-width: none; - } -`,as=$.div` - ${({$isExiting:e})=>Nt` - animation: ${e?ns:rs} 0.3s ease-out; - `} -`,ss=$.div` - background: white; - border-radius: 8px; - padding: 1rem; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - border-left: 4px solid ${({$type:e})=>$t(e)}; - display: flex; - align-items: flex-start; - gap: 0.75rem; - position: relative; - - &:focus-within { - outline: 2px solid #007bff; - outline-offset: 2px; - } -`,is=$.div` - flex: 1; - - h4 { - margin: 0 0 0.25rem 0; - font-size: 0.9rem; - font-weight: 600; - color: #333; - } - - p { - margin: 0; - font-size: 0.875rem; - line-height: 1.4; - color: #666; - } -`,cs=$.button` - background: none; - border: none; - cursor: pointer; - padding: 0.25rem; - color: #999; - flex-shrink: 0; - border-radius: 4px; - - &:hover { - color: #666; - background-color: rgba(0, 0, 0, 0.05); - } - - &:focus { - outline: 2px solid #007bff; - outline-offset: 2px; - } - - svg { - width: 16px; - height: 16px; - fill: currentColor; - } -`,ls=$.div` - position: absolute; - bottom: 0; - left: 0; - height: 3px; - background-color: ${({$type:e})=>$t(e)}; - border-radius: 0 0 8px 8px; - width: ${({$progress:e})=>e}%; - transition: width 0.1s linear; -`,us=({toast:e,onRemove:t})=>{const[r,n]=d.useState(!1),o=ts(e.duration),a=()=>{n(!0),setTimeout(()=>t(e.id),300)};return p.jsx(as,{$isExiting:r,children:p.jsxs(ss,{$type:e.type,role:"alert","aria-live":"polite","aria-atomic":"true",children:[p.jsx(es,{type:e.type}),p.jsxs(is,{children:[p.jsx("h4",{children:e.title||Ja(e.type)}),p.jsx("p",{children:e.message})]}),p.jsx(cs,{onClick:a,"aria-label":"Close notification",type:"button",children:p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}),e.duration>0&&p.jsx(ls,{$type:e.type,$progress:o})]})})},fs=()=>{const{toasts:e,removeToast:t}=qa();return p.jsx(os,{"aria-live":"polite","aria-label":"Notifications",children:e.map(r=>p.jsx(us,{toast:r,onRemove:t},r.id))})};function tn(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;tp.jsx("div",{className:ne("bg-white rounded-lg p-8 max-w-2xl w-full shadow-lg text-center",e),...r,children:t}),ps=({className:e,children:t,...r})=>p.jsx("h1",{className:ne("text-red-600 text-3xl mb-4 font-semibold",e),...r,children:t}),ms=({className:e,children:t,...r})=>p.jsx("p",{className:ne("text-gray-600 text-lg leading-relaxed mb-8",e),...r,children:t}),gs=({className:e,error:t,errorInfo:r,...n})=>p.jsxs("details",{className:ne("mb-8 text-left",e),...n,children:[p.jsx("summary",{className:"cursor-pointer text-blue-600 font-medium mb-2 hover:text-blue-800",children:"Show technical details"}),p.jsxs("pre",{className:"bg-gray-50 p-4 rounded overflow-x-auto text-sm text-gray-700 whitespace-pre-wrap break-words",children:[t==null?void 0:t.toString(),r==null?void 0:r.componentStack]})]}),vs={primary:"btn-primary",secondary:"btn-secondary",outline:"btn-outline",ghost:"btn-ghost",link:"btn-link",destructive:"btn-destructive",success:"btn-success"},ys={sm:"h-8 px-3 text-xs",md:"h-10 px-4 py-2",lg:"h-12 px-8",xl:"h-14 px-10 text-lg",icon:"h-10 w-10"},Ue=N.forwardRef(({className:e,variant:t="primary",size:r="md",disabled:n=!1,loading:o=!1,children:a,...s},c)=>p.jsxs("button",{className:ne("btn",vs[t],ys[r],n&&"btn-disabled",o&&"btn-loading",e),ref:c,disabled:n||o,...s,children:[o&&p.jsx("span",{className:"btn-spinner","aria-hidden":"true",children:p.jsxs("svg",{className:"animate-spin h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[p.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),p.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),a]}));Ue.displayName="Button";const rn=N.forwardRef(({className:e,orientation:t="horizontal",size:r="md",variant:n="outline",children:o,...a},s)=>{const c=N.Children.map(o,i=>N.isValidElement(i)?N.cloneElement(i,{size:i.props.size||r,variant:i.props.variant||n}):i);return p.jsx("div",{className:ne("btn-group",t==="horizontal"&&"btn-group-horizontal",t==="vertical"&&"btn-group-vertical",e),ref:s,...a,children:c})});rn.displayName="ButtonGroup";const xs=({onRetry:e,onReload:t,onReportError:r})=>p.jsxs(rn,{className:"flex gap-4 justify-center flex-wrap",children:[p.jsx(Ue,{onClick:e,variant:"primary",children:"Try Again"}),p.jsx(Ue,{onClick:t,variant:"secondary",children:"Refresh Page"}),p.jsx(Ue,{onClick:r,variant:"secondary",children:"Report Error"})]}),tt=e=>{if(!e)return null;const t=new Date(e);return isNaN(t.getTime())?null:t},qs=e=>{const t=tt(e);return t?t.toLocaleString():"Invalid date"},Gs=e=>{const t=tt(e);return t?t.toLocaleDateString():"Invalid date"},Vs=e=>{const t=tt(e);return t?t.toISOString().split("T")[0]:""},bs=e=>{const t=tt(e);return t?t.toISOString():null},ws=({children:e,className:t,...r})=>p.jsx("div",{className:ne("min-h-screen flex items-center justify-center p-8 bg-gray-50",t),role:"alert","aria-live":"assertive",...r,children:e});class Ss extends N.Component{constructor(r){super(r);Oe(this,"handleRetry",()=>{this.setState({hasError:!1,error:null,errorInfo:null})});Oe(this,"handleReload",()=>{window.location.reload()});Oe(this,"handleReportError",()=>{this.errorReporting.reportError(this.state.error,this.state.errorInfo)});this.state={hasError:!1,error:null,errorInfo:null},this.errorReporting={reportError:(n,o)=>{const a={error:n==null?void 0:n.toString(),stack:n==null?void 0:n.stack,componentStack:o==null?void 0:o.componentStack,userAgent:navigator.userAgent,timestamp:bs(new Date),url:window.location.href};navigator.clipboard.writeText(JSON.stringify(a,null,2)).then(()=>{alert("Error details copied to clipboard. Please send this to support.")}).catch(()=>{alert("Failed to copy error details. Please try again.")})},logError:(n,o)=>{console.error("Error caught by boundary:",n,o)}}}static getDerivedStateFromError(r){return{hasError:!0}}componentDidCatch(r,n){this.setState({error:r,errorInfo:n}),this.errorReporting.logError(r,n)}render(){return this.state.hasError?p.jsx(ws,{children:p.jsxs(hs,{children:[p.jsx(ps,{children:"Oops! Something went wrong"}),p.jsx(ms,{children:"We're sorry, but something unexpected happened. You can try refreshing the page or contact support if the problem persists."}),this.state.error&&p.jsx(gs,{error:this.state.error,errorInfo:this.state.errorInfo}),p.jsx(xs,{onRetry:this.handleRetry,onReload:this.handleReload,onReportError:this.handleReportError})]})}):this.props.children}}const Es=({children:e})=>e,Cs=d.lazy(()=>K(()=>import("./LandingPage-Dc2ID8Hk.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(e=>({default:e.LandingPage}))),Rs=d.lazy(()=>K(()=>import("./LoginPage-LyjmzT4O.js"),__vite__mapDeps([12,10,4,11,1,13,7])).then(e=>({default:e.LoginPage}))),Ps=d.lazy(()=>K(()=>import("./RegisterPage-D_5fYFtm.js"),__vite__mapDeps([14,13,7])).then(e=>({default:e.RegisterPage}))),js=d.lazy(()=>K(()=>import("./DashboardPage-BXlBG99y.js"),__vite__mapDeps([15,9,7,16,17,6,11,1])).then(e=>({default:e.DashboardPage}))),_s=d.lazy(()=>K(()=>import("./MapPage-BV2c4X5p.js"),__vite__mapDeps([18,7,16,17,3,4,5,6,19])).then(e=>({default:e.MapPage}))),As=d.lazy(()=>K(()=>import("./TreeDetailPage-De7lDWqg.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.TreeDetailPage}))),Ts=d.lazy(()=>K(()=>import("./AdminPage-DQw11YmQ.js"),__vite__mapDeps([21,5,8,7])).then(e=>({default:e.AdminPage}))),Is=d.lazy(()=>K(()=>import("./ErrorPages-pitdcj5q.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.NotFoundPage}))),Os=()=>p.jsx(Ss,{children:p.jsx(Eo,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:p.jsx(Ga,{children:p.jsx(Wa,{children:p.jsx(Lo,{children:p.jsxs(Es,{children:[p.jsx(d.Suspense,{fallback:p.jsx(Zr,{fullscreen:!0,text:"Loading page..."}),children:p.jsxs(mo,{children:[p.jsx(M,{path:"/",element:p.jsx(Cs,{})}),p.jsx(M,{path:"/login",element:p.jsx(Rs,{})}),p.jsx(M,{path:"/register",element:p.jsx(Ps,{})}),p.jsx(M,{path:"/dashboard",element:p.jsx($e,{children:p.jsx(js,{})})}),p.jsx(M,{path:"/map",element:p.jsx($e,{children:p.jsx(_s,{})})}),p.jsx(M,{path:"/tree/:id",element:p.jsx($e,{children:p.jsx(As,{})})}),p.jsx(M,{path:"/admin",element:p.jsx($e,{children:p.jsx(Ts,{})})}),p.jsx(M,{path:"*",element:p.jsx(Is,{})})]})}),p.jsx(fs,{})]})})})})})}),ks=(e="root")=>{const t=document.getElementById(e);if(!t)throw new Error(`Root element with id '${e}' not found in the document`);return t},Ns=e=>xn.createRoot(e),Ls=e=>{e.render(p.jsx(N.StrictMode,{children:p.jsx(Os,{})}))},$s=()=>{try{const e=ks(),t=Ns(e);Ls(t)}catch(e){throw console.error("Failed to initialize application:",e),e}};$s();export{ko as A,rn as B,Fs as L,ho as N,N as R,Ye as a,Sn as b,ds as c,$ as d,Zr as e,Ws as f,ne as g,gn as h,Bs as i,p as j,Us as k,Vs as l,Ms as m,qs as n,Ue as o,Gs as p,d as r,No as u}; diff --git a/frontend/dist/assets/useKeyboardNavigation-BRnXQ3uS.js b/frontend/dist/assets/useKeyboardNavigation-Bh0nMcUg.js similarity index 97% rename from frontend/dist/assets/useKeyboardNavigation-BRnXQ3uS.js rename to frontend/dist/assets/useKeyboardNavigation-Bh0nMcUg.js index 537cdf7996..d82210109b 100644 --- a/frontend/dist/assets/useKeyboardNavigation-BRnXQ3uS.js +++ b/frontend/dist/assets/useKeyboardNavigation-Bh0nMcUg.js @@ -1 +1 @@ -import{r as s}from"./index-Dzr7PBfw.js";const T=(A={})=>{const{onEscape:f,onEnter:d,onSpace:b,onArrowUp:m,onArrowDown:p,onArrowLeft:k,onArrowRight:E,onTab:w,trapFocus:h=!1,autoFocus:g=!1,disabled:D=!1}=A,l=s.useRef(null),a=s.useRef([]),x=s.useCallback(()=>{if(!l.current)return[];const e=["button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","a[href]:not([disabled])",'[tabindex]:not([tabindex="-1"]):not([disabled])',"summary:not([disabled])"];return Array.from(l.current.querySelectorAll(e.join(","))).filter(t=>{const r=window.getComputedStyle(t);return r.display!=="none"&&r.visibility!=="hidden"})},[]),n=s.useCallback(()=>{a.current=x()},[x]),u=s.useCallback(e=>{if(D)return;const{key:t,shiftKey:r,ctrlKey:c,altKey:o,metaKey:i}=e;if(!((c||o||i)&&t!=="Tab"))switch(t){case"Escape":f&&(e.preventDefault(),f(e));break;case"Enter":d&&(e.preventDefault(),d(e));break;case" ":b&&(e.preventDefault(),b(e));break;case"ArrowUp":m&&(e.preventDefault(),m(e));break;case"ArrowDown":p&&(e.preventDefault(),p(e));break;case"ArrowLeft":k&&(e.preventDefault(),k(e));break;case"ArrowRight":E&&(e.preventDefault(),E(e));break;case"Tab":h&&a.current.length>0&&(e.preventDefault(),C(r)),w&&w(e);break}},[D,f,d,b,m,p,k,E,w,h]),C=s.useCallback(e=>{var i;n();const t=a.current;if(t.length===0)return;const r=document.activeElement,c=t.indexOf(r);let o;e?o=c<=0?t.length-1:c-1:o=c>=t.length-1?0:c+1,(i=t[o])==null||i.focus()},[n]),y=s.useCallback(()=>{var t;n(),(t=a.current[0])==null||t.focus()},[n]),v=s.useCallback(()=>{var t;n();const e=a.current;(t=e[e.length-1])==null||t.focus()},[n]),I=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r>=e.length-1?0:r+1;(o=e[c])==null||o.focus()},[n]),K=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r<=0?e.length-1:r-1;(o=e[c])==null||o.focus()},[n]);return s.useEffect(()=>{const e=l.current;if(e){if(e.addEventListener("keydown",u),g){const t=setTimeout(()=>{y()},100);return()=>{clearTimeout(t),e.removeEventListener("keydown",u)}}return()=>{e.removeEventListener("keydown",u)}}},[u,g,y]),s.useEffect(()=>{n()},[n]),{containerRef:l,focusFirst:y,focusLast:v,focusNext:I,focusPrevious:K,updateFocusableElements:n,getFocusableElements:x}};export{T as u}; +import{r as s}from"./index-CGkKx7Xv.js";const T=(A={})=>{const{onEscape:f,onEnter:d,onSpace:b,onArrowUp:m,onArrowDown:p,onArrowLeft:k,onArrowRight:E,onTab:w,trapFocus:h=!1,autoFocus:g=!1,disabled:D=!1}=A,l=s.useRef(null),a=s.useRef([]),x=s.useCallback(()=>{if(!l.current)return[];const e=["button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","a[href]:not([disabled])",'[tabindex]:not([tabindex="-1"]):not([disabled])',"summary:not([disabled])"];return Array.from(l.current.querySelectorAll(e.join(","))).filter(t=>{const r=window.getComputedStyle(t);return r.display!=="none"&&r.visibility!=="hidden"})},[]),n=s.useCallback(()=>{a.current=x()},[x]),u=s.useCallback(e=>{if(D)return;const{key:t,shiftKey:r,ctrlKey:c,altKey:o,metaKey:i}=e;if(!((c||o||i)&&t!=="Tab"))switch(t){case"Escape":f&&(e.preventDefault(),f(e));break;case"Enter":d&&(e.preventDefault(),d(e));break;case" ":b&&(e.preventDefault(),b(e));break;case"ArrowUp":m&&(e.preventDefault(),m(e));break;case"ArrowDown":p&&(e.preventDefault(),p(e));break;case"ArrowLeft":k&&(e.preventDefault(),k(e));break;case"ArrowRight":E&&(e.preventDefault(),E(e));break;case"Tab":h&&a.current.length>0&&(e.preventDefault(),C(r)),w&&w(e);break}},[D,f,d,b,m,p,k,E,w,h]),C=s.useCallback(e=>{var i;n();const t=a.current;if(t.length===0)return;const r=document.activeElement,c=t.indexOf(r);let o;e?o=c<=0?t.length-1:c-1:o=c>=t.length-1?0:c+1,(i=t[o])==null||i.focus()},[n]),y=s.useCallback(()=>{var t;n(),(t=a.current[0])==null||t.focus()},[n]),v=s.useCallback(()=>{var t;n();const e=a.current;(t=e[e.length-1])==null||t.focus()},[n]),I=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r>=e.length-1?0:r+1;(o=e[c])==null||o.focus()},[n]),K=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r<=0?e.length-1:r-1;(o=e[c])==null||o.focus()},[n]);return s.useEffect(()=>{const e=l.current;if(e){if(e.addEventListener("keydown",u),g){const t=setTimeout(()=>{y()},100);return()=>{clearTimeout(t),e.removeEventListener("keydown",u)}}return()=>{e.removeEventListener("keydown",u)}}},[u,g,y]),s.useEffect(()=>{n()},[n]),{containerRef:l,focusFirst:y,focusLast:v,focusNext:I,focusPrevious:K,updateFocusableElements:n,getFocusableElements:x}};export{T as u}; diff --git a/frontend/dist/assets/useSidebarState-Ctkpd6zX.js b/frontend/dist/assets/useSidebarState-Ctkpd6zX.js new file mode 100644 index 0000000000..21e755a3b9 --- /dev/null +++ b/frontend/dist/assets/useSidebarState-Ctkpd6zX.js @@ -0,0 +1,279 @@ +var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[a]=t;var C=(n,a,t)=>aa(n,typeof a!="symbol"?a+"":a,t);import{A as oa,u as yn,j as b,r as w,f as Dn,b as sa,R as m,c as re,g as ia,d as H,h as ca,i as Tr}from"./index-CGkKx7Xv.js";import{D as la}from"./DarkModeToggle-Cu0JyOh5.js";const xe=new oa,Fl={getAll:(n={})=>xe.get("/trees",n),getById:n=>xe.get(`/trees/${n}`),getMeasurements:n=>xe.get(`/trees/${n}/measurements`),getByForest:n=>xe.get(`/trees/forest/${n}`),create:n=>xe.post("/trees",n),update:(n,a)=>xe.put(`/trees/${n}`,a),delete:n=>xe.delete(`/trees/${n}`),addMeasurement:(n,a)=>xe.post(`/trees/${n}/measurements`,a),markDead:n=>xe.patch(`/trees/${n}/mark-dead`)},Il=({onToggleSidebar:n})=>{const{user:a,logout:t,isAdmin:e}=yn(),r=async()=>{await t()};return b.jsx("header",{className:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4 sticky top-0 z-50",children:b.jsxs("div",{className:"flex items-center justify-between",children:[b.jsxs("div",{className:"flex items-center gap-4",children:[b.jsx("button",{onClick:n,"aria-label":"Toggle menu",className:"lg:hidden flex items-center justify-center w-10 h-10 bg-none border-none cursor-pointer rounded-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-500 focus:outline-offset-2",children:b.jsx("svg",{className:"w-6 h-6 text-gray-700 dark:text-gray-300",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",children:b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})}),b.jsx("h1",{className:"text-2xl font-bold text-green-600 dark:text-green-400 m-0",children:"Nanwa Dashboard"})]}),b.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[b.jsxs("span",{className:"text-gray-700 dark:text-gray-300",children:["Welcome, ",b.jsx("strong",{children:(a==null?void 0:a.firstName)||(a==null?void 0:a.name)}),e()&&b.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 text-xs rounded-full font-bold",children:"Admin"})]}),b.jsx(la,{size:"sm"}),b.jsxs("button",{onClick:r,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-red-600 dark:hover:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/30 rounded-lg transition-colors",title:"Logout",children:[b.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),"Logout"]})]})]})})},Al=({isOpen:n,onClose:a})=>{const{isAdmin:t}=yn();return b.jsxs(b.Fragment,{children:[b.jsx("div",{className:`lg:hidden fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${n?"opacity-100 visible":"opacity-0 invisible"}`,onClick:a}),b.jsx("aside",{className:` + bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 w-full lg:w-64 fixed lg:sticky top-0 h-screen overflow-y-auto z-50 lg:z-10 transform transition-transform duration-300 ease-in-out + ${n?"translate-x-0":"-translate-x-full lg:translate-x-0"} + `,children:b.jsx("div",{className:"p-6",children:b.jsxs("nav",{className:"space-y-2",children:[b.jsxs("a",{href:"#dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30 rounded-lg",children:[b.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),b.jsxs("a",{href:"/map",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[b.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),b.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[b.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),t()&&b.jsxs("a",{href:"/admin",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[b.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})})]})},ua=(n,a,t)=>{const[e,r]=w.useState(a||new Date(new Date().getFullYear(),0,1)),[o,s]=w.useState(t||new Date),i=w.useRef(n),c=w.useRef(!1);return w.useEffect(()=>{i.current=n},[n]),w.useEffect(()=>{if(!c.current){c.current=!0;return}const f=setTimeout(()=>{i.current&&e&&o&&i.current({startDate:e,endDate:o})},1e3);return()=>clearTimeout(f)},[e,o]),{startDate:e,endDate:o,handleStartDateChange:f=>{r(f),f&&o&&f>o&&s(f)},handleEndDateChange:f=>{s(f),f&&e&&f{const f=new Date(new Date().getFullYear(),0,1),p=new Date;r(f),s(p),i.current&&i.current({startDate:f,endDate:p})}}},bn=6048e5,da=864e5,qt=6e4,Kt=36e5,fa=1e3,Or=Symbol.for("constructDateFrom");function $(n,a){return typeof n=="function"?n(a):n&&typeof n=="object"&&Or in n?n[Or](a):n instanceof Date?new n.constructor(a):new Date(a)}function P(n,a){return $(a||n,n)}function pe(n,a,t){const e=P(n,t==null?void 0:t.in);return isNaN(a)?$((t==null?void 0:t.in)||n,NaN):(a&&e.setDate(e.getDate()+a),e)}function he(n,a,t){const e=P(n,t==null?void 0:t.in);if(isNaN(a))return $(n,NaN);if(!a)return e;const r=e.getDate(),o=$(n,e.getTime());o.setMonth(e.getMonth()+a+1,0);const s=o.getDate();return r>=s?o:(e.setFullYear(o.getFullYear(),o.getMonth(),r),e)}function kn(n,a,t){return $(n,+P(n)+a)}function pa(n,a,t){return kn(n,a*Kt)}let ha={};function Ke(){return ha}function Pe(n,a){var i,c,l,u;const t=Ke(),e=(a==null?void 0:a.weekStartsOn)??((c=(i=a==null?void 0:a.locale)==null?void 0:i.options)==null?void 0:c.weekStartsOn)??t.weekStartsOn??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.weekStartsOn)??0,r=P(n,a==null?void 0:a.in),o=r.getDay(),s=(o=o.getTime()?e+1:t.getTime()>=i.getTime()?e:e-1}function Nt(n){const a=P(n),t=new Date(Date.UTC(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds()));return t.setUTCFullYear(a.getFullYear()),+n-+t}function Te(n,...a){const t=$.bind(null,a.find(e=>typeof e=="object"));return a.map(t)}function Qe(n,a){const t=P(n,a==null?void 0:a.in);return t.setHours(0,0,0,0),t}function Ze(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a),o=Qe(e),s=Qe(r),i=+o-Nt(o),c=+s-Nt(s);return Math.round((i-c)/da)}function ma(n,a){const t=xn(n,a),e=$(n,0);return e.setFullYear(t,0,4),e.setHours(0,0,0,0),Xe(e)}function lr(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setTime(e.getTime()+a*qt),e}function gr(n,a,t){return he(n,a*3,t)}function ga(n,a,t){return kn(n,a*1e3)}function Rt(n,a,t){return pe(n,a*7,t)}function _e(n,a,t){return he(n,a*12,t)}function Nr(n,a){let t,e=a==null?void 0:a.in;return n.forEach(r=>{!e&&typeof r=="object"&&(e=$.bind(null,r));const o=P(r,e);(!t||t{!e&&typeof r=="object"&&(e=$.bind(null,r));const o=P(r,e);(!t||t>o||isNaN(+o))&&(t=o)}),$(e,t||NaN)}function va(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return+Qe(e)==+Qe(r)}function Me(n){return n instanceof Date||typeof n=="object"&&Object.prototype.toString.call(n)==="[object Date]"}function Yt(n){return!(!Me(n)&&typeof n!="number"||isNaN(+P(n)))}function Lt(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),s=e.getMonth()-r.getMonth();return o*12+s}function He(n,a){const t=P(n,a==null?void 0:a.in);return Math.trunc(t.getMonth()/3)+1}function Ft(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),s=He(e)-He(r);return o*4+s}function It(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return e.getFullYear()-r.getFullYear()}function wa(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a),o=Yr(e,r),s=Math.abs(Ze(e,r));e.setDate(e.getDate()-o*s);const i=+(Yr(e,r)===-o),c=o*(s-i);return c===0?0:c}function Yr(n,a){const t=n.getFullYear()-a.getFullYear()||n.getMonth()-a.getMonth()||n.getDate()-a.getDate()||n.getHours()-a.getHours()||n.getMinutes()-a.getMinutes()||n.getSeconds()-a.getSeconds()||n.getMilliseconds()-a.getMilliseconds();return t<0?-1:t>0?1:t}function _n(n,a){const t=P(n,a==null?void 0:a.in);return t.setHours(23,59,59,999),t}function Mn(n,a){const t=P(n,a==null?void 0:a.in),e=t.getMonth();return t.setFullYear(t.getFullYear(),e+1,0),t.setHours(23,59,59,999),t}function ur(n,a){const t=P(n,a==null?void 0:a.in),e=t.getMonth(),r=e-e%3;return t.setMonth(r,1),t.setHours(0,0,0,0),t}function Cn(n,a){const t=P(n,a==null?void 0:a.in);return t.setDate(1),t.setHours(0,0,0,0),t}function Sn(n,a){const t=P(n,a==null?void 0:a.in),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function $t(n,a){const t=P(n,a==null?void 0:a.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function ya(n,a){var i,c;const t=Ke(),e=t.weekStartsOn??((c=(i=t.locale)==null?void 0:i.options)==null?void 0:c.weekStartsOn)??0,r=P(n,a==null?void 0:a.in),o=r.getDay(),s=(o{let e;const r=Da[n];return typeof r=="string"?e=r:a===1?e=r.one:e=r.other.replace("{{count}}",a.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+e:e+" ago":e};function er(n){return(a={})=>{const t=a.width?String(a.width):n.defaultWidth;return n.formats[t]||n.formats[n.defaultWidth]}}const ka={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},xa={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},_a={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ma={date:er({formats:ka,defaultWidth:"full"}),time:er({formats:xa,defaultWidth:"full"}),dateTime:er({formats:_a,defaultWidth:"full"})},Ca={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Sa=(n,a,t,e)=>Ca[n];function ot(n){return(a,t)=>{const e=t!=null&&t.context?String(t.context):"standalone";let r;if(e==="formatting"&&n.formattingValues){const s=n.defaultFormattingWidth||n.defaultWidth,i=t!=null&&t.width?String(t.width):s;r=n.formattingValues[i]||n.formattingValues[s]}else{const s=n.defaultWidth,i=t!=null&&t.width?String(t.width):n.defaultWidth;r=n.values[i]||n.values[s]}const o=n.argumentCallback?n.argumentCallback(a):a;return r[o]}}const Ea={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Pa={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Ta={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Oa={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Na={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Ra={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Ya=(n,a)=>{const t=Number(n),e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},La={ordinalNumber:Ya,era:ot({values:Ea,defaultWidth:"wide"}),quarter:ot({values:Pa,defaultWidth:"wide",argumentCallback:n=>n-1}),month:ot({values:Ta,defaultWidth:"wide"}),day:ot({values:Oa,defaultWidth:"wide"}),dayPeriod:ot({values:Na,defaultWidth:"wide",formattingValues:Ra,defaultFormattingWidth:"wide"})};function st(n){return(a,t={})=>{const e=t.width,r=e&&n.matchPatterns[e]||n.matchPatterns[n.defaultMatchWidth],o=a.match(r);if(!o)return null;const s=o[0],i=e&&n.parsePatterns[e]||n.parsePatterns[n.defaultParseWidth],c=Array.isArray(i)?Ia(i,d=>d.test(s)):Fa(i,d=>d.test(s));let l;l=n.valueCallback?n.valueCallback(c):c,l=t.valueCallback?t.valueCallback(l):l;const u=a.slice(s.length);return{value:l,rest:u}}}function Fa(n,a){for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&a(n[t]))return t}function Ia(n,a){for(let t=0;t{const e=a.match(n.matchPattern);if(!e)return null;const r=e[0],o=a.match(n.parsePattern);if(!o)return null;let s=n.valueCallback?n.valueCallback(o[0]):o[0];s=t.valueCallback?t.valueCallback(s):s;const i=a.slice(r.length);return{value:s,rest:i}}}const Wa=/^(\d+)(th|st|nd|rd)?/i,Ha=/\d+/i,ja={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Ba={any:[/^b/i,/^(a|c)/i]},Qa={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Va={any:[/1/i,/2/i,/3/i,/4/i]},qa={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Ka={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},$a={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Ua={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},za={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Ga={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Xa={ordinalNumber:Aa({matchPattern:Wa,parsePattern:Ha,valueCallback:n=>parseInt(n,10)}),era:st({matchPatterns:ja,defaultMatchWidth:"wide",parsePatterns:Ba,defaultParseWidth:"any"}),quarter:st({matchPatterns:Qa,defaultMatchWidth:"wide",parsePatterns:Va,defaultParseWidth:"any",valueCallback:n=>n+1}),month:st({matchPatterns:qa,defaultMatchWidth:"wide",parsePatterns:Ka,defaultParseWidth:"any"}),day:st({matchPatterns:$a,defaultMatchWidth:"wide",parsePatterns:Ua,defaultParseWidth:"any"}),dayPeriod:st({matchPatterns:za,defaultMatchWidth:"any",parsePatterns:Ga,defaultParseWidth:"any"})},En={code:"en-US",formatDistance:ba,formatLong:Ma,formatRelative:Sa,localize:La,match:Xa,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Za(n,a){const t=P(n,a==null?void 0:a.in);return Ze(t,$t(t))+1}function vr(n,a){const t=P(n,a==null?void 0:a.in),e=+Xe(t)-+ma(t);return Math.round(e/bn)+1}function wr(n,a){var u,d,f,p;const t=P(n,a==null?void 0:a.in),e=t.getFullYear(),r=Ke(),o=(a==null?void 0:a.firstWeekContainsDate)??((d=(u=a==null?void 0:a.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??r.firstWeekContainsDate??((p=(f=r.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,s=$((a==null?void 0:a.in)||n,0);s.setFullYear(e+1,0,o),s.setHours(0,0,0,0);const i=Pe(s,a),c=$((a==null?void 0:a.in)||n,0);c.setFullYear(e,0,o),c.setHours(0,0,0,0);const l=Pe(c,a);return+t>=+i?e+1:+t>=+l?e:e-1}function Ja(n,a){var i,c,l,u;const t=Ke(),e=(a==null?void 0:a.firstWeekContainsDate)??((c=(i=a==null?void 0:a.locale)==null?void 0:i.options)==null?void 0:c.firstWeekContainsDate)??t.firstWeekContainsDate??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.firstWeekContainsDate)??1,r=wr(n,a),o=$((a==null?void 0:a.in)||n,0);return o.setFullYear(r,0,e),o.setHours(0,0,0,0),Pe(o,a)}function Pn(n,a){const t=P(n,a==null?void 0:a.in),e=+Pe(t,a)-+Ja(t,a);return Math.round(e/bn)+1}function K(n,a){const t=n<0?"-":"",e=Math.abs(n).toString().padStart(a,"0");return t+e}const Oe={y(n,a){const t=n.getFullYear(),e=t>0?t:1-t;return K(a==="yy"?e%100:e,a.length)},M(n,a){const t=n.getMonth();return a==="M"?String(t+1):K(t+1,2)},d(n,a){return K(n.getDate(),a.length)},a(n,a){const t=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(n,a){return K(n.getHours()%12||12,a.length)},H(n,a){return K(n.getHours(),a.length)},m(n,a){return K(n.getMinutes(),a.length)},s(n,a){return K(n.getSeconds(),a.length)},S(n,a){const t=a.length,e=n.getMilliseconds(),r=Math.trunc(e*Math.pow(10,t-3));return K(r,a.length)}},$e={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Lr={G:function(n,a,t){const e=n.getFullYear()>0?1:0;switch(a){case"G":case"GG":case"GGG":return t.era(e,{width:"abbreviated"});case"GGGGG":return t.era(e,{width:"narrow"});case"GGGG":default:return t.era(e,{width:"wide"})}},y:function(n,a,t){if(a==="yo"){const e=n.getFullYear(),r=e>0?e:1-e;return t.ordinalNumber(r,{unit:"year"})}return Oe.y(n,a)},Y:function(n,a,t,e){const r=wr(n,e),o=r>0?r:1-r;if(a==="YY"){const s=o%100;return K(s,2)}return a==="Yo"?t.ordinalNumber(o,{unit:"year"}):K(o,a.length)},R:function(n,a){const t=xn(n);return K(t,a.length)},u:function(n,a){const t=n.getFullYear();return K(t,a.length)},Q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"Q":return String(e);case"QQ":return K(e,2);case"Qo":return t.ordinalNumber(e,{unit:"quarter"});case"QQQ":return t.quarter(e,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(e,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(e,{width:"wide",context:"formatting"})}},q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"q":return String(e);case"qq":return K(e,2);case"qo":return t.ordinalNumber(e,{unit:"quarter"});case"qqq":return t.quarter(e,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(e,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(e,{width:"wide",context:"standalone"})}},M:function(n,a,t){const e=n.getMonth();switch(a){case"M":case"MM":return Oe.M(n,a);case"Mo":return t.ordinalNumber(e+1,{unit:"month"});case"MMM":return t.month(e,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(e,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(e,{width:"wide",context:"formatting"})}},L:function(n,a,t){const e=n.getMonth();switch(a){case"L":return String(e+1);case"LL":return K(e+1,2);case"Lo":return t.ordinalNumber(e+1,{unit:"month"});case"LLL":return t.month(e,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(e,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(e,{width:"wide",context:"standalone"})}},w:function(n,a,t,e){const r=Pn(n,e);return a==="wo"?t.ordinalNumber(r,{unit:"week"}):K(r,a.length)},I:function(n,a,t){const e=vr(n);return a==="Io"?t.ordinalNumber(e,{unit:"week"}):K(e,a.length)},d:function(n,a,t){return a==="do"?t.ordinalNumber(n.getDate(),{unit:"date"}):Oe.d(n,a)},D:function(n,a,t){const e=Za(n);return a==="Do"?t.ordinalNumber(e,{unit:"dayOfYear"}):K(e,a.length)},E:function(n,a,t){const e=n.getDay();switch(a){case"E":case"EE":case"EEE":return t.day(e,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(e,{width:"short",context:"formatting"});case"EEEE":default:return t.day(e,{width:"wide",context:"formatting"})}},e:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"e":return String(o);case"ee":return K(o,2);case"eo":return t.ordinalNumber(o,{unit:"day"});case"eee":return t.day(r,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(r,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(r,{width:"short",context:"formatting"});case"eeee":default:return t.day(r,{width:"wide",context:"formatting"})}},c:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"c":return String(o);case"cc":return K(o,a.length);case"co":return t.ordinalNumber(o,{unit:"day"});case"ccc":return t.day(r,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(r,{width:"narrow",context:"standalone"});case"cccccc":return t.day(r,{width:"short",context:"standalone"});case"cccc":default:return t.day(r,{width:"wide",context:"standalone"})}},i:function(n,a,t){const e=n.getDay(),r=e===0?7:e;switch(a){case"i":return String(r);case"ii":return K(r,a.length);case"io":return t.ordinalNumber(r,{unit:"day"});case"iii":return t.day(e,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(e,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(e,{width:"short",context:"formatting"});case"iiii":default:return t.day(e,{width:"wide",context:"formatting"})}},a:function(n,a,t){const r=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(n,a,t){const e=n.getHours();let r;switch(e===12?r=$e.noon:e===0?r=$e.midnight:r=e/12>=1?"pm":"am",a){case"b":case"bb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(n,a,t){const e=n.getHours();let r;switch(e>=17?r=$e.evening:e>=12?r=$e.afternoon:e>=4?r=$e.morning:r=$e.night,a){case"B":case"BB":case"BBB":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(n,a,t){if(a==="ho"){let e=n.getHours()%12;return e===0&&(e=12),t.ordinalNumber(e,{unit:"hour"})}return Oe.h(n,a)},H:function(n,a,t){return a==="Ho"?t.ordinalNumber(n.getHours(),{unit:"hour"}):Oe.H(n,a)},K:function(n,a,t){const e=n.getHours()%12;return a==="Ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},k:function(n,a,t){let e=n.getHours();return e===0&&(e=24),a==="ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},m:function(n,a,t){return a==="mo"?t.ordinalNumber(n.getMinutes(),{unit:"minute"}):Oe.m(n,a)},s:function(n,a,t){return a==="so"?t.ordinalNumber(n.getSeconds(),{unit:"second"}):Oe.s(n,a)},S:function(n,a){return Oe.S(n,a)},X:function(n,a,t){const e=n.getTimezoneOffset();if(e===0)return"Z";switch(a){case"X":return Ir(e);case"XXXX":case"XX":return Ie(e);case"XXXXX":case"XXX":default:return Ie(e,":")}},x:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"x":return Ir(e);case"xxxx":case"xx":return Ie(e);case"xxxxx":case"xxx":default:return Ie(e,":")}},O:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"O":case"OO":case"OOO":return"GMT"+Fr(e,":");case"OOOO":default:return"GMT"+Ie(e,":")}},z:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"z":case"zz":case"zzz":return"GMT"+Fr(e,":");case"zzzz":default:return"GMT"+Ie(e,":")}},t:function(n,a,t){const e=Math.trunc(+n/1e3);return K(e,a.length)},T:function(n,a,t){return K(+n,a.length)}};function Fr(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=Math.trunc(e/60),o=e%60;return o===0?t+String(r):t+String(r)+a+K(o,2)}function Ir(n,a){return n%60===0?(n>0?"-":"+")+K(Math.abs(n)/60,2):Ie(n,a)}function Ie(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=K(Math.trunc(e/60),2),o=K(e%60,2);return t+r+a+o}const Ar=(n,a)=>{switch(n){case"P":return a.date({width:"short"});case"PP":return a.date({width:"medium"});case"PPP":return a.date({width:"long"});case"PPPP":default:return a.date({width:"full"})}},Tn=(n,a)=>{switch(n){case"p":return a.time({width:"short"});case"pp":return a.time({width:"medium"});case"ppp":return a.time({width:"long"});case"pppp":default:return a.time({width:"full"})}},eo=(n,a)=>{const t=n.match(/(P+)(p+)?/)||[],e=t[1],r=t[2];if(!r)return Ar(n,a);let o;switch(e){case"P":o=a.dateTime({width:"short"});break;case"PP":o=a.dateTime({width:"medium"});break;case"PPP":o=a.dateTime({width:"long"});break;case"PPPP":default:o=a.dateTime({width:"full"});break}return o.replace("{{date}}",Ar(e,a)).replace("{{time}}",Tn(r,a))},dr={p:Tn,P:eo},to=/^D+$/,ro=/^Y+$/,no=["D","DD","YY","YYYY"];function ao(n){return to.test(n)}function oo(n){return ro.test(n)}function so(n,a,t){const e=io(n,a,t);if(console.warn(e),no.includes(n))throw new RangeError(e)}function io(n,a,t){const e=n[0]==="Y"?"years":"days of the month";return`Use \`${n.toLowerCase()}\` instead of \`${n}\` (in \`${a}\`) for formatting ${e} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const co=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,lo=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,uo=/^'([^]*?)'?$/,fo=/''/g,po=/[a-zA-Z]/;function Wr(n,a,t){var u,d,f,p,h,v,g,D;const e=Ke(),r=(t==null?void 0:t.locale)??e.locale??En,o=(t==null?void 0:t.firstWeekContainsDate)??((d=(u=t==null?void 0:t.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??e.firstWeekContainsDate??((p=(f=e.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,s=(t==null?void 0:t.weekStartsOn)??((v=(h=t==null?void 0:t.locale)==null?void 0:h.options)==null?void 0:v.weekStartsOn)??e.weekStartsOn??((D=(g=e.locale)==null?void 0:g.options)==null?void 0:D.weekStartsOn)??0,i=P(n,t==null?void 0:t.in);if(!Yt(i))throw new RangeError("Invalid time value");let c=a.match(lo).map(_=>{const y=_[0];if(y==="p"||y==="P"){const k=dr[y];return k(_,r.formatLong)}return _}).join("").match(co).map(_=>{if(_==="''")return{isToken:!1,value:"'"};const y=_[0];if(y==="'")return{isToken:!1,value:ho(_)};if(Lr[y])return{isToken:!0,value:_};if(y.match(po))throw new RangeError("Format string contains an unescaped latin alphabet character `"+y+"`");return{isToken:!1,value:_}});r.localize.preprocessor&&(c=r.localize.preprocessor(i,c));const l={firstWeekContainsDate:o,weekStartsOn:s,locale:r};return c.map(_=>{if(!_.isToken)return _.value;const y=_.value;(!(t!=null&&t.useAdditionalWeekYearTokens)&&oo(y)||!(t!=null&&t.useAdditionalDayOfYearTokens)&&ao(y))&&so(y,a,String(n));const k=Lr[y[0]];return k(i,y,r.localize,l)}).join("")}function ho(n){const a=n.match(uo);return a?a[1].replace(fo,"'"):n}function Hr(n,a){return P(n,a==null?void 0:a.in).getDate()}function mo(n,a){return P(n,a==null?void 0:a.in).getDay()}function go(n,a){const t=P(n,a==null?void 0:a.in),e=t.getFullYear(),r=t.getMonth(),o=$(t,0);return o.setFullYear(e,r+1,0),o.setHours(0,0,0,0),o.getDate()}function vo(){return Object.assign({},Ke())}function Ce(n,a){return P(n,a==null?void 0:a.in).getHours()}function wo(n,a){const t=P(n,a==null?void 0:a.in).getDay();return t===0?7:t}function Se(n,a){return P(n,a==null?void 0:a.in).getMinutes()}function ne(n,a){return P(n,a==null?void 0:a.in).getMonth()}function Re(n){return P(n).getSeconds()}function fr(n){return+P(n)}function L(n,a){return P(n,a==null?void 0:a.in).getFullYear()}function Le(n,a){return+P(n)>+P(a)}function Ve(n,a){return+P(n)<+P(a)}function yo(n,a){return+P(n)==+P(a)}function Do(n,a){const t=bo(a)?new a(0):$(a,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t.setHours(n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()),t}function bo(n){var a;return typeof n=="function"&&((a=n.prototype)==null?void 0:a.constructor)===n}const ko=10;class On{constructor(){C(this,"subPriority",0)}validate(a,t){return!0}}class xo extends On{constructor(a,t,e,r,o){super(),this.value=a,this.validateValue=t,this.setValue=e,this.priority=r,o&&(this.subPriority=o)}validate(a,t){return this.validateValue(a,this.value,t)}set(a,t,e){return this.setValue(a,t,this.value,e)}}class _o extends On{constructor(t,e){super();C(this,"priority",ko);C(this,"subPriority",-1);this.context=t||(r=>$(e,r))}set(t,e){return e.timestampIsSet?t:$(t,Do(t,this.context))}}class j{run(a,t,e,r){const o=this.parse(a,t,e,r);return o?{setter:new xo(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(a,t,e){return!0}}class Mo extends j{constructor(){super(...arguments);C(this,"priority",140);C(this,"incompatibleTokens",["R","u","t","T"])}parse(t,e,r){switch(e){case"G":case"GG":case"GGG":return r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"});case"GGGGG":return r.era(t,{width:"narrow"});case"GGGG":default:return r.era(t,{width:"wide"})||r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"})}}set(t,e,r){return e.era=r,t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}const Z={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},ve={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function J(n,a){return n&&{value:a(n.value),rest:n.rest}}function G(n,a){const t=a.match(n);return t?{value:parseInt(t[0],10),rest:a.slice(t[0].length)}:null}function we(n,a){const t=a.match(n);if(!t)return null;if(t[0]==="Z")return{value:0,rest:a.slice(1)};const e=t[1]==="+"?1:-1,r=t[2]?parseInt(t[2],10):0,o=t[3]?parseInt(t[3],10):0,s=t[5]?parseInt(t[5],10):0;return{value:e*(r*Kt+o*qt+s*fa),rest:a.slice(t[0].length)}}function Nn(n){return G(Z.anyDigitsSigned,n)}function X(n,a){switch(n){case 1:return G(Z.singleDigit,a);case 2:return G(Z.twoDigits,a);case 3:return G(Z.threeDigits,a);case 4:return G(Z.fourDigits,a);default:return G(new RegExp("^\\d{1,"+n+"}"),a)}}function At(n,a){switch(n){case 1:return G(Z.singleDigitSigned,a);case 2:return G(Z.twoDigitsSigned,a);case 3:return G(Z.threeDigitsSigned,a);case 4:return G(Z.fourDigitsSigned,a);default:return G(new RegExp("^-?\\d{1,"+n+"}"),a)}}function yr(n){switch(n){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function Rn(n,a){const t=a>0,e=t?a:1-a;let r;if(e<=50)r=n||100;else{const o=e+50,s=Math.trunc(o/100)*100,i=n>=o%100;r=n+s-(i?100:0)}return t?r:1-r}function Yn(n){return n%400===0||n%4===0&&n%100!==0}class Co extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(t,e,r){const o=s=>({year:s,isTwoDigitYear:e==="yy"});switch(e){case"y":return J(X(4,t),o);case"yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r){const o=t.getFullYear();if(r.isTwoDigitYear){const i=Rn(r.year,o);return t.setFullYear(i,0,1),t.setHours(0,0,0,0),t}const s=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(s,0,1),t.setHours(0,0,0,0),t}}class So extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(t,e,r){const o=s=>({year:s,isTwoDigitYear:e==="YY"});switch(e){case"Y":return J(X(4,t),o);case"Yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r,o){const s=wr(t,o);if(r.isTwoDigitYear){const c=Rn(r.year,s);return t.setFullYear(c,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Pe(t,o)}const i=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(i,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Pe(t,o)}}class Eo extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(t,e){return At(e==="R"?4:e.length,t)}set(t,e,r){const o=$(t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),Xe(o)}}class Po extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(t,e){return At(e==="u"?4:e.length,t)}set(t,e,r){return t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}class To extends j{constructor(){super(...arguments);C(this,"priority",120);C(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"Q":case"QQ":return X(e.length,t);case"Qo":return r.ordinalNumber(t,{unit:"quarter"});case"QQQ":return r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQ":default:return r.quarter(t,{width:"wide",context:"formatting"})||r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class Oo extends j{constructor(){super(...arguments);C(this,"priority",120);C(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"q":case"qq":return X(e.length,t);case"qo":return r.ordinalNumber(t,{unit:"quarter"});case"qqq":return r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(t,{width:"narrow",context:"standalone"});case"qqqq":default:return r.quarter(t,{width:"wide",context:"standalone"})||r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class No extends j{constructor(){super(...arguments);C(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]);C(this,"priority",110)}parse(t,e,r){const o=s=>s-1;switch(e){case"M":return J(G(Z.month,t),o);case"MM":return J(X(2,t),o);case"Mo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"MMM":return r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(t,{width:"narrow",context:"formatting"});case"MMMM":default:return r.month(t,{width:"wide",context:"formatting"})||r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}class Ro extends j{constructor(){super(...arguments);C(this,"priority",110);C(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(t,e,r){const o=s=>s-1;switch(e){case"L":return J(G(Z.month,t),o);case"LL":return J(X(2,t),o);case"Lo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"LLL":return r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(t,{width:"narrow",context:"standalone"});case"LLLL":default:return r.month(t,{width:"wide",context:"standalone"})||r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}function Yo(n,a,t){const e=P(n,t==null?void 0:t.in),r=Pn(e,t)-a;return e.setDate(e.getDate()-r*7),P(e,t==null?void 0:t.in)}class Lo extends j{constructor(){super(...arguments);C(this,"priority",100);C(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(t,e,r){switch(e){case"w":return G(Z.week,t);case"wo":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r,o){return Pe(Yo(t,r,o),o)}}function Fo(n,a,t){const e=P(n,t==null?void 0:t.in),r=vr(e,t)-a;return e.setDate(e.getDate()-r*7),e}class Io extends j{constructor(){super(...arguments);C(this,"priority",100);C(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(t,e,r){switch(e){case"I":return G(Z.week,t);case"Io":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r){return Xe(Fo(t,r))}}const Ao=[31,28,31,30,31,30,31,31,30,31,30,31],Wo=[31,29,31,30,31,30,31,31,30,31,30,31];class Ho extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"subPriority",1);C(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"d":return G(Z.date,t);case"do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear(),o=Yn(r),s=t.getMonth();return o?e>=1&&e<=Wo[s]:e>=1&&e<=Ao[s]}set(t,e,r){return t.setDate(r),t.setHours(0,0,0,0),t}}class jo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"subpriority",1);C(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(t,e,r){switch(e){case"D":case"DD":return G(Z.dayOfYear,t);case"Do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear();return Yn(r)?e>=1&&e<=366:e>=1&&e<=365}set(t,e,r){return t.setMonth(0,r),t.setHours(0,0,0,0),t}}function Dr(n,a,t){var d,f,p,h;const e=Ke(),r=(t==null?void 0:t.weekStartsOn)??((f=(d=t==null?void 0:t.locale)==null?void 0:d.options)==null?void 0:f.weekStartsOn)??e.weekStartsOn??((h=(p=e.locale)==null?void 0:p.options)==null?void 0:h.weekStartsOn)??0,o=P(n,t==null?void 0:t.in),s=o.getDay(),c=(a%7+7)%7,l=7-r,u=a<0||a>6?a-(s+l)%7:(c+l)%7-(s+l)%7;return pe(o,u,t)}class Bo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"E":case"EE":case"EEE":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEE":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Qo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(t,e,r,o){const s=i=>{const c=Math.floor((i-1)/7)*7;return(i+o.weekStartsOn+6)%7+c};switch(e){case"e":case"ee":return J(X(e.length,t),s);case"eo":return J(r.ordinalNumber(t,{unit:"day"}),s);case"eee":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeeee":return r.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeee":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Vo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(t,e,r,o){const s=i=>{const c=Math.floor((i-1)/7)*7;return(i+o.weekStartsOn+6)%7+c};switch(e){case"c":case"cc":return J(X(e.length,t),s);case"co":return J(r.ordinalNumber(t,{unit:"day"}),s);case"ccc":return r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"ccccc":return r.day(t,{width:"narrow",context:"standalone"});case"cccccc":return r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"cccc":default:return r.day(t,{width:"wide",context:"standalone"})||r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}function qo(n,a,t){const e=P(n,t==null?void 0:t.in),r=wo(e,t),o=a-r;return pe(e,o,t)}class Ko extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(t,e,r){const o=s=>s===0?7:s;switch(e){case"i":case"ii":return X(e.length,t);case"io":return r.ordinalNumber(t,{unit:"day"});case"iii":return J(r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiii":return J(r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiiii":return J(r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiii":default:return J(r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o)}}validate(t,e){return e>=1&&e<=7}set(t,e,r){return t=qo(t,r),t.setHours(0,0,0,0),t}}class $o extends j{constructor(){super(...arguments);C(this,"priority",80);C(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(t,e,r){switch(e){case"a":case"aa":case"aaa":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaaa":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaa":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(yr(r),0,0,0),t}}class Uo extends j{constructor(){super(...arguments);C(this,"priority",80);C(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(t,e,r){switch(e){case"b":case"bb":case"bbb":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbbb":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbb":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(yr(r),0,0,0),t}}class zo extends j{constructor(){super(...arguments);C(this,"priority",80);C(this,"incompatibleTokens",["a","b","t","T"])}parse(t,e,r){switch(e){case"B":case"BB":case"BBB":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBBB":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBB":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(yr(r),0,0,0),t}}class Go extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["H","K","k","t","T"])}parse(t,e,r){switch(e){case"h":return G(Z.hour12h,t);case"ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=12}set(t,e,r){const o=t.getHours()>=12;return o&&r<12?t.setHours(r+12,0,0,0):!o&&r===12?t.setHours(0,0,0,0):t.setHours(r,0,0,0),t}}class Xo extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(t,e,r){switch(e){case"H":return G(Z.hour23h,t);case"Ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=23}set(t,e,r){return t.setHours(r,0,0,0),t}}class Zo extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["h","H","k","t","T"])}parse(t,e,r){switch(e){case"K":return G(Z.hour11h,t);case"Ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.getHours()>=12&&r<12?t.setHours(r+12,0,0,0):t.setHours(r,0,0,0),t}}class Jo extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(t,e,r){switch(e){case"k":return G(Z.hour24h,t);case"ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=24}set(t,e,r){const o=r<=24?r%24:r;return t.setHours(o,0,0,0),t}}class es extends j{constructor(){super(...arguments);C(this,"priority",60);C(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"m":return G(Z.minute,t);case"mo":return r.ordinalNumber(t,{unit:"minute"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setMinutes(r,0,0),t}}class ts extends j{constructor(){super(...arguments);C(this,"priority",50);C(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"s":return G(Z.second,t);case"so":return r.ordinalNumber(t,{unit:"second"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setSeconds(r,0),t}}class rs extends j{constructor(){super(...arguments);C(this,"priority",30);C(this,"incompatibleTokens",["t","T"])}parse(t,e){const r=o=>Math.trunc(o*Math.pow(10,-e.length+3));return J(X(e.length,t),r)}set(t,e,r){return t.setMilliseconds(r),t}}class ns extends j{constructor(){super(...arguments);C(this,"priority",10);C(this,"incompatibleTokens",["t","T","x"])}parse(t,e){switch(e){case"X":return we(ve.basicOptionalMinutes,t);case"XX":return we(ve.basic,t);case"XXXX":return we(ve.basicOptionalSeconds,t);case"XXXXX":return we(ve.extendedOptionalSeconds,t);case"XXX":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:$(t,t.getTime()-Nt(t)-r)}}class as extends j{constructor(){super(...arguments);C(this,"priority",10);C(this,"incompatibleTokens",["t","T","X"])}parse(t,e){switch(e){case"x":return we(ve.basicOptionalMinutes,t);case"xx":return we(ve.basic,t);case"xxxx":return we(ve.basicOptionalSeconds,t);case"xxxxx":return we(ve.extendedOptionalSeconds,t);case"xxx":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:$(t,t.getTime()-Nt(t)-r)}}class os extends j{constructor(){super(...arguments);C(this,"priority",40);C(this,"incompatibleTokens","*")}parse(t){return Nn(t)}set(t,e,r){return[$(t,r*1e3),{timestampIsSet:!0}]}}class ss extends j{constructor(){super(...arguments);C(this,"priority",20);C(this,"incompatibleTokens","*")}parse(t){return Nn(t)}set(t,e,r){return[$(t,r),{timestampIsSet:!0}]}}const is={G:new Mo,y:new Co,Y:new So,R:new Eo,u:new Po,Q:new To,q:new Oo,M:new No,L:new Ro,w:new Lo,I:new Io,d:new Ho,D:new jo,E:new Bo,e:new Qo,c:new Vo,i:new Ko,a:new $o,b:new Uo,B:new zo,h:new Go,H:new Xo,K:new Zo,k:new Jo,m:new es,s:new ts,S:new rs,X:new ns,x:new as,t:new os,T:new ss},cs=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,ls=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,us=/^'([^]*?)'?$/,ds=/''/g,fs=/\S/,ps=/[a-zA-Z]/;function hs(n,a,t,e){var g,D,_,y,k,T,O,S;const r=()=>$((e==null?void 0:e.in)||t,NaN),o=vo(),s=(e==null?void 0:e.locale)??o.locale??En,i=(e==null?void 0:e.firstWeekContainsDate)??((D=(g=e==null?void 0:e.locale)==null?void 0:g.options)==null?void 0:D.firstWeekContainsDate)??o.firstWeekContainsDate??((y=(_=o.locale)==null?void 0:_.options)==null?void 0:y.firstWeekContainsDate)??1,c=(e==null?void 0:e.weekStartsOn)??((T=(k=e==null?void 0:e.locale)==null?void 0:k.options)==null?void 0:T.weekStartsOn)??o.weekStartsOn??((S=(O=o.locale)==null?void 0:O.options)==null?void 0:S.weekStartsOn)??0;if(!a)return n?r():P(t,e==null?void 0:e.in);const l={firstWeekContainsDate:i,weekStartsOn:c,locale:s},u=[new _o(e==null?void 0:e.in,t)],d=a.match(ls).map(x=>{const E=x[0];if(E in dr){const R=dr[E];return R(x,s.formatLong)}return x}).join("").match(cs),f=[];for(let x of d){const E=x[0],R=is[E];if(R){const{incompatibleTokens:B}=R;if(Array.isArray(B)){const U=f.find(Q=>B.includes(Q.token)||Q.token===E);if(U)throw new RangeError(`The format string mustn't contain \`${U.fullToken}\` and \`${x}\` at the same time`)}else if(R.incompatibleTokens==="*"&&f.length>0)throw new RangeError(`The format string mustn't contain \`${x}\` and any other token at the same time`);f.push({token:E,fullToken:x});const I=R.run(n,x,s.match,l);if(!I)return r();u.push(I.setter),n=I.rest}else{if(E.match(ps))throw new RangeError("Format string contains an unescaped latin alphabet character `"+E+"`");if(x==="''"?x="'":E==="'"&&(x=ms(x)),n.indexOf(x)===0)n=n.slice(x.length);else return r()}}if(n.length>0&&fs.test(n))return r();const p=u.map(x=>x.priority).sort((x,E)=>E-x).filter((x,E,R)=>R.indexOf(x)===E).map(x=>u.filter(E=>E.priority===x).sort((E,R)=>R.subPriority-E.subPriority)).map(x=>x[0]);let h=P(t,e==null?void 0:e.in);if(isNaN(+h))return r();const v={};for(const x of p){if(!x.validate(h,l))return r();const E=x.set(h,v,l);Array.isArray(E)?(h=E[0],Object.assign(v,E[1])):h=E}return h}function ms(n){return n.match(us)[1].replace(ds,"'")}function gs(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()&&e.getMonth()===r.getMonth()}function vs(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return+ur(e)==+ur(r)}function ws(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()}function dt(n,a,t){const e=+P(n,t==null?void 0:t.in),[r,o]=[+P(a.start,t==null?void 0:t.in),+P(a.end,t==null?void 0:t.in)].sort((s,i)=>s-i);return e>=r&&e<=o}function ys(n,a,t){return pe(n,-1,t)}function Ds(n,a){const t=()=>$(a==null?void 0:a.in,NaN),r=_s(n);let o;if(r.date){const l=Ms(r.date,2);o=Cs(l.restDateString,l.year)}if(!o||isNaN(+o))return t();const s=+o;let i=0,c;if(r.time&&(i=Ss(r.time),isNaN(i)))return t();if(r.timezone){if(c=Es(r.timezone),isNaN(c))return t()}else{const l=new Date(s+i),u=P(0,a==null?void 0:a.in);return u.setFullYear(l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate()),u.setHours(l.getUTCHours(),l.getUTCMinutes(),l.getUTCSeconds(),l.getUTCMilliseconds()),u}return P(s+i+c,a==null?void 0:a.in)}const wt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},bs=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,ks=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,xs=/^([+-])(\d{2})(?::?(\d{2}))?$/;function _s(n){const a={},t=n.split(wt.dateTimeDelimiter);let e;if(t.length>2)return a;if(/:/.test(t[0])?e=t[0]:(a.date=t[0],e=t[1],wt.timeZoneDelimiter.test(a.date)&&(a.date=n.split(wt.timeZoneDelimiter)[0],e=n.substr(a.date.length,n.length))),e){const r=wt.timezone.exec(e);r?(a.time=e.replace(r[1],""),a.timezone=r[1]):a.time=e}return a}function Ms(n,a){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+a)+"})|(\\d{2}|[+-]\\d{"+(2+a)+"})$)"),e=n.match(t);if(!e)return{year:NaN,restDateString:""};const r=e[1]?parseInt(e[1]):null,o=e[2]?parseInt(e[2]):null;return{year:o===null?r:o*100,restDateString:n.slice((e[1]||e[2]).length)}}function Cs(n,a){if(a===null)return new Date(NaN);const t=n.match(bs);if(!t)return new Date(NaN);const e=!!t[4],r=it(t[1]),o=it(t[2])-1,s=it(t[3]),i=it(t[4]),c=it(t[5])-1;if(e)return Rs(a,i,c)?Ps(a,i,c):new Date(NaN);{const l=new Date(0);return!Os(a,o,s)||!Ns(a,r)?new Date(NaN):(l.setUTCFullYear(a,o,Math.max(r,s)),l)}}function it(n){return n?parseInt(n):1}function Ss(n){const a=n.match(ks);if(!a)return NaN;const t=tr(a[1]),e=tr(a[2]),r=tr(a[3]);return Ys(t,e,r)?t*Kt+e*qt+r*1e3:NaN}function tr(n){return n&&parseFloat(n.replace(",","."))||0}function Es(n){if(n==="Z")return 0;const a=n.match(xs);if(!a)return 0;const t=a[1]==="+"?-1:1,e=parseInt(a[2]),r=a[3]&&parseInt(a[3])||0;return Ls(e,r)?t*(e*Kt+r*qt):NaN}function Ps(n,a,t){const e=new Date(0);e.setUTCFullYear(n,0,4);const r=e.getUTCDay()||7,o=(a-1)*7+t+1-r;return e.setUTCDate(e.getUTCDate()+o),e}const Ts=[31,null,31,30,31,30,31,31,30,31,30,31];function Ln(n){return n%400===0||n%4===0&&n%100!==0}function Os(n,a,t){return a>=0&&a<=11&&t>=1&&t<=(Ts[a]||(Ln(n)?29:28))}function Ns(n,a){return a>=1&&a<=(Ln(n)?366:365)}function Rs(n,a,t){return a>=1&&a<=53&&t>=0&&t<=6}function Ys(n,a,t){return n===24?a===0&&t===0:t>=0&&t<60&&a>=0&&a<60&&n>=0&&n<25}function Ls(n,a){return a>=0&&a<=59}function ce(n,a,t){const e=P(n,t==null?void 0:t.in),r=e.getFullYear(),o=e.getDate(),s=$(n,0);s.setFullYear(r,a,15),s.setHours(0,0,0,0);const i=go(s);return e.setMonth(a,Math.min(o,i)),e}function Mt(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setHours(a),e}function Ct(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setMinutes(a),e}function Ue(n,a,t){const e=P(n,t==null?void 0:t.in),r=Math.trunc(e.getMonth()/3)+1,o=a-r;return ce(e,e.getMonth()+o*3)}function St(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setSeconds(a),e}function me(n,a,t){const e=P(n,t==null?void 0:t.in);return isNaN(+e)?$(n,NaN):(e.setFullYear(a),e)}function je(n,a,t){return he(n,-a,t)}function Fn(n,a,t){return gr(n,-1,t)}function jr(n,a,t){return Rt(n,-1,t)}function Je(n,a,t){return _e(n,-a,t)}function Ut(){return typeof window<"u"}function at(n){return In(n)?(n.nodeName||"").toLowerCase():"#document"}function se(n){var a;return(n==null||(a=n.ownerDocument)==null?void 0:a.defaultView)||window}function ke(n){var a;return(a=(In(n)?n.ownerDocument:n.document)||window.document)==null?void 0:a.documentElement}function In(n){return Ut()?n instanceof Node||n instanceof se(n).Node:!1}function oe(n){return Ut()?n instanceof Element||n instanceof se(n).Element:!1}function be(n){return Ut()?n instanceof HTMLElement||n instanceof se(n).HTMLElement:!1}function Br(n){return!Ut()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof se(n).ShadowRoot}const Fs=new Set(["inline","contents"]);function ht(n){const{overflow:a,overflowX:t,overflowY:e,display:r}=ue(n);return/auto|scroll|overlay|hidden|clip/.test(a+e+t)&&!Fs.has(r)}const Is=new Set(["table","td","th"]);function As(n){return Is.has(at(n))}const Ws=[":popover-open",":modal"];function zt(n){return Ws.some(a=>{try{return n.matches(a)}catch{return!1}})}const Hs=["transform","translate","scale","rotate","perspective"],js=["transform","translate","scale","rotate","perspective","filter"],Bs=["paint","layout","strict","content"];function br(n){const a=kr(),t=oe(n)?ue(n):n;return Hs.some(e=>t[e]?t[e]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!a&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!a&&(t.filter?t.filter!=="none":!1)||js.some(e=>(t.willChange||"").includes(e))||Bs.some(e=>(t.contain||"").includes(e))}function Qs(n){let a=Fe(n);for(;be(a)&&!et(a);){if(br(a))return a;if(zt(a))return null;a=Fe(a)}return null}function kr(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Vs=new Set(["html","body","#document"]);function et(n){return Vs.has(at(n))}function ue(n){return se(n).getComputedStyle(n)}function Gt(n){return oe(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function Fe(n){if(at(n)==="html")return n;const a=n.assignedSlot||n.parentNode||Br(n)&&n.host||ke(n);return Br(a)?a.host:a}function An(n){const a=Fe(n);return et(a)?n.ownerDocument?n.ownerDocument.body:n.body:be(a)&&ht(a)?a:An(a)}function ft(n,a,t){var e;a===void 0&&(a=[]),t===void 0&&(t=!0);const r=An(n),o=r===((e=n.ownerDocument)==null?void 0:e.body),s=se(r);if(o){const i=pr(s);return a.concat(s,s.visualViewport||[],ht(r)?r:[],i&&t?ft(i):[])}return a.concat(r,ft(r,[],t))}function pr(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}const tt=Math.min,Be=Math.max,Wt=Math.round,yt=Math.floor,De=n=>({x:n,y:n}),qs={left:"right",right:"left",bottom:"top",top:"bottom"},Ks={start:"end",end:"start"};function $s(n,a,t){return Be(n,tt(a,t))}function Xt(n,a){return typeof n=="function"?n(a):n}function rt(n){return n.split("-")[0]}function mt(n){return n.split("-")[1]}function Us(n){return n==="x"?"y":"x"}function xr(n){return n==="y"?"height":"width"}const zs=new Set(["top","bottom"]);function Ae(n){return zs.has(rt(n))?"y":"x"}function _r(n){return Us(Ae(n))}function Gs(n,a,t){t===void 0&&(t=!1);const e=mt(n),r=_r(n),o=xr(r);let s=r==="x"?e===(t?"end":"start")?"right":"left":e==="start"?"bottom":"top";return a.reference[o]>a.floating[o]&&(s=Ht(s)),[s,Ht(s)]}function Xs(n){const a=Ht(n);return[hr(n),a,hr(a)]}function hr(n){return n.replace(/start|end/g,a=>Ks[a])}const Qr=["left","right"],Vr=["right","left"],Zs=["top","bottom"],Js=["bottom","top"];function ei(n,a,t){switch(n){case"top":case"bottom":return t?a?Vr:Qr:a?Qr:Vr;case"left":case"right":return a?Zs:Js;default:return[]}}function ti(n,a,t,e){const r=mt(n);let o=ei(rt(n),t==="start",e);return r&&(o=o.map(s=>s+"-"+r),a&&(o=o.concat(o.map(hr)))),o}function Ht(n){return n.replace(/left|right|bottom|top/g,a=>qs[a])}function ri(n){return{top:0,right:0,bottom:0,left:0,...n}}function Wn(n){return typeof n!="number"?ri(n):{top:n,right:n,bottom:n,left:n}}function jt(n){const{x:a,y:t,width:e,height:r}=n;return{width:e,height:r,top:t,left:a,right:a+e,bottom:t+r,x:a,y:t}}var ni=typeof document<"u",ai=function(){},Bt=ni?w.useLayoutEffect:ai;const oi={...Dn},si=oi.useInsertionEffect,ii=si||(n=>n());function ci(n){const a=w.useRef(()=>{});return ii(()=>{a.current=n}),w.useCallback(function(){for(var t=arguments.length,e=new Array(t),r=0;r{const{placement:e="bottom",strategy:r="absolute",middleware:o=[],platform:s}=t,i=o.filter(Boolean),c=await(s.isRTL==null?void 0:s.isRTL(a));let l=await s.getElementRects({reference:n,floating:a,strategy:r}),{x:u,y:d}=qr(l,e,c),f=e,p={},h=0;for(let v=0;v({name:"arrow",options:n,async fn(a){const{x:t,y:e,placement:r,rects:o,platform:s,elements:i,middlewareData:c}=a,{element:l,padding:u=0}=Xt(n,a)||{};if(l==null)return{};const d=Wn(u),f={x:t,y:e},p=_r(r),h=xr(p),v=await s.getDimensions(l),g=p==="y",D=g?"top":"left",_=g?"bottom":"right",y=g?"clientHeight":"clientWidth",k=o.reference[h]+o.reference[p]-f[p]-o.floating[h],T=f[p]-o.reference[p],O=await(s.getOffsetParent==null?void 0:s.getOffsetParent(l));let S=O?O[y]:0;(!S||!await(s.isElement==null?void 0:s.isElement(O)))&&(S=i.floating[y]||o.floating[h]);const x=k/2-T/2,E=S/2-v[h]/2-1,R=tt(d[D],E),B=tt(d[_],E),I=R,U=S-v[h]-B,Q=S/2-v[h]/2+x,q=$s(I,Q,U),N=!c.arrow&&mt(r)!=null&&Q!==q&&o.reference[h]/2-(QQ<=0)){var B,I;const Q=(((B=o.flip)==null?void 0:B.index)||0)+1,q=S[Q];if(q&&(!(d==="alignment"?_!==Ae(q):!1)||R.every(Y=>Y.overflows[0]>0&&Ae(Y.placement)===_)))return{data:{index:Q,overflows:R},reset:{placement:q}};let N=(I=R.filter(F=>F.overflows[0]<=0).sort((F,Y)=>F.overflows[1]-Y.overflows[1])[0])==null?void 0:I.placement;if(!N)switch(p){case"bestFit":{var U;const F=(U=R.filter(Y=>{if(O){const ee=Ae(Y.placement);return ee===_||ee==="y"}return!0}).map(Y=>[Y.placement,Y.overflows.filter(ee=>ee>0).reduce((ee,de)=>ee+de,0)]).sort((Y,ee)=>Y[1]-ee[1])[0])==null?void 0:U[0];F&&(N=F);break}case"initialPlacement":N=i;break}if(r!==N)return{reset:{placement:N}}}return{}}}},pi=new Set(["left","top"]);async function hi(n,a){const{placement:t,platform:e,elements:r}=n,o=await(e.isRTL==null?void 0:e.isRTL(r.floating)),s=rt(t),i=mt(t),c=Ae(t)==="y",l=pi.has(s)?-1:1,u=o&&c?-1:1,d=Xt(a,n);let{mainAxis:f,crossAxis:p,alignmentAxis:h}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return i&&typeof h=="number"&&(p=i==="end"?h*-1:h),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}const mi=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(a){var t,e;const{x:r,y:o,placement:s,middlewareData:i}=a,c=await hi(a,n);return s===((t=i.offset)==null?void 0:t.placement)&&(e=i.arrow)!=null&&e.alignmentOffset?{}:{x:r+c.x,y:o+c.y,data:{...c,placement:s}}}}};function Hn(n){const a=ue(n);let t=parseFloat(a.width)||0,e=parseFloat(a.height)||0;const r=be(n),o=r?n.offsetWidth:t,s=r?n.offsetHeight:e,i=Wt(t)!==o||Wt(e)!==s;return i&&(t=o,e=s),{width:t,height:e,$:i}}function Mr(n){return oe(n)?n:n.contextElement}function ze(n){const a=Mr(n);if(!be(a))return De(1);const t=a.getBoundingClientRect(),{width:e,height:r,$:o}=Hn(a);let s=(o?Wt(t.width):t.width)/e,i=(o?Wt(t.height):t.height)/r;return(!s||!Number.isFinite(s))&&(s=1),(!i||!Number.isFinite(i))&&(i=1),{x:s,y:i}}const gi=De(0);function jn(n){const a=se(n);return!kr()||!a.visualViewport?gi:{x:a.visualViewport.offsetLeft,y:a.visualViewport.offsetTop}}function vi(n,a,t){return a===void 0&&(a=!1),!t||a&&t!==se(n)?!1:a}function qe(n,a,t,e){a===void 0&&(a=!1),t===void 0&&(t=!1);const r=n.getBoundingClientRect(),o=Mr(n);let s=De(1);a&&(e?oe(e)&&(s=ze(e)):s=ze(n));const i=vi(o,t,e)?jn(o):De(0);let c=(r.left+i.x)/s.x,l=(r.top+i.y)/s.y,u=r.width/s.x,d=r.height/s.y;if(o){const f=se(o),p=e&&oe(e)?se(e):e;let h=f,v=pr(h);for(;v&&e&&p!==h;){const g=ze(v),D=v.getBoundingClientRect(),_=ue(v),y=D.left+(v.clientLeft+parseFloat(_.paddingLeft))*g.x,k=D.top+(v.clientTop+parseFloat(_.paddingTop))*g.y;c*=g.x,l*=g.y,u*=g.x,d*=g.y,c+=y,l+=k,h=se(v),v=pr(h)}}return jt({width:u,height:d,x:c,y:l})}function Cr(n,a){const t=Gt(n).scrollLeft;return a?a.left+t:qe(ke(n)).left+t}function Bn(n,a,t){t===void 0&&(t=!1);const e=n.getBoundingClientRect(),r=e.left+a.scrollLeft-(t?0:Cr(n,e)),o=e.top+a.scrollTop;return{x:r,y:o}}function wi(n){let{elements:a,rect:t,offsetParent:e,strategy:r}=n;const o=r==="fixed",s=ke(e),i=a?zt(a.floating):!1;if(e===s||i&&o)return t;let c={scrollLeft:0,scrollTop:0},l=De(1);const u=De(0),d=be(e);if((d||!d&&!o)&&((at(e)!=="body"||ht(s))&&(c=Gt(e)),be(e))){const p=qe(e);l=ze(e),u.x=p.x+e.clientLeft,u.y=p.y+e.clientTop}const f=s&&!d&&!o?Bn(s,c,!0):De(0);return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:t.y*l.y-c.scrollTop*l.y+u.y+f.y}}function yi(n){return Array.from(n.getClientRects())}function Di(n){const a=ke(n),t=Gt(n),e=n.ownerDocument.body,r=Be(a.scrollWidth,a.clientWidth,e.scrollWidth,e.clientWidth),o=Be(a.scrollHeight,a.clientHeight,e.scrollHeight,e.clientHeight);let s=-t.scrollLeft+Cr(n);const i=-t.scrollTop;return ue(e).direction==="rtl"&&(s+=Be(a.clientWidth,e.clientWidth)-r),{width:r,height:o,x:s,y:i}}function bi(n,a){const t=se(n),e=ke(n),r=t.visualViewport;let o=e.clientWidth,s=e.clientHeight,i=0,c=0;if(r){o=r.width,s=r.height;const l=kr();(!l||l&&a==="fixed")&&(i=r.offsetLeft,c=r.offsetTop)}return{width:o,height:s,x:i,y:c}}const ki=new Set(["absolute","fixed"]);function xi(n,a){const t=qe(n,!0,a==="fixed"),e=t.top+n.clientTop,r=t.left+n.clientLeft,o=be(n)?ze(n):De(1),s=n.clientWidth*o.x,i=n.clientHeight*o.y,c=r*o.x,l=e*o.y;return{width:s,height:i,x:c,y:l}}function Kr(n,a,t){let e;if(a==="viewport")e=bi(n,t);else if(a==="document")e=Di(ke(n));else if(oe(a))e=xi(a,t);else{const r=jn(n);e={x:a.x-r.x,y:a.y-r.y,width:a.width,height:a.height}}return jt(e)}function Qn(n,a){const t=Fe(n);return t===a||!oe(t)||et(t)?!1:ue(t).position==="fixed"||Qn(t,a)}function _i(n,a){const t=a.get(n);if(t)return t;let e=ft(n,[],!1).filter(i=>oe(i)&&at(i)!=="body"),r=null;const o=ue(n).position==="fixed";let s=o?Fe(n):n;for(;oe(s)&&!et(s);){const i=ue(s),c=br(s);!c&&i.position==="fixed"&&(r=null),(o?!c&&!r:!c&&i.position==="static"&&!!r&&ki.has(r.position)||ht(s)&&!c&&Qn(n,s))?e=e.filter(u=>u!==s):r=i,s=Fe(s)}return a.set(n,e),e}function Mi(n){let{element:a,boundary:t,rootBoundary:e,strategy:r}=n;const s=[...t==="clippingAncestors"?zt(a)?[]:_i(a,this._c):[].concat(t),e],i=s[0],c=s.reduce((l,u)=>{const d=Kr(a,u,r);return l.top=Be(d.top,l.top),l.right=tt(d.right,l.right),l.bottom=tt(d.bottom,l.bottom),l.left=Be(d.left,l.left),l},Kr(a,i,r));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Ci(n){const{width:a,height:t}=Hn(n);return{width:a,height:t}}function Si(n,a,t){const e=be(a),r=ke(a),o=t==="fixed",s=qe(n,!0,o,a);let i={scrollLeft:0,scrollTop:0};const c=De(0);function l(){c.x=Cr(r)}if(e||!e&&!o)if((at(a)!=="body"||ht(r))&&(i=Gt(a)),e){const p=qe(a,!0,o,a);c.x=p.x+a.clientLeft,c.y=p.y+a.clientTop}else r&&l();o&&!e&&r&&l();const u=r&&!e&&!o?Bn(r,i):De(0),d=s.left+i.scrollLeft-c.x-u.x,f=s.top+i.scrollTop-c.y-u.y;return{x:d,y:f,width:s.width,height:s.height}}function rr(n){return ue(n).position==="static"}function $r(n,a){if(!be(n)||ue(n).position==="fixed")return null;if(a)return a(n);let t=n.offsetParent;return ke(n)===t&&(t=t.ownerDocument.body),t}function Vn(n,a){const t=se(n);if(zt(n))return t;if(!be(n)){let r=Fe(n);for(;r&&!et(r);){if(oe(r)&&!rr(r))return r;r=Fe(r)}return t}let e=$r(n,a);for(;e&&As(e)&&rr(e);)e=$r(e,a);return e&&et(e)&&rr(e)&&!br(e)?t:e||Qs(n)||t}const Ei=async function(n){const a=this.getOffsetParent||Vn,t=this.getDimensions,e=await t(n.floating);return{reference:Si(n.reference,await a(n.floating),n.strategy),floating:{x:0,y:0,width:e.width,height:e.height}}};function Pi(n){return ue(n).direction==="rtl"}const Ti={convertOffsetParentRelativeRectToViewportRelativeRect:wi,getDocumentElement:ke,getClippingRect:Mi,getOffsetParent:Vn,getElementRects:Ei,getClientRects:yi,getDimensions:Ci,getScale:ze,isElement:oe,isRTL:Pi};function qn(n,a){return n.x===a.x&&n.y===a.y&&n.width===a.width&&n.height===a.height}function Oi(n,a){let t=null,e;const r=ke(n);function o(){var i;clearTimeout(e),(i=t)==null||i.disconnect(),t=null}function s(i,c){i===void 0&&(i=!1),c===void 0&&(c=1),o();const l=n.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(i||a(),!f||!p)return;const h=yt(d),v=yt(r.clientWidth-(u+f)),g=yt(r.clientHeight-(d+p)),D=yt(u),y={rootMargin:-h+"px "+-v+"px "+-g+"px "+-D+"px",threshold:Be(0,tt(1,c))||1};let k=!0;function T(O){const S=O[0].intersectionRatio;if(S!==c){if(!k)return s();S?s(!1,S):e=setTimeout(()=>{s(!1,1e-7)},1e3)}S===1&&!qn(l,n.getBoundingClientRect())&&s(),k=!1}try{t=new IntersectionObserver(T,{...y,root:r.ownerDocument})}catch{t=new IntersectionObserver(T,y)}t.observe(n)}return s(!0),o}function Ni(n,a,t,e){e===void 0&&(e={});const{ancestorScroll:r=!0,ancestorResize:o=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:i=typeof IntersectionObserver=="function",animationFrame:c=!1}=e,l=Mr(n),u=r||o?[...l?ft(l):[],...ft(a)]:[];u.forEach(D=>{r&&D.addEventListener("scroll",t,{passive:!0}),o&&D.addEventListener("resize",t)});const d=l&&i?Oi(l,t):null;let f=-1,p=null;s&&(p=new ResizeObserver(D=>{let[_]=D;_&&_.target===l&&p&&(p.unobserve(a),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var y;(y=p)==null||y.observe(a)})),t()}),l&&!c&&p.observe(l),p.observe(a));let h,v=c?qe(n):null;c&&g();function g(){const D=qe(n);v&&!qn(v,D)&&t(),v=D,h=requestAnimationFrame(g)}return t(),()=>{var D;u.forEach(_=>{r&&_.removeEventListener("scroll",t),o&&_.removeEventListener("resize",t)}),d==null||d(),(D=p)==null||D.disconnect(),p=null,c&&cancelAnimationFrame(h)}}const Ri=mi,Yi=fi,Ur=di,Li=(n,a,t)=>{const e=new Map,r={platform:Ti,...t},o={...r.platform,_c:e};return li(n,a,{...r,platform:o})};var Fi=typeof document<"u",Ii=function(){},Et=Fi?w.useLayoutEffect:Ii;function Qt(n,a){if(n===a)return!0;if(typeof n!=typeof a)return!1;if(typeof n=="function"&&n.toString()===a.toString())return!0;let t,e,r;if(n&&a&&typeof n=="object"){if(Array.isArray(n)){if(t=n.length,t!==a.length)return!1;for(e=t;e--!==0;)if(!Qt(n[e],a[e]))return!1;return!0}if(r=Object.keys(n),t=r.length,t!==Object.keys(a).length)return!1;for(e=t;e--!==0;)if(!{}.hasOwnProperty.call(a,r[e]))return!1;for(e=t;e--!==0;){const o=r[e];if(!(o==="_owner"&&n.$$typeof)&&!Qt(n[o],a[o]))return!1}return!0}return n!==n&&a!==a}function Kn(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function zr(n,a){const t=Kn(n);return Math.round(a*t)/t}function nr(n){const a=w.useRef(n);return Et(()=>{a.current=n}),a}function Ai(n){n===void 0&&(n={});const{placement:a="bottom",strategy:t="absolute",middleware:e=[],platform:r,elements:{reference:o,floating:s}={},transform:i=!0,whileElementsMounted:c,open:l}=n,[u,d]=w.useState({x:0,y:0,strategy:t,placement:a,middlewareData:{},isPositioned:!1}),[f,p]=w.useState(e);Qt(f,e)||p(e);const[h,v]=w.useState(null),[g,D]=w.useState(null),_=w.useCallback(Y=>{Y!==O.current&&(O.current=Y,v(Y))},[]),y=w.useCallback(Y=>{Y!==S.current&&(S.current=Y,D(Y))},[]),k=o||h,T=s||g,O=w.useRef(null),S=w.useRef(null),x=w.useRef(u),E=c!=null,R=nr(c),B=nr(r),I=nr(l),U=w.useCallback(()=>{if(!O.current||!S.current)return;const Y={placement:a,strategy:t,middleware:f};B.current&&(Y.platform=B.current),Li(O.current,S.current,Y).then(ee=>{const de={...ee,isPositioned:I.current!==!1};Q.current&&!Qt(x.current,de)&&(x.current=de,sa.flushSync(()=>{d(de)}))})},[f,a,t,B,I]);Et(()=>{l===!1&&x.current.isPositioned&&(x.current.isPositioned=!1,d(Y=>({...Y,isPositioned:!1})))},[l]);const Q=w.useRef(!1);Et(()=>(Q.current=!0,()=>{Q.current=!1}),[]),Et(()=>{if(k&&(O.current=k),T&&(S.current=T),k&&T){if(R.current)return R.current(k,T,U);U()}},[k,T,U,R,E]);const q=w.useMemo(()=>({reference:O,floating:S,setReference:_,setFloating:y}),[_,y]),N=w.useMemo(()=>({reference:k,floating:T}),[k,T]),F=w.useMemo(()=>{const Y={position:t,left:0,top:0};if(!N.floating)return Y;const ee=zr(N.floating,u.x),de=zr(N.floating,u.y);return i?{...Y,transform:"translate("+ee+"px, "+de+"px)",...Kn(N.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:ee,top:de}},[t,i,N.floating,u.x,u.y]);return w.useMemo(()=>({...u,update:U,refs:q,elements:N,floatingStyles:F}),[u,U,q,N,F])}const Wi=n=>{function a(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:n,fn(t){const{element:e,padding:r}=typeof n=="function"?n(t):n;return e&&a(e)?e.current!=null?Ur({element:e.current,padding:r}).fn(t):{}:e?Ur({element:e,padding:r}).fn(t):{}}}},Hi=(n,a)=>({...Ri(n),options:[n,a]}),ji=(n,a)=>({...Yi(n),options:[n,a]}),Bi=(n,a)=>({...Wi(n),options:[n,a]}),Qi={...Dn};let Gr=!1,Vi=0;const Xr=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Vi++;function qi(){const[n,a]=w.useState(()=>Gr?Xr():void 0);return Bt(()=>{n==null&&a(Xr())},[]),w.useEffect(()=>{Gr=!0},[]),n}const Ki=Qi.useId,$n=Ki||qi,$i=w.forwardRef(function(a,t){const{context:{placement:e,elements:{floating:r},middlewareData:{arrow:o,shift:s}},width:i=14,height:c=7,tipRadius:l=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h,...v}={},...g}=a,D=$n(),[_,y]=w.useState(!1);if(Bt(()=>{if(!r)return;ue(r).direction==="rtl"&&y(!0)},[r]),!r)return null;const[k,T]=e.split("-"),O=k==="top"||k==="bottom";let S=d;(O&&s!=null&&s.x||!O&&s!=null&&s.y)&&(S=null);const x=u*2,E=x/2,R=i/2*(l/-8+1),B=c/2*l/4,I=!!p,U=S&&T==="end"?"bottom":"top";let Q=S&&T==="end"?"right":"left";S&&_&&(Q=T==="end"?"left":"right");const q=(o==null?void 0:o.x)!=null?S||o.x:"",N=(o==null?void 0:o.y)!=null?S||o.y:"",F=p||"M0,0"+(" H"+i)+(" L"+(i-R)+","+(c-B))+(" Q"+i/2+","+c+" "+R+","+(c-B))+" Z",Y={top:I?"rotate(180deg)":"",left:I?"rotate(90deg)":"rotate(-90deg)",bottom:I?"":"rotate(180deg)",right:I?"rotate(-90deg)":"rotate(90deg)"}[k];return b.jsxs("svg",{...g,"aria-hidden":!0,ref:t,width:I?i:i+x,height:i,viewBox:"0 0 "+i+" "+(c>i?c:i),style:{position:"absolute",pointerEvents:"none",[Q]:q,[U]:N,[k]:O||I?"100%":"calc(100% - "+x/2+"px)",transform:[Y,h].filter(ee=>!!ee).join(" "),...v},children:[x>0&&b.jsx("path",{clipPath:"url(#"+D+")",fill:"none",stroke:f,strokeWidth:x+(p?0:1),d:F}),b.jsx("path",{stroke:x&&!p?g.fill:"none",d:F}),b.jsx("clipPath",{id:D,children:b.jsx("rect",{x:-E,y:E*(I?-1:1),width:i+x,height:i})})]})});function Ui(){const n=new Map;return{emit(a,t){var e;(e=n.get(a))==null||e.forEach(r=>r(t))},on(a,t){n.has(a)||n.set(a,new Set),n.get(a).add(t)},off(a,t){var e;(e=n.get(a))==null||e.delete(t)}}}const zi=w.createContext(null),Gi=w.createContext(null),Xi=()=>{var n;return((n=w.useContext(zi))==null?void 0:n.id)||null},Zi=()=>w.useContext(Gi);function Ji(n){const{open:a=!1,onOpenChange:t,elements:e}=n,r=$n(),o=w.useRef({}),[s]=w.useState(()=>Ui()),i=Xi()!=null,[c,l]=w.useState(e.reference),u=ci((p,h,v)=>{o.current.openEvent=p?h:void 0,s.emit("openchange",{open:p,event:h,reason:v,nested:i}),t==null||t(p,h,v)}),d=w.useMemo(()=>({setPositionReference:l}),[]),f=w.useMemo(()=>({reference:c||e.reference||null,floating:e.floating||null,domReference:e.reference}),[c,e.reference,e.floating]);return w.useMemo(()=>({dataRef:o,open:a,onOpenChange:u,elements:f,events:s,floatingId:r,refs:d}),[a,u,f,s,r,d])}function ec(n){n===void 0&&(n={});const{nodeId:a}=n,t=Ji({...n,elements:{reference:null,floating:null,...n.elements}}),e=n.rootContext||t,r=e.elements,[o,s]=w.useState(null),[i,c]=w.useState(null),u=(r==null?void 0:r.domReference)||o,d=w.useRef(null),f=Zi();Bt(()=>{u&&(d.current=u)},[u]);const p=Ai({...n,elements:{...r,...i&&{reference:i}}}),h=w.useCallback(y=>{const k=oe(y)?{getBoundingClientRect:()=>y.getBoundingClientRect(),getClientRects:()=>y.getClientRects(),contextElement:y}:y;c(k),p.refs.setReference(k)},[p.refs]),v=w.useCallback(y=>{(oe(y)||y===null)&&(d.current=y,s(y)),(oe(p.refs.reference.current)||p.refs.reference.current===null||y!==null&&!oe(y))&&p.refs.setReference(y)},[p.refs]),g=w.useMemo(()=>({...p.refs,setReference:v,setPositionReference:h,domReference:d}),[p.refs,v,h]),D=w.useMemo(()=>({...p.elements,domReference:u}),[p.elements,u]),_=w.useMemo(()=>({...p,...e,refs:g,elements:D,nodeId:a}),[p,g,D,a,e]);return Bt(()=>{e.dataRef.current.floatingContext=_;const y=f==null?void 0:f.nodesRef.current.find(k=>k.id===a);y&&(y.context=_)}),w.useMemo(()=>({...p,context:_,refs:g,elements:D}),[p,g,D,_])}/*! + react-datepicker v8.4.0 + https://github.com/Hacker0x01/react-datepicker + Released under the MIT License. +*/var mr=function(a,t){return mr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])},mr(a,t)};function te(n,a){if(typeof a!="function"&&a!==null)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");mr(n,a);function t(){this.constructor=n}n.prototype=a===null?Object.create(a):(t.prototype=a.prototype,new t)}var W=function(){return W=Object.assign||function(t){for(var e,r=1,o=arguments.length;r0?t[0]:t;return n&&z(n,r,e)||""}var zn=" - ";function nc(n,a,t){if(!n)return"";var e=ie(n,t),r=a?ie(a,t):"";return"".concat(e).concat(zn).concat(r)}function ac(n,a){if(!(n!=null&&n.length))return"";var t=n[0]?ie(n[0],a):"";if(n.length===1)return t;if(n.length===2&&n[1]){var e=ie(n[1],a);return"".concat(t,", ").concat(e)}var r=n.length-1;return"".concat(t," (+").concat(r,")")}function or(n,a){var t=a.hour,e=t===void 0?0:t,r=a.minute,o=r===void 0?0:r,s=a.second,i=s===void 0?0:s;return Mt(Ct(St(n,i),o),e)}function oc(n){return vr(n)}function sc(n,a){return z(n,"ddd",a)}function Pt(n){return Qe(n)}function Ye(n,a,t){var e=nt(a||Sr());return Pe(n,{locale:e,weekStartsOn:t})}function Ee(n){return Cn(n)}function lt(n){return $t(n)}function Zr(n){return ur(n)}function Jr(){return Qe(V())}function en(n){return _n(n)}function ic(n){return ya(n)}function cc(n){return Mn(n)}function ge(n,a){return n&&a?ws(n,a):!n&&!a}function ae(n,a){return n&&a?gs(n,a):!n&&!a}function Vt(n,a){return n&&a?vs(n,a):!n&&!a}function A(n,a){return n&&a?va(n,a):!n&&!a}function We(n,a){return n&&a?yo(n,a):!n&&!a}function ut(n,a,t){var e,r=Qe(a),o=_n(t);try{e=dt(n,{start:r,end:o})}catch{e=!1}return e}function Sr(){var n=Un();return n.__localeId__}function nt(n){if(typeof n=="string"){var a=Un();return a.__localeData__?a.__localeData__[n]:void 0}else return n}function lc(n,a,t){return a(z(n,"EEEE",t))}function uc(n,a){return z(n,"EEEEEE",a)}function dc(n,a){return z(n,"EEE",a)}function Er(n,a){return z(ce(V(),n),"LLLL",a)}function Gn(n,a){return z(ce(V(),n),"LLL",a)}function fc(n,a){return z(Ue(V(),n),"QQQ",a)}function le(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.excludeDateIntervals,i=t.includeDates,c=t.includeDateIntervals,l=t.filterDate;return vt(n,{minDate:e,maxDate:r})||o&&o.some(function(u){return u instanceof Date?A(n,u):A(n,u.date)})||s&&s.some(function(u){var d=u.start,f=u.end;return dt(n,{start:d,end:f})})||i&&!i.some(function(u){return A(n,u)})||c&&!c.some(function(u){var d=u.start,f=u.end;return dt(n,{start:d,end:f})})||l&&!l(V(n))||!1}function Pr(n,a){var t=a===void 0?{}:a,e=t.excludeDates,r=t.excludeDateIntervals;return r&&r.length>0?r.some(function(o){var s=o.start,i=o.end;return dt(n,{start:s,end:i})}):e&&e.some(function(o){var s;return o instanceof Date?A(n,o):A(n,(s=o.date)!==null&&s!==void 0?s:new Date)})||!1}function Xn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates,i=t.filterDate;return vt(n,{minDate:e?Cn(e):void 0,maxDate:r?Mn(r):void 0})||(o==null?void 0:o.some(function(c){return ae(n,c instanceof Date?c:c.date)}))||s&&!s.some(function(c){return ae(n,c)})||i&&!i(V(n))||!1}function Dt(n,a,t,e){var r=L(n),o=ne(n),s=L(a),i=ne(a),c=L(e);return r===s&&r===c?o<=t&&t<=i:r=t||cr:!1}function pc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates;return vt(n,{minDate:e,maxDate:r})||o&&o.some(function(i){return ae(i instanceof Date?i:i.date,n)})||s&&!s.some(function(i){return ae(i,n)})||!1}function bt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates,i=t.filterDate;return vt(n,{minDate:e,maxDate:r})||(o==null?void 0:o.some(function(c){return Vt(n,c instanceof Date?c:c.date)}))||s&&!s.some(function(c){return Vt(n,c)})||i&&!i(V(n))||!1}function kt(n,a,t){if(!a||!t||!Yt(a)||!Yt(t))return!1;var e=L(a),r=L(t);return e<=n&&r>=n}function Tt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates,i=t.filterDate,c=new Date(n,0,1);return vt(c,{minDate:e?$t(e):void 0,maxDate:r?Sn(r):void 0})||(o==null?void 0:o.some(function(l){return ge(c,l instanceof Date?l:l.date)}))||s&&!s.some(function(l){return ge(c,l)})||i&&!i(V(c))||!1}function xt(n,a,t,e){var r=L(n),o=He(n),s=L(a),i=He(a),c=L(e);return r===s&&r===c?o<=t&&t<=i:r=t||cr:!1}function vt(n,a){var t,e=a===void 0?{}:a,r=e.minDate,o=e.maxDate;return(t=r&&Ze(n,r)<0||o&&Ze(n,o)>0)!==null&&t!==void 0?t:!1}function tn(n,a){return a.some(function(t){return Ce(t)===Ce(n)&&Se(t)===Se(n)&&Re(t)===Re(n)})}function rn(n,a){var t=a===void 0?{}:a,e=t.excludeTimes,r=t.includeTimes,o=t.filterTime;return e&&tn(n,e)||r&&!tn(n,r)||o&&!o(n)||!1}function nn(n,a){var t=a.minTime,e=a.maxTime;if(!t||!e)throw new Error("Both minTime and maxTime props required");var r=V();r=Mt(r,Ce(n)),r=Ct(r,Se(n)),r=St(r,Re(n));var o=V();o=Mt(o,Ce(t)),o=Ct(o,Se(t)),o=St(o,Re(t));var s=V();s=Mt(s,Ce(e)),s=Ct(s,Se(e)),s=St(s,Re(e));var i;try{i=!dt(r,{start:o,end:s})}catch{i=!1}return i}function an(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=je(n,1);return e&&Lt(e,o)>0||r&&r.every(function(s){return Lt(s,o)>0})||!1}function on(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=he(n,1);return e&&Lt(o,e)>0||r&&r.every(function(s){return Lt(o,s)>0})||!1}function hc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=$t(n),s=Fn(o);return e&&Ft(e,s)>0||r&&r.every(function(i){return Ft(i,s)>0})||!1}function mc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=Sn(n),s=gr(o,1);return e&&Ft(s,e)>0||r&&r.every(function(i){return Ft(s,i)>0})||!1}function sn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=Je(n,1);return e&&It(e,o)>0||r&&r.every(function(s){return It(s,o)>0})||!1}function gc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.yearItemNumber,o=r===void 0?gt:r,s=lt(Je(n,o)),i=Ne(s,o).endPeriod,c=e&&L(e);return c&&c>i||!1}function cn(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=_e(n,1);return e&&It(o,e)>0||r&&r.every(function(s){return It(o,s)>0})||!1}function vc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.yearItemNumber,o=r===void 0?gt:r,s=_e(n,o),i=Ne(s,o).startPeriod,c=e&&L(e);return c&&c=0});return Rr(e)}else return t?Rr(t):a}function Jn(n){var a=n.maxDate,t=n.includeDates;if(t&&a){var e=t.filter(function(r){return Ze(r,a)<=0});return Nr(e)}else return t?Nr(t):a}function ln(n,a){var t;n===void 0&&(n=[]),a===void 0&&(a="react-datepicker__day--highlighted");for(var e=new Map,r=0,o=n.length;r=Sc,p=!r&&!t.isWeekInMonth(i);if(f||p)if(t.props.peekNextMonth)s=!0;else break}return e},t.onMonthClick=function(e,r){var o=t.isMonthDisabledForLabelDate(r),s=o.isDisabled,i=o.labelDate;s||t.handleDayClick(Ee(i),e)},t.onMonthMouseEnter=function(e){var r=t.isMonthDisabledForLabelDate(e),o=r.isDisabled,s=r.labelDate;o||t.handleDayMouseEnter(Ee(s))},t.handleMonthNavigation=function(e,r){var o,s,i,c;(s=(o=t.props).setPreSelection)===null||s===void 0||s.call(o,r),(c=(i=t.MONTH_REFS[e])===null||i===void 0?void 0:i.current)===null||c===void 0||c.focus()},t.handleKeyboardNavigation=function(e,r,o){var s,i=t.props,c=i.selected,l=i.preSelection,u=i.setPreSelection,d=i.minDate,f=i.maxDate,p=i.showFourColumnMonthYearPicker,h=i.showTwoColumnMonthYearPicker;if(l){var v=hn(p,h),g=t.getVerticalOffset(v),D=(s=sr[v])===null||s===void 0?void 0:s.grid,_=function(S,x,E){var R,B,I=x,U=E;switch(S){case M.ArrowRight:I=he(x,_t),U=E===11?0:E+_t;break;case M.ArrowLeft:I=je(x,_t),U=E===0?11:E-_t;break;case M.ArrowUp:I=je(x,g),U=!((R=D==null?void 0:D[0])===null||R===void 0)&&R.includes(E)?E+12-g:E-g;break;case M.ArrowDown:I=he(x,g),U=!((B=D==null?void 0:D[D.length-1])===null||B===void 0)&&B.includes(E)?E-12+g:E+g;break}return{newCalculatedDate:I,newCalculatedMonth:U}},y=function(S,x,E){for(var R=40,B=S,I=!1,U=0,Q=_(B,x,E),q=Q.newCalculatedDate,N=Q.newCalculatedMonth;!I;){if(U>=R){q=x,N=E;break}if(d&&qf){B=M.ArrowLeft;var F=_(B,q,N);q=F.newCalculatedDate,N=F.newCalculatedMonth}if(pc(q,t.props)){var F=_(B,q,N);q=F.newCalculatedDate,N=F.newCalculatedMonth}else I=!0;U++}return{newCalculatedDate:q,newCalculatedMonth:N}};if(r===M.Enter){t.isMonthDisabled(o)||(t.onMonthClick(e,o),u==null||u(c));return}var k=y(r,l,o),T=k.newCalculatedDate,O=k.newCalculatedMonth;switch(r){case M.ArrowRight:case M.ArrowLeft:case M.ArrowUp:case M.ArrowDown:t.handleMonthNavigation(O,T);break}}},t.getVerticalOffset=function(e){var r,o;return(o=(r=sr[e])===null||r===void 0?void 0:r.verticalNavigationOffset)!==null&&o!==void 0?o:0},t.onMonthKeyDown=function(e,r){var o=t.props,s=o.disabledKeyboardNavigation,i=o.handleOnMonthKeyDown,c=e.key;c!==M.Tab&&e.preventDefault(),s||t.handleKeyboardNavigation(e,c,r),i&&i(e)},t.onQuarterClick=function(e,r){var o=Ue(t.props.day,r);bt(o,t.props)||t.handleDayClick(Zr(o),e)},t.onQuarterMouseEnter=function(e){var r=Ue(t.props.day,e);bt(r,t.props)||t.handleDayMouseEnter(Zr(r))},t.handleQuarterNavigation=function(e,r){var o,s,i,c;t.isDisabled(r)||t.isExcluded(r)||((s=(o=t.props).setPreSelection)===null||s===void 0||s.call(o,r),(c=(i=t.QUARTER_REFS[e-1])===null||i===void 0?void 0:i.current)===null||c===void 0||c.focus())},t.onQuarterKeyDown=function(e,r){var o,s,i=e.key;if(!t.props.disabledKeyboardNavigation)switch(i){case M.Enter:t.onQuarterClick(e,r),(s=(o=t.props).setPreSelection)===null||s===void 0||s.call(o,t.props.selected);break;case M.ArrowRight:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===4?1:r+1,gr(t.props.preSelection,1));break;case M.ArrowLeft:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===1?4:r-1,Fn(t.props.preSelection));break}},t.isMonthDisabledForLabelDate=function(e){var r,o=t.props,s=o.day,i=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=ce(s,e);return{isDisabled:(r=(i||c||l||u)&&Xn(d,t.props))!==null&&r!==void 0?r:!1,labelDate:d}},t.isMonthDisabled=function(e){var r=t.isMonthDisabledForLabelDate(e).isDisabled;return r},t.getMonthClassNames=function(e){var r=t.props,o=r.day,s=r.startDate,i=r.endDate,c=r.preSelection,l=r.monthClassName,u=l?l(ce(o,e)):void 0,d=t.getSelection();return re("react-datepicker__month-text","react-datepicker__month-".concat(e),u,{"react-datepicker__month-text--disabled":t.isMonthDisabled(e),"react-datepicker__month-text--selected":d?t.isSelectMonthInList(o,e,d):void 0,"react-datepicker__month-text--keyboard-selected":!t.props.disabledKeyboardNavigation&&c&&t.isSelectedMonth(o,e,c)&&!t.isMonthSelected()&&!t.isMonthDisabled(e),"react-datepicker__month-text--in-selecting-range":t.isInSelectingRangeMonth(e),"react-datepicker__month-text--in-range":s&&i?Dt(s,i,e,o):void 0,"react-datepicker__month-text--range-start":t.isRangeStartMonth(e),"react-datepicker__month-text--range-end":t.isRangeEndMonth(e),"react-datepicker__month-text--selecting-range-start":t.isSelectingMonthRangeStart(e),"react-datepicker__month-text--selecting-range-end":t.isSelectingMonthRangeEnd(e),"react-datepicker__month-text--today":t.isCurrentMonth(o,e)})},t.getTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=ne(t.props.preSelection),o=t.isMonthDisabledForLabelDate(r).isDisabled,s=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return s},t.getQuarterTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=He(t.props.preSelection),o=bt(t.props.day,t.props),s=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return s},t.getAriaLabel=function(e){var r=t.props,o=r.chooseDayAriaLabelPrefix,s=o===void 0?"Choose":o,i=r.disabledDayAriaLabelPrefix,c=i===void 0?"Not available":i,l=r.day,u=r.locale,d=ce(l,e),f=t.isDisabled(d)||t.isExcluded(d)?c:s;return"".concat(f," ").concat(z(d,"MMMM yyyy",u))},t.getQuarterClassNames=function(e){var r=t.props,o=r.day,s=r.startDate,i=r.endDate,c=r.selected,l=r.minDate,u=r.maxDate,d=r.excludeDates,f=r.includeDates,p=r.filterDate,h=r.preSelection,v=r.disabledKeyboardNavigation,g=(l||u||d||f||p)&&bt(Ue(o,e),t.props);return re("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter-text--disabled":g,"react-datepicker__quarter-text--selected":c?t.isSelectedQuarter(o,e,c):void 0,"react-datepicker__quarter-text--keyboard-selected":!v&&h&&t.isSelectedQuarter(o,e,h)&&!g,"react-datepicker__quarter-text--in-selecting-range":t.isInSelectingRangeQuarter(e),"react-datepicker__quarter-text--in-range":s&&i?xt(s,i,e,o):void 0,"react-datepicker__quarter-text--range-start":t.isRangeStartQuarter(e),"react-datepicker__quarter-text--range-end":t.isRangeEndQuarter(e),"react-datepicker__quarter-text--today":t.isCurrentQuarter(o,e)})},t.getMonthContent=function(e){var r=t.props,o=r.showFullMonthYearPicker,s=r.renderMonthContent,i=r.locale,c=r.day,l=Gn(e,i),u=Er(e,i);return s?s(e,l,u,c):o?u:l},t.getQuarterContent=function(e){var r,o=t.props,s=o.renderQuarterContent,i=o.locale,c=fc(e,i);return(r=s==null?void 0:s(e,c))!==null&&r!==void 0?r:c},t.renderMonths=function(){var e,r=t.props,o=r.showTwoColumnMonthYearPicker,s=r.showFourColumnMonthYearPicker,i=r.day,c=r.selected,l=(e=sr[hn(s,o)])===null||e===void 0?void 0:e.grid;return l==null?void 0:l.map(function(u,d){return m.createElement("div",{className:"react-datepicker__month-wrapper",key:d},u.map(function(f,p){return m.createElement("div",{ref:t.MONTH_REFS[f],key:p,onClick:function(h){t.onMonthClick(h,f)},onKeyDown:function(h){ea(h)&&(h.preventDefault(),h.key=M.Enter),t.onMonthKeyDown(h,f)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onMonthMouseEnter(f)},onPointerEnter:t.props.usePointerEvent?function(){return t.onMonthMouseEnter(f)}:void 0,tabIndex:Number(t.getTabIndex(f)),className:t.getMonthClassNames(f),"aria-disabled":t.isMonthDisabled(f),role:"option","aria-label":t.getAriaLabel(f),"aria-current":t.isCurrentMonth(i,f)?"date":void 0,"aria-selected":c?t.isSelectedMonth(i,f,c):void 0},t.getMonthContent(f))}))})},t.renderQuarters=function(){var e=t.props,r=e.day,o=e.selected,s=[1,2,3,4];return m.createElement("div",{className:"react-datepicker__quarter-wrapper"},s.map(function(i,c){return m.createElement("div",{key:c,ref:t.QUARTER_REFS[c],role:"option",onClick:function(l){t.onQuarterClick(l,i)},onKeyDown:function(l){t.onQuarterKeyDown(l,i)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onQuarterMouseEnter(i)},onPointerEnter:t.props.usePointerEvent?function(){return t.onQuarterMouseEnter(i)}:void 0,className:t.getQuarterClassNames(i),"aria-selected":o?t.isSelectedQuarter(r,i,o):void 0,tabIndex:Number(t.getQuarterTabIndex(i)),"aria-current":t.isCurrentQuarter(r,i)?"date":void 0},t.getQuarterContent(i))}))},t.getClassNames=function(){var e=t.props,r=e.selectingDate,o=e.selectsStart,s=e.selectsEnd,i=e.showMonthYearPicker,c=e.showQuarterYearPicker,l=e.showWeekPicker;return re("react-datepicker__month",{"react-datepicker__month--selecting-range":r&&(o||s)},{"react-datepicker__monthPicker":i},{"react-datepicker__quarterPicker":c},{"react-datepicker__weekPicker":l})},t}return a.prototype.getSelection=function(){var t=this.props,e=t.selected,r=t.selectedDates,o=t.selectsMultiple;if(o)return r;if(e)return[e]},a.prototype.render=function(){var t=this.props,e=t.showMonthYearPicker,r=t.showQuarterYearPicker,o=t.day,s=t.ariaLabelPrefix,i=s===void 0?"Month ":s,c=i?i.trim()+" ":"";return m.createElement("div",{className:this.getClassNames(),onMouseLeave:this.props.usePointerEvent?void 0:this.handleMouseLeave,onPointerLeave:this.props.usePointerEvent?this.handleMouseLeave:void 0,"aria-label":"".concat(c).concat(z(o,"MMMM, yyyy",this.props.locale)),role:"listbox"},e?this.renderMonths():r?this.renderQuarters():this.renderWeeks())},a}(w.Component),Pc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.isSelectedMonth=function(e){return t.props.month===e},t.renderOptions=function(){return t.props.monthNames.map(function(e,r){return m.createElement("div",{className:t.isSelectedMonth(r)?"react-datepicker__month-option react-datepicker__month-option--selected_month":"react-datepicker__month-option",key:e,onClick:t.onChange.bind(t,r),"aria-selected":t.isSelectedMonth(r)?"true":void 0},t.isSelectedMonth(r)?m.createElement("span",{className:"react-datepicker__month-option--selected"},"✓"):"",e)})},t.onChange=function(e){return t.props.onChange(e)},t.handleClickOutside=function(){return t.props.onCancel()},t}return a.prototype.render=function(){return m.createElement(Zt,{className:"react-datepicker__month-dropdown",onClickOutside:this.handleClickOutside},this.renderOptions())},a}(w.Component),Tc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(e){return e.map(function(r,o){return m.createElement("option",{key:r,value:o},r)})},t.renderSelectMode=function(e){return m.createElement("select",{value:t.props.month,className:"react-datepicker__month-select",onChange:function(r){return t.onChange(parseInt(r.target.value))}},t.renderSelectOptions(e))},t.renderReadView=function(e,r){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-read-view--selected-month"},r[t.props.month]))},t.renderDropdown=function(e){return m.createElement(Pc,W({key:"dropdown"},t.props,{monthNames:e,onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(e){var r=t.state.dropdownVisible,o=[t.renderReadView(!r,e)];return r&&o.unshift(t.renderDropdown(e)),o},t.onChange=function(e){t.toggleDropdown(),e!==t.props.month&&t.props.onChange(e)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t=this,e=[0,1,2,3,4,5,6,7,8,9,10,11].map(this.props.useShortMonthInDropdown?function(o){return Gn(o,t.props.locale)}:function(o){return Er(o,t.props.locale)}),r;switch(this.props.dropdownMode){case"scroll":r=this.renderScrollMode(e);break;case"select":r=this.renderSelectMode(e);break}return m.createElement("div",{className:"react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode)},r)},a}(w.Component);function Oc(n,a){for(var t=[],e=Ee(n),r=Ee(a);!Le(e,r);)t.push(V(e)),e=he(e,1);return t}var Nc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.renderOptions=function(){return e.state.monthYearsList.map(function(r){var o=fr(r),s=ge(e.props.date,r)&&ae(e.props.date,r);return m.createElement("div",{className:s?"react-datepicker__month-year-option--selected_month-year":"react-datepicker__month-year-option",key:o,onClick:e.onChange.bind(e,o),"aria-selected":s?"true":void 0},s?m.createElement("span",{className:"react-datepicker__month-year-option--selected"},"✓"):"",z(r,e.props.dateFormat,e.props.locale))})},e.onChange=function(r){return e.props.onChange(r)},e.handleClickOutside=function(){e.props.onCancel()},e.state={monthYearsList:Oc(e.props.minDate,e.props.maxDate)},e}return a.prototype.render=function(){var t=re({"react-datepicker__month-year-dropdown":!0,"react-datepicker__month-year-dropdown--scrollable":this.props.scrollableMonthYearDropdown});return m.createElement(Zt,{className:t,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(w.Component),Rc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=Ee(t.props.minDate),r=Ee(t.props.maxDate),o=[];!Le(e,r);){var s=fr(e);o.push(m.createElement("option",{key:s,value:s},z(e,t.props.dateFormat,t.props.locale))),e=he(e,1)}return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:fr(Ee(t.props.date)),className:"react-datepicker__month-year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){var r=z(t.props.date,t.props.dateFormat,t.props.locale);return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-year-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-year-read-view--selected-month-year"},r))},t.renderDropdown=function(){return m.createElement(Nc,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown();var r=V(e);ge(t.props.date,r)&&ae(t.props.date,r)||t.props.onChange(r)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(w.Component),Yc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={height:null},t.scrollToTheSelectedTime=function(){requestAnimationFrame(function(){var e,r,o;t.list&&(t.list.scrollTop=(o=t.centerLi&&a.calcCenterPosition(t.props.monthRef?t.props.monthRef.clientHeight-((r=(e=t.header)===null||e===void 0?void 0:e.clientHeight)!==null&&r!==void 0?r:0):t.list.clientHeight,t.centerLi))!==null&&o!==void 0?o:0)})},t.handleClick=function(e){var r,o;(t.props.minTime||t.props.maxTime)&&nn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&rn(e,t.props)||(o=(r=t.props).onChange)===null||o===void 0||o.call(r,e)},t.isSelectedTime=function(e){return t.props.selected&&kc(t.props.selected,e)},t.isDisabledTime=function(e){return(t.props.minTime||t.props.maxTime)&&nn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&rn(e,t.props)},t.liClasses=function(e){var r,o=["react-datepicker__time-list-item",t.props.timeClassName?t.props.timeClassName(e):void 0];return t.isSelectedTime(e)&&o.push("react-datepicker__time-list-item--selected"),t.isDisabledTime(e)&&o.push("react-datepicker__time-list-item--disabled"),t.props.injectTimes&&(Ce(e)*3600+Se(e)*60+Re(e))%(((r=t.props.intervals)!==null&&r!==void 0?r:a.defaultProps.intervals)*60)!==0&&o.push("react-datepicker__time-list-item--injected"),o.join(" ")},t.handleOnKeyDown=function(e,r){var o,s;e.key===M.Space&&(e.preventDefault(),e.key=M.Enter),(e.key===M.ArrowUp||e.key===M.ArrowLeft)&&e.target instanceof HTMLElement&&e.target.previousSibling&&(e.preventDefault(),e.target.previousSibling instanceof HTMLElement&&e.target.previousSibling.focus()),(e.key===M.ArrowDown||e.key===M.ArrowRight)&&e.target instanceof HTMLElement&&e.target.nextSibling&&(e.preventDefault(),e.target.nextSibling instanceof HTMLElement&&e.target.nextSibling.focus()),e.key===M.Enter&&t.handleClick(r),(s=(o=t.props).handleOnKeyDown)===null||s===void 0||s.call(o,e)},t.renderTimes=function(){for(var e,r=[],o=typeof t.props.format=="string"?t.props.format:"p",s=(e=t.props.intervals)!==null&&e!==void 0?e:a.defaultProps.intervals,i=t.props.selected||t.props.openToDate||V(),c=Pt(i),l=t.props.injectTimes&&t.props.injectTimes.sort(function(g,D){return g.getTime()-D.getTime()}),u=60*bc(i),d=u/s,f=0;f=f?e.updateFocusOnPaginate(Math.abs(f-(r-p))):(l=(c=e.YEAR_REFS[r-p])===null||c===void 0?void 0:c.current)===null||l===void 0||l.focus())}},e.isSameDay=function(r,o){return A(r,o)},e.isCurrentYear=function(r){return r===L(V())},e.isRangeStart=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.startDate)},e.isRangeEnd=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.endDate)},e.isInRange=function(r){return kt(r,e.props.startDate,e.props.endDate)},e.isInSelectingRange=function(r){var o=e.props,s=o.selectsStart,i=o.selectsEnd,c=o.selectsRange,l=o.startDate,u=o.endDate;return!(s||i||c)||!e.selectingDate()?!1:s&&u?kt(r,e.selectingDate(),u):i&&l||c&&l&&!u?kt(r,l,e.selectingDate()):!1},e.isSelectingRangeStart=function(r){var o;if(!e.isInSelectingRange(r))return!1;var s=e.props,i=s.startDate,c=s.selectsStart,l=me(V(),r);return c?ge(l,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(l,i??null)},e.isSelectingRangeEnd=function(r){var o;if(!e.isInSelectingRange(r))return!1;var s=e.props,i=s.endDate,c=s.selectsEnd,l=s.selectsRange,u=me(V(),r);return c||l?ge(u,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(u,i??null)},e.isKeyboardSelected=function(r){if(!(e.props.date===void 0||e.props.selected==null||e.props.preSelection==null)){var o=e.props,s=o.minDate,i=o.maxDate,c=o.excludeDates,l=o.includeDates,u=o.filterDate,d=lt(me(e.props.date,r)),f=(s||i||c||l||u)&&Tt(r,e.props);return!e.props.disabledKeyboardNavigation&&!e.props.inline&&!A(d,lt(e.props.selected))&&A(d,lt(e.props.preSelection))&&!f}},e.isSelectedYear=function(r){var o=e.props,s=o.selectsMultiple,i=o.selected,c=o.selectedDates;return s?c==null?void 0:c.some(function(l){return r===L(l)}):!!i&&r===L(i)},e.onYearClick=function(r,o){var s=e.props.date;s!==void 0&&e.handleYearClick(lt(me(s,o)),r)},e.onYearKeyDown=function(r,o){var s,i,c=r.key,l=e.props,u=l.date,d=l.yearItemNumber,f=l.handleOnKeyDown;if(c!==M.Tab&&r.preventDefault(),!e.props.disabledKeyboardNavigation)switch(c){case M.Enter:if(e.props.selected==null)break;e.onYearClick(r,o),(i=(s=e.props).setPreSelection)===null||i===void 0||i.call(s,e.props.selected);break;case M.ArrowRight:if(e.props.preSelection==null)break;e.handleYearNavigation(o+1,_e(e.props.preSelection,1));break;case M.ArrowLeft:if(e.props.preSelection==null)break;e.handleYearNavigation(o-1,Je(e.props.preSelection,1));break;case M.ArrowUp:{if(u===void 0||d===void 0||e.props.preSelection==null)break;var p=Ne(u,d).startPeriod,h=mn,v=o-h;if(v=p&&oD){var g=d%h;o<=D&&o>D-g?h=g:h+=g,v=o+h}e.handleYearNavigation(v,_e(e.props.preSelection,h));break}}f&&f(r)},e.getYearClassNames=function(r){var o=e.props,s=o.date,i=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=o.filterDate,f=o.yearClassName;return re("react-datepicker__year-text","react-datepicker__year-".concat(r),s?f==null?void 0:f(me(s,r)):void 0,{"react-datepicker__year-text--selected":e.isSelectedYear(r),"react-datepicker__year-text--disabled":(i||c||l||u||d)&&Tt(r,e.props),"react-datepicker__year-text--keyboard-selected":e.isKeyboardSelected(r),"react-datepicker__year-text--range-start":e.isRangeStart(r),"react-datepicker__year-text--range-end":e.isRangeEnd(r),"react-datepicker__year-text--in-range":e.isInRange(r),"react-datepicker__year-text--in-selecting-range":e.isInSelectingRange(r),"react-datepicker__year-text--selecting-range-start":e.isSelectingRangeStart(r),"react-datepicker__year-text--selecting-range-end":e.isSelectingRangeEnd(r),"react-datepicker__year-text--today":e.isCurrentYear(r)})},e.getYearTabIndex=function(r){if(e.props.disabledKeyboardNavigation||e.props.preSelection==null)return"-1";var o=L(e.props.preSelection),s=Tt(r,e.props);return r===o&&!s?"0":"-1"},e.getYearContent=function(r){return e.props.renderYearContent?e.props.renderYearContent(r):r},e}return a.prototype.render=function(){var t=this,e=[],r=this.props,o=r.date,s=r.yearItemNumber,i=r.onYearMouseEnter,c=r.onYearMouseLeave;if(o===void 0)return null;for(var l=Ne(o,s),u=l.startPeriod,d=l.endPeriod,f=function(v){e.push(m.createElement("div",{ref:p.YEAR_REFS[v-u],onClick:function(g){t.onYearClick(g,v)},onKeyDown:function(g){ea(g)&&(g.preventDefault(),g.key=M.Enter),t.onYearKeyDown(g,v)},tabIndex:Number(p.getYearTabIndex(v)),className:p.getYearClassNames(v),onMouseEnter:p.props.usePointerEvent?void 0:function(g){return i(g,v)},onPointerEnter:p.props.usePointerEvent?function(g){return i(g,v)}:void 0,onMouseLeave:p.props.usePointerEvent?void 0:function(g){return c(g,v)},onPointerLeave:p.props.usePointerEvent?function(g){return c(g,v)}:void 0,key:v,"aria-current":p.isCurrentYear(v)?"date":void 0},p.getYearContent(v)))},p=this,h=u;h<=d;h++)f(h);return m.createElement("div",{className:"react-datepicker__year"},m.createElement("div",{className:"react-datepicker__year-wrapper",onMouseLeave:this.props.usePointerEvent?void 0:this.props.clearSelectingDate,onPointerLeave:this.props.usePointerEvent?this.props.clearSelectingDate:void 0},e))},a}(w.Component);function Fc(n,a,t,e){for(var r=[],o=0;o<2*a+1;o++){var s=n+a-o,i=!0;t&&(i=L(t)<=s),e&&i&&(i=L(e)>=s),i&&r.push(s)}return r}var Ic=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;e.renderOptions=function(){var i=e.props.year,c=e.state.yearsList.map(function(d){return m.createElement("div",{className:i===d?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:d,onClick:e.onChange.bind(e,d),"aria-selected":i===d?"true":void 0},i===d?m.createElement("span",{className:"react-datepicker__year-option--selected"},"✓"):"",d)}),l=e.props.minDate?L(e.props.minDate):null,u=e.props.maxDate?L(e.props.maxDate):null;return(!u||!e.state.yearsList.find(function(d){return d===u}))&&c.unshift(m.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:e.incrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),(!l||!e.state.yearsList.find(function(d){return d===l}))&&c.push(m.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:e.decrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),c},e.onChange=function(i){e.props.onChange(i)},e.handleClickOutside=function(){e.props.onCancel()},e.shiftYears=function(i){var c=e.state.yearsList.map(function(l){return l+i});e.setState({yearsList:c})},e.incrementYears=function(){return e.shiftYears(1)},e.decrementYears=function(){return e.shiftYears(-1)};var r=t.yearDropdownItemNumber,o=t.scrollableYearDropdown,s=r||(o?10:5);return e.state={yearsList:Fc(e.props.year,s,e.props.minDate,e.props.maxDate)},e.dropdownRef=w.createRef(),e}return a.prototype.componentDidMount=function(){var t=this.dropdownRef.current;if(t){var e=t.children?Array.from(t.children):null,r=e?e.find(function(o){return o.ariaSelected}):null;t.scrollTop=r&&r instanceof HTMLElement?r.offsetTop+(r.clientHeight-t.clientHeight)/2:(t.scrollHeight-t.clientHeight)/2}},a.prototype.render=function(){var t=re({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return m.createElement(Zt,{className:t,containerRef:this.dropdownRef,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(w.Component),Ac=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=t.props.minDate?L(t.props.minDate):1900,r=t.props.maxDate?L(t.props.maxDate):2100,o=[],s=e;s<=r;s++)o.push(m.createElement("option",{key:s,value:s},s));return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:t.props.year,className:"react-datepicker__year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__year-read-view",onClick:function(r){return t.toggleDropdown(r)}},m.createElement("span",{className:"react-datepicker__year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__year-read-view--selected-year"},t.props.year))},t.renderDropdown=function(){return m.createElement(Ic,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown(),e!==t.props.year&&t.props.onChange(e)},t.toggleDropdown=function(e){t.setState({dropdownVisible:!t.state.dropdownVisible},function(){t.props.adjustDateOnChange&&t.handleYearChange(t.props.date,e)})},t.handleYearChange=function(e,r){var o;(o=t.onSelect)===null||o===void 0||o.call(t,e,r),t.setOpen()},t.onSelect=function(e,r){var o,s;(s=(o=t.props).onSelect)===null||s===void 0||s.call(o,e,r)},t.setOpen=function(){var e,r;(r=(e=t.props).setOpen)===null||r===void 0||r.call(e,!0)},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(w.Component),Wc=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],Hc=function(n){var a=(n.className||"").split(/\s+/);return Wc.some(function(t){return a.indexOf(t)>=0})},jc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.monthContainer=void 0,e.handleClickOutside=function(r){e.props.onClickOutside(r)},e.setClickOutsideRef=function(){return e.containerRef.current},e.handleDropdownFocus=function(r){var o,s;Hc(r.target)&&((s=(o=e.props).onDropdownFocus)===null||s===void 0||s.call(o,r))},e.getDateInView=function(){var r=e.props,o=r.preSelection,s=r.selected,i=r.openToDate,c=Zn(e.props),l=Jn(e.props),u=V(),d=i||s||o;return d||(c&&Ve(u,c)?c:l&&Le(u,l)?l:u)},e.increaseMonth=function(){e.setState(function(r){var o=r.date;return{date:he(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.decreaseMonth=function(){e.setState(function(r){var o=r.date;return{date:je(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.handleDayClick=function(r,o,s){e.props.onSelect(r,o,s),e.props.setPreSelection&&e.props.setPreSelection(r)},e.handleDayMouseEnter=function(r){e.setState({selectingDate:r}),e.props.onDayMouseEnter&&e.props.onDayMouseEnter(r)},e.handleMonthMouseLeave=function(){e.setState({selectingDate:void 0}),e.props.onMonthMouseLeave&&e.props.onMonthMouseLeave()},e.handleYearMouseEnter=function(r,o){e.setState({selectingDate:me(V(),o)}),e.props.onYearMouseEnter&&e.props.onYearMouseEnter(r,o)},e.handleYearMouseLeave=function(r,o){e.props.onYearMouseLeave&&e.props.onYearMouseLeave(r,o)},e.handleYearChange=function(r){var o,s,i,c;(s=(o=e.props).onYearChange)===null||s===void 0||s.call(o,r),e.setState({isRenderAriaLiveMessage:!0}),e.props.adjustDateOnChange&&(e.props.onSelect(r),(c=(i=e.props).setOpen)===null||c===void 0||c.call(i,!0)),e.props.setPreSelection&&e.props.setPreSelection(r)},e.getEnabledPreSelectionDateForMonth=function(r){if(!le(r,e.props))return r;for(var o=Ee(r),s=cc(r),i=wa(s,o),c=null,l=0;l<=i;l++){var u=pe(o,l);if(!le(u,e.props)){c=u;break}}return c},e.handleMonthChange=function(r){var o,s,i,c=(o=e.getEnabledPreSelectionDateForMonth(r))!==null&&o!==void 0?o:r;e.handleCustomMonthChange(c),e.props.adjustDateOnChange&&(e.props.onSelect(c),(i=(s=e.props).setOpen)===null||i===void 0||i.call(s,!0)),e.props.setPreSelection&&e.props.setPreSelection(c)},e.handleCustomMonthChange=function(r){var o,s;(s=(o=e.props).onMonthChange)===null||s===void 0||s.call(o,r),e.setState({isRenderAriaLiveMessage:!0})},e.handleMonthYearChange=function(r){e.handleYearChange(r),e.handleMonthChange(r)},e.changeYear=function(r){e.setState(function(o){var s=o.date;return{date:me(s,Number(r))}},function(){return e.handleYearChange(e.state.date)})},e.changeMonth=function(r){e.setState(function(o){var s=o.date;return{date:ce(s,Number(r))}},function(){return e.handleMonthChange(e.state.date)})},e.changeMonthYear=function(r){e.setState(function(o){var s=o.date;return{date:me(ce(s,ne(r)),L(r))}},function(){return e.handleMonthYearChange(e.state.date)})},e.header=function(r){r===void 0&&(r=e.state.date);var o=Ye(r,e.props.locale,e.props.calendarStartDay),s=[];return e.props.showWeekNumbers&&s.push(m.createElement("div",{key:"W",className:"react-datepicker__day-name"},e.props.weekLabel||"#")),s.concat([0,1,2,3,4,5,6].map(function(i){var c=pe(o,i),l=e.formatWeekday(c,e.props.locale),u=e.props.weekDayClassName?e.props.weekDayClassName(c):void 0;return m.createElement("div",{key:i,"aria-label":z(c,"EEEE",e.props.locale),className:re("react-datepicker__day-name",u)},l)}))},e.formatWeekday=function(r,o){return e.props.formatWeekDay?lc(r,e.props.formatWeekDay,o):e.props.useWeekdaysShort?dc(r,o):uc(r,o)},e.decreaseYear=function(){e.setState(function(r){var o,s=r.date;return{date:Je(s,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.clearSelectingDate=function(){e.setState({selectingDate:void 0})},e.renderPreviousButton=function(){var r,o,s;if(!e.props.renderCustomHeader){var i=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?i-1:0,l=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,u=je(e.state.date,l),d;switch(!0){case e.props.showMonthYearPicker:d=sn(e.state.date,e.props);break;case e.props.showYearPicker:d=gc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:d=hc(e.state.date,e.props);break;default:d=an(u,e.props);break}if(!(!((s=e.props.forceShowMonthNavigation)!==null&&s!==void 0?s:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&d||e.props.showTimeSelectOnly)){var f=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--previous"],p=["react-datepicker__navigation","react-datepicker__navigation--previous"],h=e.decreaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(h=e.decreaseYear),d&&e.props.showDisabledMonthNavigation&&(p.push("react-datepicker__navigation--previous--disabled"),h=void 0);var v=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,g=e.props,D=g.previousMonthButtonLabel,_=D===void 0?a.defaultProps.previousMonthButtonLabel:D,y=g.previousYearButtonLabel,k=y===void 0?a.defaultProps.previousYearButtonLabel:y,T=e.props,O=T.previousMonthAriaLabel,S=O===void 0?typeof _=="string"?_:"Previous Month":O,x=T.previousYearAriaLabel,E=x===void 0?typeof k=="string"?k:"Previous Year":x;return m.createElement("button",{type:"button",className:p.join(" "),onClick:h,onKeyDown:e.props.handleOnKeyDown,"aria-label":v?E:S},m.createElement("span",{className:f.join(" ")},v?k:_))}}},e.increaseYear=function(){e.setState(function(r){var o,s=r.date;return{date:_e(s,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.renderNextButton=function(){var r;if(!e.props.renderCustomHeader){var o;switch(!0){case e.props.showMonthYearPicker:o=cn(e.state.date,e.props);break;case e.props.showYearPicker:o=vc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:o=mc(e.state.date,e.props);break;default:o=on(e.state.date,e.props);break}if(!(!((r=e.props.forceShowMonthNavigation)!==null&&r!==void 0?r:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&o||e.props.showTimeSelectOnly)){var s=["react-datepicker__navigation","react-datepicker__navigation--next"],i=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--next"];e.props.showTimeSelect&&s.push("react-datepicker__navigation--next--with-time"),e.props.todayButton&&s.push("react-datepicker__navigation--next--with-today-button");var c=e.increaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(c=e.increaseYear),o&&e.props.showDisabledMonthNavigation&&(s.push("react-datepicker__navigation--next--disabled"),c=void 0);var l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,u=e.props,d=u.nextMonthButtonLabel,f=d===void 0?a.defaultProps.nextMonthButtonLabel:d,p=u.nextYearButtonLabel,h=p===void 0?a.defaultProps.nextYearButtonLabel:p,v=e.props,g=v.nextMonthAriaLabel,D=g===void 0?typeof f=="string"?f:"Next Month":g,_=v.nextYearAriaLabel,y=_===void 0?typeof h=="string"?h:"Next Year":_;return m.createElement("button",{type:"button",className:s.join(" "),onClick:c,onKeyDown:e.props.handleOnKeyDown,"aria-label":l?y:D},m.createElement("span",{className:i.join(" ")},l?h:f))}}},e.renderCurrentMonth=function(r){r===void 0&&(r=e.state.date);var o=["react-datepicker__current-month"];return e.props.showYearDropdown&&o.push("react-datepicker__current-month--hasYearDropdown"),e.props.showMonthDropdown&&o.push("react-datepicker__current-month--hasMonthDropdown"),e.props.showMonthYearDropdown&&o.push("react-datepicker__current-month--hasMonthYearDropdown"),m.createElement("h2",{className:o.join(" ")},z(r,e.props.dateFormat,e.props.locale))},e.renderYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showYearDropdown||r))return m.createElement(Ac,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeYear,year:L(e.state.date)}))},e.renderMonthDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthDropdown||r))return m.createElement(Tc,W({},a.defaultProps,e.props,{month:ne(e.state.date),onChange:e.changeMonth}))},e.renderMonthYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthYearDropdown||r))return m.createElement(Rc,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeMonthYear}))},e.handleTodayButtonClick=function(r){e.props.onSelect(Jr(),r),e.props.setPreSelection&&e.props.setPreSelection(Jr())},e.renderTodayButton=function(){if(!(!e.props.todayButton||e.props.showTimeSelectOnly))return m.createElement("div",{className:"react-datepicker__today-button",onClick:e.handleTodayButtonClick},e.props.todayButton)},e.renderDefaultHeader=function(r){var o=r.monthDate,s=r.i;return m.createElement("div",{className:"react-datepicker__header ".concat(e.props.showTimeSelect?"react-datepicker__header--has-time-select":"")},e.renderCurrentMonth(o),m.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(e.props.dropdownMode),onFocus:e.handleDropdownFocus},e.renderMonthDropdown(s!==0),e.renderMonthYearDropdown(s!==0),e.renderYearDropdown(s!==0)),m.createElement("div",{className:"react-datepicker__day-names"},e.header(o)))},e.renderCustomHeader=function(r){var o,s,i=r.monthDate,c=r.i;if(e.props.showTimeSelect&&!e.state.monthContainer||e.props.showTimeSelectOnly)return null;var l=an(e.state.date,e.props),u=on(e.state.date,e.props),d=sn(e.state.date,e.props),f=cn(e.state.date,e.props),p=!e.props.showMonthYearPicker&&!e.props.showQuarterYearPicker&&!e.props.showYearPicker;return m.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:e.props.onDropdownFocus},(s=(o=e.props).renderCustomHeader)===null||s===void 0?void 0:s.call(o,W(W({},e.state),{customHeaderCount:c,monthDate:i,changeMonth:e.changeMonth,changeYear:e.changeYear,decreaseMonth:e.decreaseMonth,increaseMonth:e.increaseMonth,decreaseYear:e.decreaseYear,increaseYear:e.increaseYear,prevMonthButtonDisabled:l,nextMonthButtonDisabled:u,prevYearButtonDisabled:d,nextYearButtonDisabled:f})),p&&m.createElement("div",{className:"react-datepicker__day-names"},e.header(i)))},e.renderYearHeader=function(r){var o=r.monthDate,s=e.props,i=s.showYearPicker,c=s.yearItemNumber,l=c===void 0?a.defaultProps.yearItemNumber:c,u=Ne(o,l),d=u.startPeriod,f=u.endPeriod;return m.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},i?"".concat(d," - ").concat(f):L(o))},e.renderHeader=function(r){var o=r.monthDate,s=r.i,i=s===void 0?0:s,c={monthDate:o,i};switch(!0){case e.props.renderCustomHeader!==void 0:return e.renderCustomHeader(c);case(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker):return e.renderYearHeader(c);default:return e.renderDefaultHeader(c)}},e.renderMonths=function(){var r,o;if(!(e.props.showTimeSelectOnly||e.props.showYearPicker)){for(var s=[],i=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?i-1:0,l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker?_e(e.state.date,c):je(e.state.date,c),u=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,d=0;d0;s.push(m.createElement("div",{key:h,ref:function(D){e.monthContainer=D??void 0},className:"react-datepicker__month-container"},e.renderHeader({monthDate:p,i:d}),m.createElement(Ec,W({},a.defaultProps,e.props,{containerRef:e.containerRef,ariaLabelPrefix:e.props.monthAriaLabelPrefix,day:p,onDayClick:e.handleDayClick,handleOnKeyDown:e.props.handleOnDayKeyDown,handleOnMonthKeyDown:e.props.handleOnKeyDown,onDayMouseEnter:e.handleDayMouseEnter,onMouseLeave:e.handleMonthMouseLeave,orderInDisplay:d,selectingDate:e.state.selectingDate,monthShowsDuplicateDaysEnd:v,monthShowsDuplicateDaysStart:g}))))}return s}},e.renderYears=function(){if(!e.props.showTimeSelectOnly&&e.props.showYearPicker)return m.createElement("div",{className:"react-datepicker__year--container"},e.renderHeader({monthDate:e.state.date}),m.createElement(Lc,W({},a.defaultProps,e.props,{selectingDate:e.state.selectingDate,date:e.state.date,onDayClick:e.handleDayClick,clearSelectingDate:e.clearSelectingDate,onYearMouseEnter:e.handleYearMouseEnter,onYearMouseLeave:e.handleYearMouseLeave})))},e.renderTimeSection=function(){if(e.props.showTimeSelect&&(e.state.monthContainer||e.props.showTimeSelectOnly))return m.createElement(Yc,W({},a.defaultProps,e.props,{onChange:e.props.onTimeChange,format:e.props.timeFormat,intervals:e.props.timeIntervals,monthRef:e.state.monthContainer}))},e.renderInputTimeSection=function(){var r=e.props.selected?new Date(e.props.selected):void 0,o=r&&Jt(r)&&!!e.props.selected,s=o?"".concat(un(r.getHours()),":").concat(un(r.getMinutes())):"";if(e.props.showTimeInput)return m.createElement(xc,W({},a.defaultProps,e.props,{date:r,timeString:s,onChange:e.props.onTimeChange}))},e.renderAriaLiveRegion=function(){var r,o=Ne(e.state.date,(r=e.props.yearItemNumber)!==null&&r!==void 0?r:a.defaultProps.yearItemNumber),s=o.startPeriod,i=o.endPeriod,c;return e.props.showYearPicker?c="".concat(s," - ").concat(i):e.props.showMonthYearPicker||e.props.showQuarterYearPicker?c=L(e.state.date):c="".concat(Er(ne(e.state.date),e.props.locale)," ").concat(L(e.state.date)),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},e.state.isRenderAriaLiveMessage&&c)},e.renderChildren=function(){if(e.props.children)return m.createElement("div",{className:"react-datepicker__children-container"},e.props.children)},e.containerRef=w.createRef(),e.state={date:e.getDateInView(),selectingDate:void 0,monthContainer:void 0,isRenderAriaLiveMessage:!1},e}return Object.defineProperty(a,"defaultProps",{get:function(){return{monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousYearButtonLabel:"Previous Year",nextYearButtonLabel:"Next Year",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next Month",yearItemNumber:gt}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){var t=this;this.props.showTimeSelect&&(this.assignMonthContainer=function(){t.setState({monthContainer:t.monthContainer})}())},a.prototype.componentDidUpdate=function(t){var e=this;if(this.props.preSelection&&(!A(this.props.preSelection,t.preSelection)||this.props.monthSelectedIn!==t.monthSelectedIn)){var r=!ae(this.state.date,this.props.preSelection);this.setState({date:this.props.preSelection},function(){return r&&e.handleCustomMonthChange(e.state.date)})}else this.props.openToDate&&!A(this.props.openToDate,t.openToDate)&&this.setState({date:this.props.openToDate})},a.prototype.render=function(){var t=this.props.container||tc;return m.createElement(Zt,{onClickOutside:this.handleClickOutside,style:{display:"contents"},ignoreClass:this.props.outsideClickIgnoreClass},m.createElement("div",{style:{display:"contents"},ref:this.containerRef},m.createElement(t,{className:re("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly}),showTime:this.props.showTimeSelect||this.props.showTimeInput,showTimeSelectOnly:this.props.showTimeSelectOnly},this.renderAriaLiveRegion(),this.renderPreviousButton(),this.renderNextButton(),this.renderMonths(),this.renderYears(),this.renderTodayButton(),this.renderTimeSection(),this.renderInputTimeSection(),this.renderChildren())))},a}(w.Component),Bc=function(n){var a=n.icon,t=n.className,e=t===void 0?"":t,r=n.onClick,o="react-datepicker__calendar-icon";if(typeof a=="string")return m.createElement("i",{className:"".concat(o," ").concat(a," ").concat(e),"aria-hidden":"true",onClick:r});if(m.isValidElement(a)){var s=a;return m.cloneElement(s,{className:"".concat(s.props.className||""," ").concat(o," ").concat(e),onClick:function(i){typeof s.props.onClick=="function"&&s.props.onClick(i),typeof r=="function"&&r(i)}})}return m.createElement("svg",{className:"".concat(o," ").concat(e),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",onClick:r},m.createElement("path",{d:"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z"}))},ta=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.portalRoot=null,e.el=document.createElement("div"),e}return a.prototype.componentDidMount=function(){this.portalRoot=(this.props.portalHost||document).getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),(this.props.portalHost||document.body).appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)},a.prototype.componentWillUnmount=function(){this.portalRoot&&this.portalRoot.removeChild(this.el)},a.prototype.render=function(){return ia.createPortal(this.props.children,this.el)},a}(w.Component),Qc="[tabindex], a, button, input, select, textarea",Vc=function(n){return(n instanceof HTMLAnchorElement||!n.disabled)&&n.tabIndex!==-1},ra=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.getTabChildren=function(){var r;return Array.prototype.slice.call((r=e.tabLoopRef.current)===null||r===void 0?void 0:r.querySelectorAll(Qc),1,-1).filter(Vc)},e.handleFocusStart=function(){var r=e.getTabChildren();r&&r.length>1&&r[r.length-1].focus()},e.handleFocusEnd=function(){var r=e.getTabChildren();r&&r.length>1&&r[0].focus()},e.tabLoopRef=w.createRef(),e}return a.prototype.render=function(){var t;return((t=this.props.enableTabLoop)!==null&&t!==void 0?t:a.defaultProps.enableTabLoop)?m.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},m.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:0,onFocus:this.handleFocusStart}),this.props.children,m.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:0,onFocus:this.handleFocusEnd})):this.props.children},a.defaultProps={enableTabLoop:!0},a}(w.Component);function qc(n){var a=function(t){var e,r=typeof t.hidePopper=="boolean"?t.hidePopper:!0,o=w.useRef(null),s=ec(W({open:!r,whileElementsMounted:Ni,placement:t.popperPlacement,middleware:ye([ji({padding:15}),Hi(10),Bi({element:o})],(e=t.popperModifiers)!==null&&e!==void 0?e:[],!0)},t.popperProps)),i=W(W({},t),{hidePopper:r,popperProps:W(W({},s),{arrowRef:o})});return m.createElement(n,W({},i))};return a}var Kc=function(n){te(a,n);function a(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(a,"defaultProps",{get:function(){return{hidePopper:!0}},enumerable:!1,configurable:!0}),a.prototype.render=function(){var t=this.props,e=t.className,r=t.wrapperClassName,o=t.hidePopper,s=o===void 0?a.defaultProps.hidePopper:o,i=t.popperComponent,c=t.targetComponent,l=t.enableTabLoop,u=t.popperOnKeyDown,d=t.portalId,f=t.portalHost,p=t.popperProps,h=t.showArrow,v=void 0;if(!s){var g=re("react-datepicker-popper",e);v=m.createElement(ra,{enableTabLoop:l},m.createElement("div",{ref:p.refs.setFloating,style:p.floatingStyles,className:g,"data-placement":p.placement,onKeyDown:u},i,h&&m.createElement($i,{ref:p.arrowRef,context:p.context,fill:"currentColor",strokeWidth:1,height:8,width:16,style:{transform:"translateY(-1px)"},className:"react-datepicker__triangle"})))}this.props.popperContainer&&(v=w.createElement(this.props.popperContainer,{},v)),d&&!s&&(v=m.createElement(ta,{portalId:d,portalHost:f},v));var D=re("react-datepicker-wrapper",r);return m.createElement(m.Fragment,null,m.createElement("div",{ref:p.refs.setReference,className:D},c),v)},a}(w.Component),$c=qc(Kc),gn="react-datepicker-ignore-onclickoutside";function Uc(n,a){return n&&a?ne(n)!==ne(a)||L(n)!==L(a):n!==a}var ir="Date input not valid.",zc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.calendar=null,e.input=null,e.getPreSelection=function(){return e.props.openToDate?e.props.openToDate:e.props.selectsEnd&&e.props.startDate?e.props.startDate:e.props.selectsStart&&e.props.endDate?e.props.endDate:V()},e.modifyHolidays=function(){var r;return(r=e.props.holidays)===null||r===void 0?void 0:r.reduce(function(o,s){var i=new Date(s.date);return Jt(i)?ye(ye([],o,!0),[W(W({},s),{date:i})],!1):o},[])},e.calcInitialState=function(){var r,o=e.getPreSelection(),s=Zn(e.props),i=Jn(e.props),c=s&&Ve(o,Pt(s))?s:i&&Le(o,en(i))?i:o;return{open:e.props.startOpen||!1,preventFocus:!1,inputValue:null,preSelection:(r=e.props.selectsRange?e.props.startDate:e.props.selected)!==null&&r!==void 0?r:c,highlightDates:ln(e.props.highlightDates),focused:!1,shouldFocusDayInline:!1,isRenderAriaLiveMessage:!1,wasHidden:!1}},e.resetHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!1}))},e.setHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!0}))},e.setHiddenStateOnVisibilityHidden=function(){document.visibilityState==="hidden"&&e.setHiddenStatus()},e.clearPreventFocusTimeout=function(){e.preventFocusTimeout&&clearTimeout(e.preventFocusTimeout)},e.setFocus=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.focus)===null||o===void 0||o.call(r,{preventScroll:!0})},e.setBlur=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.blur)===null||o===void 0||o.call(r),e.cancelFocusInput()},e.deferBlur=function(){requestAnimationFrame(function(){e.setBlur()})},e.setOpen=function(r,o){o===void 0&&(o=!1),e.setState({open:r,preSelection:r&&e.state.open?e.state.preSelection:e.calcInitialState().preSelection,lastPreSelectChange:cr},function(){r||e.setState(function(s){return{focused:o?s.focused:!1}},function(){!o&&e.deferBlur(),e.setState({inputValue:null})})})},e.inputOk=function(){return Me(e.state.preSelection)},e.isCalendarOpen=function(){return e.props.open===void 0?e.state.open&&!e.props.disabled&&!e.props.readOnly:e.props.open},e.handleFocus=function(r){var o,s,i=e.state.wasHidden,c=i?e.state.open:!0;i&&e.resetHiddenStatus(),e.state.preventFocus||((s=(o=e.props).onFocus)===null||s===void 0||s.call(o,r),c&&!e.props.preventOpenOnFocus&&!e.props.readOnly&&e.setOpen(!0)),e.setState({focused:!0})},e.sendFocusBackToInput=function(){e.preventFocusTimeout&&e.clearPreventFocusTimeout(),e.setState({preventFocus:!0},function(){e.preventFocusTimeout=setTimeout(function(){e.setFocus(),e.setState({preventFocus:!1})})})},e.cancelFocusInput=function(){clearTimeout(e.inputFocusTimeout),e.inputFocusTimeout=void 0},e.deferFocusInput=function(){e.cancelFocusInput(),e.inputFocusTimeout=setTimeout(function(){return e.setFocus()},1)},e.handleDropdownFocus=function(){e.cancelFocusInput()},e.handleBlur=function(r){var o,s;(!e.state.open||e.props.withPortal||e.props.showTimeInput)&&((s=(o=e.props).onBlur)===null||s===void 0||s.call(o,r)),e.state.open&&e.props.open===!1&&e.setOpen(!1),e.setState({focused:!1})},e.handleCalendarClickOutside=function(r){var o,s;e.props.inline||e.setOpen(!1),(s=(o=e.props).onClickOutside)===null||s===void 0||s.call(o,r),e.props.withPortal&&r.preventDefault()},e.handleChange=function(){for(var r,o,s,i,c,l=[],u=0;u=F){fe=N;break}f&&fep&&(Y=M.ArrowLeft,fe=le(p,e.props)?x(Y,fe):p),le(fe,e.props)?((Y===M.PageUp||Y===M.Home)&&(Y=M.ArrowRight),(Y===M.PageDown||Y===M.End)&&(Y=M.ArrowLeft),fe=x(Y,fe)):ee=!0,de++}return fe};if(T===M.Enter){r.preventDefault(),e.handleSelect(S,r),!g&&e.setPreSelection(S);return}else if(T===M.Escape){r.preventDefault(),e.setOpen(!1),e.inputOk()||(c=(i=e.props).onInputError)===null||c===void 0||c.call(i,{code:1,msg:ir});return}var R=null;switch(T){case M.ArrowLeft:case M.ArrowRight:case M.ArrowUp:case M.ArrowDown:case M.PageUp:case M.PageDown:case M.Home:case M.End:R=E(T,S);break}if(!R){(u=(l=e.props).onInputError)===null||u===void 0||u.call(l,{code:1,msg:ir});return}if(r.preventDefault(),e.setState({lastPreSelectChange:cr}),y&&e.setSelected(R),e.setPreSelection(R),k){var B=ne(S),I=ne(R),U=L(S),Q=L(R);B!==I||U!==Q?e.setState({shouldFocusDayInline:!0}):e.setState({shouldFocusDayInline:!1})}}},e.onPopperKeyDown=function(r){var o=r.key;o===M.Escape&&(r.preventDefault(),e.sendFocusBackToInput(),e.setOpen(!1))},e.onClearClick=function(r){r&&r.preventDefault&&r.preventDefault(),e.sendFocusBackToInput();var o=e.props,s=o.selectsRange,i=o.onChange;s?i==null||i([null,null],r):i==null||i(null,r),e.setState({inputValue:null})},e.clear=function(){e.onClearClick()},e.onScroll=function(r){typeof e.props.closeOnScroll=="boolean"&&e.props.closeOnScroll?(r.target===document||r.target===document.documentElement||r.target===document.body)&&e.setOpen(!1):typeof e.props.closeOnScroll=="function"&&e.props.closeOnScroll(r)&&e.setOpen(!1)},e.renderCalendar=function(){var r,o;return!e.props.inline&&!e.isCalendarOpen()?null:m.createElement(jc,W({showMonthYearDropdown:void 0,ref:function(s){e.calendar=s}},e.props,e.state,{setOpen:e.setOpen,dateFormat:(r=e.props.dateFormatCalendar)!==null&&r!==void 0?r:a.defaultProps.dateFormatCalendar,onSelect:e.handleSelect,onClickOutside:e.handleCalendarClickOutside,holidays:yc(e.modifyHolidays()),outsideClickIgnoreClass:gn,onDropdownFocus:e.handleDropdownFocus,onTimeChange:e.handleTimeChange,className:e.props.calendarClassName,container:e.props.calendarContainer,handleOnKeyDown:e.props.onKeyDown,handleOnDayKeyDown:e.onDayKeyDown,setPreSelection:e.setPreSelection,dropdownMode:(o=e.props.dropdownMode)!==null&&o!==void 0?o:a.defaultProps.dropdownMode}),e.props.children)},e.renderAriaLiveRegion=function(){var r=e.props,o=r.dateFormat,s=o===void 0?a.defaultProps.dateFormat:o,i=r.locale,c=e.props.showTimeInput||e.props.showTimeSelect,l=c?"PPPPp":"PPPP",u;return e.props.selectsRange?u="Selected start date: ".concat(ie(e.props.startDate,{dateFormat:l,locale:i}),". ").concat(e.props.endDate?"End date: "+ie(e.props.endDate,{dateFormat:l,locale:i}):""):e.props.showTimeSelectOnly?u="Selected time: ".concat(ie(e.props.selected,{dateFormat:s,locale:i})):e.props.showYearPicker?u="Selected year: ".concat(ie(e.props.selected,{dateFormat:"yyyy",locale:i})):e.props.showMonthYearPicker?u="Selected month: ".concat(ie(e.props.selected,{dateFormat:"MMMM yyyy",locale:i})):e.props.showQuarterYearPicker?u="Selected quarter: ".concat(ie(e.props.selected,{dateFormat:"yyyy, QQQ",locale:i})):u="Selected date: ".concat(ie(e.props.selected,{dateFormat:l,locale:i})),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},u)},e.renderDateInput=function(){var r,o,s,i=re(e.props.className,(r={},r[gn]=e.state.open,r)),c=e.props.customInput||m.createElement("input",{type:"text"}),l=e.props.customInputRef||"ref",u=e.props,d=u.dateFormat,f=d===void 0?a.defaultProps.dateFormat:d,p=u.locale,h=typeof e.props.value=="string"?e.props.value:typeof e.state.inputValue=="string"?e.state.inputValue:e.props.selectsRange?nc(e.props.startDate,e.props.endDate,{dateFormat:f,locale:p}):e.props.selectsMultiple?ac((s=e.props.selectedDates)!==null&&s!==void 0?s:[],{dateFormat:f,locale:p}):ie(e.props.selected,{dateFormat:f,locale:p});return w.cloneElement(c,(o={},o[l]=function(v){e.input=v},o.value=h,o.onBlur=e.handleBlur,o.onChange=e.handleChange,o.onClick=e.onInputClick,o.onFocus=e.handleFocus,o.onKeyDown=e.onInputKeyDown,o.id=e.props.id,o.name=e.props.name,o.form=e.props.form,o.autoFocus=e.props.autoFocus,o.placeholder=e.props.placeholderText,o.disabled=e.props.disabled,o.autoComplete=e.props.autoComplete,o.className=re(c.props.className,i),o.title=e.props.title,o.readOnly=e.props.readOnly,o.required=e.props.required,o.tabIndex=e.props.tabIndex,o["aria-describedby"]=e.props.ariaDescribedBy,o["aria-invalid"]=e.props.ariaInvalid,o["aria-labelledby"]=e.props.ariaLabelledBy,o["aria-required"]=e.props.ariaRequired,o))},e.renderClearButton=function(){var r=e.props,o=r.isClearable,s=r.disabled,i=r.selected,c=r.startDate,l=r.endDate,u=r.clearButtonTitle,d=r.clearButtonClassName,f=d===void 0?"":d,p=r.ariaLabelClose,h=p===void 0?"Close":p,v=r.selectedDates,g=r.readOnly;return o&&!g&&(i!=null||c!=null||l!=null||v!=null&&v.length)?m.createElement("button",{type:"button",className:re("react-datepicker__close-icon",f,{"react-datepicker__close-icon--disabled":s}),disabled:s,"aria-label":h,onClick:e.onClearClick,title:u,tabIndex:-1}):null},e.state=e.calcInitialState(),e.preventFocusTimeout=void 0,e}return Object.defineProperty(a,"defaultProps",{get:function(){return{allowSameDay:!1,dateFormat:"MM/dd/yyyy",dateFormatCalendar:"LLLL yyyy",disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",preventOpenOnFocus:!1,monthsShown:1,readOnly:!1,withPortal:!1,selectsDisabledDaysInRange:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showTwoColumnMonthYearPicker:!1,showFourColumnMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,showWeekPicker:!1,strictParsing:!1,swapRange:!1,timeIntervals:30,timeCaption:"Time",previousMonthAriaLabel:"Previous Month",previousMonthButtonLabel:"Previous Month",nextMonthAriaLabel:"Next Month",nextMonthButtonLabel:"Next Month",previousYearAriaLabel:"Previous Year",previousYearButtonLabel:"Previous Year",nextYearAriaLabel:"Next Year",nextYearButtonLabel:"Next Year",timeInputLabel:"Time",enableTabLoop:!0,yearItemNumber:gt,focusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null,calendarStartDay:void 0,toggleCalendarOnIconClick:!1,usePointerEvent:!1}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){window.addEventListener("scroll",this.onScroll,!0),document.addEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.componentDidUpdate=function(t,e){var r,o,s,i;t.inline&&Uc(t.selected,this.props.selected)&&this.setPreSelection(this.props.selected),this.state.monthSelectedIn!==void 0&&t.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),t.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:ln(this.props.highlightDates)}),!e.focused&&!We(t.selected,this.props.selected)&&this.setState({inputValue:null}),e.open!==this.state.open&&(e.open===!1&&this.state.open===!0&&((o=(r=this.props).onCalendarOpen)===null||o===void 0||o.call(r)),e.open===!0&&this.state.open===!1&&((i=(s=this.props).onCalendarClose)===null||i===void 0||i.call(s)))},a.prototype.componentWillUnmount=function(){this.clearPreventFocusTimeout(),window.removeEventListener("scroll",this.onScroll,!0),document.removeEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.renderInputContainer=function(){var t=this.props,e=t.showIcon,r=t.icon,o=t.calendarIconClassname,s=t.calendarIconClassName,i=t.toggleCalendarOnIconClick,c=this.state.open;return o&&console.warn("calendarIconClassname props is deprecated. should use calendarIconClassName props."),m.createElement("div",{className:"react-datepicker__input-container".concat(e?" react-datepicker__view-calendar-icon":"")},e&&m.createElement(Bc,W({icon:r,className:re(s,!s&&o,c&&"react-datepicker-ignore-onclickoutside")},i?{onClick:this.toggleCalendar}:null)),this.state.isRenderAriaLiveMessage&&this.renderAriaLiveRegion(),this.renderDateInput(),this.renderClearButton())},a.prototype.render=function(){var t=this.renderCalendar();if(this.props.inline)return t;if(this.props.withPortal){var e=this.state.open?m.createElement(ra,{enableTabLoop:this.props.enableTabLoop},m.createElement("div",{className:"react-datepicker__portal",tabIndex:-1,onKeyDown:this.onPortalKeyDown},t)):null;return this.state.open&&this.props.portalId&&(e=m.createElement(ta,W({portalId:this.props.portalId},this.props),e)),m.createElement("div",null,this.renderInputContainer(),e)}return m.createElement($c,W({},this.props,{className:this.props.popperClassName,hidePopper:!this.isCalendarOpen(),targetComponent:this.renderInputContainer(),popperComponent:t,popperOnKeyDown:this.onPopperKeyDown,showArrow:this.props.showPopperArrow}))},a}(w.Component),Gc="input",cr="navigate";const Xc=H.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`,Zc=H.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`,Jc=H.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`,el=H.div` + display: flex; + gap: 1rem; + align-items: center; + flex-wrap: wrap; +`,tl=H.div` + display: flex; + flex-direction: column; + min-width: 150px; +`,rl=H.label` + font-size: 0.875rem; + font-weight: 500; + color: #374151; + margin-bottom: 0.5rem; +`,nl=H(zc)` + width: 100%; + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + color: #111827; + background-color: white; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:hover { + border-color: #9ca3af; + } +`,al=H.button` + padding: 0.5rem 1rem; + background-color: #f3f4f6; + color: #374151; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #e5e7eb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,ol=H.div` + display: flex; + align-items: center; + color: #6b7280; + font-size: 0.875rem; +`,vn=({label:n,selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:s,minDate:i,maxDate:c,placeholderText:l})=>b.jsxs(tl,{children:[b.jsx(rl,{children:n}),b.jsx(nl,{selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:s,minDate:i,maxDate:c,dateFormat:"MMM dd, yyyy",placeholderText:l})]}),sl=({onDateChange:n,initialStartDate:a,initialEndDate:t})=>{const{startDate:e,endDate:r,handleStartDateChange:o,handleEndDateChange:s,handleReset:i}=ua(n,a,t);return b.jsxs(Xc,{children:[b.jsxs(Zc,{children:[b.jsx(Jc,{children:"Date Range"}),b.jsx(al,{onClick:i,children:"Reset"})]}),b.jsxs(el,{children:[b.jsx(vn,{label:"Start Date",selected:e,onChange:o,selectsStart:!0,startDate:e,endDate:r,maxDate:r,placeholderText:"Select start date"}),b.jsx(ol,{children:b.jsx("span",{children:"to"})}),b.jsx(vn,{label:"End Date",selected:r,onChange:s,selectsEnd:!0,startDate:e,endDate:r,minDate:e,maxDate:new Date,placeholderText:"Select end date"})]})]})},il=H.div` + background: white; + border-radius: 0.75rem; + padding: 1.5rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; +`,cl=H.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +`,ll=H.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`,ul=H.input` + width: 100%; + padding: 0.5rem 0.75rem; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + color: #111827; + background-color: white; + margin-bottom: 1rem; + + &:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } + + &:hover { + border-color: #9ca3af; + } +`,dl=H.div` + max-height: 200px; + overflow-y: auto; + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + background-color: white; +`,fl=H.label` + display: flex; + align-items: center; + padding: 0.75rem; + cursor: pointer; + border-bottom: 1px solid #f3f4f6; + transition: background-color 0.2s; + + &:last-child { + border-bottom: none; + } + + &:hover { + background-color: #f9fafb; + } + + &:focus-within { + background-color: #f0fdf4; + } +`,pl=H.input` + margin-right: 0.75rem; + width: 1rem; + height: 1rem; + accent-color: #10b981; +`,hl=H.div` + flex: 1; +`,ml=H.div` + font-weight: 500; + color: #111827; + font-size: 0.875rem; +`,gl=H.div` + font-size: 0.75rem; + color: #6b7280; + margin-top: 0.25rem; +`,vl=H.div` + font-size: 0.75rem; + color: #6b7280; + margin-top: 0.5rem; +`,wl=H.button` + padding: 0.5rem 1rem; + background-color: #f3f4f6; + color: #374151; + border: 1px solid #d1d5db; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #e5e7eb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,yl=[{id:1,name:"Forest A",region:"North Region",treeCount:2500,area:"150 ha"},{id:2,name:"Forest B",region:"South Region",treeCount:3200,area:"200 ha"},{id:3,name:"Forest C",region:"East Region",treeCount:1800,area:"120 ha"},{id:4,name:"Forest D",region:"West Region",treeCount:2750,area:"180 ha"},{id:5,name:"Forest E",region:"Central Region",treeCount:4100,area:"250 ha"}],Dl=({selectedForests:n=[],onChange:a,forests:t=yl})=>{const[e,r]=w.useState(""),[o,s]=w.useState(t);w.useEffect(()=>{const d=t.filter(f=>f.name.toLowerCase().includes(e.toLowerCase())||f.region.toLowerCase().includes(e.toLowerCase()));s(d)},[e,t]);const i=d=>{a&&(n.includes(d)?a(n.filter(f=>f!==d)):a([...n,d]))},c=()=>{a&&a(t.map(d=>d.id))},l=()=>{a&&a([])},u=()=>{a&&a([]),r("")};return b.jsxs(il,{children:[b.jsxs(cl,{children:[b.jsx(ll,{children:"Forest Selection"}),b.jsx(wl,{onClick:u,children:"Reset"})]}),b.jsx(ul,{type:"text",placeholder:"Search forests by name or region...",value:e,onChange:d=>r(d.target.value)}),b.jsxs("div",{className:"flex gap-2 mb-3",children:[b.jsx("button",{onClick:c,className:"px-3 py-1 text-xs bg-green-100 text-green-700 rounded border border-green-200 hover:bg-green-200 transition-colors",children:"Select All"}),b.jsx("button",{onClick:l,className:"px-3 py-1 text-xs bg-gray-100 text-gray-700 rounded border border-gray-200 hover:bg-gray-200 transition-colors",children:"Select None"})]}),b.jsxs(dl,{children:[o.map(d=>b.jsxs(fl,{children:[b.jsx(pl,{type:"checkbox",checked:n.includes(d.id),onChange:()=>i(d.id)}),b.jsxs(hl,{children:[b.jsx(ml,{children:d.name}),b.jsxs(gl,{children:[d.region," • ",d.treeCount," trees • ",d.area]})]})]},d.id)),o.length===0&&b.jsx("div",{className:"p-4 text-center text-gray-500 text-sm",children:"No forests found matching your search."})]}),b.jsxs(vl,{children:[n.length," of ",t.length," forests selected"]})]})},bl=({errors:n})=>!n||Object.keys(n).length===0?null:b.jsxs("div",{className:"mb-4 p-3 bg-red-50 border border-red-200 rounded-lg",children:[b.jsxs("div",{className:"flex items-center mb-2",children:[b.jsx("svg",{className:"w-5 h-5 text-red-500 mr-2",fill:"currentColor",viewBox:"0 0 20 20",children:b.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})}),b.jsx("span",{className:"font-medium text-red-800",children:"Filter Validation Errors"})]}),b.jsx("ul",{className:"text-sm text-red-700 space-y-1",children:Object.entries(n).map(([a,t])=>b.jsxs("li",{children:["• ",t]},a))})]}),pt={MAX_DATE_RANGE_YEARS:5,MAX_SELECTED_FORESTS:10,MILLISECONDS_PER_YEAR:1e3*60*60*24*365},Ot={DATE_ORDER:"Start date must be before or equal to end date",DATE_FUTURE:"End date cannot be in the future",DATE_RANGE_TOO_LARGE:`Date range cannot exceed ${pt.MAX_DATE_RANGE_YEARS} years`,TOO_MANY_FORESTS:`Cannot select more than ${pt.MAX_SELECTED_FORESTS} forests at once`},kl=n=>{if(!n||!n.startDate||!n.endDate)return null;const{startDate:a,endDate:t}=n;return a>t?Ot.DATE_ORDER:t>new Date?Ot.DATE_FUTURE:(t-a)/pt.MILLISECONDS_PER_YEAR>pt.MAX_DATE_RANGE_YEARS?Ot.DATE_RANGE_TOO_LARGE:null},xl=n=>!n||!Array.isArray(n)?null:n.length>pt.MAX_SELECTED_FORESTS?Ot.TOO_MANY_FORESTS:null,_l=n=>{const a={},t=kl(n.dateRange);t&&(a.dateRange=t);const e=xl(n.selectedForests);return e&&(a.selectedForests=e),a},wn=()=>({dateRange:{startDate:new Date(new Date().getFullYear(),0,1),endDate:new Date},selectedForests:[]}),Ml=H.div` + background: #f9fafb; + border-radius: 0.75rem; + padding: 1.5rem; + margin-bottom: 2rem; +`,Cl=H.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.5rem; +`,Sl=H.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`,El=H.p` + color: #6b7280; + margin: 0.5rem 0 0 0; + font-size: 0.875rem; +`,Pl=H.div` + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + + @media (min-width: 768px) { + grid-template-columns: 1fr 1fr; + } + + @media (min-width: 1024px) { + grid-template-columns: 1fr 1fr; + } +`,Tl=H.div` + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-top: 1rem; + padding-top: 1rem; + border-top: 1px solid #e5e7eb; +`,Ol=H.span` + display: inline-flex; + align-items: center; + padding: 0.25rem 0.75rem; + background-color: #10b981; + color: white; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; +`,Nl=H.button` + padding: 0.5rem 1rem; + background-color: #ef4444; + color: white; + border: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #dc2626; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); + } +`,Wl=({onFiltersChange:n,initialFilters:a={}})=>{const[t,e]=ca(),r=w.useRef(!1),o=w.useRef(n),s=w.useRef(!1);w.useEffect(()=>{o.current=n},[n]);const i=w.useCallback(()=>{const y=t.get("startDate"),k=t.get("endDate"),T=t.get("forests"),O={};if(y&&k)try{const S=new Date(y),x=new Date(k);!isNaN(S.getTime())&&!isNaN(x.getTime())&&S<=x&&(O.dateRange={startDate:S,endDate:x})}catch(S){console.warn("Invalid date parameters in URL:",S)}if(T)try{const S=T.split(",").map(x=>parseInt(x,10)).filter(x=>!isNaN(x));S.length>0&&(O.selectedForests=S)}catch(S){console.warn("Invalid forest parameters in URL:",S)}return O},[t]),[c,l]=w.useState(()=>{const y=i();return{...wn(),...a,...y}}),[u,d]=w.useState({}),f=w.useCallback(y=>{const k=_l(y);return d(k),Object.keys(k).length===0},[]),p=w.useCallback(y=>{var T,O;const k=new URLSearchParams;(T=y.dateRange)!=null&&T.startDate&&((O=y.dateRange)!=null&&O.endDate)&&(k.set("startDate",Tr(y.dateRange.startDate)),k.set("endDate",Tr(y.dateRange.endDate))),y.selectedForests&&y.selectedForests.length>0&&k.set("forests",y.selectedForests.join(",")),e(k,{replace:!0})},[e]);w.useEffect(()=>{!r.current&&Object.keys(a).length>0&&(l(y=>({...y,...a})),r.current=!0)},[]);const[h,v]=w.useState([]);w.useEffect(()=>{const y=[];if(c.dateRange.startDate&&c.dateRange.endDate){const k=c.dateRange.startDate.toLocaleDateString(),T=c.dateRange.endDate.toLocaleDateString();y.push(`Date: ${k} - ${T}`)}c.selectedForests.length>0&&y.push(`${c.selectedForests.length} forests selected`),v(y)},[c]),w.useEffect(()=>{if(!s.current){s.current=!0;return}const y=setTimeout(()=>{f(c)&&(p(c),o.current&&o.current(c))},1e3);return()=>clearTimeout(y)},[c,f,p]);const g=w.useCallback(y=>{l(k=>({...k,dateRange:y}))},[]),D=w.useCallback(y=>{l(k=>({...k,selectedForests:y}))},[]),_=w.useCallback(()=>{const y=wn();l(y),d({}),e({},{replace:!0})},[e]);return b.jsxs(Ml,{children:[b.jsxs(Cl,{children:[b.jsxs("div",{children:[b.jsx(Sl,{children:"Global Filters"}),b.jsx(El,{children:"Filter your data by date range and forest selection"})]}),h.length>0&&b.jsx(Nl,{onClick:_,children:"Clear All"})]}),b.jsx(bl,{errors:u}),b.jsxs(Pl,{children:[b.jsx(sl,{onDateChange:g,initialStartDate:c.dateRange.startDate,initialEndDate:c.dateRange.endDate}),b.jsx(Dl,{selectedForests:c.selectedForests,onChange:D})]}),h.length>0&&b.jsx(Tl,{children:h.map((y,k)=>b.jsx(Ol,{children:y},k))})]})};H.div` + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.5rem; +`;H.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`;H.p` + color: #6b7280; + margin: 0.5rem 0 0 0; + font-size: 0.875rem; +`;H.button` + padding: 0.5rem 1rem; + background-color: #ef4444; + color: white; + border: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background-color: #dc2626; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); + } +`;const Hl=(n=!1)=>{const[a,t]=w.useState(n),e=w.useCallback(()=>{t(s=>!s)},[]),r=w.useCallback(()=>{t(!0)},[]),o=w.useCallback(()=>{t(!1)},[]);return{sidebarOpen:a,toggleSidebar:e,openSidebar:r,closeSidebar:o}};export{Il as D,Wl as G,Al as a,Fl as t,Hl as u}; diff --git a/frontend/dist/assets/FilterHeader-DdjxYr1F.css b/frontend/dist/assets/useSidebarState-DdjxYr1F.css similarity index 100% rename from frontend/dist/assets/FilterHeader-DdjxYr1F.css rename to frontend/dist/assets/useSidebarState-DdjxYr1F.css diff --git a/frontend/dist/index.html b/frontend/dist/index.html index 843fd67547..694c39876b 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -5,9 +5,25 @@ ENTity app - + + - +
diff --git a/frontend/index.html b/frontend/index.html index c62f2a4894..2926ed88ec 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -5,6 +5,22 @@ ENTity app +
diff --git a/frontend/src/components/map/ForestMap.jsx b/frontend/src/components/map/ForestMap.jsx index 8f81c249e5..9c90bf233d 100644 --- a/frontend/src/components/map/ForestMap.jsx +++ b/frontend/src/components/map/ForestMap.jsx @@ -10,10 +10,12 @@ import { useMapControls } from '@/hooks/useMapControls'; import MarkerCluster from './MarkerCluster'; import MapLoadingHandler from './MapLoadingHandler'; import MapController from './MapController'; -import MapHeader from './MapHeader'; -import MapLegend from './MapLegend'; import { MapContainerStyled, + MapHeader, + MapTitle, + MapControls, + ControlButton, LoadingOverlay, ErrorOverlay, ErrorContent @@ -28,16 +30,7 @@ L.Icon.Default.mergeOptions({ }); export const ForestMap = ({ - trees = [ - { id: 1, lat: 59.3293, lng: 18.0686, name: 'Tree A-001', health: 'healthy', height: 2.4, species: 'Pine' }, - { id: 2, lat: 59.3300, lng: 18.0690, name: 'Tree A-002', health: 'healthy', height: 2.1, species: 'Oak' }, - { id: 3, lat: 59.3285, lng: 18.0675, name: 'Tree A-003', health: 'warning', height: 1.8, species: 'Birch' }, - { id: 4, lat: 59.3310, lng: 18.0700, name: 'Tree A-004', health: 'critical', height: 1.5, species: 'Spruce' }, - { id: 5, lat: 59.3275, lng: 18.0660, name: 'Tree A-005', health: 'healthy', height: 2.7, species: 'Pine' }, - { id: 6, lat: 59.3320, lng: 18.0710, name: 'Tree A-006', health: 'healthy', height: 2.3, species: 'Oak' }, - { id: 7, lat: 59.3265, lng: 18.0650, name: 'Tree A-007', health: 'warning', height: 1.9, species: 'Birch' }, - { id: 8, lat: 59.3330, lng: 18.0720, name: 'Tree A-008', health: 'healthy', height: 2.5, species: 'Spruce' } - ], + trees = [], onTreeSelect, filters = {}, loading = false, @@ -48,30 +41,8 @@ export const ForestMap = ({ const [mapLoading, setMapLoading] = useState(true); const [mapError, setMapError] = useState(null); - // Filter trees based on applied filters - const filteredTrees = trees.filter(tree => { - // Apply forest filters if selected forests exist - if (filters.selectedForests && filters.selectedForests.length > 0) { - // For now, assume tree has a forestId property (will be updated when backend is ready) - // Currently using a mock forestId based on tree position - const mockForestId = tree.id <= 4 ? 1 : 2; // Mock forest assignment - if (!filters.selectedForests.includes(mockForestId)) { - return false; - } - } - - // Apply date range filters if specified - if (filters.dateRange) { - // For now, assume tree has a plantedDate property (will be updated when backend is ready) - // Currently using a mock date based on tree ID - const mockPlantedDate = new Date(2023, tree.id % 12, tree.id % 28 + 1); // Mock planting date - if (mockPlantedDate < filters.dateRange.startDate || mockPlantedDate > filters.dateRange.endDate) { - return false; - } - } - - return true; - }); + // Trees are already filtered by the parent component + const filteredTrees = trees; const handleTreeClick = useCallback((tree) => { setSelectedTree(tree); diff --git a/frontend/src/components/ui/ExportButton.jsx b/frontend/src/components/ui/ExportButton.jsx index f93ed70635..cde51d8223 100644 --- a/frontend/src/components/ui/ExportButton.jsx +++ b/frontend/src/components/ui/ExportButton.jsx @@ -1,8 +1,7 @@ import { useState } from 'react'; -import Papa from 'papaparse'; -import * as XLSX from 'xlsx'; import styled from 'styled-components'; import { formatDateForInput } from '@utils/dateUtils'; +import { exportAPI } from '@/lib/api'; const ExportContainer = styled.div` position: relative; @@ -125,8 +124,6 @@ const StatusMessage = styled.div` `; export const ExportButtonComponent = ({ - data = [], - fileName = 'export', filters = {}, onExportStart, onExportComplete, @@ -136,24 +133,29 @@ export const ExportButtonComponent = ({ const [isExporting, setIsExporting] = useState(false); const [statusMessage, setStatusMessage] = useState(null); - const filteredData = Array.isArray(data) ? data.filter(item => { - // Apply filters here - for now using basic filtering + // Build export parameters from filters + const buildExportParams = () => { + const params = {}; + if (filters.selectedForests && filters.selectedForests.length > 0) { - const mockForestId = item.id <= 4 ? 1 : 2; - if (!filters.selectedForests.includes(mockForestId)) { - return false; - } + params.forestIds = filters.selectedForests.join(','); } if (filters.dateRange) { - const mockDate = new Date(2023, item.id % 12, item.id % 28 + 1); - if (mockDate < filters.dateRange.startDate || mockDate > filters.dateRange.endDate) { - return false; - } + params.startDate = formatDateForInput(filters.dateRange.startDate); + params.endDate = formatDateForInput(filters.dateRange.endDate); + } + + if (filters.species) { + params.species = filters.species; } - return true; - }) : []; + if (filters.health) { + params.health = filters.health; + } + + return params; + }; const showStatus = (message, type) => { setStatusMessage({ message, type }); @@ -167,41 +169,17 @@ export const ExportButtonComponent = ({ try { if (onExportStart) onExportStart(); - // Simulate processing delay for large datasets - await new Promise(resolve => setTimeout(resolve, 500)); + const params = buildExportParams(); + const filename = `nanwa_trees_export_${formatDateForInput(new Date())}.csv`; - // Prepare data for CSV export - const csvData = filteredData.map(item => ({ - 'Tree ID': item.name, - 'Species': item.species, - 'Height (m)': item.height, - 'Health': item.health, - 'Latitude': item.lat, - 'Longitude': item.lng, - 'Forest': item.id <= 4 ? 'Forest A' : 'Forest B', - 'Export Date': formatDateForInput(new Date()) - })); + await exportAPI.exportTreesCSV(params, filename); - // Generate CSV - const csv = Papa.unparse(csvData); - - // Create and trigger download - const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); - const link = document.createElement('a'); - const url = URL.createObjectURL(blob); - link.setAttribute('href', url); - link.setAttribute('download', `${fileName}_${formatDateForInput(new Date())}.csv`); - link.style.visibility = 'hidden'; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - - showStatus(`CSV exported successfully (${filteredData.length} records)`, 'success'); - if (onExportComplete) onExportComplete('csv', filteredData.length); + showStatus('CSV exported successfully', 'success'); + if (onExportComplete) onExportComplete('csv'); } catch (error) { console.error('CSV export error:', error); - showStatus('CSV export failed', 'error'); + showStatus(error.message || 'CSV export failed', 'error'); if (onExportError) onExportError(error); } finally { setIsExporting(false); @@ -215,37 +193,17 @@ export const ExportButtonComponent = ({ try { if (onExportStart) onExportStart(); - // Simulate processing delay for large datasets - await new Promise(resolve => setTimeout(resolve, 500)); - - // Prepare data for XLSX export - const xlsxData = filteredData.map(item => ({ - 'Tree ID': item.name, - 'Species': item.species, - 'Height (m)': item.height, - 'Health': item.health, - 'Latitude': item.lat, - 'Longitude': item.lng, - 'Forest': item.id <= 4 ? 'Forest A' : 'Forest B', - 'Export Date': formatDateForInput(new Date()) - })); - - // Create workbook and worksheet - const wb = XLSX.utils.book_new(); - const ws = XLSX.utils.json_to_sheet(xlsxData); - - // Add worksheet to workbook - XLSX.utils.book_append_sheet(wb, ws, 'Tree Data'); + const params = buildExportParams(); + const filename = `nanwa_trees_export_${formatDateForInput(new Date())}.xlsx`; - // Generate and trigger download - XLSX.writeFile(wb, `${fileName}_${formatDateForInput(new Date())}.xlsx`); + await exportAPI.exportTreesXLSX(params, filename); - showStatus(`XLSX exported successfully (${filteredData.length} records)`, 'success'); - if (onExportComplete) onExportComplete('xlsx', filteredData.length); + showStatus('XLSX exported successfully', 'success'); + if (onExportComplete) onExportComplete('xlsx'); } catch (error) { console.error('XLSX export error:', error); - showStatus('XLSX export failed', 'error'); + showStatus(error.message || 'XLSX export failed', 'error'); if (onExportError) onExportError(error); } finally { setIsExporting(false); @@ -273,7 +231,7 @@ export const ExportButtonComponent = ({ return ( - + {isExporting ? ( <> @@ -301,7 +259,7 @@ export const ExportButtonComponent = ({
Export as CSV
- {filteredData.length} records • Comma-separated values + Comma-separated values
@@ -312,7 +270,7 @@ export const ExportButtonComponent = ({
Export as XLSX
- {filteredData.length} records • Excel spreadsheet + Excel spreadsheet
diff --git a/frontend/src/components/ui/MapPageHeader.jsx b/frontend/src/components/ui/MapPageHeader.jsx index ec11a9375d..46ff494a8b 100644 --- a/frontend/src/components/ui/MapPageHeader.jsx +++ b/frontend/src/components/ui/MapPageHeader.jsx @@ -5,6 +5,16 @@ const Header = styled.header` background: white; border-bottom: 1px solid #e5e7eb; padding: 1rem 0; + + @media (prefers-color-scheme: dark) { + background: #1f2937; + border-bottom-color: #374151; + } + + .dark & { + background: #1f2937; + border-bottom-color: #374151; + } `; export const MapPageHeader = () => { @@ -22,10 +32,10 @@ export const MapPageHeader = () => {

Nanwa Map View

-
+
Welcome, {user?.name} {isAdmin() && ( - + Admin )} diff --git a/frontend/src/components/ui/MapPageHeaderSection.jsx b/frontend/src/components/ui/MapPageHeaderSection.jsx index 05f317f28f..073352fe6b 100644 --- a/frontend/src/components/ui/MapPageHeaderSection.jsx +++ b/frontend/src/components/ui/MapPageHeaderSection.jsx @@ -1,6 +1,6 @@ import { ExportButtonComponent } from './ExportButton'; -export const MapPageHeaderSection = ({ filters, onExportStart, onExportComplete, onExportError, mockTreeData }) => { +export const MapPageHeaderSection = ({ filters, onExportStart, onExportComplete, onExportError }) => { return (
@@ -12,8 +12,6 @@ export const MapPageHeaderSection = ({ filters, onExportStart, onExportComplete,
{ @@ -22,7 +32,7 @@ export const MapSidebar = () => {
{ +import { useSidebarState } from '../hooks/useSidebarState'; +import { treeAPI } from '../lib/api'; +import LoadingSpinner from '../components/ui/LoadingSpinner';export const MapPage = () => { + const { sidebarOpen, toggleSidebar, closeSidebar } = useSidebarState(); const { filters, handleFiltersChange } = useMapFilters(); const { selectedTree, isModalOpen, handleTreeSelect, handleCloseTreeDetail } = useTreeSelection(); + const [trees, setTrees] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); // Fetch trees data + useEffect(() => { + const fetchTrees = async () => { + setLoading(true); + setError(null); + + try { + // Build API query params from filters + const params = {}; + + if (filters.selectedForests && filters.selectedForests.length > 0) { + params.forestIds = filters.selectedForests.join(','); + } + + if (filters.dateRange) { + params.startDate = filters.dateRange.startDate.toISOString(); + params.endDate = filters.dateRange.endDate.toISOString(); + } + + const response = await treeAPI.getAll(params); + + // The API returns { success: true, data: { trees: [...], pagination: {...} } } + // Handle different possible response structures + let treesData = []; + if (response.data && Array.isArray(response.data.trees)) { + treesData = response.data.trees; + } else if (response.data && Array.isArray(response.data)) { + treesData = response.data; + } else if (Array.isArray(response)) { + treesData = response; + } + + // Transform the data to include lat/lng from location if needed + const transformedTrees = treesData.map(tree => ({ + ...tree, + lat: tree.location?.coordinates?.[1] || tree.lat || 59.3293, + lng: tree.location?.coordinates?.[0] || tree.lng || 18.0686, + name: tree.treeId || tree.name || `Tree ${tree._id}`, + health: tree.health || 'healthy' + })); + + setTrees(transformedTrees); + } catch (err) { + console.error('Failed to fetch trees:', err); + setError(err.message || 'Failed to load trees'); + // Set empty trees array on error so map doesn't crash + setTrees([]); + } finally { + setLoading(false); + } + }; + + fetchTrees(); + }, [filters]); - const handleExportStart = () => { + const handleExportStart = useCallback(() => { console.log('Export started'); - }; + }, []); - const handleExportComplete = (format, recordCount) => { - console.log(`Export completed: ${format} with ${recordCount} records`); - }; + const handleExportComplete = useCallback((format) => { + console.log(`Export completed: ${format}`); + }, []); - const handleExportError = (error) => { + const handleExportError = useCallback((error) => { console.error('Export error:', error); - }; + }, []); return ( - - - +
+ + + {/* Content Area with Sidebar */} +
+ - {/* Main Content */} - -
- + {/* Main Content */} +
+
+ {/* Header Section */} +
+
+
+

Forest Map

+

+ Explore your forests and individual trees with interactive mapping. +

+
+
+ +
+
+
- {/* Global Filters */} - + {/* Global Filters */} + - {/* Tree Detail Modal */} - + {/* Tree Detail Modal */} + - {/* Map */} - -
- - + {/* Map */} + {loading ? ( +
+ +
+ ) : ( + + )} +
+ +
+
); }; \ No newline at end of file From ab6a83d4d6872002d326f6a6bbd2f698b8aeae7e Mon Sep 17 00:00:00 2001 From: Caspian Almerud Date: Wed, 6 Aug 2025 14:36:24 +0200 Subject: [PATCH 048/111] Updated treestorage, some edits to the map component --- frontend/dist/assets/AdminPage-BfI5jmjy.js | 102 ----- frontend/dist/assets/AdminPage-CnbyUOAU.js | 102 +++++ ...OzzJtP4.js => ChartComponents-CnhCT1GQ.js} | 2 +- ...Cu0JyOh5.js => DarkModeToggle-DYOgA8sV.js} | 2 +- ...-DOe_EIif.js => DashboardPage-DjVP0e2L.js} | 10 +- ...ges-CFbRbfCl.js => ErrorPages-BOUlGSHx.js} | 2 +- ...n-BryKwkQ4.js => ExportButton-CO4K-of6.js} | 2 +- ...s-BsiOcVAQ.js => FormElements-DFAqWcb0.js} | 2 +- frontend/dist/assets/FormField-BLwCJzgw.js | 1 + ...ton-vDjz_WRZ.js => IconButton-Cy_suQAe.js} | 2 +- ...ge-BfmN78ZN.js => LandingPage-BBS10Grj.js} | 2 +- frontend/dist/assets/LoginPage-Ckincecw.js | 1 + frontend/dist/assets/LoginPage-b5sbaCb6.js | 1 - frontend/dist/assets/MapPage-25t4MxmA.css | 1 - frontend/dist/assets/MapPage-3yaWYNWa.css | 1 + frontend/dist/assets/MapPage-BLNQ6ZTG.js | 110 +++++ frontend/dist/assets/MapPage-DVu2-W4J.js | 113 ----- ...bar-jstr5dKK.js => MapSidebar-DVta1WHd.js} | 2 +- frontend/dist/assets/Modal-BNFLubTG.js | 123 ++++++ ...{Navbar-BSLKvp05.js => Navbar-N3bkUWQJ.js} | 2 +- .../dist/assets/PasswordInput-Bff6SLQJ.js | 1 - .../dist/assets/PasswordInput-C1THfjeW.js | 1 + ...e-Cf4V_AZ4.js => RegisterPage-Cf-sXby2.js} | 4 +- frontend/dist/assets/Table-CfKObwuM.js | 69 --- .../dist/assets/TreeDetailModal-CdyalJyV.js | 126 ++++++ .../dist/assets/TreeDetailModal-DPmuOlrX.js | 180 -------- ...BIoNlDES.js => TreeDetailPage-B6nEFtyV.js} | 2 +- frontend/dist/assets/index-3rMZFSc5.css | 1 - .../{index-CGkKx7Xv.js => index-Cp0G27Fl.js} | 4 +- frontend/dist/assets/index-fKubZ8c-.css | 1 + frontend/dist/assets/leaflet-DEYfr1U5.js | 4 + frontend/dist/assets/leaflet-Dgihpmma.css | 1 + frontend/dist/assets/treeService-D86yjeOz.js | 1 + ...g.js => useKeyboardNavigation-BEEMcJj7.js} | 2 +- ...tkpd6zX.js => useSidebarState-DD0BN3bF.js} | 66 +-- frontend/dist/index.html | 4 +- .../src/components/admin/TreeFormModal.jsx | 415 ++++++++++++++++++ .../src/components/admin/TreeManagement.jsx | 221 ++++++++++ .../src/components/ui/MapLocationPicker.jsx | 136 ++++++ frontend/src/lib/stores/dataStore.js | 103 ++++- frontend/src/lib/stores/filtersStore.js | 147 +++++-- frontend/src/lib/stores/forestStore.js | 214 +++++++++ frontend/src/lib/stores/index.js | 86 +++- frontend/src/lib/stores/treeStore.js | 257 +++++++++++ frontend/src/pages/AdminPage.jsx | 45 +- 45 files changed, 2113 insertions(+), 561 deletions(-) delete mode 100644 frontend/dist/assets/AdminPage-BfI5jmjy.js create mode 100644 frontend/dist/assets/AdminPage-CnbyUOAU.js rename frontend/dist/assets/{ChartComponents-DOzzJtP4.js => ChartComponents-CnhCT1GQ.js} (96%) rename frontend/dist/assets/{DarkModeToggle-Cu0JyOh5.js => DarkModeToggle-DYOgA8sV.js} (91%) rename frontend/dist/assets/{DashboardPage-DOe_EIif.js => DashboardPage-DjVP0e2L.js} (98%) rename frontend/dist/assets/{ErrorPages-CFbRbfCl.js => ErrorPages-BOUlGSHx.js} (91%) rename frontend/dist/assets/{ExportButton-BryKwkQ4.js => ExportButton-CO4K-of6.js} (98%) rename frontend/dist/assets/{FormElements-BsiOcVAQ.js => FormElements-DFAqWcb0.js} (98%) create mode 100644 frontend/dist/assets/FormField-BLwCJzgw.js rename frontend/dist/assets/{IconButton-vDjz_WRZ.js => IconButton-Cy_suQAe.js} (82%) rename frontend/dist/assets/{LandingPage-BfmN78ZN.js => LandingPage-BBS10Grj.js} (94%) create mode 100644 frontend/dist/assets/LoginPage-Ckincecw.js delete mode 100644 frontend/dist/assets/LoginPage-b5sbaCb6.js delete mode 100644 frontend/dist/assets/MapPage-25t4MxmA.css create mode 100644 frontend/dist/assets/MapPage-3yaWYNWa.css create mode 100644 frontend/dist/assets/MapPage-BLNQ6ZTG.js delete mode 100644 frontend/dist/assets/MapPage-DVu2-W4J.js rename frontend/dist/assets/{MapSidebar-jstr5dKK.js => MapSidebar-DVta1WHd.js} (98%) create mode 100644 frontend/dist/assets/Modal-BNFLubTG.js rename frontend/dist/assets/{Navbar-BSLKvp05.js => Navbar-N3bkUWQJ.js} (90%) delete mode 100644 frontend/dist/assets/PasswordInput-Bff6SLQJ.js create mode 100644 frontend/dist/assets/PasswordInput-C1THfjeW.js rename frontend/dist/assets/{RegisterPage-Cf4V_AZ4.js => RegisterPage-Cf-sXby2.js} (95%) delete mode 100644 frontend/dist/assets/Table-CfKObwuM.js create mode 100644 frontend/dist/assets/TreeDetailModal-CdyalJyV.js delete mode 100644 frontend/dist/assets/TreeDetailModal-DPmuOlrX.js rename frontend/dist/assets/{TreeDetailPage-BIoNlDES.js => TreeDetailPage-B6nEFtyV.js} (89%) delete mode 100644 frontend/dist/assets/index-3rMZFSc5.css rename frontend/dist/assets/{index-CGkKx7Xv.js => index-Cp0G27Fl.js} (95%) create mode 100644 frontend/dist/assets/index-fKubZ8c-.css create mode 100644 frontend/dist/assets/leaflet-DEYfr1U5.js create mode 100644 frontend/dist/assets/leaflet-Dgihpmma.css create mode 100644 frontend/dist/assets/treeService-D86yjeOz.js rename frontend/dist/assets/{useKeyboardNavigation-Bh0nMcUg.js => useKeyboardNavigation-BEEMcJj7.js} (97%) rename frontend/dist/assets/{useSidebarState-Ctkpd6zX.js => useSidebarState-DD0BN3bF.js} (66%) create mode 100644 frontend/src/components/admin/TreeFormModal.jsx create mode 100644 frontend/src/components/admin/TreeManagement.jsx create mode 100644 frontend/src/components/ui/MapLocationPicker.jsx create mode 100644 frontend/src/lib/stores/forestStore.js create mode 100644 frontend/src/lib/stores/treeStore.js diff --git a/frontend/dist/assets/AdminPage-BfI5jmjy.js b/frontend/dist/assets/AdminPage-BfI5jmjy.js deleted file mode 100644 index ebb36d1d6c..0000000000 --- a/frontend/dist/assets/AdminPage-BfI5jmjy.js +++ /dev/null @@ -1,102 +0,0 @@ -import{j as e,n as k,r as d,e as I,u as v,d as a,N as E}from"./index-CGkKx7Xv.js";import{E as y,T as M,a as N,b as S,c as T,d as m,S as O,e as P,f as D,g as U}from"./Table-CfKObwuM.js";import{F as _,S as W,a as z,A as H,P as B}from"./FormElements-BsiOcVAQ.js";import"./vendor-BtP0CW_r.js";const p={CREATE:"CREATE",UPDATE:"UPDATE",DELETE:"DELETE",LOGIN:"LOGIN",LOGOUT:"LOGOUT"},F=[{value:"",label:"All Actions"},{value:p.CREATE,label:"Create"},{value:p.UPDATE,label:"Update"},{value:p.DELETE,label:"Delete"},{value:p.LOGIN,label:"Login"},{value:p.LOGOUT,label:"Logout"}],w=10,R=({searchTerm:t,setSearchTerm:s,actionFilter:r,setActionFilter:o})=>e.jsxs(_,{children:[e.jsx(W,{type:"text",placeholder:"Search by user, action, or details...",value:t,onChange:n=>s(n.target.value)}),e.jsx(z,{value:r,onChange:n=>o(n.target.value),children:F.map(n=>e.jsx("option",{value:n.value,children:n.label},n.value))})]}),G={ASC:"asc"},f={NONE:"⇅",ASC:"↑",DESC:"↓"},Z=(t,s,r)=>s!==t?f.NONE:r===G.ASC?f.ASC:f.DESC,A=({field:t,sortField:s,sortDirection:r,onSort:o,children:n})=>e.jsxs(T,{onClick:()=>o(t),children:[n," ",e.jsx(O,{children:Z(t,s,r)})]}),K=({sortField:t,sortDirection:s,onSort:r})=>e.jsx(N,{children:e.jsxs(S,{children:[e.jsx(A,{field:"timestamp",sortField:t,sortDirection:s,onSort:r,children:"Timestamp"}),e.jsx(A,{field:"user",sortField:t,sortDirection:s,onSort:r,children:"User"}),e.jsx(A,{field:"action",sortField:t,sortDirection:s,onSort:r,children:"Action"}),e.jsx(A,{field:"resource",sortField:t,sortDirection:s,onSort:r,children:"Resource"}),e.jsx(T,{children:"Details"}),e.jsx(T,{children:"IP Address"})]})}),V=({log:t})=>e.jsxs(S,{children:[e.jsx(m,{children:k(t.timestamp)}),e.jsx(m,{children:t.user}),e.jsx(m,{children:e.jsx(H,{action:t.action,children:t.action})}),e.jsx(m,{children:t.resource}),e.jsx(m,{children:t.details}),e.jsx(m,{children:t.ipAddress})]},t.id),X=({logs:t,sortField:s,sortDirection:r,onSort:o})=>t.length===0?e.jsx(y,{children:e.jsx("p",{children:"No audit logs found matching your criteria."})}):e.jsxs(M,{children:[e.jsx(K,{sortField:s,sortDirection:r,onSort:o}),e.jsx("tbody",{children:t.map(n=>e.jsx(V,{log:n},n.id))})]}),$=[{id:1,timestamp:"2024-01-15T10:30:00Z",user:"admin@nanwa.com",action:"CREATE",resource:"Tree",resourceId:"tree_001",details:"Created new tree record for Forest A",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:2,timestamp:"2024-01-15T10:25:00Z",user:"user@nanwa.com",action:"UPDATE",resource:"Tree",resourceId:"tree_002",details:"Updated height measurement from 2.3m to 2.4m",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:3,timestamp:"2024-01-15T10:20:00Z",user:"admin@nanwa.com",action:"DELETE",resource:"Forest",resourceId:"forest_003",details:"Deleted forest record due to data cleanup",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:4,timestamp:"2024-01-15T10:15:00Z",user:"user@nanwa.com",action:"LOGIN",resource:"Authentication",resourceId:"auth_session_001",details:"User logged in successfully",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:5,timestamp:"2024-01-15T10:10:00Z",user:"admin@nanwa.com",action:"UPDATE",resource:"User",resourceId:"user_001",details:"Updated user permissions to admin level",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:6,timestamp:"2024-01-15T10:05:00Z",user:"system",action:"CREATE",resource:"Measurement",resourceId:"measurement_001",details:"Automated measurement recorded for tree batch",ipAddress:"127.0.0.1",userAgent:"System/1.0"},{id:7,timestamp:"2024-01-15T10:00:00Z",user:"user@nanwa.com",action:"LOGOUT",resource:"Authentication",resourceId:"auth_session_002",details:"User logged out",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}],q=()=>{const[t,s]=d.useState([]),[r,o]=d.useState(!1),n=async()=>{o(!0);try{await new Promise(i=>setTimeout(i,500)),s($)}catch(i){console.error("Failed to fetch audit logs:",i)}finally{o(!1)}};return d.useEffect(()=>{n()},[]),{auditLogs:t,loading:r,refetchAuditLogs:n}},J=t=>{const[s,r]=d.useState(""),[o,n]=d.useState(""),[i,h]=d.useState("timestamp"),[l,g]=d.useState("desc"),b=d.useMemo(()=>t.filter(c=>{const x=s===""||c.user.toLowerCase().includes(s.toLowerCase())||c.details.toLowerCase().includes(s.toLowerCase())||c.resource.toLowerCase().includes(s.toLowerCase()),u=o===""||c.action===o;return x&&u}).sort((c,x)=>{const u=c[i],j=x[i];return l==="asc"?u>j?1:-1:u{i===c?g(l==="asc"?"desc":"asc"):(h(c),g("desc"))}}},Q=(t,s=w)=>{const[r,o]=d.useState(1),n=Math.ceil(t.length/s),i=(r-1)*s,h=t.slice(i,i+s);return d.useEffect(()=>{o(1)},[t.length]),{currentPage:r,setCurrentPage:o,totalPages:n,startIndex:i,paginatedData:h,pageSize:s}},Y=()=>{const{auditLogs:t,loading:s}=q(),{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i,sortField:h,sortDirection:l,filteredAndSortedLogs:g,handleSort:b}=J(t),{currentPage:L,setCurrentPage:c,totalPages:x,startIndex:u,paginatedData:j,pageSize:C}=Q(g,w);return e.jsxs(P,{children:[e.jsxs(D,{children:[e.jsx(U,{children:"Audit Log"}),e.jsx(R,{searchTerm:r,setSearchTerm:o,actionFilter:n,setActionFilter:i})]}),s?e.jsx(I,{text:"Loading audit logs..."}):e.jsx(X,{logs:j,sortField:h,sortDirection:l,onSort:b}),e.jsx(B,{currentPage:L,totalPages:x,startIndex:u,pageSize:C,totalItems:g.length,onPageChange:c})]})},ee=a.header` - background: white; - border-bottom: 1px solid #e5e7eb; - padding: 1rem 0; -`,te=a.div` - max-width: 1200px; - margin: 0 auto; - padding: 0 1rem; - display: flex; - justify-content: space-between; - align-items: center; -`,se=a.a` - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem 1rem; - background: #10b981; - color: white; - text-decoration: none; - border-radius: 0.5rem; - font-size: 0.875rem; - font-weight: 500; - transition: all 0.2s; - - &:hover { - background: #059669; - } -`,re=a.span` - padding: 0.5rem 1rem; - background: #fee2e2; - color: #991b1b; - border-radius: 9999px; - font-size: 0.875rem; - font-weight: 500; -`,ne=a.div` - display: flex; - align-items: center; - gap: 1rem; -`,oe=a.span` - font-size: 0.875rem; - color: #374151; -`,ae=a.button` - color: #374151; - background: none; - border: none; - padding: 0.5rem; - border-radius: 0.375rem; - cursor: pointer; - transition: color 0.2s; - - &:hover { - color: #10b981; - } -`,ie=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 19l-7-7m0 0l7-7m-7 7h18"})}),ce=()=>e.jsx("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),de=()=>{const{user:t,logout:s}=v(),r=async()=>{await s()};return e.jsx(ee,{children:e.jsxs(te,{children:[e.jsxs(se,{href:"/dashboard",children:[e.jsx(ie,{}),"Back to Dashboard"]}),e.jsxs(ne,{children:[e.jsx(re,{children:"Admin Panel"}),e.jsxs(oe,{children:["Welcome, ",e.jsx("strong",{children:t==null?void 0:t.name})]}),e.jsx(ae,{onClick:r,"aria-label":"Logout",children:e.jsx(ce,{})})]})]})})},le=a.div` - background: white; - padding: 1.5rem; - border-radius: 0.75rem; - border: 1px solid #e5e7eb; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); -`,ue=a.div` - font-size: 2rem; - font-weight: 700; - color: #111827; - margin-bottom: 0.5rem; -`,me=a.div` - font-size: 0.875rem; - color: #6b7280; - font-weight: 500; -`,he=a.div` - display: inline-flex; - align-items: center; - justify-content: center; - width: 3rem; - height: 3rem; - border-radius: 0.75rem; - margin-bottom: 1rem; - - ${t=>{switch(t.type){case"users":return"background: #dbeafe; color: #1e40af;";case"actions":return"background: #d1fae5; color: #065f46;";case"errors":return"background: #fee2e2; color: #991b1b;";case"activity":return"background: #fef3c7; color: #92400e;";default:return"background: #f3f4f6; color: #374151;"}}} -`,ge=({icon:t,value:s,label:r,type:o})=>e.jsxs(le,{children:[e.jsx(he,{type:o,children:t}),e.jsx(ue,{children:s}),e.jsx(me,{children:r})]}),xe=a.div` - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; -`,pe=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z"})}),je=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5H7a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"})}),Ae=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),be=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),fe=()=>{const t=[{icon:e.jsx(pe,{}),value:"42",label:"Active Users",type:"users"},{icon:e.jsx(je,{}),value:"1,247",label:"Total Actions Today",type:"actions"},{icon:e.jsx(Ae,{}),value:"3",label:"Failed Actions",type:"errors"},{icon:e.jsx(be,{}),value:"98.5%",label:"System Uptime",type:"activity"}];return e.jsx(xe,{children:t.map((s,r)=>e.jsx(ge,{icon:s.icon,value:s.value,label:s.label,type:s.type},r))})},Te=a.div` - min-height: 100vh; - background-color: #f9fafb; -`,Le=a.main` - max-width: 1200px; - margin: 0 auto; - padding: 2rem 1rem; -`,ve=a.div` - margin-bottom: 2rem; -`,Se=a.h1` - font-size: 2.5rem; - font-weight: 700; - color: #111827; - margin: 0 0 1rem 0; -`,we=a.p` - color: #6b7280; - font-size: 1.125rem; - margin: 0; -`,Ce=({children:t})=>e.jsx(Te,{children:t}),ke=({title:t,description:s})=>e.jsxs(ve,{children:[e.jsx(Se,{children:t}),e.jsx(we,{children:s})]}),Ie=({children:t})=>e.jsx(Le,{children:t}),Oe=()=>{const{isAdmin:t}=v();return t()?e.jsxs(Ce,{children:[e.jsx(de,{}),e.jsxs(Ie,{children:[e.jsx(ke,{title:"System Administration",description:"Monitor system activity and user actions with comprehensive audit logging."}),e.jsx(fe,{}),e.jsx(Y,{})]})]}):e.jsx(E,{to:"/dashboard",replace:!0})};export{Oe as AdminPage}; diff --git a/frontend/dist/assets/AdminPage-CnbyUOAU.js b/frontend/dist/assets/AdminPage-CnbyUOAU.js new file mode 100644 index 0000000000..c7a1e7d5d5 --- /dev/null +++ b/frontend/dist/assets/AdminPage-CnbyUOAU.js @@ -0,0 +1,102 @@ +import{A as $,j as e,n as Z,r as d,e as B,u as U,d as f,N as V}from"./index-Cp0G27Fl.js";import{E as K,T as X,a as J,b as H,c as _,d as T,S as Q,e as Y,f as ee,g as te,M as ae}from"./Modal-BNFLubTG.js";import{F as re,S as R,a as se,A as ne,P as oe}from"./FormElements-DFAqWcb0.js";import{t as M}from"./treeService-D86yjeOz.js";import{F as w}from"./FormField-BLwCJzgw.js";import{c as ie,l as le,a as de,e as ce,M as ue,T as ge,b as xe,L as q}from"./leaflet-DEYfr1U5.js";import"./vendor-BtP0CW_r.js";const C=new $,me={getAll:(t={})=>C.get("/forests",t),getById:t=>C.get(`/forests/${t}`),getAnalytics:t=>C.get(`/forests/${t}/analytics`),create:t=>C.post("/forests",t),update:(t,r)=>C.put(`/forests/${t}`,r),delete:t=>C.delete(`/forests/${t}`)},he=ie(function({position:r,...a},o){const l=new le.Marker(r,a);return de(l,ce(o,{overlayContainer:l}))},function(r,a,o){a.position!==o.position&&r.setLatLng(a.position),a.icon!=null&&a.icon!==o.icon&&r.setIcon(a.icon),a.zIndexOffset!=null&&a.zIndexOffset!==o.zIndexOffset&&r.setZIndexOffset(a.zIndexOffset),a.opacity!=null&&a.opacity!==o.opacity&&r.setOpacity(a.opacity),r.dragging!=null&&a.draggable!==o.draggable&&(a.draggable===!0?r.dragging.enable():r.dragging.disable())}),S={CREATE:"CREATE",UPDATE:"UPDATE",DELETE:"DELETE",LOGIN:"LOGIN",LOGOUT:"LOGOUT"},pe=[{value:"",label:"All Actions"},{value:S.CREATE,label:"Create"},{value:S.UPDATE,label:"Update"},{value:S.DELETE,label:"Delete"},{value:S.LOGIN,label:"Login"},{value:S.LOGOUT,label:"Logout"}],G=10,be=({searchTerm:t,setSearchTerm:r,actionFilter:a,setActionFilter:o})=>e.jsxs(re,{children:[e.jsx(R,{type:"text",placeholder:"Search by user, action, or details...",value:t,onChange:l=>r(l.target.value)}),e.jsx(se,{value:a,onChange:l=>o(l.target.value),children:pe.map(l=>e.jsx("option",{value:l.value,children:l.label},l.value))})]}),fe={ASC:"asc"},O={NONE:"⇅",ASC:"↑",DESC:"↓"},je=(t,r,a)=>r!==t?O.NONE:a===fe.ASC?O.ASC:O.DESC,E=({field:t,sortField:r,sortDirection:a,onSort:o,children:l})=>e.jsxs(_,{onClick:()=>o(t),children:[l," ",e.jsx(Q,{children:je(t,r,a)})]}),ye=({sortField:t,sortDirection:r,onSort:a})=>e.jsx(J,{children:e.jsxs(H,{children:[e.jsx(E,{field:"timestamp",sortField:t,sortDirection:r,onSort:a,children:"Timestamp"}),e.jsx(E,{field:"user",sortField:t,sortDirection:r,onSort:a,children:"User"}),e.jsx(E,{field:"action",sortField:t,sortDirection:r,onSort:a,children:"Action"}),e.jsx(E,{field:"resource",sortField:t,sortDirection:r,onSort:a,children:"Resource"}),e.jsx(_,{children:"Details"}),e.jsx(_,{children:"IP Address"})]})}),ve=({log:t})=>e.jsxs(H,{children:[e.jsx(T,{children:Z(t.timestamp)}),e.jsx(T,{children:t.user}),e.jsx(T,{children:e.jsx(ne,{action:t.action,children:t.action})}),e.jsx(T,{children:t.resource}),e.jsx(T,{children:t.details}),e.jsx(T,{children:t.ipAddress})]},t.id),ke=({logs:t,sortField:r,sortDirection:a,onSort:o})=>t.length===0?e.jsx(K,{children:e.jsx("p",{children:"No audit logs found matching your criteria."})}):e.jsxs(X,{children:[e.jsx(ye,{sortField:r,sortDirection:a,onSort:o}),e.jsx("tbody",{children:t.map(l=>e.jsx(ve,{log:l},l.id))})]}),Ne=[{id:1,timestamp:"2024-01-15T10:30:00Z",user:"admin@nanwa.com",action:"CREATE",resource:"Tree",resourceId:"tree_001",details:"Created new tree record for Forest A",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:2,timestamp:"2024-01-15T10:25:00Z",user:"user@nanwa.com",action:"UPDATE",resource:"Tree",resourceId:"tree_002",details:"Updated height measurement from 2.3m to 2.4m",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:3,timestamp:"2024-01-15T10:20:00Z",user:"admin@nanwa.com",action:"DELETE",resource:"Forest",resourceId:"forest_003",details:"Deleted forest record due to data cleanup",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:4,timestamp:"2024-01-15T10:15:00Z",user:"user@nanwa.com",action:"LOGIN",resource:"Authentication",resourceId:"auth_session_001",details:"User logged in successfully",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"},{id:5,timestamp:"2024-01-15T10:10:00Z",user:"admin@nanwa.com",action:"UPDATE",resource:"User",resourceId:"user_001",details:"Updated user permissions to admin level",ipAddress:"192.168.1.100",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"},{id:6,timestamp:"2024-01-15T10:05:00Z",user:"system",action:"CREATE",resource:"Measurement",resourceId:"measurement_001",details:"Automated measurement recorded for tree batch",ipAddress:"127.0.0.1",userAgent:"System/1.0"},{id:7,timestamp:"2024-01-15T10:00:00Z",user:"user@nanwa.com",action:"LOGOUT",resource:"Authentication",resourceId:"auth_session_002",details:"User logged out",ipAddress:"192.168.1.101",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}],we=()=>{const[t,r]=d.useState([]),[a,o]=d.useState(!1),l=async()=>{o(!0);try{await new Promise(i=>setTimeout(i,500)),r(Ne)}catch(i){console.error("Failed to fetch audit logs:",i)}finally{o(!1)}};return d.useEffect(()=>{l()},[]),{auditLogs:t,loading:a,refetchAuditLogs:l}},Ae=t=>{const[r,a]=d.useState(""),[o,l]=d.useState(""),[i,y]=d.useState("timestamp"),[c,k]=d.useState("desc"),u=d.useMemo(()=>t.filter(h=>{const b=r===""||h.user.toLowerCase().includes(r.toLowerCase())||h.details.toLowerCase().includes(r.toLowerCase())||h.resource.toLowerCase().includes(r.toLowerCase()),n=o===""||h.action===o;return b&&n}).sort((h,b)=>{const n=h[i],v=b[i];return c==="asc"?n>v?1:-1:n{i===h?k(c==="asc"?"desc":"asc"):(y(h),k("desc"))}}},Te=(t,r=G)=>{const[a,o]=d.useState(1),l=Math.ceil(t.length/r),i=(a-1)*r,y=t.slice(i,i+r);return d.useEffect(()=>{o(1)},[t.length]),{currentPage:a,setCurrentPage:o,totalPages:l,startIndex:i,paginatedData:y,pageSize:r}},Ce=()=>{const{auditLogs:t,loading:r}=we(),{searchTerm:a,setSearchTerm:o,actionFilter:l,setActionFilter:i,sortField:y,sortDirection:c,filteredAndSortedLogs:k,handleSort:u}=Ae(t),{currentPage:m,setCurrentPage:h,totalPages:b,startIndex:n,paginatedData:v,pageSize:A}=Te(k,G);return e.jsxs(Y,{children:[e.jsxs(ee,{children:[e.jsx(te,{children:"Audit Log"}),e.jsx(be,{searchTerm:a,setSearchTerm:o,actionFilter:l,setActionFilter:i})]}),r?e.jsx(B,{text:"Loading audit logs..."}):e.jsx(ke,{logs:v,sortField:y,sortDirection:c,onSort:u}),e.jsx(oe,{currentPage:m,totalPages:b,startIndex:n,pageSize:A,totalItems:k.length,onPageChange:h})]})},Se=f.header` + background: white; + border-bottom: 1px solid #e5e7eb; + padding: 1rem 0; +`,Ie=f.div` + max-width: 1200px; + margin: 0 auto; + padding: 0 1rem; + display: flex; + justify-content: space-between; + align-items: center; +`,Le=f.a` + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: #10b981; + color: white; + text-decoration: none; + border-radius: 0.5rem; + font-size: 0.875rem; + font-weight: 500; + transition: all 0.2s; + + &:hover { + background: #059669; + } +`,Ee=f.span` + padding: 0.5rem 1rem; + background: #fee2e2; + color: #991b1b; + border-radius: 9999px; + font-size: 0.875rem; + font-weight: 500; +`,Me=f.div` + display: flex; + align-items: center; + gap: 1rem; +`,De=f.span` + font-size: 0.875rem; + color: #374151; +`,Fe=f.button` + color: #374151; + background: none; + border: none; + padding: 0.5rem; + border-radius: 0.375rem; + cursor: pointer; + transition: color 0.2s; + + &:hover { + color: #10b981; + } +`,Pe=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 19l-7-7m0 0l7-7m-7 7h18"})}),Oe=()=>e.jsx("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),_e=()=>{const{user:t,logout:r}=U(),a=async()=>{await r()};return e.jsx(Se,{children:e.jsxs(Ie,{children:[e.jsxs(Le,{href:"/dashboard",children:[e.jsx(Pe,{}),"Back to Dashboard"]}),e.jsxs(Me,{children:[e.jsx(Ee,{children:"Admin Panel"}),e.jsxs(De,{children:["Welcome, ",e.jsx("strong",{children:t==null?void 0:t.name})]}),e.jsx(Fe,{onClick:a,"aria-label":"Logout",children:e.jsx(Oe,{})})]})]})})},Ue=f.div` + background: white; + padding: 1.5rem; + border-radius: 0.75rem; + border: 1px solid #e5e7eb; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +`,ze=f.div` + font-size: 2rem; + font-weight: 700; + color: #111827; + margin-bottom: 0.5rem; +`,We=f.div` + font-size: 0.875rem; + color: #6b7280; + font-weight: 500; +`,Be=f.div` + display: inline-flex; + align-items: center; + justify-content: center; + width: 3rem; + height: 3rem; + border-radius: 0.75rem; + margin-bottom: 1rem; + + ${t=>{switch(t.type){case"users":return"background: #dbeafe; color: #1e40af;";case"actions":return"background: #d1fae5; color: #065f46;";case"errors":return"background: #fee2e2; color: #991b1b;";case"activity":return"background: #fef3c7; color: #92400e;";default:return"background: #f3f4f6; color: #374151;"}}} +`,He=({icon:t,value:r,label:a,type:o})=>e.jsxs(Ue,{children:[e.jsx(Be,{type:o,children:t}),e.jsx(ze,{children:r}),e.jsx(We,{children:a})]}),Re=f.div` + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 1.5rem; + margin-bottom: 2rem; +`,qe=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z"})}),Ge=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5H7a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"})}),$e=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),Ze=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),Ve=()=>{const t=[{icon:e.jsx(qe,{}),value:"42",label:"Active Users",type:"users"},{icon:e.jsx(Ge,{}),value:"1,247",label:"Total Actions Today",type:"actions"},{icon:e.jsx($e,{}),value:"3",label:"Failed Actions",type:"errors"},{icon:e.jsx(Ze,{}),value:"98.5%",label:"System Uptime",type:"activity"}];return e.jsx(Re,{children:t.map((r,a)=>e.jsx(He,{icon:r.icon,value:r.value,label:r.label,type:r.type},a))})};delete q.Icon.Default.prototype._getIconUrl;q.Icon.Default.mergeOptions({iconRetinaUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png",iconUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png",shadowUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png"});const Ke=({position:t,setPosition:r})=>{const a=xe({click(o){const l=[o.latlng.lat,o.latlng.lng];r(l),a.flyTo(o.latlng,a.getZoom())}});return t===null?null:e.jsx(he,{position:t})},Xe=({latitude:t,longitude:r,onLocationChange:a,height:o="300px",className:l=""})=>{const[i,y]=d.useState(null);d.useEffect(()=>{t&&r&&!isNaN(parseFloat(t))&&!isNaN(parseFloat(r))&&y([parseFloat(t),parseFloat(r)])},[t,r]),d.useEffect(()=>{i&&a&&a({latitude:i[0].toString(),longitude:i[1].toString()})},[i,a]);const c=(m,h)=>{const b=parseFloat(m),n=parseFloat(h);!isNaN(b)&&!isNaN(n)&&b>=-90&&b<=90&&n>=-180&&n<=180&&y([b,n])},u=i||[59.3293,18.0686];return e.jsxs("div",{className:l,children:[e.jsxs("div",{className:"mb-4 grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1",children:"Latitude"}),e.jsx("input",{type:"number",step:"any",value:i?i[0]:t||"",onChange:m=>c(m.target.value,i?i[1]:r),className:"form-input w-full",placeholder:"e.g., 59.3293"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1",children:"Longitude"}),e.jsx("input",{type:"number",step:"any",value:i?i[1]:r||"",onChange:m=>c(i?i[0]:t,m.target.value),className:"form-input w-full",placeholder:"e.g., 18.0686"})]})]}),e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 mb-3",children:"Click on the map to set the tree location, or enter coordinates manually above."}),e.jsx("div",{className:"border border-gray-300 dark:border-gray-600 rounded-lg overflow-hidden",style:{height:o},children:e.jsxs(ue,{center:u,zoom:i?15:10,style:{height:"100%",width:"100%"},children:[e.jsx(ge,{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",attribution:'©
OpenStreetMap contributors'}),e.jsx(Ke,{position:i,setPosition:y})]},u.join(","))}),i&&e.jsx("div",{className:"mt-3 p-3 bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg",children:e.jsxs("p",{className:"text-sm text-green-800 dark:text-green-200",children:[e.jsx("strong",{children:"Selected Location:"})," ",i[0].toFixed(6),", ",i[1].toFixed(6)]})})]})},Je=({isOpen:t,onClose:r,tree:a=null,onSuccess:o})=>{const{user:l}=U(),[i,y]=d.useState([]),[c,k]=d.useState(!1),[u,m]=d.useState({}),[h,b]=d.useState(!1),[n,v]=d.useState({treeId:"",forestId:"",species:"",plantedDate:"",latitude:"",longitude:"",soilCondition:"",sunlightExposure:"",notes:""}),A=!!a;d.useEffect(()=>{t&&(async()=>{var x;try{const p=await me.getAll(),j=((x=p.data)==null?void 0:x.forests)||p.data||[];y(j)}catch(p){console.error("Failed to load forests:",p)}})()},[t]),d.useEffect(()=>{var s,x,p,j,I,L,z,W;v(a?{treeId:a.treeId||"",forestId:((s=a.forestId)==null?void 0:s._id)||a.forestId||"",species:a.species||"",plantedDate:a.plantedDate?new Date(a.plantedDate).toISOString().split("T")[0]:"",latitude:((p=(x=a.location)==null?void 0:x.coordinates)==null?void 0:p[1])||a.lat||"",longitude:((I=(j=a.location)==null?void 0:j.coordinates)==null?void 0:I[0])||a.lng||"",soilCondition:((L=a.metadata)==null?void 0:L.soilCondition)||"",sunlightExposure:((z=a.metadata)==null?void 0:z.sunlightExposure)||"",notes:((W=a.metadata)==null?void 0:W.notes)||""}:{treeId:"",forestId:"",species:"",plantedDate:"",latitude:"",longitude:"",soilCondition:"",sunlightExposure:"",notes:""}),m({})},[a]);const N=(s,x)=>{v(p=>({...p,[s]:x})),u[s]&&m(p=>({...p,[s]:null}))},D=({latitude:s,longitude:x})=>{v(p=>({...p,latitude:s,longitude:x})),m(p=>({...p,latitude:null,longitude:null}))},F=()=>{const s={};if(n.treeId.trim()||(s.treeId="Tree ID is required"),n.forestId||(s.forestId="Forest is required"),n.species.trim()||(s.species="Species is required"),n.plantedDate||(s.plantedDate="Planted date is required"),!n.latitude||isNaN(parseFloat(n.latitude)))s.latitude="Valid latitude is required";else{const x=parseFloat(n.latitude);(x<-90||x>90)&&(s.latitude="Latitude must be between -90 and 90")}if(!n.longitude||isNaN(parseFloat(n.longitude)))s.longitude="Valid longitude is required";else{const x=parseFloat(n.longitude);(x<-180||x>180)&&(s.longitude="Longitude must be between -180 and 180")}return m(s),Object.keys(s).length===0},P=async s=>{var x,p;if(s.preventDefault(),!!F()){k(!0);try{const j={treeId:n.treeId,forestId:n.forestId,species:n.species,plantedDate:n.plantedDate,location:{type:"Point",coordinates:[parseFloat(n.longitude),parseFloat(n.latitude)]},metadata:{soilCondition:n.soilCondition||void 0,sunlightExposure:n.sunlightExposure||void 0,notes:n.notes||void 0}};A?await M.update(a._id,j):await M.create(j),o==null||o(),r()}catch(j){console.error("Failed to save tree:",j),m({submit:((p=(x=j.response)==null?void 0:x.data)==null?void 0:p.message)||`Failed to ${A?"update":"create"} tree`})}finally{k(!1)}}},g=[{value:"",label:"Select sunlight exposure"},{value:"full_sun",label:"Full Sun"},{value:"partial_sun",label:"Partial Sun"},{value:"partial_shade",label:"Partial Shade"},{value:"full_shade",label:"Full Shade"}];return e.jsx(ae,{isOpen:t,onClose:r,title:`${A?"Edit":"Create"} Tree`,children:e.jsxs("form",{onSubmit:P,className:"space-y-6",children:[u.submit&&e.jsx("div",{className:"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 text-red-700 dark:text-red-400 px-4 py-3 rounded",children:u.submit}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsx(w,{label:"Tree ID",required:!0,error:u.treeId,children:e.jsx("input",{type:"text",value:n.treeId,onChange:s=>N("treeId",s.target.value),className:"form-input",placeholder:"e.g., TREE-001",disabled:c})}),e.jsx(w,{label:"Forest",required:!0,error:u.forestId,children:e.jsxs("select",{value:n.forestId,onChange:s=>N("forestId",s.target.value),className:"form-input",disabled:c,children:[e.jsx("option",{value:"",children:"Select a forest"}),i.map(s=>e.jsx("option",{value:s._id,children:s.name},s._id))]})})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsx(w,{label:"Species",required:!0,error:u.species,children:e.jsx("input",{type:"text",value:n.species,onChange:s=>N("species",s.target.value),className:"form-input",placeholder:"e.g., Pine, Oak, Birch",disabled:c})}),e.jsx(w,{label:"Planted Date",required:!0,error:u.plantedDate,children:e.jsx("input",{type:"date",value:n.plantedDate,onChange:s=>N("plantedDate",s.target.value),className:"form-input",disabled:c})})]}),e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h4",{className:"text-md font-medium text-gray-900 dark:text-white",children:"Tree Location"}),e.jsx("button",{type:"button",onClick:()=>b(!h),className:"text-sm text-green-600 dark:text-green-400 hover:text-green-700 dark:hover:text-green-300 font-medium",disabled:c,children:h?"Use Manual Entry":"Use Map Picker"})]}),h?e.jsx(w,{label:"Select Location on Map",required:!0,error:u.latitude||u.longitude,children:e.jsx(Xe,{latitude:n.latitude,longitude:n.longitude,onLocationChange:D,height:"400px"})}):e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsx(w,{label:"Latitude",required:!0,error:u.latitude,helpText:"Between -90 and 90 degrees",children:e.jsx("input",{type:"number",step:"any",value:n.latitude,onChange:s=>N("latitude",s.target.value),className:"form-input",placeholder:"e.g., 59.3293",disabled:c})}),e.jsx(w,{label:"Longitude",required:!0,error:u.longitude,helpText:"Between -180 and 180 degrees",children:e.jsx("input",{type:"number",step:"any",value:n.longitude,onChange:s=>N("longitude",s.target.value),className:"form-input",placeholder:"e.g., 18.0686",disabled:c})})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsx(w,{label:"Soil Condition",error:u.soilCondition,children:e.jsx("input",{type:"text",value:n.soilCondition,onChange:s=>N("soilCondition",s.target.value),className:"form-input",placeholder:"e.g., Sandy, Clay, Loamy",disabled:c})}),e.jsx(w,{label:"Sunlight Exposure",error:u.sunlightExposure,children:e.jsx("select",{value:n.sunlightExposure,onChange:s=>N("sunlightExposure",s.target.value),className:"form-input",disabled:c,children:g.map(s=>e.jsx("option",{value:s.value,children:s.label},s.value))})})]}),e.jsx(w,{label:"Notes",error:u.notes,children:e.jsx("textarea",{value:n.notes,onChange:s=>N("notes",s.target.value),className:"form-input resize-none",rows:"3",placeholder:"Additional notes about the tree...",disabled:c})}),e.jsxs("div",{className:"flex justify-end gap-3",children:[e.jsx("button",{type:"button",onClick:r,className:"px-4 py-2 text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors",disabled:c,children:"Cancel"}),e.jsx("button",{type:"submit",className:"px-4 py-2 bg-green-600 hover:bg-green-700 text-white rounded-lg transition-colors disabled:opacity-50",disabled:c,children:c?"Saving...":A?"Update Tree":"Create Tree"})]})]})})},Qe=()=>{const[t,r]=d.useState([]),[a,o]=d.useState(!0),[l,i]=d.useState(""),[y,c]=d.useState(null),[k,u]=d.useState(!1),[m,h]=d.useState(1),[b,n]=d.useState(1),v=async(g="",s=1)=>{var x,p;try{o(!0);const j=await M.getAll({page:s,limit:10,search:g}),I=((x=j.data)==null?void 0:x.trees)||[],L=((p=j.data)==null?void 0:p.pagination)||{};r(I),n(Math.ceil(L.total/10)||1)}catch(j){console.error("Failed to load trees:",j),r([])}finally{o(!1)}};d.useEffect(()=>{v(l,m)},[l,m]);const A=()=>{c(null),u(!0)},N=g=>{c(g),u(!0)},D=async g=>{if(window.confirm("Are you sure you want to delete this tree?"))try{await M.delete(g),v(l,m)}catch(s){console.error("Failed to delete tree:",s),alert("Failed to delete tree. Please try again.")}},F=()=>{v(l,m)},P=g=>{i(g.target.value),h(1)};return a&&t.length===0?e.jsx("div",{className:"flex justify-center items-center py-12",children:e.jsx(B,{text:"Loading trees..."})}):e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg shadow",children:[e.jsxs("div",{className:"p-6 border-b border-gray-200 dark:border-gray-700",children:[e.jsxs("div",{className:"flex justify-between items-center mb-4",children:[e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:"Tree Management"}),e.jsx("button",{onClick:A,className:"bg-green-600 hover:bg-green-700 text-white px-4 py-2 rounded-lg transition-colors",children:"Add Tree"})]}),e.jsx(R,{type:"text",placeholder:"Search trees by ID or species...",value:l,onChange:P})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-gray-50 dark:bg-gray-900",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider",children:"Tree ID"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider",children:"Species"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider",children:"Forest"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider",children:"Location"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider",children:"Status"}),e.jsx("th",{className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider",children:"Actions"})]})}),e.jsx("tbody",{className:"bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700",children:t.map(g=>{var s,x;return e.jsxs("tr",{className:"hover:bg-gray-50 dark:hover:bg-gray-900",children:[e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-white",children:g.treeId}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-600 dark:text-gray-300",children:g.species}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-600 dark:text-gray-300",children:((s=g.forestId)==null?void 0:s.name)||"Unknown"}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-600 dark:text-gray-300",children:(x=g.location)!=null&&x.coordinates?`${g.location.coordinates[1].toFixed(4)}, ${g.location.coordinates[0].toFixed(4)}`:"No location"}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap",children:e.jsx("span",{className:`inline-flex px-2 py-1 text-xs font-semibold rounded-full ${g.isAlive?"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200":"bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200"}`,children:g.isAlive?"Alive":"Dead"})}),e.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm",children:e.jsxs("div",{className:"flex space-x-2",children:[e.jsx("button",{onClick:()=>N(g),className:"text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300",children:"Edit"}),e.jsx("button",{onClick:()=>D(g._id),className:"text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-300",children:"Delete"})]})})]},g._id)})})]})}),t.length===0&&!a&&e.jsx("div",{className:"text-center py-12 text-gray-500 dark:text-gray-400",children:l?"No trees found matching your search.":"No trees found."}),b>1&&e.jsx("div",{className:"px-6 py-4 border-t border-gray-200 dark:border-gray-700",children:e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsxs("div",{className:"text-sm text-gray-700 dark:text-gray-300",children:["Page ",m," of ",b]}),e.jsxs("div",{className:"flex space-x-2",children:[e.jsx("button",{onClick:()=>h(g=>Math.max(1,g-1)),disabled:m===1,className:"px-3 py-1 bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded disabled:opacity-50",children:"Previous"}),e.jsx("button",{onClick:()=>h(g=>Math.min(b,g+1)),disabled:m===b,className:"px-3 py-1 bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 rounded disabled:opacity-50",children:"Next"})]})]})}),e.jsx(Je,{isOpen:k,onClose:()=>u(!1),tree:y,onSuccess:F})]})},Ye=f.div` + min-height: 100vh; + background-color: #f9fafb; +`,et=f.main` + max-width: 1200px; + margin: 0 auto; + padding: 2rem 1rem; +`,tt=f.div` + margin-bottom: 2rem; +`,at=f.h1` + font-size: 2.5rem; + font-weight: 700; + color: #111827; + margin: 0 0 1rem 0; +`,rt=f.p` + color: #6b7280; + font-size: 1.125rem; + margin: 0; +`,st=({children:t})=>e.jsx(Ye,{children:t}),nt=({title:t,description:r})=>e.jsxs(tt,{children:[e.jsx(at,{children:t}),e.jsx(rt,{children:r})]}),ot=({children:t})=>e.jsx(et,{children:t}),mt=()=>{const{isAdmin:t}=U(),[r,a]=d.useState("audit");if(!t())return e.jsx(V,{to:"/dashboard",replace:!0});const o=[{id:"audit",label:"Audit Logs"},{id:"trees",label:"Tree Management"}],l=()=>{switch(r){case"trees":return e.jsx(Qe,{});case"audit":default:return e.jsx(Ce,{})}};return e.jsxs(st,{children:[e.jsx(_e,{}),e.jsxs(ot,{children:[e.jsx(nt,{title:"System Administration",description:"Monitor system activity, manage trees, and view comprehensive audit logging."}),e.jsx(Ve,{}),e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg shadow mb-6",children:[e.jsx("div",{className:"border-b border-gray-200 dark:border-gray-700",children:e.jsx("nav",{className:"-mb-px flex space-x-8 px-6",children:o.map(i=>e.jsx("button",{onClick:()=>a(i.id),className:`py-4 px-1 border-b-2 font-medium text-sm transition-colors ${r===i.id?"border-green-500 text-green-600 dark:text-green-400":"border-transparent text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300"}`,children:i.label},i.id))})}),e.jsx("div",{className:"p-6",children:l()})]})]})]})};export{mt as AdminPage}; diff --git a/frontend/dist/assets/ChartComponents-DOzzJtP4.js b/frontend/dist/assets/ChartComponents-CnhCT1GQ.js similarity index 96% rename from frontend/dist/assets/ChartComponents-DOzzJtP4.js rename to frontend/dist/assets/ChartComponents-CnhCT1GQ.js index 5f8db1f620..4bafd772d9 100644 --- a/frontend/dist/assets/ChartComponents-DOzzJtP4.js +++ b/frontend/dist/assets/ChartComponents-CnhCT1GQ.js @@ -1,4 +1,4 @@ -import{j as n,d as r}from"./index-CGkKx7Xv.js";const j=r.div` +import{j as n,d as r}from"./index-Cp0G27Fl.js";const j=r.div` background: white; border-radius: 0.75rem; padding: 1.5rem; diff --git a/frontend/dist/assets/DarkModeToggle-Cu0JyOh5.js b/frontend/dist/assets/DarkModeToggle-DYOgA8sV.js similarity index 91% rename from frontend/dist/assets/DarkModeToggle-Cu0JyOh5.js rename to frontend/dist/assets/DarkModeToggle-DYOgA8sV.js index 5c66c75ff1..16a677f16d 100644 --- a/frontend/dist/assets/DarkModeToggle-Cu0JyOh5.js +++ b/frontend/dist/assets/DarkModeToggle-DYOgA8sV.js @@ -1 +1 @@ -import{j as r,k as i,l as a}from"./index-CGkKx7Xv.js";import{I as l}from"./IconButton-vDjz_WRZ.js";const d=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),c=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})}),k=({className:t="",size:o="md"})=>{const{isDarkMode:e,toggleDarkMode:s}=i(),n={sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6"};return r.jsxs(l,{onClick:s,className:a("relative bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300",t),size:o,"aria-label":e?"Switch to light mode":"Switch to dark mode",title:e?"Switch to light mode":"Switch to dark mode",children:[r.jsx(d,{className:a(n[o],"transition-all duration-200",e?"rotate-90 scale-0":"rotate-0 scale-100")}),r.jsx(c,{className:a(n[o],"absolute transition-all duration-200",e?"rotate-0 scale-100":"-rotate-90 scale-0")})]})};export{k as D}; +import{j as r,k as i,l as a}from"./index-Cp0G27Fl.js";import{I as l}from"./IconButton-Cy_suQAe.js";const d=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),c=({className:t="",...o})=>r.jsx("svg",{className:t,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})}),k=({className:t="",size:o="md"})=>{const{isDarkMode:e,toggleDarkMode:s}=i(),n={sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6"};return r.jsxs(l,{onClick:s,className:a("relative bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300",t),size:o,"aria-label":e?"Switch to light mode":"Switch to dark mode",title:e?"Switch to light mode":"Switch to dark mode",children:[r.jsx(d,{className:a(n[o],"transition-all duration-200",e?"rotate-90 scale-0":"rotate-0 scale-100")}),r.jsx(c,{className:a(n[o],"absolute transition-all duration-200",e?"rotate-0 scale-100":"-rotate-90 scale-0")})]})};export{k as D}; diff --git a/frontend/dist/assets/DashboardPage-DOe_EIif.js b/frontend/dist/assets/DashboardPage-DjVP0e2L.js similarity index 98% rename from frontend/dist/assets/DashboardPage-DOe_EIif.js rename to frontend/dist/assets/DashboardPage-DjVP0e2L.js index ee7628485e..c0f6cebfd6 100644 --- a/frontend/dist/assets/DashboardPage-DOe_EIif.js +++ b/frontend/dist/assets/DashboardPage-DjVP0e2L.js @@ -1,4 +1,4 @@ -var Ty=Object.defineProperty;var Cy=(e,t,r)=>t in e?Ty(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var la=(e,t,r)=>Cy(e,typeof t!="symbol"?t+"":t,r);import{A as _y,j as E,r as m,c as H,b as ky,e as Si}from"./index-CGkKx7Xv.js";import{C as bt,a as xt,b as wt,c as My,d as Ku,e as Dy}from"./ChartComponents-DOzzJtP4.js";import{g as Tt,r as qu}from"./vendor-BtP0CW_r.js";import{t as Iy,u as Ny,D as $y,a as Ry,G as Ly}from"./useSidebarState-Ctkpd6zX.js";import{E as By}from"./ExportButton-BryKwkQ4.js";import"./DarkModeToggle-Cu0JyOh5.js";import"./IconButton-vDjz_WRZ.js";const zn=new _y,Ky={getStats:(e={})=>zn.get("/dashboard/stats",e)},Fu={getSurvivalRate:(e={})=>zn.get("/charts/survival-rate",e),getHeightGrowth:(e={})=>zn.get("/charts/height-growth",e),getCO2Absorption:(e={})=>zn.get("/charts/co2-absorption",e)},Tn=({icon:e,title:t,value:r,color:n="green"})=>{const i={green:"bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400",blue:"bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400",yellow:"bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400",purple:"bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400"};return E.jsx("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:E.jsxs("div",{className:"flex items-center",children:[E.jsx("div",{className:`p-2 rounded-lg ${i[n]}`,children:e}),E.jsxs("div",{className:"ml-4",children:[E.jsx("p",{className:"text-sm font-medium text-gray-600 dark:text-gray-300",children:t}),E.jsx("p",{className:"text-2xl font-bold text-gray-900 dark:text-white",children:r})]})]})})},qy=()=>E.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:[E.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:"Forest Overview"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-4",children:"Your forests are performing excellently with strong growth indicators and high survival rates."}),E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Recent Activity"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full mr-3"}),"New measurements recorded for Forest A"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-blue-500 rounded-full mr-3"}),"Survival rate improved by 2.3%"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-purple-500 rounded-full mr-3"}),"CO₂ absorption increased by 15%"]})]})]}),E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Next Actions"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-yellow-500 rounded-full mr-3"}),"Schedule maintenance for Forest B"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-orange-500 rounded-full mr-3"}),"Review growth data for Q4 report"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-red-500 rounded-full mr-3"}),"Address low-performing areas in Forest C"]})]})]})]})]});var ca={},fa={},Hl;function Fy(){return Hl||(Hl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==="__proto__"}e.isUnsafeProperty=t}(fa)),fa}var da={},Yl;function Uh(){return Yl||(Yl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){switch(typeof r){case"number":case"symbol":return!1;case"string":return r.includes(".")||r.includes("[")||r.includes("]")}}e.isDeepKey=t}(da)),da}var ha={},Gl;function Hh(){return Gl||(Gl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var n;return typeof r=="string"||typeof r=="symbol"?r:Object.is((n=r==null?void 0:r.valueOf)==null?void 0:n.call(r),-0)?"-0":String(r)}e.toKey=t}(ha)),ha}var va={},Vl;function zu(){return Vl||(Vl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){const n=[],i=r.length;if(i===0)return n;let a=0,o="",u="",l=!1;for(r.charCodeAt(0)===46&&(n.push(""),a++);at in e?Ty(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var la=(e,t,r)=>Cy(e,typeof t!="symbol"?t+"":t,r);import{A as _y,j as E,r as m,c as H,b as ky,e as Si}from"./index-Cp0G27Fl.js";import{C as bt,a as xt,b as wt,c as My,d as Ku,e as Dy}from"./ChartComponents-CnhCT1GQ.js";import{g as Tt,r as qu}from"./vendor-BtP0CW_r.js";import{u as Iy,D as Ny,a as $y,G as Ry}from"./useSidebarState-DD0BN3bF.js";import{E as Ly}from"./ExportButton-CO4K-of6.js";import{t as By}from"./treeService-D86yjeOz.js";import"./DarkModeToggle-DYOgA8sV.js";import"./IconButton-Cy_suQAe.js";const zn=new _y,Ky={getStats:(e={})=>zn.get("/dashboard/stats",e)},Fu={getSurvivalRate:(e={})=>zn.get("/charts/survival-rate",e),getHeightGrowth:(e={})=>zn.get("/charts/height-growth",e),getCO2Absorption:(e={})=>zn.get("/charts/co2-absorption",e)},Tn=({icon:e,title:t,value:r,color:n="green"})=>{const i={green:"bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400",blue:"bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400",yellow:"bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400",purple:"bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400"};return E.jsx("div",{className:"bg-white dark:bg-gray-800 p-6 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:E.jsxs("div",{className:"flex items-center",children:[E.jsx("div",{className:`p-2 rounded-lg ${i[n]}`,children:e}),E.jsxs("div",{className:"ml-4",children:[E.jsx("p",{className:"text-sm font-medium text-gray-600 dark:text-gray-300",children:t}),E.jsx("p",{className:"text-2xl font-bold text-gray-900 dark:text-white",children:r})]})]})})},qy=()=>E.jsxs("div",{className:"bg-white dark:bg-gray-800 p-8 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700",children:[E.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:"Forest Overview"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-4",children:"Your forests are performing excellently with strong growth indicators and high survival rates."}),E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Recent Activity"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full mr-3"}),"New measurements recorded for Forest A"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-blue-500 rounded-full mr-3"}),"Survival rate improved by 2.3%"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-purple-500 rounded-full mr-3"}),"CO₂ absorption increased by 15%"]})]})]}),E.jsxs("div",{children:[E.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:"Next Actions"}),E.jsxs("ul",{className:"space-y-2 text-sm text-gray-600 dark:text-gray-300",children:[E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-yellow-500 rounded-full mr-3"}),"Schedule maintenance for Forest B"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-orange-500 rounded-full mr-3"}),"Review growth data for Q4 report"]}),E.jsxs("li",{className:"flex items-center",children:[E.jsx("div",{className:"w-2 h-2 bg-red-500 rounded-full mr-3"}),"Address low-performing areas in Forest C"]})]})]})]})]});var ca={},fa={},Hl;function Fy(){return Hl||(Hl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r==="__proto__"}e.isUnsafeProperty=t}(fa)),fa}var da={},Yl;function Uh(){return Yl||(Yl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){switch(typeof r){case"number":case"symbol":return!1;case"string":return r.includes(".")||r.includes("[")||r.includes("]")}}e.isDeepKey=t}(da)),da}var ha={},Gl;function Hh(){return Gl||(Gl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var n;return typeof r=="string"||typeof r=="symbol"?r:Object.is((n=r==null?void 0:r.valueOf)==null?void 0:n.call(r),-0)?"-0":String(r)}e.toKey=t}(ha)),ha}var va={},Vl;function zu(){return Vl||(Vl=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){const n=[],i=r.length;if(i===0)return n;let a=0,o="",u="",l=!1;for(r.charCodeAt(0)===46&&(n.push(""),a++);at in e?Ty(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Kc;function mb(){if(Kc)return Xa;Kc=1;var e=qu(),t=pb();function r(c,s){return c===s&&(c!==0||1/c===1/s)||c!==c&&s!==s}var n=typeof Object.is=="function"?Object.is:r,i=t.useSyncExternalStore,a=e.useRef,o=e.useEffect,u=e.useMemo,l=e.useDebugValue;return Xa.useSyncExternalStoreWithSelector=function(c,s,f,d,h){var v=a(null);if(v.current===null){var p={hasValue:!1,value:null};v.current=p}else p=v.current;v=u(function(){function y(O){if(!b){if(b=!0,x=O,O=d(O),h!==void 0&&p.hasValue){var A=p.value;if(h(A,O))return P=A}return P=O}if(A=P,n(x,O))return A;var j=d(O);return h!==void 0&&h(A,j)?(x=O,A):(x=O,P=j)}var b=!1,x,P,w=f===void 0?null:f;return[function(){return y(s())},w===null?void 0:function(){return y(w())}]},[s,f,d,h]);var g=i(c,v[0],v[1]);return o(function(){p.hasValue=!0,p.value=g},[g]),l(g),g},Xa}var qc;function gb(){return qc||(qc=1,Va.exports=mb()),Va.exports}var yb=gb(),ts=m.createContext(null),bb=e=>e,ae=()=>{var e=m.useContext(ts);return e?e.store.dispatch:bb},Wn=()=>{},xb=()=>Wn,wb=(e,t)=>e===t;function $(e){var t=m.useContext(ts);return yb.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:xb,t?t.store.getState:Wn,t?t.store.getState:Wn,t?e:Wn,wb)}function Pb(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function Ob(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!="object")throw new TypeError(t)}function Ab(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var Fc=e=>Array.isArray(e)?e:[e];function Sb(e){const t=Array.isArray(e[0])?e[0]:e;return Ab(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function Eb(e,t){const r=[],{length:n}=e;for(let i=0;i{r=_n(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function _b(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let a=0,o=0,u,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),Pb(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const s={...r,...l},{memoize:f,memoizeOptions:d=[],argsMemoize:h=Pv,argsMemoizeOptions:v=[]}=s,p=Fc(d),g=Fc(v),y=Sb(i),b=f(function(){return a++,c.apply(null,arguments)},...p),x=h(function(){o++;const w=Eb(y,arguments);return u=b.apply(null,w),u},...g);return Object.assign(x,{resultFunc:c,memoizedResultFunc:b,dependencies:y,dependencyRecomputations:()=>o,resetDependencyRecomputations:()=>{o=0},lastResult:()=>u,recomputations:()=>a,resetRecomputations:()=>{a=0},memoize:f,argsMemoize:h})};return Object.assign(n,{withTypes:()=>n}),n}var S=_b(Pv),kb=Object.assign((e,t=S)=>{Ob(e,`createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof e}`);const r=Object.keys(e),n=r.map(a=>e[a]);return t(n,(...a)=>a.reduce((o,u,l)=>(o[r[l]]=u,o),{}))},{withTypes:()=>kb}),Qa={},eo={},to={},Wc;function Mb(){return Wc||(Wc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(n){return typeof n=="symbol"?1:n===null?2:n===void 0?3:n!==n?4:0}const r=(n,i,a)=>{if(n!==i){const o=t(n),u=t(i);if(o===u&&o===0){if(ni)return a==="desc"?-1:1}return a==="desc"?u-o:o-u}return 0};e.compareValues=r}(to)),to}var ro={},no={},Uc;function Ov(){return Uc||(Uc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="symbol"||r instanceof Symbol}e.isSymbol=t}(no)),no}var Hc;function Db(){return Hc||(Hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ov(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function i(a,o){return Array.isArray(a)?!1:typeof a=="number"||typeof a=="boolean"||a==null||t.isSymbol(a)?!0:typeof a=="string"&&(n.test(a)||!r.test(a))||o!=null&&Object.hasOwn(o,a)}e.isKey=i}(ro)),ro}var Yc;function Ib(){return Yc||(Yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Mb(),r=Db(),n=zu();function i(a,o,u,l){if(a==null)return[];u=l?void 0:u,Array.isArray(a)||(a=Object.values(a)),Array.isArray(o)||(o=o==null?[null]:[o]),o.length===0&&(o=[null]),Array.isArray(u)||(u=u==null?[]:[u]),u=u.map(h=>String(h));const c=(h,v)=>{let p=h;for(let g=0;gv==null||h==null?v:typeof h=="object"&&"key"in h?Object.hasOwn(v,h.key)?v[h.key]:c(v,h.path):typeof h=="function"?h(v):Array.isArray(h)?c(v,h):typeof v=="object"?v[h]:v,f=o.map(h=>(Array.isArray(h)&&h.length===1&&(h=h[0]),h==null||typeof h=="function"||Array.isArray(h)||r.isKey(h)?h:{key:h,path:n.toPath(h)}));return a.map(h=>({original:h,criteria:f.map(v=>s(v,h))})).slice().sort((h,v)=>{for(let p=0;ph.original)}e.orderBy=i}(eo)),eo}var io={},Gc;function Nb(){return Gc||(Gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=1){const i=[],a=Math.floor(n),o=(u,l)=>{for(let c=0;c1&&n.isIterateeCall(a,o[0],o[1])?o=[]:u>2&&n.isIterateeCall(o[0],o[1],o[2])&&(o=[o[0]]),t.orderBy(a,r.flatten(o),["asc"])}e.sortBy=i}(Qa)),Qa}var oo,Zc;function Rb(){return Zc||(Zc=1,oo=$b().sortBy),oo}var Lb=Rb();const _i=Tt(Lb);var Sv=e=>e.legend.settings,Bb=e=>e.legend.size,Kb=e=>e.legend.payload;S([Kb,Sv],(e,t)=>{var{itemSorter:r}=t,n=e.flat(1);return r?_i(n,r):n});var kn=1;function qb(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],[t,r]=m.useState({height:0,left:0,top:0,width:0}),n=m.useCallback(i=>{if(i!=null){var a=i.getBoundingClientRect(),o={height:a.height,left:a.left,top:a.top,width:a.width};(Math.abs(o.height-t.height)>kn||Math.abs(o.left-t.left)>kn||Math.abs(o.top-t.top)>kn||Math.abs(o.width-t.width)>kn)&&r({height:o.height,left:o.left,top:o.top,width:o.width})}},[t.width,t.height,t.top,t.left,...e]);return[t,n]}function Pe(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Fb=typeof Symbol=="function"&&Symbol.observable||"@@observable",Jc=Fb,uo=()=>Math.random().toString(36).substring(7).split("").join("."),zb={INIT:`@@redux/INIT${uo()}`,REPLACE:`@@redux/REPLACE${uo()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${uo()}`},Xn=zb;function rs(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function Ev(e,t,r){if(typeof e!="function")throw new Error(Pe(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(Pe(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Pe(1));return r(Ev)(e,t)}let n=e,i=t,a=new Map,o=a,u=0,l=!1;function c(){o===a&&(o=new Map,a.forEach((g,y)=>{o.set(y,g)}))}function s(){if(l)throw new Error(Pe(3));return i}function f(g){if(typeof g!="function")throw new Error(Pe(4));if(l)throw new Error(Pe(5));let y=!0;c();const b=u++;return o.set(b,g),function(){if(y){if(l)throw new Error(Pe(6));y=!1,c(),o.delete(b),a=null}}}function d(g){if(!rs(g))throw new Error(Pe(7));if(typeof g.type>"u")throw new Error(Pe(8));if(typeof g.type!="string")throw new Error(Pe(17));if(l)throw new Error(Pe(9));try{l=!0,i=n(i,g)}finally{l=!1}return(a=o).forEach(b=>{b()}),g}function h(g){if(typeof g!="function")throw new Error(Pe(10));n=g,d({type:Xn.REPLACE})}function v(){const g=f;return{subscribe(y){if(typeof y!="object"||y===null)throw new Error(Pe(11));function b(){const P=y;P.next&&P.next(s())}return b(),{unsubscribe:g(b)}},[Jc](){return this}}}return d({type:Xn.INIT}),{dispatch:d,subscribe:f,getState:s,replaceReducer:h,[Jc]:v}}function Wb(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:Xn.INIT})>"u")throw new Error(Pe(12));if(typeof r(void 0,{type:Xn.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Pe(13))})}function jv(e){const t=Object.keys(e),r={};for(let a=0;a"u")throw u&&u.type,new Error(Pe(14));c[f]=v,l=l||v!==h}return l=l||n.length!==Object.keys(o).length,l?c:o}}function Zn(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function Ub(...e){return t=>(r,n)=>{const i=t(r,n);let a=()=>{throw new Error(Pe(15))};const o={getState:i.getState,dispatch:(l,...c)=>a(l,...c)},u=e.map(l=>l(o));return a=Zn(...u)(i.dispatch),{...i,dispatch:a}}}function Tv(e){return rs(e)&&"type"in e&&typeof e.type=="string"}var Cv=Symbol.for("immer-nothing"),Qc=Symbol.for("immer-draftable"),Ue=Symbol.for("immer-state");function ut(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var jr=Object.getPrototypeOf;function cr(e){return!!e&&!!e[Ue]}function At(e){var t;return e?_v(e)||Array.isArray(e)||!!e[Qc]||!!((t=e.constructor)!=null&&t[Qc])||Mi(e)||Di(e):!1}var Hb=Object.prototype.constructor.toString();function _v(e){if(!e||typeof e!="object")return!1;const t=jr(e);if(t===null)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object?!0:typeof r=="function"&&Function.toString.call(r)===Hb}function Jn(e,t){ki(e)===0?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function ki(e){const t=e[Ue];return t?t.type_:Array.isArray(e)?1:Mi(e)?2:Di(e)?3:0}function Qo(e,t){return ki(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function kv(e,t,r){const n=ki(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function Yb(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function Mi(e){return e instanceof Map}function Di(e){return e instanceof Set}function Jt(e){return e.copy_||e.base_}function eu(e,t){if(Mi(e))return new Map(e);if(Di(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=_v(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[Ue];let i=Reflect.ownKeys(n);for(let a=0;a1&&(e.set=e.add=e.clear=e.delete=Gb),Object.freeze(e),t&&Object.entries(e).forEach(([r,n])=>ns(n,!0))),e}function Gb(){ut(2)}function Ii(e){return Object.isFrozen(e)}var Vb={};function fr(e){const t=Vb[e];return t||ut(0,e),t}var tn;function Mv(){return tn}function Xb(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function ef(e,t){t&&(fr("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function tu(e){ru(e),e.drafts_.forEach(Zb),e.drafts_=null}function ru(e){e===tn&&(tn=e.parent_)}function tf(e){return tn=Xb(tn,e)}function Zb(e){const t=e[Ue];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function rf(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[Ue].modified_&&(tu(t),ut(4)),At(e)&&(e=Qn(t,e),t.parent_||ei(t,e)),t.patches_&&fr("Patches").generateReplacementPatches_(r[Ue].base_,e,t.patches_,t.inversePatches_)):e=Qn(t,r,[]),tu(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==Cv?e:void 0}function Qn(e,t,r){if(Ii(t))return t;const n=t[Ue];if(!n)return Jn(t,(i,a)=>nf(e,n,t,i,a,r)),t;if(n.scope_!==e)return t;if(!n.modified_)return ei(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const i=n.copy_;let a=i,o=!1;n.type_===3&&(a=new Set(i),i.clear(),o=!0),Jn(a,(u,l)=>nf(e,n,i,u,l,r,o)),ei(e,i,!1),r&&e.patches_&&fr("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function nf(e,t,r,n,i,a,o){if(cr(i)){const u=a&&t&&t.type_!==3&&!Qo(t.assigned_,n)?a.concat(n):void 0,l=Qn(e,i,u);if(kv(r,n,l),cr(l))e.canAutoFreeze_=!1;else return}else o&&r.add(i);if(At(i)&&!Ii(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Qn(e,i),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&Object.prototype.propertyIsEnumerable.call(r,n)&&ei(e,i)}}function ei(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&ns(t,r)}function Jb(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:Mv(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,a=is;r&&(i=[n],a=rn);const{revoke:o,proxy:u}=Proxy.revocable(i,a);return n.draft_=u,n.revoke_=o,u}var is={get(e,t){if(t===Ue)return e;const r=Jt(e);if(!Qo(r,t))return Qb(e,r,t);const n=r[t];return e.finalized_||!At(n)?n:n===so(e.base_,t)?(lo(e),e.copy_[t]=iu(n,e)):n},has(e,t){return t in Jt(e)},ownKeys(e){return Reflect.ownKeys(Jt(e))},set(e,t,r){const n=Dv(Jt(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=so(Jt(e),t),a=i==null?void 0:i[Ue];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(Yb(r,i)&&(r!==void 0||Qo(e.base_,t)))return!0;lo(e),nu(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return so(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,lo(e),nu(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Jt(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){ut(11)},getPrototypeOf(e){return jr(e.base_)},setPrototypeOf(){ut(12)}},rn={};Jn(is,(e,t)=>{rn[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});rn.deleteProperty=function(e,t){return rn.set.call(this,e,t,void 0)};rn.set=function(e,t,r){return is.set.call(this,e[0],t,r,e[0])};function so(e,t){const r=e[Ue];return(r?Jt(r):e)[t]}function Qb(e,t,r){var i;const n=Dv(t,r);return n?"value"in n?n.value:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function Dv(e,t){if(!(t in e))return;let r=jr(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=jr(r)}}function nu(e){e.modified_||(e.modified_=!0,e.parent_&&nu(e.parent_))}function lo(e){e.copy_||(e.copy_=eu(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var ex=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const a=r;r=t;const o=this;return function(l=a,...c){return o.produce(l,s=>r.call(this,s,...c))}}typeof r!="function"&&ut(6),n!==void 0&&typeof n!="function"&&ut(7);let i;if(At(t)){const a=tf(this),o=iu(t,void 0);let u=!0;try{i=r(o),u=!1}finally{u?tu(a):ru(a)}return ef(a,n),rf(i,a)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===Cv&&(i=void 0),this.autoFreeze_&&ns(i,!0),n){const a=[],o=[];fr("Patches").generateReplacementPatches_(t,i,a,o),n(a,o)}return i}else ut(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(o,...u)=>this.produceWithPatches(o,l=>t(l,...u));let n,i;return[this.produce(t,r,(o,u)=>{n=o,i=u}),n,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){At(e)||ut(8),cr(e)&&(e=Pt(e));const t=tf(this),r=iu(e,void 0);return r[Ue].isManual_=!0,ru(t),r}finishDraft(e,t){const r=e&&e[Ue];(!r||!r.isManual_)&&ut(9);const{scope_:n}=r;return ef(n,t),rf(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const i=t[r];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}r>-1&&(t=t.slice(r+1));const n=fr("Patches").applyPatches_;return cr(e)?n(e,t):this.produce(e,i=>n(i,t))}};function iu(e,t){const r=Mi(e)?fr("MapSet").proxyMap_(e,t):Di(e)?fr("MapSet").proxySet_(e,t):Jb(e,t);return(t?t.scope_:Mv()).drafts_.push(r),r}function Pt(e){return cr(e)||ut(10,e),Iv(e)}function Iv(e){if(!At(e)||Ii(e))return e;const t=e[Ue];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=eu(e,t.scope_.immer_.useStrictShallowCopy_)}else r=eu(e,!0);return Jn(r,(n,i)=>{kv(r,n,Iv(i))}),t&&(t.finalized_=!1),r}var He=new ex,Nv=He.produce;He.produceWithPatches.bind(He);He.setAutoFreeze.bind(He);He.setUseStrictShallowCopy.bind(He);He.applyPatches.bind(He);He.createDraft.bind(He);He.finishDraft.bind(He);function $v(e){return({dispatch:r,getState:n})=>i=>a=>typeof a=="function"?a(r,n,e):i(a)}var tx=$v(),rx=$v,nx=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Zn:Zn.apply(null,arguments)};function tt(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(ze(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>Tv(n)&&n.type===e,r}var Rv=class Zr extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,Zr.prototype)}static get[Symbol.species](){return Zr}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new Zr(...t[0].concat(this)):new Zr(...t.concat(this))}};function af(e){return At(e)?Nv(e,()=>{}):e}function Mn(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function ix(e){return typeof e=="boolean"}var ax=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:a=!0}=t??{};let o=new Rv;return r&&(ix(r)?o.push(tx):o.push(rx(r.extraArgument))),o},ox="RTK_autoBatch",of=e=>t=>{setTimeout(t,e)},ux=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,a=!1,o=!1;const u=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:of(10):e.type==="callback"?e.queueNotification:of(e.timeout),c=()=>{o=!1,a&&(a=!1,u.forEach(s=>s()))};return Object.assign({},n,{subscribe(s){const f=()=>i&&s(),d=n.subscribe(f);return u.add(s),()=>{d(),u.delete(s)}},dispatch(s){var f;try{return i=!((f=s==null?void 0:s.meta)!=null&&f[ox]),a=!i,a&&(o||(o=!0,l(c))),n.dispatch(s)}finally{i=!0}}})},sx=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new Rv(e);return n&&i.push(ux(typeof n=="object"?n:void 0)),i};function lx(e){const t=ax(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:a=void 0,enhancers:o=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(rs(r))u=jv(r);else throw new Error(ze(1));let l;typeof n=="function"?l=n(t):l=t();let c=Zn;i&&(c=nx({trace:!1,...typeof i=="object"&&i}));const s=Ub(...l),f=sx(s);let d=typeof o=="function"?o(f):f();const h=c(...d);return Ev(u,a,h)}function Lv(e){const t={},r=[];let n;const i={addCase(a,o){const u=typeof a=="string"?a:a.type;if(!u)throw new Error(ze(28));if(u in t)throw new Error(ze(29));return t[u]=o,i},addMatcher(a,o){return r.push({matcher:a,reducer:o}),i},addDefaultCase(a){return n=a,i}};return e(i),[t,r,n]}function cx(e){return typeof e=="function"}function fx(e,t){let[r,n,i]=Lv(t),a;if(cx(e))a=()=>af(e());else{const u=af(e);a=()=>u}function o(u=a(),l){let c=[r[l.type],...n.filter(({matcher:s})=>s(l)).map(({reducer:s})=>s)];return c.filter(s=>!!s).length===0&&(c=[i]),c.reduce((s,f)=>{if(f)if(cr(s)){const h=f(s,l);return h===void 0?s:h}else{if(At(s))return Nv(s,d=>f(d,l));{const d=f(s,l);if(d===void 0){if(s===null)return s;throw Error("A case reducer on a non-draftable value must not return undefined")}return d}}return s},u)}return o.getInitialState=a,o}var dx="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",hx=(e=21)=>{let t="",r=e;for(;r--;)t+=dx[Math.random()*64|0];return t},vx=Symbol.for("rtk-slice-createasyncthunk");function px(e,t){return`${e}/${t}`}function mx({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[vx];return function(i){const{name:a,reducerPath:o=a}=i;if(!a)throw new Error(ze(11));const u=(typeof i.reducers=="function"?i.reducers(yx()):i.reducers)||{},l=Object.keys(u),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(P,w){const O=typeof P=="string"?P:P.type;if(!O)throw new Error(ze(12));if(O in c.sliceCaseReducersByType)throw new Error(ze(13));return c.sliceCaseReducersByType[O]=w,s},addMatcher(P,w){return c.sliceMatchers.push({matcher:P,reducer:w}),s},exposeAction(P,w){return c.actionCreators[P]=w,s},exposeCaseReducer(P,w){return c.sliceCaseReducersByName[P]=w,s}};l.forEach(P=>{const w=u[P],O={reducerName:P,type:px(a,P),createNotation:typeof i.reducers=="function"};xx(w)?Px(O,w,s,t):bx(O,w,s)});function f(){const[P={},w=[],O=void 0]=typeof i.extraReducers=="function"?Lv(i.extraReducers):[i.extraReducers],A={...P,...c.sliceCaseReducersByType};return fx(i.initialState,j=>{for(let T in A)j.addCase(T,A[T]);for(let T of c.sliceMatchers)j.addMatcher(T.matcher,T.reducer);for(let T of w)j.addMatcher(T.matcher,T.reducer);O&&j.addDefaultCase(O)})}const d=P=>P,h=new Map,v=new WeakMap;let p;function g(P,w){return p||(p=f()),p(P,w)}function y(){return p||(p=f()),p.getInitialState()}function b(P,w=!1){function O(j){let T=j[P];return typeof T>"u"&&w&&(T=Mn(v,O,y)),T}function A(j=d){const T=Mn(h,w,()=>new WeakMap);return Mn(T,j,()=>{const I={};for(const[_,k]of Object.entries(i.selectors??{}))I[_]=gx(k,j,()=>Mn(v,j,y),w);return I})}return{reducerPath:P,getSelectors:A,get selectors(){return A(O)},selectSlice:O}}const x={name:a,reducer:g,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:y,...b(o),injectInto(P,{reducerPath:w,...O}={}){const A=w??o;return P.inject({reducerPath:A,reducer:g},O),{...x,...b(A,!0)}}};return x}}function gx(e,t,r,n){function i(a,...o){let u=t(a);return typeof u>"u"&&n&&(u=r()),e(u,...o)}return i.unwrapped=e,i}var nt=mx();function yx(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function bx({type:e,reducerName:t,createNotation:r},n,i){let a,o;if("reducer"in n){if(r&&!wx(n))throw new Error(ze(17));a=n.reducer,o=n.prepare}else a=n;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?tt(e,o):tt(e))}function xx(e){return e._reducerDefinitionType==="asyncThunk"}function wx(e){return e._reducerDefinitionType==="reducerWithPrepare"}function Px({type:e,reducerName:t},r,n,i){if(!i)throw new Error(ze(18));const{payloadCreator:a,fulfilled:o,pending:u,rejected:l,settled:c,options:s}=r,f=i(e,a,s);n.exposeAction(t,f),o&&n.addCase(f.fulfilled,o),u&&n.addCase(f.pending,u),l&&n.addCase(f.rejected,l),c&&n.addMatcher(f.settled,c),n.exposeCaseReducer(t,{fulfilled:o||Dn,pending:u||Dn,rejected:l||Dn,settled:c||Dn})}function Dn(){}var Ox="task",Bv="listener",Kv="completed",as="cancelled",Ax=`task-${as}`,Sx=`task-${Kv}`,au=`${Bv}-${as}`,Ex=`${Bv}-${Kv}`,Ni=class{constructor(e){la(this,"name","TaskAbortError");la(this,"message");this.code=e,this.message=`${Ox} ${as} (reason: ${e})`}},os=(e,t)=>{if(typeof e!="function")throw new TypeError(ze(32))},ti=()=>{},qv=(e,t=ti)=>(e.catch(t),e),Fv=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),ar=(e,t)=>{const r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},or=e=>{if(e.aborted){const{reason:t}=e;throw new Ni(t)}};function zv(e,t){let r=ti;return new Promise((n,i)=>{const a=()=>i(new Ni(e.reason));if(e.aborted){a();return}r=Fv(e,a),t.finally(()=>r()).then(n,i)}).finally(()=>{r=ti})}var jx=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof Ni?"cancelled":"rejected",error:r}}finally{t==null||t()}},ri=e=>t=>qv(zv(e,t).then(r=>(or(e),r))),Wv=e=>{const t=ri(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:Ar}=Object,uf={},$i="listenerMiddleware",Tx=(e,t)=>{const r=n=>Fv(e,()=>ar(n,e.reason));return(n,i)=>{os(n);const a=new AbortController;r(a);const o=jx(async()=>{or(e),or(a.signal);const u=await n({pause:ri(a.signal),delay:Wv(a.signal),signal:a.signal});return or(a.signal),u},()=>ar(a,Sx));return i!=null&&i.autoJoin&&t.push(o.catch(ti)),{result:ri(e)(o),cancel(){ar(a,Ax)}}}},Cx=(e,t)=>{const r=async(n,i)=>{or(t);let a=()=>{};const u=[new Promise((l,c)=>{let s=e({predicate:n,effect:(f,d)=>{d.unsubscribe(),l([f,d.getState(),d.getOriginalState()])}});a=()=>{s(),c()}})];i!=null&&u.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await zv(t,Promise.race(u));return or(t),l}finally{a()}};return(n,i)=>qv(r(n,i))},Uv=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:a}=e;if(t)i=tt(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(ze(21));return os(a),{predicate:i,type:t,effect:a}},Hv=Ar(e=>{const{type:t,predicate:r,effect:n}=Uv(e);return{id:hx(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(ze(22))}}},{withTypes:()=>Hv}),sf=(e,t)=>{const{type:r,effect:n,predicate:i}=Uv(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===i)&&a.effect===n)},ou=e=>{e.pending.forEach(t=>{ar(t,au)})},_x=e=>()=>{e.forEach(ou),e.clear()},lf=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Yv=Ar(tt(`${$i}/add`),{withTypes:()=>Yv}),kx=tt(`${$i}/removeAll`),Gv=Ar(tt(`${$i}/remove`),{withTypes:()=>Gv}),Mx=(...e)=>{console.error(`${$i}/error`,...e)},mn=(e={})=>{const t=new Map,{extra:r,onError:n=Mx}=e;os(n);const i=s=>(s.unsubscribe=()=>t.delete(s.id),t.set(s.id,s),f=>{s.unsubscribe(),f!=null&&f.cancelActive&&ou(s)}),a=s=>{const f=sf(t,s)??Hv(s);return i(f)};Ar(a,{withTypes:()=>a});const o=s=>{const f=sf(t,s);return f&&(f.unsubscribe(),s.cancelActive&&ou(f)),!!f};Ar(o,{withTypes:()=>o});const u=async(s,f,d,h)=>{const v=new AbortController,p=Cx(a,v.signal),g=[];try{s.pending.add(v),await Promise.resolve(s.effect(f,Ar({},d,{getOriginalState:h,condition:(y,b)=>p(y,b).then(Boolean),take:p,delay:Wv(v.signal),pause:ri(v.signal),extra:r,signal:v.signal,fork:Tx(v.signal,g),unsubscribe:s.unsubscribe,subscribe:()=>{t.set(s.id,s)},cancelActiveListeners:()=>{s.pending.forEach((y,b,x)=>{y!==v&&(ar(y,au),x.delete(y))})},cancel:()=>{ar(v,au),s.pending.delete(v)},throwIfCancelled:()=>{or(v.signal)}})))}catch(y){y instanceof Ni||lf(n,y,{raisedBy:"effect"})}finally{await Promise.all(g),ar(v,Ex),s.pending.delete(v)}},l=_x(t);return{middleware:s=>f=>d=>{if(!Tv(d))return f(d);if(Yv.match(d))return a(d.payload);if(kx.match(d)){l();return}if(Gv.match(d))return o(d.payload);let h=s.getState();const v=()=>{if(h===uf)throw new Error(ze(23));return h};let p;try{if(p=f(d),t.size>0){const g=s.getState(),y=Array.from(t.values());for(const b of y){let x=!1;try{x=b.predicate(d,g,h)}catch(P){x=!1,lf(n,P,{raisedBy:"predicate"})}x&&u(b,d,s,v)}}}finally{h=uf}return p},startListening:a,stopListening:o,clearListeners:l}};function ze(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Dx={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},Vv=nt({name:"chartLayout",initialState:Dx,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top,e.margin.right=t.payload.right,e.margin.bottom=t.payload.bottom,e.margin.left=t.payload.left},setScale(e,t){e.scale=t.payload}}}),{setMargin:Ix,setLayout:Nx,setChartSize:$x,setScale:Rx}=Vv.actions,Lx=Vv.reducer;function cf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ff(e){for(var t=1;te*180/Math.PI,ce=(e,t,r,n)=>({x:e+Math.cos(-ni*n)*r,y:t+Math.sin(-ni*n)*r}),Xv=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},zx=(e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return Math.sqrt((r-i)**2+(n-a)**2)},Wx=(e,t)=>{var{x:r,y:n}=e,{cx:i,cy:a}=t,o=zx({x:r,y:n},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var u=(r-i)/o,l=Math.acos(u);return n>a&&(l=2*Math.PI-l),{radius:o,angle:Fx(l),angleInRadian:l}},Ux=e=>{var{startAngle:t,endAngle:r}=e,n=Math.floor(t/360),i=Math.floor(r/360),a=Math.min(n,i);return{startAngle:t-a*360,endAngle:r-a*360}},Hx=(e,t)=>{var{startAngle:r,endAngle:n}=t,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return e+o*360},Yx=(e,t)=>{var{x:r,y:n}=e,{radius:i,angle:a}=Wx({x:r,y:n},t),{innerRadius:o,outerRadius:u}=t;if(iu||i===0)return null;var{startAngle:l,endAngle:c}=Ux(t),s=a,f;if(l<=c){for(;s>c;)s-=360;for(;s=l&&s<=c}else{for(;s>l;)s-=360;for(;s=c&&s<=l}return f?ff(ff({},t),{},{radius:i,angle:Hx(s,t)}):null};function df(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Qe(e){for(var t=1;t{var a,o=-1,u=(a=t==null?void 0:t.length)!==null&&a!==void 0?a:0;if(u<=1||e==null)return 0;if(n==="angleAxis"&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var l=0;l0?r[l-1].coordinate:r[u-1].coordinate,s=r[l].coordinate,f=l>=u-1?r[0].coordinate:r[l+1].coordinate,d=void 0;if(ge(s-c)!==ge(f-s)){var h=[];if(ge(f-s)===ge(i[1]-i[0])){d=f;var v=s+i[1]-i[0];h[0]=Math.min(v,(v+c)/2),h[1]=Math.max(v,(v+c)/2)}else{d=c;var p=f+i[1]-i[0];h[0]=Math.min(s,(p+s)/2),h[1]=Math.max(s,(p+s)/2)}var g=[Math.min(s,(d+s)/2),Math.max(s,(d+s)/2)];if(e>g[0]&&e<=g[1]||e>=h[0]&&e<=h[1]){({index:o}=r[l]);break}}else{var y=Math.min(c,f),b=Math.max(c,f);if(e>(y+s)/2&&e<=(b+s)/2){({index:o}=r[l]);break}}}else if(t){for(var x=0;x0&&x(t[x].coordinate+t[x-1].coordinate)/2&&e<=(t[x].coordinate+t[x+1].coordinate)/2||x===u-1&&e>(t[x].coordinate+t[x-1].coordinate)/2){({index:o}=t[x]);break}}return o},Jx=(e,t,r)=>{if(t&&r){var{width:n,height:i}=r,{align:a,verticalAlign:o,layout:u}=t;if((u==="vertical"||u==="horizontal"&&o==="middle")&&a!=="center"&&D(e[a]))return Qe(Qe({},e),{},{[a]:e[a]+(n||0)});if((u==="horizontal"||u==="vertical"&&a==="center")&&o!=="middle"&&D(e[o]))return Qe(Qe({},e),{},{[o]:e[o]+(i||0)})}return e},Wt=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",Zv=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,a,o=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(a=!0),u.coordinate));return i||o.push(t),a||o.push(r),o},Jv=(e,t,r)=>{if(!e)return null;var{duplicateDomain:n,type:i,range:a,scale:o,realScaleType:u,isCategorical:l,categoricalDomain:c,tickCount:s,ticks:f,niceTicks:d,axisType:h}=e;if(!o)return null;var v=u==="scaleBand"&&o.bandwidth?o.bandwidth()/2:2,p=i==="category"&&o.bandwidth?o.bandwidth()/v:0;if(p=h==="angleAxis"&&a&&a.length>=2?ge(a[0]-a[1])*2*p:p,f||d){var g=(f||d||[]).map((y,b)=>{var x=n?n.indexOf(y):y;return{coordinate:o(x)+p,value:y,offset:p,index:b}});return g.filter(y=>!We(y.coordinate))}return l&&c?c.map((y,b)=>({coordinate:o(y)+p,value:y,index:b,offset:p})):o.ticks&&s!=null?o.ticks(s).map((y,b)=>({coordinate:o(y)+p,value:y,offset:p,index:b})):o.domain().map((y,b)=>({coordinate:o(y)+p,value:n?n[y]:y,index:b,offset:p}))},hf=1e-4,Qx=e=>{var t=e.domain();if(!(!t||t.length<=2)){var r=t.length,n=e.range(),i=Math.min(n[0],n[1])-hf,a=Math.max(n[0],n[1])+hf,o=e(t[0]),u=e(t[r-1]);(oa||ua)&&e.domain([t[0],t[r-1]])}},ew=(e,t)=>{if(!t||t.length!==2||!D(t[0])||!D(t[1]))return e;var r=Math.min(t[0],t[1]),n=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!D(e[0])||e[0]n)&&(i[1]=n),i[0]>n&&(i[0]=n),i[1]{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[o][r][0]=i,e[o][r][1]=i+u,i=e[o][r][1]):(e[o][r][0]=a,e[o][r][1]=a+u,a=e[o][r][1])}},rw=e=>{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[a][r][0]=i,e[a][r][1]=i+o,i=e[a][r][1]):(e[a][r][0]=0,e[a][r][1]=0)}},nw={sign:tw,expand:$0,none:Er,silhouette:R0,wiggle:L0,positive:rw},iw=(e,t,r)=>{var n=nw[r],i=N0().keys(t).value((a,o)=>+re(a,o,0)).order(Zo).offset(n);return i(e)};function Qv(e){return e==null?void 0:String(e)}function vf(e){var{axis:t,ticks:r,bandSize:n,entry:i,index:a,dataKey:o}=e;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!J(i[t.dataKey])){var u=Gh(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r[a]?r[a].coordinate+n/2:null}var l=re(i,J(o)?t.dataKey:o);return J(l)?null:t.scale(l)}var pf=e=>{var{axis:t,ticks:r,offset:n,bandSize:i,entry:a,index:o}=e;if(t.type==="category")return r[o]?r[o].coordinate+n:null;var u=re(a,t.dataKey,t.scale.domain()[o]);return J(u)?null:t.scale(u)-i/2+n},aw=e=>{var{numericAxis:t}=e,r=t.scale.domain();if(t.type==="number"){var n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return n<=0&&i>=0?0:i<0?i:n}return r[0]},ow=e=>{var t=e.flat(2).filter(D);return[Math.min(...t),Math.max(...t)]},uw=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],sw=(e,t,r)=>{if(e!=null)return uw(Object.keys(e).reduce((n,i)=>{var a=e[i],{stackedData:o}=a,u=o.reduce((l,c)=>{var s=ow(c.slice(t,r+1));return[Math.min(l[0],s[0]),Math.max(l[1],s[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},mf=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,gf=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,nn=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=_i(t,s=>s.coordinate),a=1/0,o=1,u=i.length;o=i.left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height;return a?{x:e,y:t}:null}return n?Yx({x:e,y:t},n):null}var cw=(e,t,r,n)=>{var i=t.find(c=>c&&c.index===r);if(i){if(e==="horizontal")return{x:i.coordinate,y:n.y};if(e==="vertical")return{x:n.x,y:i.coordinate};if(e==="centric"){var a=i.coordinate,{radius:o}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,o,a)),{},{angle:a,radius:o})}var u=i.coordinate,{angle:l}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,u,l)),{},{angle:l,radius:u})}return{x:0,y:0}},fw=(e,t)=>t==="horizontal"?e.x:t==="vertical"?e.y:t==="centric"?e.angle:e.radius,Ct=e=>e.layout.width,_t=e=>e.layout.height,dw=e=>e.layout.scale,ep=e=>e.layout.margin,us=S(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),ss=S(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),tp="data-recharts-item-index",rp="data-recharts-item-data-key",Ri=60;function bf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function It(e){for(var t=1;te.brush.height,ve=S([Ct,_t,ep,mw,us,ss,Sv,Bb],(e,t,r,n,i,a,o,u)=>{var l=a.reduce((v,p)=>{var{orientation:g}=p;if(!p.mirror&&!p.hide){var y=typeof p.width=="number"?p.width:Ri;return It(It({},v),{},{[g]:v[g]+y})}return v},{left:r.left||0,right:r.right||0}),c=i.reduce((v,p)=>{var{orientation:g}=p;return!p.mirror&&!p.hide?It(It({},v),{},{[g]:Kt(v,"".concat(g))+p.height}):v},{top:r.top||0,bottom:r.bottom||0}),s=It(It({},c),l),f=s.bottom;s.bottom+=n,s=Jx(s,o,u);var d=e-s.left-s.right,h=t-s.top-s.bottom;return It(It({brushBottom:f},s),{},{width:Math.max(d,0),height:Math.max(h,0)})}),gw=S(ve,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),np=S(Ct,_t,(e,t)=>({x:0,y:0,width:e,height:t})),yw=m.createContext(null),_e=()=>m.useContext(yw)!=null,Li=e=>e.brush,Bi=S([Li,ve,ep],(e,t,r)=>({height:e.height,x:D(e.x)?e.x:t.left,y:D(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:D(e.width)?e.width:t.width})),ls=()=>{var e,t=_e(),r=$(gw),n=$(Bi),i=(e=$(Li))===null||e===void 0?void 0:e.padding;return!t||!n||!i?r:{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}},bw={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},ip=()=>{var e;return(e=$(ve))!==null&&e!==void 0?e:bw},ap=()=>$(Ct),op=()=>$(_t),Y=e=>e.layout.layoutType,Ki=()=>$(Y),xw={settings:{layout:"horizontal",align:"center",verticalAlign:"middle",itemSorter:"value"},size:{width:0,height:0},payload:[]},up=nt({name:"legend",initialState:xw,reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload(e,t){e.payload.push(t.payload)},removeLegendPayload(e,t){var r=Pt(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)}}}),{setLegendSize:qD,setLegendSettings:FD,addLegendPayload:sp,removeLegendPayload:lp}=up.actions,ww=up.reducer;function uu(){return uu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{separator:t=" : ",contentStyle:r={},itemStyle:n={},labelStyle:i={},payload:a,formatter:o,itemSorter:u,wrapperClassName:l,labelClassName:c,label:s,labelFormatter:f,accessibilityLayer:d=!1}=e,h=()=>{if(a&&a.length){var w={padding:0,margin:0},O=(u?_i(a,u):a).map((A,j)=>{if(A.type==="none")return null;var T=A.formatter||o||Sw,{value:I,name:_}=A,k=I,R=_;if(T){var B=T(I,_,A,j,a);if(Array.isArray(B))[k,R]=B;else if(B!=null)k=B;else return null}var z=co({display:"block",paddingTop:4,paddingBottom:4,color:A.color||"#000"},n);return m.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(j),style:z},dt(R)?m.createElement("span",{className:"recharts-tooltip-item-name"},R):null,dt(R)?m.createElement("span",{className:"recharts-tooltip-item-separator"},t):null,m.createElement("span",{className:"recharts-tooltip-item-value"},k),m.createElement("span",{className:"recharts-tooltip-item-unit"},A.unit||""))});return m.createElement("ul",{className:"recharts-tooltip-item-list",style:w},O)}return null},v=co({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},r),p=co({margin:0},i),g=!J(s),y=g?s:"",b=H("recharts-default-tooltip",l),x=H("recharts-tooltip-label",c);g&&f&&a!==void 0&&a!==null&&(y=f(s,a));var P=d?{role:"status","aria-live":"assertive"}:{};return m.createElement("div",uu({className:b,style:v},P),m.createElement("p",{className:x,style:p},m.isValidElement(y)?y:"".concat(y)),h())},zr="recharts-tooltip-wrapper",jw={visibility:"hidden"};function Tw(e){var{coordinate:t,translateX:r,translateY:n}=e;return H(zr,{["".concat(zr,"-right")]:D(r)&&t&&D(t.x)&&r>=t.x,["".concat(zr,"-left")]:D(r)&&t&&D(t.x)&&r=t.y,["".concat(zr,"-top")]:D(n)&&t&&D(t.y)&&n0?i:0),f=r[n]+i;if(t[n])return o[n]?s:f;var d=l[n];if(d==null)return 0;if(o[n]){var h=s,v=d;return hg?Math.max(s,d):Math.max(f,d)}function Cw(e){var{translateX:t,translateY:r,useTranslate3d:n}=e;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function _w(e){var{allowEscapeViewBox:t,coordinate:r,offsetTopLeft:n,position:i,reverseDirection:a,tooltipBox:o,useTranslate3d:u,viewBox:l}=e,c,s,f;return o.height>0&&o.width>0&&r?(s=wf({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:l,viewBoxDimension:l.width}),f=wf({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:l,viewBoxDimension:l.height}),c=Cw({translateX:s,translateY:f,useTranslate3d:u})):c=jw,{cssProperties:c,cssClasses:Tw({translateX:s,translateY:f,coordinate:r})}}function Pf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function In(e){for(var t=1;t{if(t.key==="Escape"){var r,n,i,a;this.setState({dismissed:!0,dismissedAtCoordinate:{x:(r=(n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==null&&r!==void 0?r:0,y:(i=(a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==null&&i!==void 0?i:0}})}})}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown)}componentDidUpdate(){var t,r;this.state.dismissed&&(((t=this.props.coordinate)===null||t===void 0?void 0:t.x)!==this.state.dismissedAtCoordinate.x||((r=this.props.coordinate)===null||r===void 0?void 0:r.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}render(){var{active:t,allowEscapeViewBox:r,animationDuration:n,animationEasing:i,children:a,coordinate:o,hasPayload:u,isAnimationActive:l,offset:c,position:s,reverseDirection:f,useTranslate3d:d,viewBox:h,wrapperStyle:v,lastBoundingBox:p,innerRef:g,hasPortalFromProps:y}=this.props,{cssClasses:b,cssProperties:x}=_w({allowEscapeViewBox:r,coordinate:o,offsetTopLeft:c,position:s,reverseDirection:f,tooltipBox:{height:p.height,width:p.width},useTranslate3d:d,viewBox:h}),P=y?{}:In(In({transition:l&&t?"transform ".concat(n,"ms ").concat(i):void 0},x),{},{pointerEvents:"none",visibility:!this.state.dismissed&&t&&u?"visible":"hidden",position:"absolute",top:0,left:0}),w=In(In({},P),{},{visibility:!this.state.dismissed&&t&&u?"visible":"hidden"},v);return m.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:b,style:w,ref:g},a)}}var Iw=()=>!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout),vr={isSsr:Iw()},cp=()=>$(e=>e.rootProps.accessibilityLayer);function Ye(e){return Number.isFinite(e)}function Tr(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function lu(){return lu=Object.assign?Object.assign.bind():function(e){for(var t=1;tYe(e.x)&&Ye(e.y),Wr=e=>e.x,Ur=e=>e.y,Lw=(e,t)=>{if(typeof e=="function")return e;var r="curve".concat(vn(e));return(r==="curveMonotone"||r==="curveBump")&&t?Sf["".concat(r).concat(t==="vertical"?"Y":"X")]:Sf[r]||Ti},Bw=e=>{var{type:t="linear",points:r=[],baseLine:n,layout:i,connectNulls:a=!1}=e,o=Lw(t,i),u=a?r.filter(Nn):r,l;if(Array.isArray(n)){var c=a?n.filter(f=>Nn(f)):n,s=u.map((f,d)=>Af(Af({},f),{},{base:c[d]}));return i==="vertical"?l=Cn().y(Ur).x1(Wr).x0(f=>f.base.x):l=Cn().x(Wr).y1(Ur).y0(f=>f.base.y),l.defined(Nn).curve(o),l(s)}return i==="vertical"&&D(n)?l=Cn().y(Ur).x1(Wr).x0(n):D(n)?l=Cn().x(Wr).y1(Ur).y0(n):l=nv().x(Wr).y(Ur),l.defined(Nn).curve(o),l(u)},cs=e=>{var{className:t,points:r,path:n,pathRef:i}=e;if((!r||!r.length)&&!n)return null;var a=r&&r.length?Bw(e):n;return m.createElement("path",lu({},F(e,!1),Hu(e),{className:H("recharts-curve",t),d:a===null?void 0:a,ref:i}))},Kw=["x","y","top","left","width","height","className"];function cu(){return cu=Object.assign?Object.assign.bind():function(e){for(var t=1;t"M".concat(e,",").concat(i,"v").concat(n,"M").concat(a,",").concat(t,"h").concat(r),Gw=e=>{var{x:t=0,y:r=0,top:n=0,left:i=0,width:a=0,height:o=0,className:u}=e,l=Uw(e,Kw),c=qw({x:t,y:r,top:n,left:i,width:a,height:o},l);return!D(t)||!D(r)||!D(a)||!D(o)||!D(n)||!D(i)?null:m.createElement("path",cu({},F(c,!0),{className:H("recharts-cross",u),d:Yw(t,r,a,o,n,i)}))};function Vw(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-i:r.left+.5,y:e==="horizontal"?r.top+.5:t.y-i,width:e==="horizontal"?n:r.width-1,height:e==="horizontal"?r.height-1:n}}function jf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Xw(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}var fo={},ho={},vo={},Tf;function e1(){return Tf||(Tf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){if(!r||typeof r!="object")return!1;const n=Object.getPrototypeOf(r);return n===null||n===Object.prototype||Object.getPrototypeOf(n)===null?Object.prototype.toString.call(r)==="[object Object]":!1}e.isPlainObject=t}(vo)),vo}var Cf;function t1(){return Cf||(Cf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=e1(),r=bv(),n=Qu(),i=es(),a=Zu();function o(c,s,f){return u(c,s,void 0,void 0,void 0,void 0,f)}function u(c,s,f,d,h,v,p){const g=p(c,s,f,d,h,v);if(g!==void 0)return g;if(typeof c==typeof s)switch(typeof c){case"bigint":case"string":case"boolean":case"symbol":case"undefined":return c===s;case"number":return c===s||Object.is(c,s);case"function":return c===s;case"object":return l(c,s,v,p)}return l(c,s,v,p)}function l(c,s,f,d){if(Object.is(c,s))return!0;let h=n.getTag(c),v=n.getTag(s);if(h===i.argumentsTag&&(h=i.objectTag),v===i.argumentsTag&&(v=i.objectTag),h!==v)return!1;switch(h){case i.stringTag:return c.toString()===s.toString();case i.numberTag:{const y=c.valueOf(),b=s.valueOf();return a.eq(y,b)}case i.booleanTag:case i.dateTag:case i.symbolTag:return Object.is(c.valueOf(),s.valueOf());case i.regexpTag:return c.source===s.source&&c.flags===s.flags;case i.functionTag:return c===s}f=f??new Map;const p=f.get(c),g=f.get(s);if(p!=null&&g!=null)return p===s;f.set(c,s),f.set(s,c);try{switch(h){case i.mapTag:{if(c.size!==s.size)return!1;for(const[y,b]of c.entries())if(!s.has(y)||!u(b,s.get(y),y,c,s,f,d))return!1;return!0}case i.setTag:{if(c.size!==s.size)return!1;const y=Array.from(c.values()),b=Array.from(s.values());for(let x=0;xu(P,O,void 0,c,s,f,d));if(w===-1)return!1;b.splice(w,1)}return!0}case i.arrayTag:case i.uint8ArrayTag:case i.uint8ClampedArrayTag:case i.uint16ArrayTag:case i.uint32ArrayTag:case i.bigUint64ArrayTag:case i.int8ArrayTag:case i.int16ArrayTag:case i.int32ArrayTag:case i.bigInt64ArrayTag:case i.float32ArrayTag:case i.float64ArrayTag:{if(typeof Buffer<"u"&&Buffer.isBuffer(c)!==Buffer.isBuffer(s)||c.length!==s.length)return!1;for(let y=0;ynull,n=!1,i=null,a=o=>{if(!n){if(Array.isArray(o)){if(!o.length)return;var u=o,[l,...c]=u;if(typeof l=="number"){i=e.setTimeout(a.bind(null,c),l);return}a(l),i=e.setTimeout(a.bind(null,c));return}typeof o=="object"&&(t=o,r(t)),typeof o=="function"&&o()}};return{stop:()=>{n=!0},start:o=>{n=!1,i&&(i(),i=null),a(o)},subscribe:o=>(r=o,()=>{r=()=>null}),getTimeoutController:()=>e}}var ii=1e-4,fp=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],dp=(e,t)=>e.map((r,n)=>r*t**n).reduce((r,n)=>r+n),Df=(e,t)=>r=>{var n=fp(e,t);return dp(n,r)},s1=(e,t)=>r=>{var n=fp(e,t),i=[...n.map((a,o)=>a*o).slice(1),0];return dp(i,r)},If=function(){for(var t,r,n,i,a=arguments.length,o=new Array(a),u=0;uparseFloat(v)))}}else o.length===4&&([t,n,r,i]=o);var c=Df(t,r),s=Df(n,i),f=s1(t,r),d=v=>v>1?1:v<0?0:v,h=v=>{for(var p=v>1?1:v,g=p,y=0;y<8;++y){var b=c(g)-p,x=f(g);if(Math.abs(b-p)0&&arguments[0]!==void 0?arguments[0]:{},{stiff:r=100,damping:n=8,dt:i=17}=t,a=(o,u,l)=>{var c=-(o-u)*r,s=l*n,f=l+(c-s)*i/1e3,d=l*i/1e3+o;return Math.abs(d-u){if(typeof e=="string")switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return If(e);case"spring":return l1();default:if(e.split("(")[0]==="cubic-bezier")return If(e)}return typeof e=="function"?e:null};function Nf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $f(e){for(var t=1;te.replace(/([A-Z])/g,t=>"-".concat(t.toLowerCase())),p1=(e,t,r)=>e.map(n=>"".concat(v1(n)," ").concat(t,"ms ").concat(r)).join(","),m1=(e,t)=>[Object.keys(e),Object.keys(t)].reduce((r,n)=>r.filter(i=>n.includes(i))),an=(e,t)=>Object.keys(t).reduce((r,n)=>$f($f({},r),{},{[n]:e(n,t[n])}),{});function Rf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Oe(e){for(var t=1;te+(t-e)*r,fu=e=>{var{from:t,to:r}=e;return t!==r},hp=(e,t,r)=>{var n=an((i,a)=>{if(fu(a)){var[o,u]=e(a.from,a.to,a.velocity);return Oe(Oe({},a),{},{from:o,velocity:u})}return a},t);return r<1?an((i,a)=>fu(a)?Oe(Oe({},a),{},{velocity:ai(a.velocity,n[i].velocity,r),from:ai(a.from,n[i].from,r)}):a,t):hp(e,n,r-1)};function x1(e,t,r,n,i,a){var o,u=n.reduce((d,h)=>Oe(Oe({},d),{},{[h]:{from:e[h],velocity:0,to:t[h]}}),{}),l=()=>an((d,h)=>h.from,u),c=()=>!Object.values(u).filter(fu).length,s=null,f=d=>{o||(o=d);var h=d-o,v=h/r.dt;u=hp(r,u,v),i(Oe(Oe(Oe({},e),t),l())),o=d,c()||(s=a.setTimeout(f))};return()=>(s=a.setTimeout(f),()=>{s()})}function w1(e,t,r,n,i,a,o){var u=null,l=i.reduce((f,d)=>Oe(Oe({},f),{},{[d]:[e[d],t[d]]}),{}),c,s=f=>{c||(c=f);var d=(f-c)/n,h=an((p,g)=>ai(...g,r(d)),l);if(a(Oe(Oe(Oe({},e),t),h)),d<1)u=o.setTimeout(s);else{var v=an((p,g)=>ai(...g,r(1)),l);a(Oe(Oe(Oe({},e),t),v))}};return()=>(u=o.setTimeout(s),()=>{u()})}const P1=(e,t,r,n,i,a)=>{var o=m1(e,t);return r.isStepper===!0?x1(e,t,r,o,i,a):w1(e,t,r,n,o,i,a)};class O1{setTimeout(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),i=null,a=o=>{o-n>=r?t(o):typeof requestAnimationFrame=="function"&&(i=requestAnimationFrame(a))};return i=requestAnimationFrame(a),()=>{cancelAnimationFrame(i)}}}var A1=["children","begin","duration","attributeName","easing","isActive","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart","animationManager"];function du(){return du=Object.assign?Object.assign.bind():function(e){for(var t=1;t{this.stopJSAnimation=c()};this.manager.start([l,o,s,i,u])}runAnimation(t){var{begin:r,duration:n,attributeName:i,to:a,easing:o,onAnimationStart:u,onAnimationEnd:l,children:c}=t;if(this.unSubscribe=this.manager.subscribe(this.handleStyleChange),typeof o=="function"||typeof c=="function"||o==="spring"){this.runJSAnimation(t);return}var s=i?{[i]:a}:a,f=p1(Object.keys(s),n,o);this.manager.start([u,r,Nt(Nt({},s),{},{transition:f}),n,l])}render(){var t=this.props,{children:r,begin:n,duration:i,attributeName:a,easing:o,isActive:u,from:l,to:c,canBegin:s,onAnimationEnd:f,shouldReAnimate:d,onAnimationReStart:h,animationManager:v}=t,p=S1(t,A1),g=m.Children.count(r),y=this.state.style;if(typeof r=="function")return r(y);if(!u||g===0||i<=0)return r;var b=x=>{var{style:P={},className:w}=x.props,O=m.cloneElement(x,Nt(Nt({},p),{},{style:Nt(Nt({},P),y),className:w}));return O};return g===1?b(m.Children.only(r)):m.createElement("div",null,m.Children.map(r,x=>b(x)))}}tr(fs,"displayName","Animate");tr(fs,"defaultProps",{begin:0,duration:1e3,attributeName:"",easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}});var _1=m.createContext(null);function qt(e){var t,r,n=m.useContext(_1);return m.createElement(fs,du({},e,{animationManager:(t=(r=e.animationManager)!==null&&r!==void 0?r:n)!==null&&t!==void 0?t:C1()}))}function oi(){return oi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=Math.min(Math.abs(r)/2,Math.abs(n)/2),o=n>=0?1:-1,u=r>=0?1:-1,l=n>=0&&r>=0||n<0&&r<0?1:0,c;if(a>0&&i instanceof Array){for(var s=[0,0,0,0],f=0,d=4;fa?a:i[f];c="M".concat(e,",").concat(t+o*s[0]),s[0]>0&&(c+="A ".concat(s[0],",").concat(s[0],",0,0,").concat(l,",").concat(e+u*s[0],",").concat(t)),c+="L ".concat(e+r-u*s[1],",").concat(t),s[1]>0&&(c+="A ".concat(s[1],",").concat(s[1],",0,0,").concat(l,`, + */var Kc;function mb(){if(Kc)return Xa;Kc=1;var e=qu(),t=pb();function r(c,s){return c===s&&(c!==0||1/c===1/s)||c!==c&&s!==s}var n=typeof Object.is=="function"?Object.is:r,i=t.useSyncExternalStore,a=e.useRef,o=e.useEffect,u=e.useMemo,l=e.useDebugValue;return Xa.useSyncExternalStoreWithSelector=function(c,s,f,d,h){var v=a(null);if(v.current===null){var p={hasValue:!1,value:null};v.current=p}else p=v.current;v=u(function(){function y(O){if(!b){if(b=!0,x=O,O=d(O),h!==void 0&&p.hasValue){var A=p.value;if(h(A,O))return P=A}return P=O}if(A=P,n(x,O))return A;var j=d(O);return h!==void 0&&h(A,j)?(x=O,A):(x=O,P=j)}var b=!1,x,P,w=f===void 0?null:f;return[function(){return y(s())},w===null?void 0:function(){return y(w())}]},[s,f,d,h]);var g=i(c,v[0],v[1]);return o(function(){p.hasValue=!0,p.value=g},[g]),l(g),g},Xa}var qc;function gb(){return qc||(qc=1,Va.exports=mb()),Va.exports}var yb=gb(),ts=m.createContext(null),bb=e=>e,ae=()=>{var e=m.useContext(ts);return e?e.store.dispatch:bb},Wn=()=>{},xb=()=>Wn,wb=(e,t)=>e===t;function $(e){var t=m.useContext(ts);return yb.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:xb,t?t.store.getState:Wn,t?t.store.getState:Wn,t?e:Wn,wb)}function Pb(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function Ob(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!="object")throw new TypeError(t)}function Ab(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var Fc=e=>Array.isArray(e)?e:[e];function Sb(e){const t=Array.isArray(e[0])?e[0]:e;return Ab(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function Eb(e,t){const r=[],{length:n}=e;for(let i=0;i{r=_n(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function _b(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let a=0,o=0,u,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),Pb(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const s={...r,...l},{memoize:f,memoizeOptions:d=[],argsMemoize:h=Pv,argsMemoizeOptions:v=[]}=s,p=Fc(d),g=Fc(v),y=Sb(i),b=f(function(){return a++,c.apply(null,arguments)},...p),x=h(function(){o++;const w=Eb(y,arguments);return u=b.apply(null,w),u},...g);return Object.assign(x,{resultFunc:c,memoizedResultFunc:b,dependencies:y,dependencyRecomputations:()=>o,resetDependencyRecomputations:()=>{o=0},lastResult:()=>u,recomputations:()=>a,resetRecomputations:()=>{a=0},memoize:f,argsMemoize:h})};return Object.assign(n,{withTypes:()=>n}),n}var S=_b(Pv),kb=Object.assign((e,t=S)=>{Ob(e,`createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof e}`);const r=Object.keys(e),n=r.map(a=>e[a]);return t(n,(...a)=>a.reduce((o,u,l)=>(o[r[l]]=u,o),{}))},{withTypes:()=>kb}),Qa={},eo={},to={},Wc;function Mb(){return Wc||(Wc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(n){return typeof n=="symbol"?1:n===null?2:n===void 0?3:n!==n?4:0}const r=(n,i,a)=>{if(n!==i){const o=t(n),u=t(i);if(o===u&&o===0){if(ni)return a==="desc"?-1:1}return a==="desc"?u-o:o-u}return 0};e.compareValues=r}(to)),to}var ro={},no={},Uc;function Ov(){return Uc||(Uc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return typeof r=="symbol"||r instanceof Symbol}e.isSymbol=t}(no)),no}var Hc;function Db(){return Hc||(Hc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ov(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function i(a,o){return Array.isArray(a)?!1:typeof a=="number"||typeof a=="boolean"||a==null||t.isSymbol(a)?!0:typeof a=="string"&&(n.test(a)||!r.test(a))||o!=null&&Object.hasOwn(o,a)}e.isKey=i}(ro)),ro}var Yc;function Ib(){return Yc||(Yc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Mb(),r=Db(),n=zu();function i(a,o,u,l){if(a==null)return[];u=l?void 0:u,Array.isArray(a)||(a=Object.values(a)),Array.isArray(o)||(o=o==null?[null]:[o]),o.length===0&&(o=[null]),Array.isArray(u)||(u=u==null?[]:[u]),u=u.map(h=>String(h));const c=(h,v)=>{let p=h;for(let g=0;gv==null||h==null?v:typeof h=="object"&&"key"in h?Object.hasOwn(v,h.key)?v[h.key]:c(v,h.path):typeof h=="function"?h(v):Array.isArray(h)?c(v,h):typeof v=="object"?v[h]:v,f=o.map(h=>(Array.isArray(h)&&h.length===1&&(h=h[0]),h==null||typeof h=="function"||Array.isArray(h)||r.isKey(h)?h:{key:h,path:n.toPath(h)}));return a.map(h=>({original:h,criteria:f.map(v=>s(v,h))})).slice().sort((h,v)=>{for(let p=0;ph.original)}e.orderBy=i}(eo)),eo}var io={},Gc;function Nb(){return Gc||(Gc=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=1){const i=[],a=Math.floor(n),o=(u,l)=>{for(let c=0;c1&&n.isIterateeCall(a,o[0],o[1])?o=[]:u>2&&n.isIterateeCall(o[0],o[1],o[2])&&(o=[o[0]]),t.orderBy(a,r.flatten(o),["asc"])}e.sortBy=i}(Qa)),Qa}var oo,Zc;function Rb(){return Zc||(Zc=1,oo=$b().sortBy),oo}var Lb=Rb();const _i=Tt(Lb);var Sv=e=>e.legend.settings,Bb=e=>e.legend.size,Kb=e=>e.legend.payload;S([Kb,Sv],(e,t)=>{var{itemSorter:r}=t,n=e.flat(1);return r?_i(n,r):n});var kn=1;function qb(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],[t,r]=m.useState({height:0,left:0,top:0,width:0}),n=m.useCallback(i=>{if(i!=null){var a=i.getBoundingClientRect(),o={height:a.height,left:a.left,top:a.top,width:a.width};(Math.abs(o.height-t.height)>kn||Math.abs(o.left-t.left)>kn||Math.abs(o.top-t.top)>kn||Math.abs(o.width-t.width)>kn)&&r({height:o.height,left:o.left,top:o.top,width:o.width})}},[t.width,t.height,t.top,t.left,...e]);return[t,n]}function Pe(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Fb=typeof Symbol=="function"&&Symbol.observable||"@@observable",Jc=Fb,uo=()=>Math.random().toString(36).substring(7).split("").join("."),zb={INIT:`@@redux/INIT${uo()}`,REPLACE:`@@redux/REPLACE${uo()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${uo()}`},Xn=zb;function rs(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function Ev(e,t,r){if(typeof e!="function")throw new Error(Pe(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(Pe(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Pe(1));return r(Ev)(e,t)}let n=e,i=t,a=new Map,o=a,u=0,l=!1;function c(){o===a&&(o=new Map,a.forEach((g,y)=>{o.set(y,g)}))}function s(){if(l)throw new Error(Pe(3));return i}function f(g){if(typeof g!="function")throw new Error(Pe(4));if(l)throw new Error(Pe(5));let y=!0;c();const b=u++;return o.set(b,g),function(){if(y){if(l)throw new Error(Pe(6));y=!1,c(),o.delete(b),a=null}}}function d(g){if(!rs(g))throw new Error(Pe(7));if(typeof g.type>"u")throw new Error(Pe(8));if(typeof g.type!="string")throw new Error(Pe(17));if(l)throw new Error(Pe(9));try{l=!0,i=n(i,g)}finally{l=!1}return(a=o).forEach(b=>{b()}),g}function h(g){if(typeof g!="function")throw new Error(Pe(10));n=g,d({type:Xn.REPLACE})}function v(){const g=f;return{subscribe(y){if(typeof y!="object"||y===null)throw new Error(Pe(11));function b(){const P=y;P.next&&P.next(s())}return b(),{unsubscribe:g(b)}},[Jc](){return this}}}return d({type:Xn.INIT}),{dispatch:d,subscribe:f,getState:s,replaceReducer:h,[Jc]:v}}function Wb(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:Xn.INIT})>"u")throw new Error(Pe(12));if(typeof r(void 0,{type:Xn.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Pe(13))})}function jv(e){const t=Object.keys(e),r={};for(let a=0;a"u")throw u&&u.type,new Error(Pe(14));c[f]=v,l=l||v!==h}return l=l||n.length!==Object.keys(o).length,l?c:o}}function Zn(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function Ub(...e){return t=>(r,n)=>{const i=t(r,n);let a=()=>{throw new Error(Pe(15))};const o={getState:i.getState,dispatch:(l,...c)=>a(l,...c)},u=e.map(l=>l(o));return a=Zn(...u)(i.dispatch),{...i,dispatch:a}}}function Tv(e){return rs(e)&&"type"in e&&typeof e.type=="string"}var Cv=Symbol.for("immer-nothing"),Qc=Symbol.for("immer-draftable"),Ue=Symbol.for("immer-state");function ut(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var jr=Object.getPrototypeOf;function cr(e){return!!e&&!!e[Ue]}function At(e){var t;return e?_v(e)||Array.isArray(e)||!!e[Qc]||!!((t=e.constructor)!=null&&t[Qc])||Mi(e)||Di(e):!1}var Hb=Object.prototype.constructor.toString();function _v(e){if(!e||typeof e!="object")return!1;const t=jr(e);if(t===null)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object?!0:typeof r=="function"&&Function.toString.call(r)===Hb}function Jn(e,t){ki(e)===0?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function ki(e){const t=e[Ue];return t?t.type_:Array.isArray(e)?1:Mi(e)?2:Di(e)?3:0}function Qo(e,t){return ki(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function kv(e,t,r){const n=ki(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function Yb(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function Mi(e){return e instanceof Map}function Di(e){return e instanceof Set}function Jt(e){return e.copy_||e.base_}function eu(e,t){if(Mi(e))return new Map(e);if(Di(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=_v(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[Ue];let i=Reflect.ownKeys(n);for(let a=0;a1&&(e.set=e.add=e.clear=e.delete=Gb),Object.freeze(e),t&&Object.entries(e).forEach(([r,n])=>ns(n,!0))),e}function Gb(){ut(2)}function Ii(e){return Object.isFrozen(e)}var Vb={};function fr(e){const t=Vb[e];return t||ut(0,e),t}var tn;function Mv(){return tn}function Xb(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function ef(e,t){t&&(fr("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function tu(e){ru(e),e.drafts_.forEach(Zb),e.drafts_=null}function ru(e){e===tn&&(tn=e.parent_)}function tf(e){return tn=Xb(tn,e)}function Zb(e){const t=e[Ue];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function rf(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[Ue].modified_&&(tu(t),ut(4)),At(e)&&(e=Qn(t,e),t.parent_||ei(t,e)),t.patches_&&fr("Patches").generateReplacementPatches_(r[Ue].base_,e,t.patches_,t.inversePatches_)):e=Qn(t,r,[]),tu(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==Cv?e:void 0}function Qn(e,t,r){if(Ii(t))return t;const n=t[Ue];if(!n)return Jn(t,(i,a)=>nf(e,n,t,i,a,r)),t;if(n.scope_!==e)return t;if(!n.modified_)return ei(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const i=n.copy_;let a=i,o=!1;n.type_===3&&(a=new Set(i),i.clear(),o=!0),Jn(a,(u,l)=>nf(e,n,i,u,l,r,o)),ei(e,i,!1),r&&e.patches_&&fr("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function nf(e,t,r,n,i,a,o){if(cr(i)){const u=a&&t&&t.type_!==3&&!Qo(t.assigned_,n)?a.concat(n):void 0,l=Qn(e,i,u);if(kv(r,n,l),cr(l))e.canAutoFreeze_=!1;else return}else o&&r.add(i);if(At(i)&&!Ii(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Qn(e,i),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&Object.prototype.propertyIsEnumerable.call(r,n)&&ei(e,i)}}function ei(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&ns(t,r)}function Jb(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:Mv(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,a=is;r&&(i=[n],a=rn);const{revoke:o,proxy:u}=Proxy.revocable(i,a);return n.draft_=u,n.revoke_=o,u}var is={get(e,t){if(t===Ue)return e;const r=Jt(e);if(!Qo(r,t))return Qb(e,r,t);const n=r[t];return e.finalized_||!At(n)?n:n===so(e.base_,t)?(lo(e),e.copy_[t]=iu(n,e)):n},has(e,t){return t in Jt(e)},ownKeys(e){return Reflect.ownKeys(Jt(e))},set(e,t,r){const n=Dv(Jt(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=so(Jt(e),t),a=i==null?void 0:i[Ue];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(Yb(r,i)&&(r!==void 0||Qo(e.base_,t)))return!0;lo(e),nu(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return so(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,lo(e),nu(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Jt(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){ut(11)},getPrototypeOf(e){return jr(e.base_)},setPrototypeOf(){ut(12)}},rn={};Jn(is,(e,t)=>{rn[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});rn.deleteProperty=function(e,t){return rn.set.call(this,e,t,void 0)};rn.set=function(e,t,r){return is.set.call(this,e[0],t,r,e[0])};function so(e,t){const r=e[Ue];return(r?Jt(r):e)[t]}function Qb(e,t,r){var i;const n=Dv(t,r);return n?"value"in n?n.value:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function Dv(e,t){if(!(t in e))return;let r=jr(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=jr(r)}}function nu(e){e.modified_||(e.modified_=!0,e.parent_&&nu(e.parent_))}function lo(e){e.copy_||(e.copy_=eu(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var ex=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const a=r;r=t;const o=this;return function(l=a,...c){return o.produce(l,s=>r.call(this,s,...c))}}typeof r!="function"&&ut(6),n!==void 0&&typeof n!="function"&&ut(7);let i;if(At(t)){const a=tf(this),o=iu(t,void 0);let u=!0;try{i=r(o),u=!1}finally{u?tu(a):ru(a)}return ef(a,n),rf(i,a)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===Cv&&(i=void 0),this.autoFreeze_&&ns(i,!0),n){const a=[],o=[];fr("Patches").generateReplacementPatches_(t,i,a,o),n(a,o)}return i}else ut(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(o,...u)=>this.produceWithPatches(o,l=>t(l,...u));let n,i;return[this.produce(t,r,(o,u)=>{n=o,i=u}),n,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){At(e)||ut(8),cr(e)&&(e=Pt(e));const t=tf(this),r=iu(e,void 0);return r[Ue].isManual_=!0,ru(t),r}finishDraft(e,t){const r=e&&e[Ue];(!r||!r.isManual_)&&ut(9);const{scope_:n}=r;return ef(n,t),rf(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const i=t[r];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}r>-1&&(t=t.slice(r+1));const n=fr("Patches").applyPatches_;return cr(e)?n(e,t):this.produce(e,i=>n(i,t))}};function iu(e,t){const r=Mi(e)?fr("MapSet").proxyMap_(e,t):Di(e)?fr("MapSet").proxySet_(e,t):Jb(e,t);return(t?t.scope_:Mv()).drafts_.push(r),r}function Pt(e){return cr(e)||ut(10,e),Iv(e)}function Iv(e){if(!At(e)||Ii(e))return e;const t=e[Ue];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=eu(e,t.scope_.immer_.useStrictShallowCopy_)}else r=eu(e,!0);return Jn(r,(n,i)=>{kv(r,n,Iv(i))}),t&&(t.finalized_=!1),r}var He=new ex,Nv=He.produce;He.produceWithPatches.bind(He);He.setAutoFreeze.bind(He);He.setUseStrictShallowCopy.bind(He);He.applyPatches.bind(He);He.createDraft.bind(He);He.finishDraft.bind(He);function $v(e){return({dispatch:r,getState:n})=>i=>a=>typeof a=="function"?a(r,n,e):i(a)}var tx=$v(),rx=$v,nx=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Zn:Zn.apply(null,arguments)};function tt(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(ze(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>Tv(n)&&n.type===e,r}var Rv=class Zr extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,Zr.prototype)}static get[Symbol.species](){return Zr}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new Zr(...t[0].concat(this)):new Zr(...t.concat(this))}};function af(e){return At(e)?Nv(e,()=>{}):e}function Mn(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function ix(e){return typeof e=="boolean"}var ax=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:a=!0}=t??{};let o=new Rv;return r&&(ix(r)?o.push(tx):o.push(rx(r.extraArgument))),o},ox="RTK_autoBatch",of=e=>t=>{setTimeout(t,e)},ux=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,a=!1,o=!1;const u=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:of(10):e.type==="callback"?e.queueNotification:of(e.timeout),c=()=>{o=!1,a&&(a=!1,u.forEach(s=>s()))};return Object.assign({},n,{subscribe(s){const f=()=>i&&s(),d=n.subscribe(f);return u.add(s),()=>{d(),u.delete(s)}},dispatch(s){var f;try{return i=!((f=s==null?void 0:s.meta)!=null&&f[ox]),a=!i,a&&(o||(o=!0,l(c))),n.dispatch(s)}finally{i=!0}}})},sx=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new Rv(e);return n&&i.push(ux(typeof n=="object"?n:void 0)),i};function lx(e){const t=ax(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:a=void 0,enhancers:o=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(rs(r))u=jv(r);else throw new Error(ze(1));let l;typeof n=="function"?l=n(t):l=t();let c=Zn;i&&(c=nx({trace:!1,...typeof i=="object"&&i}));const s=Ub(...l),f=sx(s);let d=typeof o=="function"?o(f):f();const h=c(...d);return Ev(u,a,h)}function Lv(e){const t={},r=[];let n;const i={addCase(a,o){const u=typeof a=="string"?a:a.type;if(!u)throw new Error(ze(28));if(u in t)throw new Error(ze(29));return t[u]=o,i},addMatcher(a,o){return r.push({matcher:a,reducer:o}),i},addDefaultCase(a){return n=a,i}};return e(i),[t,r,n]}function cx(e){return typeof e=="function"}function fx(e,t){let[r,n,i]=Lv(t),a;if(cx(e))a=()=>af(e());else{const u=af(e);a=()=>u}function o(u=a(),l){let c=[r[l.type],...n.filter(({matcher:s})=>s(l)).map(({reducer:s})=>s)];return c.filter(s=>!!s).length===0&&(c=[i]),c.reduce((s,f)=>{if(f)if(cr(s)){const h=f(s,l);return h===void 0?s:h}else{if(At(s))return Nv(s,d=>f(d,l));{const d=f(s,l);if(d===void 0){if(s===null)return s;throw Error("A case reducer on a non-draftable value must not return undefined")}return d}}return s},u)}return o.getInitialState=a,o}var dx="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",hx=(e=21)=>{let t="",r=e;for(;r--;)t+=dx[Math.random()*64|0];return t},vx=Symbol.for("rtk-slice-createasyncthunk");function px(e,t){return`${e}/${t}`}function mx({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[vx];return function(i){const{name:a,reducerPath:o=a}=i;if(!a)throw new Error(ze(11));const u=(typeof i.reducers=="function"?i.reducers(yx()):i.reducers)||{},l=Object.keys(u),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(P,w){const O=typeof P=="string"?P:P.type;if(!O)throw new Error(ze(12));if(O in c.sliceCaseReducersByType)throw new Error(ze(13));return c.sliceCaseReducersByType[O]=w,s},addMatcher(P,w){return c.sliceMatchers.push({matcher:P,reducer:w}),s},exposeAction(P,w){return c.actionCreators[P]=w,s},exposeCaseReducer(P,w){return c.sliceCaseReducersByName[P]=w,s}};l.forEach(P=>{const w=u[P],O={reducerName:P,type:px(a,P),createNotation:typeof i.reducers=="function"};xx(w)?Px(O,w,s,t):bx(O,w,s)});function f(){const[P={},w=[],O=void 0]=typeof i.extraReducers=="function"?Lv(i.extraReducers):[i.extraReducers],A={...P,...c.sliceCaseReducersByType};return fx(i.initialState,j=>{for(let T in A)j.addCase(T,A[T]);for(let T of c.sliceMatchers)j.addMatcher(T.matcher,T.reducer);for(let T of w)j.addMatcher(T.matcher,T.reducer);O&&j.addDefaultCase(O)})}const d=P=>P,h=new Map,v=new WeakMap;let p;function g(P,w){return p||(p=f()),p(P,w)}function y(){return p||(p=f()),p.getInitialState()}function b(P,w=!1){function O(j){let T=j[P];return typeof T>"u"&&w&&(T=Mn(v,O,y)),T}function A(j=d){const T=Mn(h,w,()=>new WeakMap);return Mn(T,j,()=>{const I={};for(const[_,k]of Object.entries(i.selectors??{}))I[_]=gx(k,j,()=>Mn(v,j,y),w);return I})}return{reducerPath:P,getSelectors:A,get selectors(){return A(O)},selectSlice:O}}const x={name:a,reducer:g,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:y,...b(o),injectInto(P,{reducerPath:w,...O}={}){const A=w??o;return P.inject({reducerPath:A,reducer:g},O),{...x,...b(A,!0)}}};return x}}function gx(e,t,r,n){function i(a,...o){let u=t(a);return typeof u>"u"&&n&&(u=r()),e(u,...o)}return i.unwrapped=e,i}var nt=mx();function yx(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function bx({type:e,reducerName:t,createNotation:r},n,i){let a,o;if("reducer"in n){if(r&&!wx(n))throw new Error(ze(17));a=n.reducer,o=n.prepare}else a=n;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?tt(e,o):tt(e))}function xx(e){return e._reducerDefinitionType==="asyncThunk"}function wx(e){return e._reducerDefinitionType==="reducerWithPrepare"}function Px({type:e,reducerName:t},r,n,i){if(!i)throw new Error(ze(18));const{payloadCreator:a,fulfilled:o,pending:u,rejected:l,settled:c,options:s}=r,f=i(e,a,s);n.exposeAction(t,f),o&&n.addCase(f.fulfilled,o),u&&n.addCase(f.pending,u),l&&n.addCase(f.rejected,l),c&&n.addMatcher(f.settled,c),n.exposeCaseReducer(t,{fulfilled:o||Dn,pending:u||Dn,rejected:l||Dn,settled:c||Dn})}function Dn(){}var Ox="task",Bv="listener",Kv="completed",as="cancelled",Ax=`task-${as}`,Sx=`task-${Kv}`,au=`${Bv}-${as}`,Ex=`${Bv}-${Kv}`,Ni=class{constructor(e){la(this,"name","TaskAbortError");la(this,"message");this.code=e,this.message=`${Ox} ${as} (reason: ${e})`}},os=(e,t)=>{if(typeof e!="function")throw new TypeError(ze(32))},ti=()=>{},qv=(e,t=ti)=>(e.catch(t),e),Fv=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),ar=(e,t)=>{const r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},or=e=>{if(e.aborted){const{reason:t}=e;throw new Ni(t)}};function zv(e,t){let r=ti;return new Promise((n,i)=>{const a=()=>i(new Ni(e.reason));if(e.aborted){a();return}r=Fv(e,a),t.finally(()=>r()).then(n,i)}).finally(()=>{r=ti})}var jx=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof Ni?"cancelled":"rejected",error:r}}finally{t==null||t()}},ri=e=>t=>qv(zv(e,t).then(r=>(or(e),r))),Wv=e=>{const t=ri(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:Ar}=Object,uf={},$i="listenerMiddleware",Tx=(e,t)=>{const r=n=>Fv(e,()=>ar(n,e.reason));return(n,i)=>{os(n);const a=new AbortController;r(a);const o=jx(async()=>{or(e),or(a.signal);const u=await n({pause:ri(a.signal),delay:Wv(a.signal),signal:a.signal});return or(a.signal),u},()=>ar(a,Sx));return i!=null&&i.autoJoin&&t.push(o.catch(ti)),{result:ri(e)(o),cancel(){ar(a,Ax)}}}},Cx=(e,t)=>{const r=async(n,i)=>{or(t);let a=()=>{};const u=[new Promise((l,c)=>{let s=e({predicate:n,effect:(f,d)=>{d.unsubscribe(),l([f,d.getState(),d.getOriginalState()])}});a=()=>{s(),c()}})];i!=null&&u.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await zv(t,Promise.race(u));return or(t),l}finally{a()}};return(n,i)=>qv(r(n,i))},Uv=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:a}=e;if(t)i=tt(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(ze(21));return os(a),{predicate:i,type:t,effect:a}},Hv=Ar(e=>{const{type:t,predicate:r,effect:n}=Uv(e);return{id:hx(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(ze(22))}}},{withTypes:()=>Hv}),sf=(e,t)=>{const{type:r,effect:n,predicate:i}=Uv(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===i)&&a.effect===n)},ou=e=>{e.pending.forEach(t=>{ar(t,au)})},_x=e=>()=>{e.forEach(ou),e.clear()},lf=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Yv=Ar(tt(`${$i}/add`),{withTypes:()=>Yv}),kx=tt(`${$i}/removeAll`),Gv=Ar(tt(`${$i}/remove`),{withTypes:()=>Gv}),Mx=(...e)=>{console.error(`${$i}/error`,...e)},mn=(e={})=>{const t=new Map,{extra:r,onError:n=Mx}=e;os(n);const i=s=>(s.unsubscribe=()=>t.delete(s.id),t.set(s.id,s),f=>{s.unsubscribe(),f!=null&&f.cancelActive&&ou(s)}),a=s=>{const f=sf(t,s)??Hv(s);return i(f)};Ar(a,{withTypes:()=>a});const o=s=>{const f=sf(t,s);return f&&(f.unsubscribe(),s.cancelActive&&ou(f)),!!f};Ar(o,{withTypes:()=>o});const u=async(s,f,d,h)=>{const v=new AbortController,p=Cx(a,v.signal),g=[];try{s.pending.add(v),await Promise.resolve(s.effect(f,Ar({},d,{getOriginalState:h,condition:(y,b)=>p(y,b).then(Boolean),take:p,delay:Wv(v.signal),pause:ri(v.signal),extra:r,signal:v.signal,fork:Tx(v.signal,g),unsubscribe:s.unsubscribe,subscribe:()=>{t.set(s.id,s)},cancelActiveListeners:()=>{s.pending.forEach((y,b,x)=>{y!==v&&(ar(y,au),x.delete(y))})},cancel:()=>{ar(v,au),s.pending.delete(v)},throwIfCancelled:()=>{or(v.signal)}})))}catch(y){y instanceof Ni||lf(n,y,{raisedBy:"effect"})}finally{await Promise.all(g),ar(v,Ex),s.pending.delete(v)}},l=_x(t);return{middleware:s=>f=>d=>{if(!Tv(d))return f(d);if(Yv.match(d))return a(d.payload);if(kx.match(d)){l();return}if(Gv.match(d))return o(d.payload);let h=s.getState();const v=()=>{if(h===uf)throw new Error(ze(23));return h};let p;try{if(p=f(d),t.size>0){const g=s.getState(),y=Array.from(t.values());for(const b of y){let x=!1;try{x=b.predicate(d,g,h)}catch(P){x=!1,lf(n,P,{raisedBy:"predicate"})}x&&u(b,d,s,v)}}}finally{h=uf}return p},startListening:a,stopListening:o,clearListeners:l}};function ze(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Dx={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},Vv=nt({name:"chartLayout",initialState:Dx,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top,e.margin.right=t.payload.right,e.margin.bottom=t.payload.bottom,e.margin.left=t.payload.left},setScale(e,t){e.scale=t.payload}}}),{setMargin:Ix,setLayout:Nx,setChartSize:$x,setScale:Rx}=Vv.actions,Lx=Vv.reducer;function cf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ff(e){for(var t=1;te*180/Math.PI,ce=(e,t,r,n)=>({x:e+Math.cos(-ni*n)*r,y:t+Math.sin(-ni*n)*r}),Xv=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},zx=(e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return Math.sqrt((r-i)**2+(n-a)**2)},Wx=(e,t)=>{var{x:r,y:n}=e,{cx:i,cy:a}=t,o=zx({x:r,y:n},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var u=(r-i)/o,l=Math.acos(u);return n>a&&(l=2*Math.PI-l),{radius:o,angle:Fx(l),angleInRadian:l}},Ux=e=>{var{startAngle:t,endAngle:r}=e,n=Math.floor(t/360),i=Math.floor(r/360),a=Math.min(n,i);return{startAngle:t-a*360,endAngle:r-a*360}},Hx=(e,t)=>{var{startAngle:r,endAngle:n}=t,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return e+o*360},Yx=(e,t)=>{var{x:r,y:n}=e,{radius:i,angle:a}=Wx({x:r,y:n},t),{innerRadius:o,outerRadius:u}=t;if(iu||i===0)return null;var{startAngle:l,endAngle:c}=Ux(t),s=a,f;if(l<=c){for(;s>c;)s-=360;for(;s=l&&s<=c}else{for(;s>l;)s-=360;for(;s=c&&s<=l}return f?ff(ff({},t),{},{radius:i,angle:Hx(s,t)}):null};function df(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Qe(e){for(var t=1;t{var a,o=-1,u=(a=t==null?void 0:t.length)!==null&&a!==void 0?a:0;if(u<=1||e==null)return 0;if(n==="angleAxis"&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var l=0;l0?r[l-1].coordinate:r[u-1].coordinate,s=r[l].coordinate,f=l>=u-1?r[0].coordinate:r[l+1].coordinate,d=void 0;if(ge(s-c)!==ge(f-s)){var h=[];if(ge(f-s)===ge(i[1]-i[0])){d=f;var v=s+i[1]-i[0];h[0]=Math.min(v,(v+c)/2),h[1]=Math.max(v,(v+c)/2)}else{d=c;var p=f+i[1]-i[0];h[0]=Math.min(s,(p+s)/2),h[1]=Math.max(s,(p+s)/2)}var g=[Math.min(s,(d+s)/2),Math.max(s,(d+s)/2)];if(e>g[0]&&e<=g[1]||e>=h[0]&&e<=h[1]){({index:o}=r[l]);break}}else{var y=Math.min(c,f),b=Math.max(c,f);if(e>(y+s)/2&&e<=(b+s)/2){({index:o}=r[l]);break}}}else if(t){for(var x=0;x0&&x(t[x].coordinate+t[x-1].coordinate)/2&&e<=(t[x].coordinate+t[x+1].coordinate)/2||x===u-1&&e>(t[x].coordinate+t[x-1].coordinate)/2){({index:o}=t[x]);break}}return o},Jx=(e,t,r)=>{if(t&&r){var{width:n,height:i}=r,{align:a,verticalAlign:o,layout:u}=t;if((u==="vertical"||u==="horizontal"&&o==="middle")&&a!=="center"&&D(e[a]))return Qe(Qe({},e),{},{[a]:e[a]+(n||0)});if((u==="horizontal"||u==="vertical"&&a==="center")&&o!=="middle"&&D(e[o]))return Qe(Qe({},e),{},{[o]:e[o]+(i||0)})}return e},Wt=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",Zv=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,a,o=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(a=!0),u.coordinate));return i||o.push(t),a||o.push(r),o},Jv=(e,t,r)=>{if(!e)return null;var{duplicateDomain:n,type:i,range:a,scale:o,realScaleType:u,isCategorical:l,categoricalDomain:c,tickCount:s,ticks:f,niceTicks:d,axisType:h}=e;if(!o)return null;var v=u==="scaleBand"&&o.bandwidth?o.bandwidth()/2:2,p=i==="category"&&o.bandwidth?o.bandwidth()/v:0;if(p=h==="angleAxis"&&a&&a.length>=2?ge(a[0]-a[1])*2*p:p,f||d){var g=(f||d||[]).map((y,b)=>{var x=n?n.indexOf(y):y;return{coordinate:o(x)+p,value:y,offset:p,index:b}});return g.filter(y=>!We(y.coordinate))}return l&&c?c.map((y,b)=>({coordinate:o(y)+p,value:y,index:b,offset:p})):o.ticks&&s!=null?o.ticks(s).map((y,b)=>({coordinate:o(y)+p,value:y,offset:p,index:b})):o.domain().map((y,b)=>({coordinate:o(y)+p,value:n?n[y]:y,index:b,offset:p}))},hf=1e-4,Qx=e=>{var t=e.domain();if(!(!t||t.length<=2)){var r=t.length,n=e.range(),i=Math.min(n[0],n[1])-hf,a=Math.max(n[0],n[1])+hf,o=e(t[0]),u=e(t[r-1]);(oa||ua)&&e.domain([t[0],t[r-1]])}},ew=(e,t)=>{if(!t||t.length!==2||!D(t[0])||!D(t[1]))return e;var r=Math.min(t[0],t[1]),n=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!D(e[0])||e[0]n)&&(i[1]=n),i[0]>n&&(i[0]=n),i[1]{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[o][r][0]=i,e[o][r][1]=i+u,i=e[o][r][1]):(e[o][r][0]=a,e[o][r][1]=a+u,a=e[o][r][1])}},rw=e=>{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r=0?(e[a][r][0]=i,e[a][r][1]=i+o,i=e[a][r][1]):(e[a][r][0]=0,e[a][r][1]=0)}},nw={sign:tw,expand:$0,none:Er,silhouette:R0,wiggle:L0,positive:rw},iw=(e,t,r)=>{var n=nw[r],i=N0().keys(t).value((a,o)=>+re(a,o,0)).order(Zo).offset(n);return i(e)};function Qv(e){return e==null?void 0:String(e)}function vf(e){var{axis:t,ticks:r,bandSize:n,entry:i,index:a,dataKey:o}=e;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!J(i[t.dataKey])){var u=Gh(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r[a]?r[a].coordinate+n/2:null}var l=re(i,J(o)?t.dataKey:o);return J(l)?null:t.scale(l)}var pf=e=>{var{axis:t,ticks:r,offset:n,bandSize:i,entry:a,index:o}=e;if(t.type==="category")return r[o]?r[o].coordinate+n:null;var u=re(a,t.dataKey,t.scale.domain()[o]);return J(u)?null:t.scale(u)-i/2+n},aw=e=>{var{numericAxis:t}=e,r=t.scale.domain();if(t.type==="number"){var n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return n<=0&&i>=0?0:i<0?i:n}return r[0]},ow=e=>{var t=e.flat(2).filter(D);return[Math.min(...t),Math.max(...t)]},uw=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],sw=(e,t,r)=>{if(e!=null)return uw(Object.keys(e).reduce((n,i)=>{var a=e[i],{stackedData:o}=a,u=o.reduce((l,c)=>{var s=ow(c.slice(t,r+1));return[Math.min(l[0],s[0]),Math.max(l[1],s[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},mf=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,gf=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,nn=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=_i(t,s=>s.coordinate),a=1/0,o=1,u=i.length;o=i.left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height;return a?{x:e,y:t}:null}return n?Yx({x:e,y:t},n):null}var cw=(e,t,r,n)=>{var i=t.find(c=>c&&c.index===r);if(i){if(e==="horizontal")return{x:i.coordinate,y:n.y};if(e==="vertical")return{x:n.x,y:i.coordinate};if(e==="centric"){var a=i.coordinate,{radius:o}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,o,a)),{},{angle:a,radius:o})}var u=i.coordinate,{angle:l}=n;return Qe(Qe(Qe({},n),ce(n.cx,n.cy,u,l)),{},{angle:l,radius:u})}return{x:0,y:0}},fw=(e,t)=>t==="horizontal"?e.x:t==="vertical"?e.y:t==="centric"?e.angle:e.radius,Ct=e=>e.layout.width,_t=e=>e.layout.height,dw=e=>e.layout.scale,ep=e=>e.layout.margin,us=S(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),ss=S(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),tp="data-recharts-item-index",rp="data-recharts-item-data-key",Ri=60;function bf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function It(e){for(var t=1;te.brush.height,ve=S([Ct,_t,ep,mw,us,ss,Sv,Bb],(e,t,r,n,i,a,o,u)=>{var l=a.reduce((v,p)=>{var{orientation:g}=p;if(!p.mirror&&!p.hide){var y=typeof p.width=="number"?p.width:Ri;return It(It({},v),{},{[g]:v[g]+y})}return v},{left:r.left||0,right:r.right||0}),c=i.reduce((v,p)=>{var{orientation:g}=p;return!p.mirror&&!p.hide?It(It({},v),{},{[g]:Kt(v,"".concat(g))+p.height}):v},{top:r.top||0,bottom:r.bottom||0}),s=It(It({},c),l),f=s.bottom;s.bottom+=n,s=Jx(s,o,u);var d=e-s.left-s.right,h=t-s.top-s.bottom;return It(It({brushBottom:f},s),{},{width:Math.max(d,0),height:Math.max(h,0)})}),gw=S(ve,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),np=S(Ct,_t,(e,t)=>({x:0,y:0,width:e,height:t})),yw=m.createContext(null),_e=()=>m.useContext(yw)!=null,Li=e=>e.brush,Bi=S([Li,ve,ep],(e,t,r)=>({height:e.height,x:D(e.x)?e.x:t.left,y:D(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:D(e.width)?e.width:t.width})),ls=()=>{var e,t=_e(),r=$(gw),n=$(Bi),i=(e=$(Li))===null||e===void 0?void 0:e.padding;return!t||!n||!i?r:{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}},bw={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},ip=()=>{var e;return(e=$(ve))!==null&&e!==void 0?e:bw},ap=()=>$(Ct),op=()=>$(_t),Y=e=>e.layout.layoutType,Ki=()=>$(Y),xw={settings:{layout:"horizontal",align:"center",verticalAlign:"middle",itemSorter:"value"},size:{width:0,height:0},payload:[]},up=nt({name:"legend",initialState:xw,reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload(e,t){e.payload.push(t.payload)},removeLegendPayload(e,t){var r=Pt(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)}}}),{setLegendSize:FD,setLegendSettings:zD,addLegendPayload:sp,removeLegendPayload:lp}=up.actions,ww=up.reducer;function uu(){return uu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{separator:t=" : ",contentStyle:r={},itemStyle:n={},labelStyle:i={},payload:a,formatter:o,itemSorter:u,wrapperClassName:l,labelClassName:c,label:s,labelFormatter:f,accessibilityLayer:d=!1}=e,h=()=>{if(a&&a.length){var w={padding:0,margin:0},O=(u?_i(a,u):a).map((A,j)=>{if(A.type==="none")return null;var T=A.formatter||o||Sw,{value:I,name:_}=A,k=I,R=_;if(T){var B=T(I,_,A,j,a);if(Array.isArray(B))[k,R]=B;else if(B!=null)k=B;else return null}var z=co({display:"block",paddingTop:4,paddingBottom:4,color:A.color||"#000"},n);return m.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(j),style:z},dt(R)?m.createElement("span",{className:"recharts-tooltip-item-name"},R):null,dt(R)?m.createElement("span",{className:"recharts-tooltip-item-separator"},t):null,m.createElement("span",{className:"recharts-tooltip-item-value"},k),m.createElement("span",{className:"recharts-tooltip-item-unit"},A.unit||""))});return m.createElement("ul",{className:"recharts-tooltip-item-list",style:w},O)}return null},v=co({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},r),p=co({margin:0},i),g=!J(s),y=g?s:"",b=H("recharts-default-tooltip",l),x=H("recharts-tooltip-label",c);g&&f&&a!==void 0&&a!==null&&(y=f(s,a));var P=d?{role:"status","aria-live":"assertive"}:{};return m.createElement("div",uu({className:b,style:v},P),m.createElement("p",{className:x,style:p},m.isValidElement(y)?y:"".concat(y)),h())},zr="recharts-tooltip-wrapper",jw={visibility:"hidden"};function Tw(e){var{coordinate:t,translateX:r,translateY:n}=e;return H(zr,{["".concat(zr,"-right")]:D(r)&&t&&D(t.x)&&r>=t.x,["".concat(zr,"-left")]:D(r)&&t&&D(t.x)&&r=t.y,["".concat(zr,"-top")]:D(n)&&t&&D(t.y)&&n0?i:0),f=r[n]+i;if(t[n])return o[n]?s:f;var d=l[n];if(d==null)return 0;if(o[n]){var h=s,v=d;return hg?Math.max(s,d):Math.max(f,d)}function Cw(e){var{translateX:t,translateY:r,useTranslate3d:n}=e;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function _w(e){var{allowEscapeViewBox:t,coordinate:r,offsetTopLeft:n,position:i,reverseDirection:a,tooltipBox:o,useTranslate3d:u,viewBox:l}=e,c,s,f;return o.height>0&&o.width>0&&r?(s=wf({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:l,viewBoxDimension:l.width}),f=wf({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:l,viewBoxDimension:l.height}),c=Cw({translateX:s,translateY:f,useTranslate3d:u})):c=jw,{cssProperties:c,cssClasses:Tw({translateX:s,translateY:f,coordinate:r})}}function Pf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function In(e){for(var t=1;t{if(t.key==="Escape"){var r,n,i,a;this.setState({dismissed:!0,dismissedAtCoordinate:{x:(r=(n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==null&&r!==void 0?r:0,y:(i=(a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==null&&i!==void 0?i:0}})}})}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown)}componentDidUpdate(){var t,r;this.state.dismissed&&(((t=this.props.coordinate)===null||t===void 0?void 0:t.x)!==this.state.dismissedAtCoordinate.x||((r=this.props.coordinate)===null||r===void 0?void 0:r.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}render(){var{active:t,allowEscapeViewBox:r,animationDuration:n,animationEasing:i,children:a,coordinate:o,hasPayload:u,isAnimationActive:l,offset:c,position:s,reverseDirection:f,useTranslate3d:d,viewBox:h,wrapperStyle:v,lastBoundingBox:p,innerRef:g,hasPortalFromProps:y}=this.props,{cssClasses:b,cssProperties:x}=_w({allowEscapeViewBox:r,coordinate:o,offsetTopLeft:c,position:s,reverseDirection:f,tooltipBox:{height:p.height,width:p.width},useTranslate3d:d,viewBox:h}),P=y?{}:In(In({transition:l&&t?"transform ".concat(n,"ms ").concat(i):void 0},x),{},{pointerEvents:"none",visibility:!this.state.dismissed&&t&&u?"visible":"hidden",position:"absolute",top:0,left:0}),w=In(In({},P),{},{visibility:!this.state.dismissed&&t&&u?"visible":"hidden"},v);return m.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:b,style:w,ref:g},a)}}var Iw=()=>!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout),vr={isSsr:Iw()},cp=()=>$(e=>e.rootProps.accessibilityLayer);function Ye(e){return Number.isFinite(e)}function Tr(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function lu(){return lu=Object.assign?Object.assign.bind():function(e){for(var t=1;tYe(e.x)&&Ye(e.y),Wr=e=>e.x,Ur=e=>e.y,Lw=(e,t)=>{if(typeof e=="function")return e;var r="curve".concat(vn(e));return(r==="curveMonotone"||r==="curveBump")&&t?Sf["".concat(r).concat(t==="vertical"?"Y":"X")]:Sf[r]||Ti},Bw=e=>{var{type:t="linear",points:r=[],baseLine:n,layout:i,connectNulls:a=!1}=e,o=Lw(t,i),u=a?r.filter(Nn):r,l;if(Array.isArray(n)){var c=a?n.filter(f=>Nn(f)):n,s=u.map((f,d)=>Af(Af({},f),{},{base:c[d]}));return i==="vertical"?l=Cn().y(Ur).x1(Wr).x0(f=>f.base.x):l=Cn().x(Wr).y1(Ur).y0(f=>f.base.y),l.defined(Nn).curve(o),l(s)}return i==="vertical"&&D(n)?l=Cn().y(Ur).x1(Wr).x0(n):D(n)?l=Cn().x(Wr).y1(Ur).y0(n):l=nv().x(Wr).y(Ur),l.defined(Nn).curve(o),l(u)},cs=e=>{var{className:t,points:r,path:n,pathRef:i}=e;if((!r||!r.length)&&!n)return null;var a=r&&r.length?Bw(e):n;return m.createElement("path",lu({},F(e,!1),Hu(e),{className:H("recharts-curve",t),d:a===null?void 0:a,ref:i}))},Kw=["x","y","top","left","width","height","className"];function cu(){return cu=Object.assign?Object.assign.bind():function(e){for(var t=1;t"M".concat(e,",").concat(i,"v").concat(n,"M").concat(a,",").concat(t,"h").concat(r),Gw=e=>{var{x:t=0,y:r=0,top:n=0,left:i=0,width:a=0,height:o=0,className:u}=e,l=Uw(e,Kw),c=qw({x:t,y:r,top:n,left:i,width:a,height:o},l);return!D(t)||!D(r)||!D(a)||!D(o)||!D(n)||!D(i)?null:m.createElement("path",cu({},F(c,!0),{className:H("recharts-cross",u),d:Yw(t,r,a,o,n,i)}))};function Vw(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-i:r.left+.5,y:e==="horizontal"?r.top+.5:t.y-i,width:e==="horizontal"?n:r.width-1,height:e==="horizontal"?r.height-1:n}}function jf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Xw(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}var fo={},ho={},vo={},Tf;function e1(){return Tf||(Tf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){if(!r||typeof r!="object")return!1;const n=Object.getPrototypeOf(r);return n===null||n===Object.prototype||Object.getPrototypeOf(n)===null?Object.prototype.toString.call(r)==="[object Object]":!1}e.isPlainObject=t}(vo)),vo}var Cf;function t1(){return Cf||(Cf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=e1(),r=bv(),n=Qu(),i=es(),a=Zu();function o(c,s,f){return u(c,s,void 0,void 0,void 0,void 0,f)}function u(c,s,f,d,h,v,p){const g=p(c,s,f,d,h,v);if(g!==void 0)return g;if(typeof c==typeof s)switch(typeof c){case"bigint":case"string":case"boolean":case"symbol":case"undefined":return c===s;case"number":return c===s||Object.is(c,s);case"function":return c===s;case"object":return l(c,s,v,p)}return l(c,s,v,p)}function l(c,s,f,d){if(Object.is(c,s))return!0;let h=n.getTag(c),v=n.getTag(s);if(h===i.argumentsTag&&(h=i.objectTag),v===i.argumentsTag&&(v=i.objectTag),h!==v)return!1;switch(h){case i.stringTag:return c.toString()===s.toString();case i.numberTag:{const y=c.valueOf(),b=s.valueOf();return a.eq(y,b)}case i.booleanTag:case i.dateTag:case i.symbolTag:return Object.is(c.valueOf(),s.valueOf());case i.regexpTag:return c.source===s.source&&c.flags===s.flags;case i.functionTag:return c===s}f=f??new Map;const p=f.get(c),g=f.get(s);if(p!=null&&g!=null)return p===s;f.set(c,s),f.set(s,c);try{switch(h){case i.mapTag:{if(c.size!==s.size)return!1;for(const[y,b]of c.entries())if(!s.has(y)||!u(b,s.get(y),y,c,s,f,d))return!1;return!0}case i.setTag:{if(c.size!==s.size)return!1;const y=Array.from(c.values()),b=Array.from(s.values());for(let x=0;xu(P,O,void 0,c,s,f,d));if(w===-1)return!1;b.splice(w,1)}return!0}case i.arrayTag:case i.uint8ArrayTag:case i.uint8ClampedArrayTag:case i.uint16ArrayTag:case i.uint32ArrayTag:case i.bigUint64ArrayTag:case i.int8ArrayTag:case i.int16ArrayTag:case i.int32ArrayTag:case i.bigInt64ArrayTag:case i.float32ArrayTag:case i.float64ArrayTag:{if(typeof Buffer<"u"&&Buffer.isBuffer(c)!==Buffer.isBuffer(s)||c.length!==s.length)return!1;for(let y=0;ynull,n=!1,i=null,a=o=>{if(!n){if(Array.isArray(o)){if(!o.length)return;var u=o,[l,...c]=u;if(typeof l=="number"){i=e.setTimeout(a.bind(null,c),l);return}a(l),i=e.setTimeout(a.bind(null,c));return}typeof o=="object"&&(t=o,r(t)),typeof o=="function"&&o()}};return{stop:()=>{n=!0},start:o=>{n=!1,i&&(i(),i=null),a(o)},subscribe:o=>(r=o,()=>{r=()=>null}),getTimeoutController:()=>e}}var ii=1e-4,fp=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],dp=(e,t)=>e.map((r,n)=>r*t**n).reduce((r,n)=>r+n),Df=(e,t)=>r=>{var n=fp(e,t);return dp(n,r)},s1=(e,t)=>r=>{var n=fp(e,t),i=[...n.map((a,o)=>a*o).slice(1),0];return dp(i,r)},If=function(){for(var t,r,n,i,a=arguments.length,o=new Array(a),u=0;uparseFloat(v)))}}else o.length===4&&([t,n,r,i]=o);var c=Df(t,r),s=Df(n,i),f=s1(t,r),d=v=>v>1?1:v<0?0:v,h=v=>{for(var p=v>1?1:v,g=p,y=0;y<8;++y){var b=c(g)-p,x=f(g);if(Math.abs(b-p)0&&arguments[0]!==void 0?arguments[0]:{},{stiff:r=100,damping:n=8,dt:i=17}=t,a=(o,u,l)=>{var c=-(o-u)*r,s=l*n,f=l+(c-s)*i/1e3,d=l*i/1e3+o;return Math.abs(d-u){if(typeof e=="string")switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return If(e);case"spring":return l1();default:if(e.split("(")[0]==="cubic-bezier")return If(e)}return typeof e=="function"?e:null};function Nf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $f(e){for(var t=1;te.replace(/([A-Z])/g,t=>"-".concat(t.toLowerCase())),p1=(e,t,r)=>e.map(n=>"".concat(v1(n)," ").concat(t,"ms ").concat(r)).join(","),m1=(e,t)=>[Object.keys(e),Object.keys(t)].reduce((r,n)=>r.filter(i=>n.includes(i))),an=(e,t)=>Object.keys(t).reduce((r,n)=>$f($f({},r),{},{[n]:e(n,t[n])}),{});function Rf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Oe(e){for(var t=1;te+(t-e)*r,fu=e=>{var{from:t,to:r}=e;return t!==r},hp=(e,t,r)=>{var n=an((i,a)=>{if(fu(a)){var[o,u]=e(a.from,a.to,a.velocity);return Oe(Oe({},a),{},{from:o,velocity:u})}return a},t);return r<1?an((i,a)=>fu(a)?Oe(Oe({},a),{},{velocity:ai(a.velocity,n[i].velocity,r),from:ai(a.from,n[i].from,r)}):a,t):hp(e,n,r-1)};function x1(e,t,r,n,i,a){var o,u=n.reduce((d,h)=>Oe(Oe({},d),{},{[h]:{from:e[h],velocity:0,to:t[h]}}),{}),l=()=>an((d,h)=>h.from,u),c=()=>!Object.values(u).filter(fu).length,s=null,f=d=>{o||(o=d);var h=d-o,v=h/r.dt;u=hp(r,u,v),i(Oe(Oe(Oe({},e),t),l())),o=d,c()||(s=a.setTimeout(f))};return()=>(s=a.setTimeout(f),()=>{s()})}function w1(e,t,r,n,i,a,o){var u=null,l=i.reduce((f,d)=>Oe(Oe({},f),{},{[d]:[e[d],t[d]]}),{}),c,s=f=>{c||(c=f);var d=(f-c)/n,h=an((p,g)=>ai(...g,r(d)),l);if(a(Oe(Oe(Oe({},e),t),h)),d<1)u=o.setTimeout(s);else{var v=an((p,g)=>ai(...g,r(1)),l);a(Oe(Oe(Oe({},e),t),v))}};return()=>(u=o.setTimeout(s),()=>{u()})}const P1=(e,t,r,n,i,a)=>{var o=m1(e,t);return r.isStepper===!0?x1(e,t,r,o,i,a):w1(e,t,r,n,o,i,a)};class O1{setTimeout(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),i=null,a=o=>{o-n>=r?t(o):typeof requestAnimationFrame=="function"&&(i=requestAnimationFrame(a))};return i=requestAnimationFrame(a),()=>{cancelAnimationFrame(i)}}}var A1=["children","begin","duration","attributeName","easing","isActive","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart","animationManager"];function du(){return du=Object.assign?Object.assign.bind():function(e){for(var t=1;t{this.stopJSAnimation=c()};this.manager.start([l,o,s,i,u])}runAnimation(t){var{begin:r,duration:n,attributeName:i,to:a,easing:o,onAnimationStart:u,onAnimationEnd:l,children:c}=t;if(this.unSubscribe=this.manager.subscribe(this.handleStyleChange),typeof o=="function"||typeof c=="function"||o==="spring"){this.runJSAnimation(t);return}var s=i?{[i]:a}:a,f=p1(Object.keys(s),n,o);this.manager.start([u,r,Nt(Nt({},s),{},{transition:f}),n,l])}render(){var t=this.props,{children:r,begin:n,duration:i,attributeName:a,easing:o,isActive:u,from:l,to:c,canBegin:s,onAnimationEnd:f,shouldReAnimate:d,onAnimationReStart:h,animationManager:v}=t,p=S1(t,A1),g=m.Children.count(r),y=this.state.style;if(typeof r=="function")return r(y);if(!u||g===0||i<=0)return r;var b=x=>{var{style:P={},className:w}=x.props,O=m.cloneElement(x,Nt(Nt({},p),{},{style:Nt(Nt({},P),y),className:w}));return O};return g===1?b(m.Children.only(r)):m.createElement("div",null,m.Children.map(r,x=>b(x)))}}tr(fs,"displayName","Animate");tr(fs,"defaultProps",{begin:0,duration:1e3,attributeName:"",easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}});var _1=m.createContext(null);function qt(e){var t,r,n=m.useContext(_1);return m.createElement(fs,du({},e,{animationManager:(t=(r=e.animationManager)!==null&&r!==void 0?r:n)!==null&&t!==void 0?t:C1()}))}function oi(){return oi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=Math.min(Math.abs(r)/2,Math.abs(n)/2),o=n>=0?1:-1,u=r>=0?1:-1,l=n>=0&&r>=0||n<0&&r<0?1:0,c;if(a>0&&i instanceof Array){for(var s=[0,0,0,0],f=0,d=4;fa?a:i[f];c="M".concat(e,",").concat(t+o*s[0]),s[0]>0&&(c+="A ".concat(s[0],",").concat(s[0],",0,0,").concat(l,",").concat(e+u*s[0],",").concat(t)),c+="L ".concat(e+r-u*s[1],",").concat(t),s[1]>0&&(c+="A ".concat(s[1],",").concat(s[1],",0,0,").concat(l,`, `).concat(e+r,",").concat(t+o*s[1])),c+="L ".concat(e+r,",").concat(t+n-o*s[2]),s[2]>0&&(c+="A ".concat(s[2],",").concat(s[2],",0,0,").concat(l,`, `).concat(e+r-u*s[2],",").concat(t+n)),c+="L ".concat(e+u*s[3],",").concat(t+n),s[3]>0&&(c+="A ".concat(s[3],",").concat(s[3],",0,0,").concat(l,`, `).concat(e,",").concat(t+n-o*s[3])),c+="Z"}else if(a>0&&i===+i&&i>0){var h=Math.min(a,i);c="M ".concat(e,",").concat(t+o*h,` @@ -49,13 +49,13 @@ var Ty=Object.defineProperty;var Cy=(e,t,r)=>t in e?Ty(e,t,{enumerable:!0,config `);if(n>0){var{circleTangency:x,lineTangency:P,theta:w}=$n({cx:t,cy:r,radius:n,angle:l,sign:s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),{circleTangency:O,lineTangency:A,theta:j}=$n({cx:t,cy:r,radius:n,angle:c,sign:-s,isExternal:!0,cornerRadius:a,cornerIsExternal:u}),T=u?Math.abs(l-c):Math.abs(l-c)-w-j;if(T<0&&a===0)return"".concat(b,"L").concat(t,",").concat(r,"Z");b+="L".concat(A.x,",").concat(A.y,` A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(O.x,",").concat(O.y,` A`).concat(n,",").concat(n,",0,").concat(+(T>180),",").concat(+(s>0),",").concat(x.x,",").concat(x.y,` - A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(P.x,",").concat(P.y,"Z")}else b+="L".concat(t,",").concat(r,"Z");return b},I1={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},gp=e=>{var t=it(e,I1),{cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:o,forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s,className:f}=t;if(a0&&Math.abs(c-s)<360?p=D1({cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:Math.min(v,h/2),forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s}):p=mp({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:c,endAngle:s}),m.createElement("path",hu({},F(t,!0),{className:d,d:p}))};function N1(e,t,r){var n,i,a,o;if(e==="horizontal")n=t.x,a=n,i=r.top,o=r.top+r.height;else if(e==="vertical")i=t.y,o=i,n=r.left,a=r.left+r.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var{cx:u,cy:l,innerRadius:c,outerRadius:s,angle:f}=t,d=ce(u,l,c,f),h=ce(u,l,s,f);n=d.x,i=d.y,a=h.x,o=h.y}else return pp(t);return[{x:n,y:i},{x:a,y:o}]}var go={},yo={},bo={},Kf;function $1(){return Kf||(Kf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ov();function r(n){return t.isSymbol(n)?NaN:Number(n)}e.toNumber=r}(bo)),bo}var qf;function R1(){return qf||(qf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=$1();function r(n){return n?(n=t.toNumber(n),n===1/0||n===-1/0?(n<0?-1:1)*Number.MAX_VALUE:n===n?n:0):n===0?n:0}e.toFinite=r}(yo)),yo}var Ff;function L1(){return Ff||(Ff=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Av(),r=R1();function n(i,a,o){o&&typeof o!="number"&&t.isIterateeCall(i,a,o)&&(a=o=void 0),i=r.toFinite(i),a===void 0?(a=i,i=0):a=r.toFinite(a),o=o===void 0?it?1:e>=t?0:NaN}function q1(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function ds(e){let t,r,n;e.length!==2?(t=Lt,r=(u,l)=>Lt(e(u),l),n=(u,l)=>e(u)-l):(t=e===Lt||e===q1?e:F1,r=e,n=e);function i(u,l,c=0,s=u.length){if(c>>1;r(u[f],l)<0?c=f+1:s=f}while(c>>1;r(u[f],l)<=0?c=f+1:s=f}while(cc&&n(u[f-1],l)>-n(u[f],l)?f-1:f}return{left:i,center:o,right:a}}function F1(){return 0}function bp(e){return e===null?NaN:+e}function*z1(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const W1=ds(Lt),gn=W1.right;ds(bp).center;class Wf extends Map{constructor(t,r=Y1){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(Uf(this,t))}has(t){return super.has(Uf(this,t))}set(t,r){return super.set(U1(this,t),r)}delete(t){return super.delete(H1(this,t))}}function Uf({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function U1({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function H1({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function Y1(e){return e!==null&&typeof e=="object"?e.valueOf():e}function G1(e=Lt){if(e===Lt)return xp;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function xp(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const V1=Math.sqrt(50),X1=Math.sqrt(10),Z1=Math.sqrt(2);function ui(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=V1?10:a>=X1?5:a>=Z1?2:1;let u,l,c;return i<0?(c=Math.pow(10,-i)/o,u=Math.round(e*c),l=Math.round(t*c),u/ct&&--l,c=-c):(c=Math.pow(10,i)*o,u=Math.round(e/c),l=Math.round(t/c),u*ct&&--l),l0))return[];if(e===t)return[e];const n=t=i))return[];const u=a-i+1,l=new Array(u);if(n)if(o<0)for(let c=0;c=n)&&(r=n);return r}function Yf(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function wp(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?xp:G1(i);n>r;){if(n-r>600){const l=n-r+1,c=t-r+1,s=Math.log(l),f=.5*Math.exp(2*s/3),d=.5*Math.sqrt(s*f*(l-f)/l)*(c-l/2<0?-1:1),h=Math.max(r,Math.floor(t-c*f/l+d)),v=Math.min(n,Math.floor(t+(l-c)*f/l+d));wp(e,t,h,v,i)}const a=e[t];let o=r,u=n;for(Hr(e,r,t),i(e[n],a)>0&&Hr(e,r,n);o0;)--u}i(e[r],a)===0?Hr(e,r,u):(++u,Hr(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function Hr(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function J1(e,t,r){if(e=Float64Array.from(z1(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Yf(e);if(t>=1)return Hf(e);var n,i=(n-1)*t,a=Math.floor(i),o=Hf(wp(e,a).subarray(0,a+1)),u=Yf(e.subarray(a+1));return o+(u-o)*(i-a)}}function Q1(e,t,r=bp){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return o+(u-o)*(i-a)}}function eP(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Rn(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Rn(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=nP.exec(e))?new De(t[1],t[2],t[3],1):(t=iP.exec(e))?new De(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=aP.exec(e))?Rn(t[1],t[2],t[3],t[4]):(t=oP.exec(e))?Rn(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=uP.exec(e))?ed(t[1],t[2]/100,t[3]/100,1):(t=sP.exec(e))?ed(t[1],t[2]/100,t[3]/100,t[4]):Gf.hasOwnProperty(e)?Zf(Gf[e]):e==="transparent"?new De(NaN,NaN,NaN,0):null}function Zf(e){return new De(e>>16&255,e>>8&255,e&255,1)}function Rn(e,t,r,n){return n<=0&&(e=t=r=NaN),new De(e,t,r,n)}function fP(e){return e instanceof yn||(e=sn(e)),e?(e=e.rgb(),new De(e.r,e.g,e.b,e.opacity)):new De}function yu(e,t,r,n){return arguments.length===1?fP(e):new De(e,t,r,n??1)}function De(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}ps(De,yu,Op(yn,{brighter(e){return e=e==null?si:Math.pow(si,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?on:Math.pow(on,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new De(ur(this.r),ur(this.g),ur(this.b),li(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Jf,formatHex:Jf,formatHex8:dP,formatRgb:Qf,toString:Qf}));function Jf(){return`#${rr(this.r)}${rr(this.g)}${rr(this.b)}`}function dP(){return`#${rr(this.r)}${rr(this.g)}${rr(this.b)}${rr((isNaN(this.opacity)?1:this.opacity)*255)}`}function Qf(){const e=li(this.opacity);return`${e===1?"rgb(":"rgba("}${ur(this.r)}, ${ur(this.g)}, ${ur(this.b)}${e===1?")":`, ${e})`}`}function li(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ur(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function rr(e){return e=ur(e),(e<16?"0":"")+e.toString(16)}function ed(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new st(e,t,r,n)}function Ap(e){if(e instanceof st)return new st(e.h,e.s,e.l,e.opacity);if(e instanceof yn||(e=sn(e)),!e)return new st;if(e instanceof st)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,u=a-i,l=(a+i)/2;return u?(t===a?o=(r-n)/u+(r0&&l<1?0:o,new st(o,u,l,e.opacity)}function hP(e,t,r,n){return arguments.length===1?Ap(e):new st(e,t,r,n??1)}function st(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}ps(st,hP,Op(yn,{brighter(e){return e=e==null?si:Math.pow(si,e),new st(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?on:Math.pow(on,e),new st(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new De(wo(e>=240?e-240:e+120,i,n),wo(e,i,n),wo(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new st(td(this.h),Ln(this.s),Ln(this.l),li(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=li(this.opacity);return`${e===1?"hsl(":"hsla("}${td(this.h)}, ${Ln(this.s)*100}%, ${Ln(this.l)*100}%${e===1?")":`, ${e})`}`}}));function td(e){return e=(e||0)%360,e<0?e+360:e}function Ln(e){return Math.max(0,Math.min(1,e||0))}function wo(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const ms=e=>()=>e;function vP(e,t){return function(r){return e+r*t}}function pP(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function mP(e){return(e=+e)==1?Sp:function(t,r){return r-t?pP(t,r,e):ms(isNaN(t)?r:t)}}function Sp(e,t){var r=t-e;return r?vP(e,r):ms(isNaN(e)?t:e)}const rd=function e(t){var r=mP(t);function n(i,a){var o=r((i=yu(i)).r,(a=yu(a)).r),u=r(i.g,a.g),l=r(i.b,a.b),c=Sp(i.opacity,a.opacity);return function(s){return i.r=o(s),i.g=u(s),i.b=l(s),i.opacity=c(s),i+""}}return n.gamma=e,n}(1);function gP(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),u[o]?u[o]+=a:u[++o]=a),(n=n[0])===(i=i[0])?u[o]?u[o]+=i:u[++o]=i:(u[++o]=null,l.push({i:o,x:ci(n,i)})),r=Po.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function TP(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?CP:TP,l=c=null,f}function f(d){return d==null||isNaN(d=+d)?a:(l||(l=u(e.map(n),t,r)))(n(o(d)))}return f.invert=function(d){return o(i((c||(c=u(t,e.map(n),ci)))(d)))},f.domain=function(d){return arguments.length?(e=Array.from(d,fi),s()):e.slice()},f.range=function(d){return arguments.length?(t=Array.from(d),s()):t.slice()},f.rangeRound=function(d){return t=Array.from(d),r=gs,s()},f.clamp=function(d){return arguments.length?(o=d?!0:Te,s()):o!==Te},f.interpolate=function(d){return arguments.length?(r=d,s()):r},f.unknown=function(d){return arguments.length?(a=d,f):a},function(d,h){return n=d,i=h,s()}}function ys(){return qi()(Te,Te)}function _P(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function di(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Cr(e){return e=di(Math.abs(e)),e?e[1]:NaN}function kP(e,t){return function(r,n){for(var i=r.length,a=[],o=0,u=e[0],l=0;i>0&&u>0&&(l+u+1>n&&(u=Math.max(1,n-l)),a.push(r.substring(i-=u,i+u)),!((l+=u+1)>n));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}function MP(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var DP=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function ln(e){if(!(t=DP.exec(e)))throw new Error("invalid format: "+e);var t;return new bs({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}ln.prototype=bs.prototype;function bs(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}bs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function IP(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var Ep;function NP(e,t){var r=di(e,t);if(!r)return e+"";var n=r[0],i=r[1],a=i-(Ep=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+di(e,Math.max(0,t+a-1))[0]}function id(e,t){var r=di(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const ad={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:_P,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>id(e*100,t),r:id,s:NP,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function od(e){return e}var ud=Array.prototype.map,sd=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function $P(e){var t=e.grouping===void 0||e.thousands===void 0?od:kP(ud.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?od:MP(ud.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function c(f){f=ln(f);var d=f.fill,h=f.align,v=f.sign,p=f.symbol,g=f.zero,y=f.width,b=f.comma,x=f.precision,P=f.trim,w=f.type;w==="n"?(b=!0,w="g"):ad[w]||(x===void 0&&(x=12),P=!0,w="g"),(g||d==="0"&&h==="=")&&(g=!0,d="0",h="=");var O=p==="$"?r:p==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",A=p==="$"?n:/[%p]/.test(w)?o:"",j=ad[w],T=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function I(_){var k=O,R=A,B,z,V;if(w==="c")R=j(_)+R,_="";else{_=+_;var K=_<0||1/_<0;if(_=isNaN(_)?l:j(Math.abs(_),x),P&&(_=IP(_)),K&&+_==0&&v!=="+"&&(K=!1),k=(K?v==="("?v:u:v==="-"||v==="("?"":v)+k,R=(w==="s"?sd[8+Ep/3]:"")+R+(K&&v==="("?")":""),T){for(B=-1,z=_.length;++BV||V>57){R=(V===46?i+_.slice(B+1):_.slice(B))+R,_=_.slice(0,B);break}}}b&&!g&&(_=t(_,1/0));var de=k.length+_.length+R.length,oe=de>1)+k+_+R+oe.slice(de);break;default:_=oe+k+_+R;break}return a(_)}return I.toString=function(){return f+""},I}function s(f,d){var h=c((f=ln(f),f.type="f",f)),v=Math.max(-8,Math.min(8,Math.floor(Cr(d)/3)))*3,p=Math.pow(10,-v),g=sd[8+v/3];return function(y){return h(p*y)+g}}return{format:c,formatPrefix:s}}var Bn,xs,jp;RP({thousands:",",grouping:[3],currency:["$",""]});function RP(e){return Bn=$P(e),xs=Bn.format,jp=Bn.formatPrefix,Bn}function LP(e){return Math.max(0,-Cr(Math.abs(e)))}function BP(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Cr(t)/3)))*3-Cr(Math.abs(e)))}function KP(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Cr(t)-Cr(e))+1}function Tp(e,t,r,n){var i=mu(e,t,r),a;switch(n=ln(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=BP(i,o))&&(n.precision=a),jp(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=KP(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=LP(i))&&(n.precision=a-(n.type==="%")*2);break}}return xs(n)}function Ut(e){var t=e.domain;return e.ticks=function(r){var n=t();return vu(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return Tp(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],u=n[a],l,c,s=10;for(u0;){if(c=pu(o,u,r),c===l)return n[i]=o,n[a]=u,t(n);if(c>0)o=Math.floor(o/c)*c,u=Math.ceil(u/c)*c;else if(c<0)o=Math.ceil(o*c)/c,u=Math.floor(u*c)/c;else break;l=c}return e},e}function Cp(){var e=ys();return e.copy=function(){return bn(e,Cp())},at.apply(e,arguments),Ut(e)}function _p(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,fi),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return _p(e).unknown(t)},e=arguments.length?Array.from(e,fi):[0,1],Ut(r)}function kp(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function UP(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function fd(e){return(t,r)=>-e(-t,r)}function ws(e){const t=e(ld,cd),r=t.domain;let n=10,i,a;function o(){return i=UP(n),a=WP(n),r()[0]<0?(i=fd(i),a=fd(a),e(qP,FP)):e(ld,cd),t}return t.base=function(u){return arguments.length?(n=+u,o()):n},t.domain=function(u){return arguments.length?(r(u),o()):r()},t.ticks=u=>{const l=r();let c=l[0],s=l[l.length-1];const f=s0){for(;d<=h;++d)for(v=1;vs)break;y.push(p)}}else for(;d<=h;++d)for(v=n-1;v>=1;--v)if(p=d>0?v/a(-d):v*a(d),!(ps)break;y.push(p)}y.length*2{if(u==null&&(u=10),l==null&&(l=n===10?"s":","),typeof l!="function"&&(!(n%1)&&(l=ln(l)).precision==null&&(l.trim=!0),l=xs(l)),u===1/0)return l;const c=Math.max(1,n*u/t.ticks().length);return s=>{let f=s/a(Math.round(i(s)));return f*nr(kp(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function Mp(){const e=ws(qi()).domain([1,10]);return e.copy=()=>bn(e,Mp()).base(e.base()),at.apply(e,arguments),e}function dd(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function hd(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Ps(e){var t=1,r=e(dd(t),hd(t));return r.constant=function(n){return arguments.length?e(dd(t=+n),hd(t)):t},Ut(r)}function Dp(){var e=Ps(qi());return e.copy=function(){return bn(e,Dp()).constant(e.constant())},at.apply(e,arguments)}function vd(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function HP(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function YP(e){return e<0?-e*e:e*e}function Os(e){var t=e(Te,Te),r=1;function n(){return r===1?e(Te,Te):r===.5?e(HP,YP):e(vd(r),vd(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},Ut(t)}function As(){var e=Os(qi());return e.copy=function(){return bn(e,As()).exponent(e.exponent())},at.apply(e,arguments),e}function GP(){return As.apply(null,arguments).exponent(.5)}function pd(e){return Math.sign(e)*e*e}function VP(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function Ip(){var e=ys(),t=[0,1],r=!1,n;function i(a){var o=VP(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(pd(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,fi)).map(pd)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return Ip(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},at.apply(i,arguments),Ut(i)}function Np(){var e=[],t=[],r=[],n;function i(){var o=0,u=Math.max(1,t.length);for(r=new Array(u-1);++o0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[c-1],n[c]]},o.unknown=function(l){return arguments.length&&(a=l),o},o.thresholds=function(){return n.slice()},o.copy=function(){return $p().domain([e,t]).range(i).unknown(a)},at.apply(Ut(o),arguments)}function Rp(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[gn(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return Rp().domain(e).range(t).unknown(r)},at.apply(i,arguments)}const Oo=new Date,Ao=new Date;function pe(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),u=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,u)=>{const l=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a0))return l;let c;do l.push(c=new Date(+a)),t(a,u),e(a);while(cpe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,u)=>{if(o>=o)if(u<0)for(;++u<=0;)for(;t(o,-1),!a(o););else for(;--u>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(Oo.setTime(+a),Ao.setTime(+o),e(Oo),e(Ao),Math.floor(r(Oo,Ao))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const hi=pe(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);hi.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?pe(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):hi);hi.range;const gt=1e3,et=gt*60,yt=et*60,St=yt*24,Ss=St*7,md=St*30,So=St*365,nr=pe(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*gt)},(e,t)=>(t-e)/gt,e=>e.getUTCSeconds());nr.range;const Es=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getMinutes());Es.range;const js=pe(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getUTCMinutes());js.range;const Ts=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt-e.getMinutes()*et)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getHours());Ts.range;const Cs=pe(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getUTCHours());Cs.range;const xn=pe(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*et)/St,e=>e.getDate()-1);xn.range;const Fi=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/St,e=>e.getUTCDate()-1);Fi.range;const Lp=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/St,e=>Math.floor(e/St));Lp.range;function pr(e){return pe(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*et)/Ss)}const zi=pr(0),vi=pr(1),XP=pr(2),ZP=pr(3),_r=pr(4),JP=pr(5),QP=pr(6);zi.range;vi.range;XP.range;ZP.range;_r.range;JP.range;QP.range;function mr(e){return pe(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Ss)}const Wi=mr(0),pi=mr(1),eO=mr(2),tO=mr(3),kr=mr(4),rO=mr(5),nO=mr(6);Wi.range;pi.range;eO.range;tO.range;kr.range;rO.range;nO.range;const _s=pe(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());_s.range;const ks=pe(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());ks.range;const Et=pe(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Et.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});Et.range;const jt=pe(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());jt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});jt.range;function Bp(e,t,r,n,i,a){const o=[[nr,1,gt],[nr,5,5*gt],[nr,15,15*gt],[nr,30,30*gt],[a,1,et],[a,5,5*et],[a,15,15*et],[a,30,30*et],[i,1,yt],[i,3,3*yt],[i,6,6*yt],[i,12,12*yt],[n,1,St],[n,2,2*St],[r,1,Ss],[t,1,md],[t,3,3*md],[e,1,So]];function u(c,s,f){const d=sg).right(o,d);if(h===o.length)return e.every(mu(c/So,s/So,f));if(h===0)return hi.every(Math.max(mu(c,s,f),1));const[v,p]=o[d/o[h-1][2]53)return null;"w"in C||(C.w=1),"Z"in C?(Q=jo(Yr(C.y,0,1)),Ne=Q.getUTCDay(),Q=Ne>4||Ne===0?pi.ceil(Q):pi(Q),Q=Fi.offset(Q,(C.V-1)*7),C.y=Q.getUTCFullYear(),C.m=Q.getUTCMonth(),C.d=Q.getUTCDate()+(C.w+6)%7):(Q=Eo(Yr(C.y,0,1)),Ne=Q.getDay(),Q=Ne>4||Ne===0?vi.ceil(Q):vi(Q),Q=xn.offset(Q,(C.V-1)*7),C.y=Q.getFullYear(),C.m=Q.getMonth(),C.d=Q.getDate()+(C.w+6)%7)}else("W"in C||"U"in C)&&("w"in C||(C.w="u"in C?C.u%7:"W"in C?1:0),Ne="Z"in C?jo(Yr(C.y,0,1)).getUTCDay():Eo(Yr(C.y,0,1)).getDay(),C.m=0,C.d="W"in C?(C.w+6)%7+C.W*7-(Ne+5)%7:C.w+C.U*7-(Ne+6)%7);return"Z"in C?(C.H+=C.Z/100|0,C.M+=C.Z%100,jo(C)):Eo(C)}}function j(N,q,W,C){for(var ke=0,Q=q.length,Ne=W.length,$e,Xt;ke=Ne)return-1;if($e=q.charCodeAt(ke++),$e===37){if($e=q.charAt(ke++),Xt=w[$e in gd?q.charAt(ke++):$e],!Xt||(C=Xt(N,W,C))<0)return-1}else if($e!=W.charCodeAt(C++))return-1}return C}function T(N,q,W){var C=c.exec(q.slice(W));return C?(N.p=s.get(C[0].toLowerCase()),W+C[0].length):-1}function I(N,q,W){var C=h.exec(q.slice(W));return C?(N.w=v.get(C[0].toLowerCase()),W+C[0].length):-1}function _(N,q,W){var C=f.exec(q.slice(W));return C?(N.w=d.get(C[0].toLowerCase()),W+C[0].length):-1}function k(N,q,W){var C=y.exec(q.slice(W));return C?(N.m=b.get(C[0].toLowerCase()),W+C[0].length):-1}function R(N,q,W){var C=p.exec(q.slice(W));return C?(N.m=g.get(C[0].toLowerCase()),W+C[0].length):-1}function B(N,q,W){return j(N,t,q,W)}function z(N,q,W){return j(N,r,q,W)}function V(N,q,W){return j(N,n,q,W)}function K(N){return o[N.getDay()]}function de(N){return a[N.getDay()]}function oe(N){return l[N.getMonth()]}function Ie(N){return u[N.getMonth()]}function Ge(N){return i[+(N.getHours()>=12)]}function L(N){return 1+~~(N.getMonth()/3)}function we(N){return o[N.getUTCDay()]}function Vt(N){return a[N.getUTCDay()]}function Ve(N){return l[N.getUTCMonth()]}function Sy(N){return u[N.getUTCMonth()]}function Ey(N){return i[+(N.getUTCHours()>=12)]}function jy(N){return 1+~~(N.getUTCMonth()/3)}return{format:function(N){var q=O(N+="",x);return q.toString=function(){return N},q},parse:function(N){var q=A(N+="",!1);return q.toString=function(){return N},q},utcFormat:function(N){var q=O(N+="",P);return q.toString=function(){return N},q},utcParse:function(N){var q=A(N+="",!0);return q.toString=function(){return N},q}}}var gd={"-":"",_:" ",0:"0"},be=/^\s*\d+/,lO=/^%/,cO=/[\\^$*+?|[\]().{}]/g;function U(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function dO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function hO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function vO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function pO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function mO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function yd(e,t,r){var n=be.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function bd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function gO(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function yO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function bO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function xd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function xO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function wd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function wO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function PO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function OO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function AO(e,t,r){var n=be.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function SO(e,t,r){var n=lO.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function EO(e,t,r){var n=be.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function jO(e,t,r){var n=be.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function Pd(e,t){return U(e.getDate(),t,2)}function TO(e,t){return U(e.getHours(),t,2)}function CO(e,t){return U(e.getHours()%12||12,t,2)}function _O(e,t){return U(1+xn.count(Et(e),e),t,3)}function Kp(e,t){return U(e.getMilliseconds(),t,3)}function kO(e,t){return Kp(e,t)+"000"}function MO(e,t){return U(e.getMonth()+1,t,2)}function DO(e,t){return U(e.getMinutes(),t,2)}function IO(e,t){return U(e.getSeconds(),t,2)}function NO(e){var t=e.getDay();return t===0?7:t}function $O(e,t){return U(zi.count(Et(e)-1,e),t,2)}function qp(e){var t=e.getDay();return t>=4||t===0?_r(e):_r.ceil(e)}function RO(e,t){return e=qp(e),U(_r.count(Et(e),e)+(Et(e).getDay()===4),t,2)}function LO(e){return e.getDay()}function BO(e,t){return U(vi.count(Et(e)-1,e),t,2)}function KO(e,t){return U(e.getFullYear()%100,t,2)}function qO(e,t){return e=qp(e),U(e.getFullYear()%100,t,2)}function FO(e,t){return U(e.getFullYear()%1e4,t,4)}function zO(e,t){var r=e.getDay();return e=r>=4||r===0?_r(e):_r.ceil(e),U(e.getFullYear()%1e4,t,4)}function WO(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+U(t/60|0,"0",2)+U(t%60,"0",2)}function Od(e,t){return U(e.getUTCDate(),t,2)}function UO(e,t){return U(e.getUTCHours(),t,2)}function HO(e,t){return U(e.getUTCHours()%12||12,t,2)}function YO(e,t){return U(1+Fi.count(jt(e),e),t,3)}function Fp(e,t){return U(e.getUTCMilliseconds(),t,3)}function GO(e,t){return Fp(e,t)+"000"}function VO(e,t){return U(e.getUTCMonth()+1,t,2)}function XO(e,t){return U(e.getUTCMinutes(),t,2)}function ZO(e,t){return U(e.getUTCSeconds(),t,2)}function JO(e){var t=e.getUTCDay();return t===0?7:t}function QO(e,t){return U(Wi.count(jt(e)-1,e),t,2)}function zp(e){var t=e.getUTCDay();return t>=4||t===0?kr(e):kr.ceil(e)}function eA(e,t){return e=zp(e),U(kr.count(jt(e),e)+(jt(e).getUTCDay()===4),t,2)}function tA(e){return e.getUTCDay()}function rA(e,t){return U(pi.count(jt(e)-1,e),t,2)}function nA(e,t){return U(e.getUTCFullYear()%100,t,2)}function iA(e,t){return e=zp(e),U(e.getUTCFullYear()%100,t,2)}function aA(e,t){return U(e.getUTCFullYear()%1e4,t,4)}function oA(e,t){var r=e.getUTCDay();return e=r>=4||r===0?kr(e):kr.ceil(e),U(e.getUTCFullYear()%1e4,t,4)}function uA(){return"+0000"}function Ad(){return"%"}function Sd(e){return+e}function Ed(e){return Math.floor(+e/1e3)}var xr,Wp,Up;sA({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function sA(e){return xr=sO(e),Wp=xr.format,xr.parse,Up=xr.utcFormat,xr.utcParse,xr}function lA(e){return new Date(e)}function cA(e){return e instanceof Date?+e:+new Date(+e)}function Ms(e,t,r,n,i,a,o,u,l,c){var s=ys(),f=s.invert,d=s.domain,h=c(".%L"),v=c(":%S"),p=c("%I:%M"),g=c("%I %p"),y=c("%a %d"),b=c("%b %d"),x=c("%B"),P=c("%Y");function w(O){return(l(O)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>J1(e,a/n))},r.copy=function(){return Vp(t).domain(e)},kt.apply(r,arguments)}function Hi(){var e=0,t=.5,r=1,n=1,i,a,o,u,l,c=Te,s,f=!1,d;function h(p){return isNaN(p=+p)?d:(p=.5+((p=+s(p))-a)*(n*pe.chartData,Ns=S([gr],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),$s=(e,t,r,n)=>n?Ns(e):gr(e);function Mr(e){if(Array.isArray(e)&&e.length===2){var[t,r]=e;if(Ye(t)&&Ye(r))return!0}return!1}function jd(e,t,r){return r?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function pA(e,t){if(t&&typeof e!="function"&&Array.isArray(e)&&e.length===2){var[r,n]=e,i,a;if(Ye(r))i=r;else if(typeof r=="function")return;if(Ye(n))a=n;else if(typeof n=="function")return;var o=[i,a];if(Mr(o))return o}}function mA(e,t,r){if(!(!r&&t==null)){if(typeof e=="function"&&t!=null)try{var n=e(t,r);if(Mr(n))return jd(n,t,r)}catch{}if(Array.isArray(e)&&e.length===2){var[i,a]=e,o,u;if(i==="auto")t!=null&&(o=Math.min(...t));else if(D(i))o=i;else if(typeof i=="function")try{t!=null&&(o=i(t==null?void 0:t[0]))}catch{}else if(typeof i=="string"&&mf.test(i)){var l=mf.exec(i);if(l==null||t==null)o=void 0;else{var c=+l[1];o=t[0]-c}}else o=t==null?void 0:t[0];if(a==="auto")t!=null&&(u=Math.max(...t));else if(D(a))u=a;else if(typeof a=="function")try{t!=null&&(u=a(t==null?void 0:t[1]))}catch{}else if(typeof a=="string"&&gf.test(a)){var s=gf.exec(a);if(s==null||t==null)u=void 0;else{var f=+s[1];u=t[1]+f}}else u=t==null?void 0:t[1];var d=[o,u];if(Mr(d))return t==null?d:jd(d,t,r)}}}var $r=1e9,gA={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Ls,ne=!0,rt="[DecimalError] ",sr=rt+"Invalid argument: ",Rs=rt+"Exponent out of range: ",Rr=Math.floor,Qt=Math.pow,yA=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Fe,me=1e7,te=7,Qp=9007199254740991,mi=Rr(Qp/te),M={};M.absoluteValue=M.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};M.comparedTo=M.cmp=function(e){var t,r,n,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};M.decimalPlaces=M.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*te;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};M.dividedBy=M.div=function(e){return Ot(this,new this.constructor(e))};M.dividedToIntegerBy=M.idiv=function(e){var t=this,r=t.constructor;return Z(Ot(t,new r(e),0,1),r.precision)};M.equals=M.eq=function(e){return!this.cmp(e)};M.exponent=function(){return fe(this)};M.greaterThan=M.gt=function(e){return this.cmp(e)>0};M.greaterThanOrEqualTo=M.gte=function(e){return this.cmp(e)>=0};M.isInteger=M.isint=function(){return this.e>this.d.length-2};M.isNegative=M.isneg=function(){return this.s<0};M.isPositive=M.ispos=function(){return this.s>0};M.isZero=function(){return this.s===0};M.lessThan=M.lt=function(e){return this.cmp(e)<0};M.lessThanOrEqualTo=M.lte=function(e){return this.cmp(e)<1};M.logarithm=M.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(Fe))throw Error(rt+"NaN");if(r.s<1)throw Error(rt+(r.s?"NaN":"-Infinity"));return r.eq(Fe)?new n(0):(ne=!1,t=Ot(cn(r,a),cn(e,a),a),ne=!0,Z(t,i))};M.minus=M.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?rm(t,e):em(t,(e.s=-e.s,e))};M.modulo=M.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(rt+"NaN");return r.s?(ne=!1,t=Ot(r,e,0,1).times(e),ne=!0,r.minus(t)):Z(new n(r),i)};M.naturalExponential=M.exp=function(){return tm(this)};M.naturalLogarithm=M.ln=function(){return cn(this)};M.negated=M.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};M.plus=M.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?em(t,e):rm(t,(e.s=-e.s,e))};M.precision=M.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(sr+e);if(t=fe(i)+1,n=i.d.length-1,r=n*te+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};M.squareRoot=M.sqrt=function(){var e,t,r,n,i,a,o,u=this,l=u.constructor;if(u.s<1){if(!u.s)return new l(0);throw Error(rt+"NaN")}for(e=fe(u),ne=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=ct(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Rr((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new l(t)):n=new l(i.toString()),r=l.precision,i=o=r+3;;)if(a=n,n=a.plus(Ot(u,a,o+2)).times(.5),ct(a.d).slice(0,o)===(t=ct(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(Z(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;o+=4}return ne=!0,Z(n,r)};M.times=M.mul=function(e){var t,r,n,i,a,o,u,l,c,s=this,f=s.constructor,d=s.d,h=(e=new f(e)).d;if(!s.s||!e.s)return new f(0);for(e.s*=s.s,r=s.e+e.e,l=d.length,c=h.length,l=0;){for(t=0,i=l+n;i>n;)u=a[i]+h[n]*d[i-n-1]+t,a[i--]=u%me|0,t=u/me|0;a[i]=(a[i]+t)%me|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,ne?Z(e,f.precision):e};M.toDecimalPlaces=M.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(ht(e,0,$r),t===void 0?t=n.rounding:ht(t,0,8),Z(r,e+fe(r)+1,t))};M.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=dr(n,!0):(ht(e,0,$r),t===void 0?t=i.rounding:ht(t,0,8),n=Z(new i(n),e+1,t),r=dr(n,!0,e+1)),r};M.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?dr(i):(ht(e,0,$r),t===void 0?t=a.rounding:ht(t,0,8),n=Z(new a(i),e+fe(i)+1,t),r=dr(n.abs(),!1,e+fe(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};M.toInteger=M.toint=function(){var e=this,t=e.constructor;return Z(new t(e),fe(e)+1,t.rounding)};M.toNumber=function(){return+this};M.toPower=M.pow=function(e){var t,r,n,i,a,o,u=this,l=u.constructor,c=12,s=+(e=new l(e));if(!e.s)return new l(Fe);if(u=new l(u),!u.s){if(e.s<1)throw Error(rt+"Infinity");return u}if(u.eq(Fe))return u;if(n=l.precision,e.eq(Fe))return Z(u,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=u.s,o){if((r=s<0?-s:s)<=Qp){for(i=new l(Fe),t=Math.ceil(n/te+4),ne=!1;r%2&&(i=i.times(u),Cd(i.d,t)),r=Rr(r/2),r!==0;)u=u.times(u),Cd(u.d,t);return ne=!0,e.s<0?new l(Fe).div(i):Z(i,n)}}else if(a<0)throw Error(rt+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,ne=!1,i=e.times(cn(u,n+c)),ne=!0,i=tm(i),i.s=a,i};M.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=fe(i),n=dr(i,r<=a.toExpNeg||r>=a.toExpPos)):(ht(e,1,$r),t===void 0?t=a.rounding:ht(t,0,8),i=Z(new a(i),e,t),r=fe(i),n=dr(i,e<=r||r<=a.toExpNeg,e)),n};M.toSignificantDigits=M.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(ht(e,1,$r),t===void 0?t=n.rounding:ht(t,0,8)),Z(new n(r),e,t)};M.toString=M.valueOf=M.val=M.toJSON=M[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=fe(e),r=e.constructor;return dr(e,t<=r.toExpNeg||t>=r.toExpPos)};function em(e,t){var r,n,i,a,o,u,l,c,s=e.constructor,f=s.precision;if(!e.s||!t.s)return t.s||(t=new s(e)),ne?Z(t,f):t;if(l=e.d,c=t.d,o=e.e,i=t.e,l=l.slice(),a=o-i,a){for(a<0?(n=l,a=-a,u=c.length):(n=c,i=o,u=l.length),o=Math.ceil(f/te),u=o>u?o+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=l.length,a=c.length,u-a<0&&(a=u,n=c,c=l,l=n),r=0;a;)r=(l[--a]=l[a]+c[a]+r)/me|0,l[a]%=me;for(r&&(l.unshift(r),++i),u=l.length;l[--u]==0;)l.pop();return t.d=l,t.e=i,ne?Z(t,f):t}function ht(e,t,r){if(e!==~~e||er)throw Error(sr+e)}function ct(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(u=l=0;ui[u]?1:-1;break}return l}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var u,l,c,s,f,d,h,v,p,g,y,b,x,P,w,O,A,j,T=n.constructor,I=n.s==i.s?1:-1,_=n.d,k=i.d;if(!n.s)return new T(n);if(!i.s)throw Error(rt+"Division by zero");for(l=n.e-i.e,A=k.length,w=_.length,h=new T(I),v=h.d=[],c=0;k[c]==(_[c]||0);)++c;if(k[c]>(_[c]||0)&&--l,a==null?b=a=T.precision:o?b=a+(fe(n)-fe(i))+1:b=a,b<0)return new T(0);if(b=b/te+2|0,c=0,A==1)for(s=0,k=k[0],b++;(c1&&(k=e(k,s),_=e(_,s),A=k.length,w=_.length),P=A,p=_.slice(0,A),g=p.length;g=me/2&&++O;do s=0,u=t(k,p,A,g),u<0?(y=p[0],A!=g&&(y=y*me+(p[1]||0)),s=y/O|0,s>1?(s>=me&&(s=me-1),f=e(k,s),d=f.length,g=p.length,u=t(f,p,d,g),u==1&&(s--,r(f,A16)throw Error(Rs+fe(e));if(!e.s)return new s(Fe);for(ne=!1,u=f,o=new s(.03125);e.abs().gte(.1);)e=e.times(o),c+=5;for(n=Math.log(Qt(2,c))/Math.LN10*2+5|0,u+=n,r=i=a=new s(Fe),s.precision=u;;){if(i=Z(i.times(e),u),r=r.times(++l),o=a.plus(Ot(i,r,u)),ct(o.d).slice(0,u)===ct(a.d).slice(0,u)){for(;c--;)a=Z(a.times(a),u);return s.precision=f,t==null?(ne=!0,Z(a,f)):a}a=o}}function fe(e){for(var t=e.e*te,r=e.d[0];r>=10;r/=10)t++;return t}function To(e,t,r){if(t>e.LN10.sd())throw ne=!0,r&&(e.precision=r),Error(rt+"LN10 precision limit exceeded");return Z(new e(e.LN10),t)}function $t(e){for(var t="";e--;)t+="0";return t}function cn(e,t){var r,n,i,a,o,u,l,c,s,f=1,d=10,h=e,v=h.d,p=h.constructor,g=p.precision;if(h.s<1)throw Error(rt+(h.s?"NaN":"-Infinity"));if(h.eq(Fe))return new p(0);if(t==null?(ne=!1,c=g):c=t,h.eq(10))return t==null&&(ne=!0),To(p,c);if(c+=d,p.precision=c,r=ct(v),n=r.charAt(0),a=fe(h),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)h=h.times(e),r=ct(h.d),n=r.charAt(0),f++;a=fe(h),n>1?(h=new p("0."+r),a++):h=new p(n+"."+r.slice(1))}else return l=To(p,c+2,g).times(a+""),h=cn(new p(n+"."+r.slice(1)),c-d).plus(l),p.precision=g,t==null?(ne=!0,Z(h,g)):h;for(u=o=h=Ot(h.minus(Fe),h.plus(Fe),c),s=Z(h.times(h),c),i=3;;){if(o=Z(o.times(s),c),l=u.plus(Ot(o,new p(i),c)),ct(l.d).slice(0,c)===ct(u.d).slice(0,c))return u=u.times(2),a!==0&&(u=u.plus(To(p,c+2,g).times(a+""))),u=Ot(u,new p(f),c),p.precision=g,t==null?(ne=!0,Z(u,g)):u;u=l,i+=2}}function Td(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Rr(r/te),e.d=[],n=(r+1)%te,r<0&&(n+=te),nmi||e.e<-mi))throw Error(Rs+r)}else e.s=0,e.e=0,e.d=[0];return e}function Z(e,t,r){var n,i,a,o,u,l,c,s,f=e.d;for(o=1,a=f[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=te,i=t,c=f[s=0];else{if(s=Math.ceil((n+1)/te),a=f.length,s>=a)return e;for(c=a=f[s],o=1;a>=10;a/=10)o++;n%=te,i=n-te+o}if(r!==void 0&&(a=Qt(10,o-i-1),u=c/a%10|0,l=t<0||f[s+1]!==void 0||c%a,l=r<4?(u||l)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||l||r==6&&(n>0?i>0?c/Qt(10,o-i):0:f[s-1])%10&1||r==(e.s<0?8:7))),t<1||!f[0])return l?(a=fe(e),f.length=1,t=t-a-1,f[0]=Qt(10,(te-t%te)%te),e.e=Rr(-t/te)||0):(f.length=1,f[0]=e.e=e.s=0),e;if(n==0?(f.length=s,a=1,s--):(f.length=s+1,a=Qt(10,te-n),f[s]=i>0?(c/Qt(10,o-i)%Qt(10,i)|0)*a:0),l)for(;;)if(s==0){(f[0]+=a)==me&&(f[0]=1,++e.e);break}else{if(f[s]+=a,f[s]!=me)break;f[s--]=0,a=1}for(n=f.length;f[--n]===0;)f.pop();if(ne&&(e.e>mi||e.e<-mi))throw Error(Rs+fe(e));return e}function rm(e,t){var r,n,i,a,o,u,l,c,s,f,d=e.constructor,h=d.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new d(e),ne?Z(t,h):t;if(l=e.d,f=t.d,n=t.e,c=e.e,l=l.slice(),o=c-n,o){for(s=o<0,s?(r=l,o=-o,u=f.length):(r=f,n=c,u=l.length),i=Math.max(Math.ceil(h/te),u)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=l.length,u=f.length,s=i0;--i)l[u++]=0;for(i=f.length;i>o;){if(l[--i]0?a=a.charAt(0)+"."+a.slice(1)+$t(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+$t(-i-1)+a,r&&(n=r-o)>0&&(a+=$t(n))):i>=o?(a+=$t(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+$t(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=$t(n))),e.s<0?"-"+a:a}function Cd(e,t){if(e.length>t)return e.length=t,!0}function nm(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(sr+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return Td(o,a.toString())}else if(typeof a!="string")throw Error(sr+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,yA.test(a))Td(o,a);else throw Error(sr+a)}if(i.prototype=M,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=nm,i.config=i.set=bA,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(sr+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(sr+r+": "+n);return this}var Ls=nm(gA);Fe=new Ls(1);const G=Ls;var xA=e=>e,im={},am=e=>e===im,_d=e=>function t(){return arguments.length===0||arguments.length===1&&am(arguments.length<=0?void 0:arguments[0])?t:e(...arguments)},om=(e,t)=>e===1?t:_d(function(){for(var r=arguments.length,n=new Array(r),i=0;io!==im).length;return a>=e?t(...n):om(e-a,_d(function(){for(var o=arguments.length,u=new Array(o),l=0;lam(s)?u.shift():s);return t(...c,...u)}))}),Yi=e=>om(e.length,e),wu=(e,t)=>{for(var r=[],n=e;nArray.isArray(t)?t.map(e):Object.keys(t).map(r=>t[r]).map(e)),PA=function(){for(var t=arguments.length,r=new Array(t),n=0;nl(u),a(...arguments))}},Pu=e=>Array.isArray(e)?e.reverse():e.split("").reverse().join(""),um=e=>{var t=null,r=null;return function(){for(var n=arguments.length,i=new Array(n),a=0;a{var l;return o===((l=t)===null||l===void 0?void 0:l[u])})||(t=i,r=e(...i)),r}};function sm(e){var t;return e===0?t=1:t=Math.floor(new G(e).abs().log(10).toNumber())+1,t}function lm(e,t,r){for(var n=new G(e),i=0,a=[];n.lt(t)&&i<1e5;)a.push(n.toNumber()),n=n.add(r),i++;return a}Yi((e,t,r)=>{var n=+e,i=+t;return n+r*(i-n)});Yi((e,t,r)=>{var n=t-+e;return n=n||1/0,(r-e)/n});Yi((e,t,r)=>{var n=t-+e;return n=n||1/0,Math.max(0,Math.min(1,(r-e)/n))});var cm=e=>{var[t,r]=e,[n,i]=[t,r];return t>r&&([n,i]=[r,t]),[n,i]},fm=(e,t,r)=>{if(e.lte(0))return new G(0);var n=sm(e.toNumber()),i=new G(10).pow(n),a=e.div(i),o=n!==1?.05:.1,u=new G(Math.ceil(a.div(o).toNumber())).add(r).mul(o),l=u.mul(i);return t?new G(l.toNumber()):new G(Math.ceil(l.toNumber()))},OA=(e,t,r)=>{var n=new G(1),i=new G(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new G(10).pow(sm(e)-1),i=new G(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new G(Math.floor(e)))}else e===0?i=new G(Math.floor((t-1)/2)):r||(i=new G(Math.floor(e)));var o=Math.floor((t-1)/2),u=PA(wA(l=>i.add(new G(l-o).mul(n)).toNumber()),wu);return u(0,t)},dm=function(t,r,n,i){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((r-t)/(n-1)))return{step:new G(0),tickMin:new G(0),tickMax:new G(0)};var o=fm(new G(r).sub(t).div(n-1),i,a),u;t<=0&&r>=0?u=new G(0):(u=new G(t).add(r).div(2),u=u.sub(new G(u).mod(o)));var l=Math.ceil(u.sub(t).div(o).toNumber()),c=Math.ceil(new G(r).sub(u).div(o).toNumber()),s=l+c+1;return s>n?dm(t,r,n,i,a+1):(s0?c+(n-s):c,l=r>0?l:l+(n-s)),{step:o,tickMin:u.sub(new G(l).mul(o)),tickMax:u.add(new G(c).mul(o))})};function AA(e){var[t,r]=e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Math.max(n,2),[o,u]=cm([t,r]);if(o===-1/0||u===1/0){var l=u===1/0?[o,...wu(0,n-1).map(()=>1/0)]:[...wu(0,n-1).map(()=>-1/0),u];return t>r?Pu(l):l}if(o===u)return OA(o,n,i);var{step:c,tickMin:s,tickMax:f}=dm(o,u,a,i,0),d=lm(s,f.add(new G(.1).mul(c)),c);return t>r?Pu(d):d}function SA(e,t){var[r,n]=e,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,[a,o]=cm([r,n]);if(a===-1/0||o===1/0)return[r,n];if(a===o)return[a];var u=Math.max(t,2),l=fm(new G(o).sub(a).div(u-1),i,0),c=[...lm(new G(a),new G(o),l),o];return i===!1&&(c=c.map(s=>Math.round(s))),r>n?Pu(c):c}var EA=um(AA),jA=um(SA),hm=e=>e.rootProps.maxBarSize,TA=e=>e.rootProps.barGap,vm=e=>e.rootProps.barCategoryGap,CA=e=>e.rootProps.barSize,wn=e=>e.rootProps.stackOffset,Bs=e=>e.options.chartName,Ks=e=>e.rootProps.syncId,pm=e=>e.rootProps.syncMethod,qs=e=>e.options.eventEmitter,pt={allowDuplicatedCategory:!0,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"category"},Be={allowDataOverflow:!1,allowDuplicatedCategory:!0,radiusAxisId:0,scale:"auto",tick:!0,tickCount:5,type:"number"},Gi=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t},_A={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!1,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:pt.reversed,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:pt.type,unit:void 0},kA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:Be.type,unit:void 0},MA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:pt.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:"number",unit:void 0},DA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:"category",unit:void 0},Fs=(e,t)=>e.polarAxis.angleAxis[t]!=null?e.polarAxis.angleAxis[t]:e.layout.layoutType==="radial"?MA:_A,zs=(e,t)=>e.polarAxis.radiusAxis[t]!=null?e.polarAxis.radiusAxis[t]:e.layout.layoutType==="radial"?DA:kA,Vi=e=>e.polarOptions,Ws=S([Ct,_t,ve],Xv),mm=S([Vi,Ws],(e,t)=>{if(e!=null)return Ce(e.innerRadius,t,0)}),gm=S([Vi,Ws],(e,t)=>{if(e!=null)return Ce(e.outerRadius,t,t*.8)}),IA=e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:r}=e;return[t,r]},ym=S([Vi],IA);S([Fs,ym],Gi);var bm=S([Ws,mm,gm],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});S([zs,bm],Gi);var NA=S([Y,Vi,mm,gm,Ct,_t],(e,t,r,n,i,a)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var{cx:o,cy:u,startAngle:l,endAngle:c}=t;return{cx:Ce(o,i,i/2),cy:Ce(u,a,a/2),innerRadius:r,outerRadius:n,startAngle:l,endAngle:c,clockWise:!1}}}),ue=(e,t)=>t,Pn=(e,t,r)=>r;function kd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function gi(e){for(var t=1;t{var r=e.cartesianAxis.xAxis[t];return r??Re},Le={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:Ou,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,width:Ri},Yt=(e,t)=>{var r=e.cartesianAxis.yAxis[t];return r??Le},BA={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},Us=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??BA},se=(e,t,r)=>{switch(t){case"xAxis":return Mt(e,r);case"yAxis":return Yt(e,r);case"zAxis":return Us(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return zs(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},KA=(e,t,r)=>{switch(t){case"xAxis":return Mt(e,r);case"yAxis":return Yt(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},On=(e,t,r)=>{switch(t){case"xAxis":return Mt(e,r);case"yAxis":return Yt(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return zs(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},xm=e=>e.graphicalItems.countOfBars>0;function Hs(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var Xi=e=>e.graphicalItems.cartesianItems,qA=S([ue,Pn],Hs),Ys=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),An=S([Xi,se,qA],Ys),wm=e=>e.filter(t=>t.stackId===void 0),FA=S([An],wm),Gs=e=>e.map(t=>t.data).filter(Boolean).flat(1),zA=S([An],Gs),Vs=(e,t)=>{var{chartData:r=[],dataStartIndex:n,dataEndIndex:i}=t;return e.length>0?e:r.slice(n,i+1)},Zi=S([zA,$s],Vs),Xs=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:re(i,n)}))):e.map(n=>({value:n})),Ji=S([Zi,se,An],Xs);function Pm(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function yr(e){return e.filter(t=>dt(t)||t instanceof Date).map(Number).filter(t=>We(t)===!1)}function WA(e,t,r){return!r||typeof t!="number"||We(t)?[]:r.length?yr(r.flatMap(n=>{var i=re(e,n.dataKey),a,o;if(Array.isArray(i)?[a,o]=i:a=o=i,!(!Ye(a)||!Ye(o)))return[t-a,t+o]})):[]}var Om=(e,t,r)=>{var n={},i=t.reduce((a,o)=>(o.stackId==null||(a[o.stackId]==null&&(a[o.stackId]=[]),a[o.stackId].push(o)),a),n);return Object.fromEntries(Object.entries(i).map(a=>{var[o,u]=a,l=u.map(c=>c.dataKey);return[o,{stackedData:iw(e,l,r),graphicalItems:u}]}))},Au=S([Zi,An,wn],Om),Am=(e,t,r)=>{var{dataStartIndex:n,dataEndIndex:i}=t;if(r!=="zAxis"){var a=sw(e,n,i);if(!(a!=null&&a[0]===0&&a[1]===0))return a}},UA=S([Au,gr,ue],Am),Sm=(e,t,r,n)=>r.length>0?e.flatMap(i=>r.flatMap(a=>{var o,u,l=(o=a.errorBars)===null||o===void 0?void 0:o.filter(s=>Pm(n,s)),c=re(i,(u=t.dataKey)!==null&&u!==void 0?u:a.dataKey);return{value:c,errorDomain:WA(i,c,l)}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(i=>({value:re(i,t.dataKey),errorDomain:[]})):e.map(i=>({value:i,errorDomain:[]})),HA=S(Zi,se,FA,ue,Sm);function YA(e){var{value:t}=e;if(dt(t)||t instanceof Date)return t}var GA=e=>{var t=e.flatMap(n=>[n.value,n.errorDomain]).flat(1),r=yr(t);if(r.length!==0)return[Math.min(...r),Math.max(...r)]},VA=(e,t,r)=>{var n=e.map(YA).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&Yh(n))?yp(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},Zs=e=>{var t;if(e==null||!("domain"in e))return Ou;if(e.domain!=null)return e.domain;if(e.ticks!=null){if(e.type==="number"){var r=yr(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:Ou},Js=function(){for(var t=arguments.length,r=new Array(t),n=0;ne.referenceElements.dots,Lr=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),XA=S([Em,ue,Pn],Lr),jm=e=>e.referenceElements.areas,ZA=S([jm,ue,Pn],Lr),Tm=e=>e.referenceElements.lines,JA=S([Tm,ue,Pn],Lr),Cm=(e,t)=>{var r=yr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},QA=S(XA,ue,Cm),_m=(e,t)=>{var r=yr(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},eS=S([ZA,ue],_m),km=(e,t)=>{var r=yr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},tS=S(JA,ue,km),rS=S(QA,tS,eS,(e,t,r)=>Js(e,r,t)),Mm=S([se],Zs),Qs=(e,t,r,n,i)=>{var a=pA(t,e.allowDataOverflow);return a??mA(t,Js(r,i,GA(n)),e.allowDataOverflow)},nS=S([se,Mm,UA,HA,rS],Qs),iS=[0,1],el=(e,t,r,n,i,a,o)=>{if(!(e==null||r==null||r.length===0)){var{dataKey:u,type:l}=e,c=Wt(t,a);return c&&u==null?yp(0,r.length):l==="category"?VA(n,e,c):i==="expand"?iS:o}},tl=S([se,Y,Zi,Ji,wn,ue,nS],el),Dm=(e,t,r,n,i)=>{if(e!=null){var{scale:a,type:o}=e;if(a==="auto")return t==="radial"&&i==="radiusAxis"?"band":t==="radial"&&i==="angleAxis"?"linear":o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?"point":o==="category"?"band":"linear";if(typeof a=="string"){var u="scale".concat(vn(a));return u in Jr?u:"point"}}},Br=S([se,Y,xm,Bs,ue],Dm);function aS(e){if(e!=null){if(e in Jr)return Jr[e]();var t="scale".concat(vn(e));if(t in Jr)return Jr[t]()}}function rl(e,t,r,n){if(!(r==null||n==null)){if(typeof e.scale=="function")return e.scale.copy().domain(r).range(n);var i=aS(t);if(i!=null){var a=i.domain(r).range(n);return Qx(a),a}}}var nl=(e,t,r)=>{var n=Zs(t);if(!(r!=="auto"&&r!=="linear")){if(t!=null&&t.tickCount&&Array.isArray(n)&&(n[0]==="auto"||n[1]==="auto")&&Mr(e))return EA(e,t.tickCount,t.allowDecimals);if(t!=null&&t.tickCount&&t.type==="number"&&Mr(e))return jA(e,t.tickCount,t.allowDecimals)}},il=S([tl,On,Br],nl),al=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&Mr(t)&&Array.isArray(r)&&r.length>0){var i=t[0],a=r[0],o=t[1],u=r[r.length-1];return[Math.min(i,a),Math.max(o,u)]}return t},oS=S([se,tl,il,ue],al),uS=S(Ji,se,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(yr(e.map(u=>u.value))).sort((u,l)=>u-l);if(n.length<2)return 1/0;var i=n[n.length-1]-n[0];if(i===0)return 1/0;for(var a=0;an,(e,t,r,n,i)=>{if(!Ye(e))return 0;var a=t==="vertical"?n.height:n.width;if(i==="gap")return e*a/2;if(i==="no-gap"){var o=Ce(r,e*a),u=e*a/2;return u-o-(u-o)/a*o}return 0}),sS=(e,t)=>{var r=Mt(e,t);return r==null||typeof r.padding!="string"?0:Im(e,"xAxis",t,r.padding)},lS=(e,t)=>{var r=Yt(e,t);return r==null||typeof r.padding!="string"?0:Im(e,"yAxis",t,r.padding)},cS=S(Mt,sS,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var{padding:i}=e;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),fS=S(Yt,lS,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var{padding:i}=e;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),dS=S([ve,cS,Bi,Li,(e,t,r)=>r],(e,t,r,n,i)=>{var{padding:a}=n;return i?[a.left,r.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),hS=S([ve,Y,fS,Bi,Li,(e,t,r)=>r],(e,t,r,n,i,a)=>{var{padding:o}=i;return a?[n.height-o.bottom,o.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),Sn=(e,t,r,n)=>{var i;switch(t){case"xAxis":return dS(e,r,n);case"yAxis":return hS(e,r,n);case"zAxis":return(i=Us(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return ym(e);case"radiusAxis":return bm(e,r);default:return}},Nm=S([se,Sn],Gi),Kr=S([se,Br,oS,Nm],rl);S(An,ue,(e,t)=>e.flatMap(r=>{var n;return(n=r.errorBars)!==null&&n!==void 0?n:[]}).filter(r=>Pm(t,r)));function $m(e,t){return e.idt.id?1:0}var Qi=(e,t)=>t,ea=(e,t,r)=>r,vS=S(us,Qi,ea,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort($m)),pS=S(ss,Qi,ea,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort($m)),Rm=(e,t)=>({width:e.width,height:t.height}),mS=(e,t)=>{var r=typeof t.width=="number"?t.width:Ri;return{width:r,height:e.height}},Lm=S(ve,Mt,Rm),gS=(e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}},yS=(e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}},bS=S(_t,ve,vS,Qi,ea,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=Rm(t,u);o==null&&(o=gS(t,n,e));var c=n==="top"&&!i||n==="bottom"&&i;a[u.id]=o-Number(c)*l.height,o+=(c?-1:1)*l.height}),a}),xS=S(Ct,ve,pS,Qi,ea,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=mS(t,u);o==null&&(o=yS(t,n,e));var c=n==="left"&&!i||n==="right"&&i;a[u.id]=o-Number(c)*l.width,o+=(c?-1:1)*l.width}),a}),wS=(e,t)=>{var r=ve(e),n=Mt(e,t);if(n!=null){var i=bS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:r.left,y:0}:{x:r.left,y:a}}},PS=(e,t)=>{var r=ve(e),n=Yt(e,t);if(n!=null){var i=xS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:0,y:r.top}:{x:a,y:r.top}}},Bm=S(ve,Yt,(e,t)=>{var r=typeof t.width=="number"?t.width:Ri;return{width:r,height:e.height}}),Md=(e,t,r)=>{switch(t){case"xAxis":return Lm(e,r).width;case"yAxis":return Bm(e,r).height;default:return}},Km=(e,t,r,n)=>{if(r!=null){var{allowDuplicatedCategory:i,type:a,dataKey:o}=r,u=Wt(e,n),l=t.map(c=>c.value);if(o&&u&&a==="category"&&i&&Yh(l))return l}},ol=S([Y,Ji,se,ue],Km),qm=(e,t,r,n)=>{if(!(r==null||r.dataKey==null)){var{type:i,scale:a}=r,o=Wt(e,n);if(o&&(i==="number"||a!=="auto"))return t.map(u=>u.value)}},ul=S([Y,Ji,On,ue],qm),Dd=S([Y,KA,Br,Kr,ol,ul,Sn,il,ue],(e,t,r,n,i,a,o,u,l)=>{if(t==null)return null;var c=Wt(e,l);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:l,categoricalDomain:a,duplicateDomain:i,isCategorical:c,niceTicks:u,range:o,realScaleType:r,scale:n}}),OS=(e,t,r,n,i,a,o,u,l)=>{if(!(t==null||n==null)){var c=Wt(e,l),{type:s,ticks:f,tickCount:d}=t,h=r==="scaleBand"&&typeof n.bandwidth=="function"?n.bandwidth()/2:2,v=s==="category"&&n.bandwidth?n.bandwidth()/h:0;v=l==="angleAxis"&&a!=null&&a.length>=2?ge(a[0]-a[1])*2*v:v;var p=f||i;if(p){var g=p.map((y,b)=>{var x=o?o.indexOf(y):y;return{index:b,coordinate:n(x)+v,value:y,offset:v}});return g.filter(y=>!We(y.coordinate))}return c&&u?u.map((y,b)=>({coordinate:n(y)+v,value:y,index:b,offset:v})):n.ticks?n.ticks(d).map(y=>({coordinate:n(y)+v,value:y,offset:v})):n.domain().map((y,b)=>({coordinate:n(y)+v,value:o?o[y]:y,index:b,offset:v}))}},Fm=S([Y,On,Br,Kr,il,Sn,ol,ul,ue],OS),AS=(e,t,r,n,i,a,o)=>{if(!(t==null||r==null||n==null||n[0]===n[1])){var u=Wt(e,o),{tickCount:l}=t,c=0;return c=o==="angleAxis"&&(n==null?void 0:n.length)>=2?ge(n[0]-n[1])*2*c:c,u&&a?a.map((s,f)=>({coordinate:r(s)+c,value:s,index:f,offset:c})):r.ticks?r.ticks(l).map(s=>({coordinate:r(s)+c,value:s,offset:c})):r.domain().map((s,f)=>({coordinate:r(s)+c,value:i?i[s]:s,index:f,offset:c}))}},Ft=S([Y,On,Kr,Sn,ol,ul,ue],AS),vt=S(se,Kr,(e,t)=>{if(!(e==null||t==null))return gi(gi({},e),{},{scale:t})}),SS=S([se,Br,tl,Nm],rl);S((e,t,r)=>Us(e,r),SS,(e,t)=>{if(!(e==null||t==null))return gi(gi({},e),{},{scale:t})});var ES=S([Y,us,ss],(e,t,r)=>{switch(e){case"horizontal":return t.some(n=>n.reversed)?"right-to-left":"left-to-right";case"vertical":return r.some(n=>n.reversed)?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}}),zm=e=>e.options.defaultTooltipEventType,Wm=e=>e.options.validateTooltipEventTypes;function Um(e,t,r){if(e==null)return t;var n=e?"axis":"item";return r==null?t:r.includes(n)?n:t}function sl(e,t){var r=zm(e),n=Wm(e);return Um(t,r,n)}function jS(e){return $(t=>sl(t,e))}var Hm=(e,t)=>{var r,n=Number(t);if(!(We(n)||t==null))return n>=0?e==null||(r=e[n])===null||r===void 0?void 0:r.value:void 0},TS=e=>e.tooltip.settings,Rt={active:!1,index:null,dataKey:void 0,coordinate:void 0},CS={itemInteraction:{click:Rt,hover:Rt},axisInteraction:{click:Rt,hover:Rt},keyboardInteraction:Rt,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},Ym=nt({name:"tooltip",initialState:CS,reducers:{addTooltipEntrySettings(e,t){e.tooltipItemPayloads.push(t.payload)},removeTooltipEntrySettings(e,t){var r=Pt(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate,e.keyboardInteraction.dataKey=t.payload.activeDataKey}}}),{addTooltipEntrySettings:_S,removeTooltipEntrySettings:kS,setTooltipSettingsState:MS,setActiveMouseOverItemIndex:Gm,mouseLeaveItem:DS,mouseLeaveChart:Vm,setActiveClickItemIndex:IS,setMouseOverAxisIndex:Xm,setMouseClickAxisIndex:NS,setSyncInteraction:Su,setKeyboardInteraction:Eu}=Ym.actions,$S=Ym.reducer;function Id(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Kn(e){for(var t=1;t{if(t==null)return Rt;var i=KS(e,t,r);if(i==null)return Rt;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var a=e.settings.active===!0;if(qS(i)){if(a)return Kn(Kn({},i),{},{active:!0})}else if(n!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:n};return Kn(Kn({},Rt),{},{coordinate:i.coordinate})},ll=(e,t)=>{var r=e==null?void 0:e.index;if(r==null)return null;var n=Number(r);if(!Ye(n))return r;var i=0,a=1/0;return t.length>0&&(a=t.length-1),String(Math.max(i,Math.min(n,a)))},Jm=(e,t,r,n,i,a,o,u)=>{if(!(a==null||u==null)){var l=o[0],c=l==null?void 0:u(l.positions,a);if(c!=null)return c;var s=i==null?void 0:i[Number(a)];if(s)switch(r){case"horizontal":return{x:s.coordinate,y:(n.top+t)/2};default:return{x:(n.left+e)/2,y:s.coordinate}}}},Qm=(e,t,r,n)=>{if(t==="axis")return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i;return r==="hover"?i=e.itemInteraction.hover.dataKey:i=e.itemInteraction.click.dataKey,i==null&&n!=null?[e.tooltipItemPayloads[0]]:e.tooltipItemPayloads.filter(a=>{var o;return((o=a.settings)===null||o===void 0?void 0:o.dataKey)===i})},En=e=>e.options.tooltipPayloadSearcher,qr=e=>e.tooltip;function Nd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $d(e){for(var t=1;t{if(!(t==null||a==null)){var{chartData:u,computedData:l,dataStartIndex:c,dataEndIndex:s}=r,f=[];return e.reduce((d,h)=>{var v,{dataDefinedOnItem:p,settings:g}=h,y=HS(p,u),b=US(y,c,s),x=(v=g==null?void 0:g.dataKey)!==null&&v!==void 0?v:n==null?void 0:n.dataKey,P=g==null?void 0:g.nameKey,w;if(n!=null&&n.dataKey&&Array.isArray(b)&&!Array.isArray(b[0])&&o==="axis"?w=Gh(b,n.dataKey,i):w=a(b,t,l,P),Array.isArray(w))w.forEach(A=>{var j=$d($d({},g),{},{name:A.name,unit:A.unit,color:void 0,fill:void 0});d.push(yf({tooltipEntrySettings:j,dataKey:A.dataKey,payload:A.payload,value:re(A.payload,A.dataKey),name:A.name}))});else{var O;d.push(yf({tooltipEntrySettings:g,dataKey:x,payload:w,value:re(w,x),name:(O=re(w,P))!==null&&O!==void 0?O:g==null?void 0:g.name}))}return d},f)}},xe=e=>{var t=Y(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},Fr=e=>e.tooltip.settings.axisId,Ae=e=>{var t=xe(e),r=Fr(e);return On(e,t,r)},cl=S([Ae,Y,xm,Bs,xe],Dm),YS=S([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),GS=S([xe,Fr],Hs),ta=S([YS,Ae,GS],Ys),VS=S([ta],Gs),br=S([VS,gr],Vs),fl=S([br,Ae,ta],Xs),XS=S([Ae],Zs),ZS=S([br,ta,wn],Om),JS=S([ZS,gr,xe],Am),QS=S([ta],wm),eE=S([br,Ae,QS,xe],Sm),tE=S([Em,xe,Fr],Lr),rE=S([tE,xe],Cm),nE=S([jm,xe,Fr],Lr),iE=S([nE,xe],_m),aE=S([Tm,xe,Fr],Lr),oE=S([aE,xe],km),uE=S([rE,oE,iE],Js),sE=S([Ae,XS,JS,eE,uE],Qs),tg=S([Ae,Y,br,fl,wn,xe,sE],el),lE=S([tg,Ae,cl],nl),cE=S([Ae,tg,lE,xe],al),rg=e=>{var t=xe(e),r=Fr(e),n=!1;return Sn(e,t,r,n)},ng=S([Ae,rg],Gi),ig=S([Ae,cl,cE,ng],rl),fE=S([Y,fl,Ae,xe],Km),dE=S([Y,fl,Ae,xe],qm),hE=(e,t,r,n,i,a,o,u)=>{if(t){var{type:l}=t,c=Wt(e,u);if(n){var s=r==="scaleBand"&&n.bandwidth?n.bandwidth()/2:2,f=l==="category"&&n.bandwidth?n.bandwidth()/s:0;return f=u==="angleAxis"&&i!=null&&(i==null?void 0:i.length)>=2?ge(i[0]-i[1])*2*f:f,c&&o?o.map((d,h)=>({coordinate:n(d)+f,value:d,index:h,offset:f})):n.domain().map((d,h)=>({coordinate:n(d)+f,value:a?a[d]:d,index:h,offset:f}))}}},Dt=S([Y,Ae,cl,ig,rg,fE,dE,xe],hE),dl=S([zm,Wm,TS],(e,t,r)=>Um(r.shared,e,t)),ag=e=>e.tooltip.settings.trigger,hl=e=>e.tooltip.settings.defaultIndex,ra=S([qr,dl,ag,hl],Zm),zt=S([ra,br],ll),og=S([Dt,zt],Hm),ug=S([ra],e=>{if(e)return e.dataKey}),sg=S([qr,dl,ag,hl],Qm),vE=S([Ct,_t,Y,ve,Dt,hl,sg,En],Jm),pE=S([ra,vE],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),mE=S([ra],e=>e.active),gE=S([sg,zt,gr,Ae,og,En,dl],eg),yE=S([gE],e=>{if(e!=null){var t=e.map(r=>r.payload).filter(r=>r!=null);return Array.from(new Set(t))}});function Rd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ld(e){for(var t=1;t$(Ae),OE=()=>{var e=PE(),t=$(Dt),r=$(ig);return nn(Ld(Ld({},e),{},{scale:r}),t)},AE=()=>$(Bs),vl=(e,t)=>t,lg=(e,t,r)=>r,pl=(e,t,r,n)=>n,SE=S(Dt,e=>_i(e,t=>t.coordinate)),ml=S([qr,vl,lg,pl],Zm),cg=S([ml,br],ll),EE=(e,t,r)=>{if(t!=null){var n=qr(e);return t==="axis"?r==="hover"?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:r==="hover"?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},fg=S([qr,vl,lg,pl],Qm),yi=S([Ct,_t,Y,ve,Dt,pl,fg,En],Jm),jE=S([ml,yi],(e,t)=>{var r;return(r=e.coordinate)!==null&&r!==void 0?r:t}),dg=S(Dt,cg,Hm),TE=S([fg,cg,gr,Ae,dg,En,vl],eg),CE=S([ml],e=>({isActive:e.active,activeIndex:e.index})),_E=(e,t,r,n,i,a,o,u)=>{if(!(!e||!t||!n||!i||!a)){var l=lw(e.chartX,e.chartY,t,r,u);if(l){var c=fw(l,t),s=Zx(c,o,a,n,i),f=cw(t,a,s,l);return{activeIndex:String(s),activeCoordinate:f}}}};function ju(){return ju=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.useContext(hg),Co={exports:{}},Kd;function RE(){return Kd||(Kd=1,function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(r=!1));function i(l,c,s){this.fn=l,this.context=c,this.once=s||!1}function a(l,c,s,f,d){if(typeof s!="function")throw new TypeError("The listener must be a function");var h=new i(s,f||l,d),v=r?r+c:c;return l._events[v]?l._events[v].fn?l._events[v]=[l._events[v],h]:l._events[v].push(h):(l._events[v]=h,l._eventsCount++),l}function o(l,c){--l._eventsCount===0?l._events=new n:delete l._events[c]}function u(){this._events=new n,this._eventsCount=0}u.prototype.eventNames=function(){var c=[],s,f;if(this._eventsCount===0)return c;for(f in s=this._events)t.call(s,f)&&c.push(r?f.slice(1):f);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(s)):c},u.prototype.listeners=function(c){var s=r?r+c:c,f=this._events[s];if(!f)return[];if(f.fn)return[f.fn];for(var d=0,h=f.length,v=new Array(h);d{e.eventEmitter==null&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),qE=vg.reducer,{createEventEmitter:FE}=vg.actions;function zE(e){return e.tooltip.syncInteraction}var WE={chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},pg=nt({name:"chartData",initialState:WE,reducers:{setChartData(e,t){if(e.chartData=t.payload,t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var{startIndex:r,endIndex:n}=t.payload;r!=null&&(e.dataStartIndex=r),n!=null&&(e.dataEndIndex=n)}}}),{setChartData:Fd,setDataStartEndIndexes:UE,setComputedData:zD}=pg.actions,HE=pg.reducer,mg=()=>{};function YE(){var e=$(Ks),t=$(qs),r=ae(),n=$(pm),i=$(Dt),a=Ki(),o=ls(),u=$(l=>l.rootProps.className);m.useEffect(()=>{if(e==null)return mg;var l=(c,s,f)=>{if(t!==f&&e===c){if(n==="index"){r(s);return}if(i!=null){var d;if(typeof n=="function"){var h={activeTooltipIndex:s.payload.index==null?void 0:Number(s.payload.index),isTooltipActive:s.payload.active,activeIndex:s.payload.index==null?void 0:Number(s.payload.index),activeLabel:s.payload.label,activeDataKey:s.payload.dataKey,activeCoordinate:s.payload.coordinate},v=n(i,h);d=i[v]}else n==="value"&&(d=i.find(O=>String(O.value)===s.payload.label));var{coordinate:p}=s.payload;if(d==null||s.payload.active===!1||p==null||o==null){r(Su({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0}));return}var{x:g,y}=p,b=Math.min(g,o.x+o.width),x=Math.min(y,o.y+o.height),P={x:a==="horizontal"?d.coordinate:b,y:a==="horizontal"?x:d.coordinate},w=Su({active:s.payload.active,coordinate:P,dataKey:s.payload.dataKey,index:String(d.index),label:s.payload.label});r(w)}}};return fn.on(Tu,l),()=>{fn.off(Tu,l)}},[u,r,t,e,n,i,a,o])}function GE(){var e=$(Ks),t=$(qs),r=ae();m.useEffect(()=>{if(e==null)return mg;var n=(i,a,o)=>{t!==o&&e===i&&r(UE(a))};return fn.on(qd,n),()=>{fn.off(qd,n)}},[r,t,e])}function VE(){var e=ae();m.useEffect(()=>{e(FE())},[e]),YE(),GE()}function XE(e,t,r,n,i,a){var o=$(d=>EE(d,e,t)),u=$(qs),l=$(Ks),c=$(pm),s=$(zE),f=s==null?void 0:s.active;m.useEffect(()=>{if(!f&&l!=null&&u!=null){var d=Su({active:a,coordinate:r,dataKey:o,index:i,label:typeof n=="number"?String(n):n});fn.emit(Tu,l,d,u)}},[f,r,o,i,n,u,l,c,a])}function zd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Wd(e){for(var t=1;t{w(MS({shared:g,trigger:y,axisId:P,active:r,defaultIndex:O}))},[w,g,y,P,r,O]);var A=ls(),j=cp(),T=jS(g),{activeIndex:I,isActive:_}=$(Ve=>CE(Ve,T,y,O)),k=$(Ve=>TE(Ve,T,y,O)),R=$(Ve=>dg(Ve,T,y,O)),B=$(Ve=>jE(Ve,T,y,O)),z=k,V=$E(),K=r??_,[de,oe]=qb([z,K]),Ie=T==="axis"?R:void 0;XE(T,y,B,Ie,I,K);var Ge=x??V;if(Ge==null)return null;var L=z??Ud;K||(L=Ud),u&&L.length&&(L=hb(z.filter(Ve=>Ve.value!=null&&(Ve.hide!==!0||t.includeHidden)),s,ej));var we=L.length>0,Vt=m.createElement(Dw,{allowEscapeViewBox:n,animationDuration:i,animationEasing:a,isAnimationActive:l,active:K,coordinate:B,hasPayload:we,offset:c,position:f,reverseDirection:d,useTranslate3d:h,viewBox:A,wrapperStyle:v,lastBoundingBox:de,innerRef:oe,hasPortalFromProps:!!x},tj(o,Wd(Wd({},t),{},{payload:L,label:Ie,active:K,coordinate:B,accessibilityLayer:j})));return m.createElement(m.Fragment,null,ky.createPortal(Vt,Ge),K&&m.createElement(NE,{cursor:p,tooltipEventType:T,coordinate:B,payload:z,index:I}))}var _o={},ko={},Hd;function nj(){return Hd||(Hd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=0,i={}){typeof i!="object"&&(i={});let a=null,o=null,u=null,l=0,c=null,s;const{leading:f=!1,trailing:d=!0,maxWait:h}=i,v="maxWait"in i,p=v?Math.max(Number(h)||0,n):0,g=A=>(a!==null&&(s=r.apply(o,a)),a=o=null,l=A,s),y=A=>(l=A,c=setTimeout(w,n),f&&a!==null?g(A):s),b=A=>(c=null,d&&a!==null?g(A):s),x=A=>{if(u===null)return!0;const j=A-u,T=j>=n||j<0,I=v&&A-l>=p;return T||I},P=A=>{const j=u===null?0:A-u,T=n-j,I=p-(A-l);return v?Math.min(T,I):T},w=()=>{const A=Date.now();if(x(A))return b(A);c=setTimeout(w,P(A))},O=function(...A){const j=Date.now(),T=x(j);if(a=A,o=this,u=j,T){if(c===null)return y(j);if(v)return clearTimeout(c),c=setTimeout(w,n),g(j)}return c===null&&(c=setTimeout(w,n)),s};return O.cancel=()=>{c!==null&&clearTimeout(c),l=0,u=a=o=c=null},O.flush=()=>c===null?s:b(Date.now()),O}e.debounce=t}(ko)),ko}var Yd;function ij(){return Yd||(Yd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=nj();function r(n,i=0,a={}){const{leading:o=!0,trailing:u=!0}=a;return t.debounce(n,i,{leading:o,maxWait:i,trailing:u})}e.throttle=r}(_o)),_o}var Mo,Gd;function aj(){return Gd||(Gd=1,Mo=ij().throttle),Mo}var oj=aj();const uj=Tt(oj);var Qr=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;a{var{aspect:r,initialDimension:n={width:-1,height:-1},width:i="100%",height:a="100%",minWidth:o=0,minHeight:u,maxHeight:l,children:c,debounce:s=0,id:f,className:d,onResize:h,style:v={}}=e,p=m.useRef(null),g=m.useRef();g.current=h,m.useImperativeHandle(t,()=>p.current);var[y,b]=m.useState({containerWidth:n.width,containerHeight:n.height}),x=m.useCallback((w,O)=>{b(A=>{var j=Math.round(w),T=Math.round(O);return A.containerWidth===j&&A.containerHeight===T?A:{containerWidth:j,containerHeight:T}})},[]);m.useEffect(()=>{var w=T=>{var I,{width:_,height:k}=T[0].contentRect;x(_,k),(I=g.current)===null||I===void 0||I.call(g,_,k)};s>0&&(w=uj(w,s,{trailing:!0,leading:!1}));var O=new ResizeObserver(w),{width:A,height:j}=p.current.getBoundingClientRect();return x(A,j),O.observe(p.current),()=>{O.disconnect()}},[x,s]);var P=m.useMemo(()=>{var{containerWidth:w,containerHeight:O}=y;if(w<0||O<0)return null;Qr(er(i)||er(a),`The width(%s) and height(%s) are both fixed numbers, + A`).concat(a,",").concat(a,",0,0,").concat(+(s<0),",").concat(P.x,",").concat(P.y,"Z")}else b+="L".concat(t,",").concat(r,"Z");return b},I1={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},gp=e=>{var t=it(e,I1),{cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:o,forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s,className:f}=t;if(a0&&Math.abs(c-s)<360?p=D1({cx:r,cy:n,innerRadius:i,outerRadius:a,cornerRadius:Math.min(v,h/2),forceCornerRadius:u,cornerIsExternal:l,startAngle:c,endAngle:s}):p=mp({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:c,endAngle:s}),m.createElement("path",hu({},F(t,!0),{className:d,d:p}))};function N1(e,t,r){var n,i,a,o;if(e==="horizontal")n=t.x,a=n,i=r.top,o=r.top+r.height;else if(e==="vertical")i=t.y,o=i,n=r.left,a=r.left+r.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var{cx:u,cy:l,innerRadius:c,outerRadius:s,angle:f}=t,d=ce(u,l,c,f),h=ce(u,l,s,f);n=d.x,i=d.y,a=h.x,o=h.y}else return pp(t);return[{x:n,y:i},{x:a,y:o}]}var go={},yo={},bo={},Kf;function $1(){return Kf||(Kf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Ov();function r(n){return t.isSymbol(n)?NaN:Number(n)}e.toNumber=r}(bo)),bo}var qf;function R1(){return qf||(qf=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=$1();function r(n){return n?(n=t.toNumber(n),n===1/0||n===-1/0?(n<0?-1:1)*Number.MAX_VALUE:n===n?n:0):n===0?n:0}e.toFinite=r}(yo)),yo}var Ff;function L1(){return Ff||(Ff=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=Av(),r=R1();function n(i,a,o){o&&typeof o!="number"&&t.isIterateeCall(i,a,o)&&(a=o=void 0),i=r.toFinite(i),a===void 0?(a=i,i=0):a=r.toFinite(a),o=o===void 0?it?1:e>=t?0:NaN}function q1(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function ds(e){let t,r,n;e.length!==2?(t=Lt,r=(u,l)=>Lt(e(u),l),n=(u,l)=>e(u)-l):(t=e===Lt||e===q1?e:F1,r=e,n=e);function i(u,l,c=0,s=u.length){if(c>>1;r(u[f],l)<0?c=f+1:s=f}while(c>>1;r(u[f],l)<=0?c=f+1:s=f}while(cc&&n(u[f-1],l)>-n(u[f],l)?f-1:f}return{left:i,center:o,right:a}}function F1(){return 0}function bp(e){return e===null?NaN:+e}function*z1(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const W1=ds(Lt),gn=W1.right;ds(bp).center;class Wf extends Map{constructor(t,r=Y1){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(Uf(this,t))}has(t){return super.has(Uf(this,t))}set(t,r){return super.set(U1(this,t),r)}delete(t){return super.delete(H1(this,t))}}function Uf({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function U1({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function H1({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function Y1(e){return e!==null&&typeof e=="object"?e.valueOf():e}function G1(e=Lt){if(e===Lt)return xp;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function xp(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const V1=Math.sqrt(50),X1=Math.sqrt(10),Z1=Math.sqrt(2);function ui(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=V1?10:a>=X1?5:a>=Z1?2:1;let u,l,c;return i<0?(c=Math.pow(10,-i)/o,u=Math.round(e*c),l=Math.round(t*c),u/ct&&--l,c=-c):(c=Math.pow(10,i)*o,u=Math.round(e/c),l=Math.round(t/c),u*ct&&--l),l0))return[];if(e===t)return[e];const n=t=i))return[];const u=a-i+1,l=new Array(u);if(n)if(o<0)for(let c=0;c=n)&&(r=n);return r}function Yf(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function wp(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?xp:G1(i);n>r;){if(n-r>600){const l=n-r+1,c=t-r+1,s=Math.log(l),f=.5*Math.exp(2*s/3),d=.5*Math.sqrt(s*f*(l-f)/l)*(c-l/2<0?-1:1),h=Math.max(r,Math.floor(t-c*f/l+d)),v=Math.min(n,Math.floor(t+(l-c)*f/l+d));wp(e,t,h,v,i)}const a=e[t];let o=r,u=n;for(Hr(e,r,t),i(e[n],a)>0&&Hr(e,r,n);o0;)--u}i(e[r],a)===0?Hr(e,r,u):(++u,Hr(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function Hr(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function J1(e,t,r){if(e=Float64Array.from(z1(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Yf(e);if(t>=1)return Hf(e);var n,i=(n-1)*t,a=Math.floor(i),o=Hf(wp(e,a).subarray(0,a+1)),u=Yf(e.subarray(a+1));return o+(u-o)*(i-a)}}function Q1(e,t,r=bp){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return o+(u-o)*(i-a)}}function eP(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Rn(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Rn(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=nP.exec(e))?new De(t[1],t[2],t[3],1):(t=iP.exec(e))?new De(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=aP.exec(e))?Rn(t[1],t[2],t[3],t[4]):(t=oP.exec(e))?Rn(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=uP.exec(e))?ed(t[1],t[2]/100,t[3]/100,1):(t=sP.exec(e))?ed(t[1],t[2]/100,t[3]/100,t[4]):Gf.hasOwnProperty(e)?Zf(Gf[e]):e==="transparent"?new De(NaN,NaN,NaN,0):null}function Zf(e){return new De(e>>16&255,e>>8&255,e&255,1)}function Rn(e,t,r,n){return n<=0&&(e=t=r=NaN),new De(e,t,r,n)}function fP(e){return e instanceof yn||(e=sn(e)),e?(e=e.rgb(),new De(e.r,e.g,e.b,e.opacity)):new De}function yu(e,t,r,n){return arguments.length===1?fP(e):new De(e,t,r,n??1)}function De(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}ps(De,yu,Op(yn,{brighter(e){return e=e==null?si:Math.pow(si,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?on:Math.pow(on,e),new De(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new De(ur(this.r),ur(this.g),ur(this.b),li(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Jf,formatHex:Jf,formatHex8:dP,formatRgb:Qf,toString:Qf}));function Jf(){return`#${rr(this.r)}${rr(this.g)}${rr(this.b)}`}function dP(){return`#${rr(this.r)}${rr(this.g)}${rr(this.b)}${rr((isNaN(this.opacity)?1:this.opacity)*255)}`}function Qf(){const e=li(this.opacity);return`${e===1?"rgb(":"rgba("}${ur(this.r)}, ${ur(this.g)}, ${ur(this.b)}${e===1?")":`, ${e})`}`}function li(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function ur(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function rr(e){return e=ur(e),(e<16?"0":"")+e.toString(16)}function ed(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new st(e,t,r,n)}function Ap(e){if(e instanceof st)return new st(e.h,e.s,e.l,e.opacity);if(e instanceof yn||(e=sn(e)),!e)return new st;if(e instanceof st)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,u=a-i,l=(a+i)/2;return u?(t===a?o=(r-n)/u+(r0&&l<1?0:o,new st(o,u,l,e.opacity)}function hP(e,t,r,n){return arguments.length===1?Ap(e):new st(e,t,r,n??1)}function st(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}ps(st,hP,Op(yn,{brighter(e){return e=e==null?si:Math.pow(si,e),new st(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?on:Math.pow(on,e),new st(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new De(wo(e>=240?e-240:e+120,i,n),wo(e,i,n),wo(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new st(td(this.h),Ln(this.s),Ln(this.l),li(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=li(this.opacity);return`${e===1?"hsl(":"hsla("}${td(this.h)}, ${Ln(this.s)*100}%, ${Ln(this.l)*100}%${e===1?")":`, ${e})`}`}}));function td(e){return e=(e||0)%360,e<0?e+360:e}function Ln(e){return Math.max(0,Math.min(1,e||0))}function wo(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const ms=e=>()=>e;function vP(e,t){return function(r){return e+r*t}}function pP(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function mP(e){return(e=+e)==1?Sp:function(t,r){return r-t?pP(t,r,e):ms(isNaN(t)?r:t)}}function Sp(e,t){var r=t-e;return r?vP(e,r):ms(isNaN(e)?t:e)}const rd=function e(t){var r=mP(t);function n(i,a){var o=r((i=yu(i)).r,(a=yu(a)).r),u=r(i.g,a.g),l=r(i.b,a.b),c=Sp(i.opacity,a.opacity);return function(s){return i.r=o(s),i.g=u(s),i.b=l(s),i.opacity=c(s),i+""}}return n.gamma=e,n}(1);function gP(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),u[o]?u[o]+=a:u[++o]=a),(n=n[0])===(i=i[0])?u[o]?u[o]+=i:u[++o]=i:(u[++o]=null,l.push({i:o,x:ci(n,i)})),r=Po.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function TP(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?CP:TP,l=c=null,f}function f(d){return d==null||isNaN(d=+d)?a:(l||(l=u(e.map(n),t,r)))(n(o(d)))}return f.invert=function(d){return o(i((c||(c=u(t,e.map(n),ci)))(d)))},f.domain=function(d){return arguments.length?(e=Array.from(d,fi),s()):e.slice()},f.range=function(d){return arguments.length?(t=Array.from(d),s()):t.slice()},f.rangeRound=function(d){return t=Array.from(d),r=gs,s()},f.clamp=function(d){return arguments.length?(o=d?!0:Te,s()):o!==Te},f.interpolate=function(d){return arguments.length?(r=d,s()):r},f.unknown=function(d){return arguments.length?(a=d,f):a},function(d,h){return n=d,i=h,s()}}function ys(){return qi()(Te,Te)}function _P(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function di(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Cr(e){return e=di(Math.abs(e)),e?e[1]:NaN}function kP(e,t){return function(r,n){for(var i=r.length,a=[],o=0,u=e[0],l=0;i>0&&u>0&&(l+u+1>n&&(u=Math.max(1,n-l)),a.push(r.substring(i-=u,i+u)),!((l+=u+1)>n));)u=e[o=(o+1)%e.length];return a.reverse().join(t)}}function MP(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var DP=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function ln(e){if(!(t=DP.exec(e)))throw new Error("invalid format: "+e);var t;return new bs({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}ln.prototype=bs.prototype;function bs(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}bs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function IP(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var Ep;function NP(e,t){var r=di(e,t);if(!r)return e+"";var n=r[0],i=r[1],a=i-(Ep=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+di(e,Math.max(0,t+a-1))[0]}function id(e,t){var r=di(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const ad={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:_P,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>id(e*100,t),r:id,s:NP,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function od(e){return e}var ud=Array.prototype.map,sd=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function $P(e){var t=e.grouping===void 0||e.thousands===void 0?od:kP(ud.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?od:MP(ud.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function c(f){f=ln(f);var d=f.fill,h=f.align,v=f.sign,p=f.symbol,g=f.zero,y=f.width,b=f.comma,x=f.precision,P=f.trim,w=f.type;w==="n"?(b=!0,w="g"):ad[w]||(x===void 0&&(x=12),P=!0,w="g"),(g||d==="0"&&h==="=")&&(g=!0,d="0",h="=");var O=p==="$"?r:p==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",A=p==="$"?n:/[%p]/.test(w)?o:"",j=ad[w],T=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function I(_){var k=O,R=A,B,z,V;if(w==="c")R=j(_)+R,_="";else{_=+_;var K=_<0||1/_<0;if(_=isNaN(_)?l:j(Math.abs(_),x),P&&(_=IP(_)),K&&+_==0&&v!=="+"&&(K=!1),k=(K?v==="("?v:u:v==="-"||v==="("?"":v)+k,R=(w==="s"?sd[8+Ep/3]:"")+R+(K&&v==="("?")":""),T){for(B=-1,z=_.length;++BV||V>57){R=(V===46?i+_.slice(B+1):_.slice(B))+R,_=_.slice(0,B);break}}}b&&!g&&(_=t(_,1/0));var de=k.length+_.length+R.length,oe=de>1)+k+_+R+oe.slice(de);break;default:_=oe+k+_+R;break}return a(_)}return I.toString=function(){return f+""},I}function s(f,d){var h=c((f=ln(f),f.type="f",f)),v=Math.max(-8,Math.min(8,Math.floor(Cr(d)/3)))*3,p=Math.pow(10,-v),g=sd[8+v/3];return function(y){return h(p*y)+g}}return{format:c,formatPrefix:s}}var Bn,xs,jp;RP({thousands:",",grouping:[3],currency:["$",""]});function RP(e){return Bn=$P(e),xs=Bn.format,jp=Bn.formatPrefix,Bn}function LP(e){return Math.max(0,-Cr(Math.abs(e)))}function BP(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Cr(t)/3)))*3-Cr(Math.abs(e)))}function KP(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Cr(t)-Cr(e))+1}function Tp(e,t,r,n){var i=mu(e,t,r),a;switch(n=ln(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=BP(i,o))&&(n.precision=a),jp(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=KP(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=LP(i))&&(n.precision=a-(n.type==="%")*2);break}}return xs(n)}function Ut(e){var t=e.domain;return e.ticks=function(r){var n=t();return vu(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return Tp(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],u=n[a],l,c,s=10;for(u0;){if(c=pu(o,u,r),c===l)return n[i]=o,n[a]=u,t(n);if(c>0)o=Math.floor(o/c)*c,u=Math.ceil(u/c)*c;else if(c<0)o=Math.ceil(o*c)/c,u=Math.floor(u*c)/c;else break;l=c}return e},e}function Cp(){var e=ys();return e.copy=function(){return bn(e,Cp())},at.apply(e,arguments),Ut(e)}function _p(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,fi),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return _p(e).unknown(t)},e=arguments.length?Array.from(e,fi):[0,1],Ut(r)}function kp(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function UP(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function fd(e){return(t,r)=>-e(-t,r)}function ws(e){const t=e(ld,cd),r=t.domain;let n=10,i,a;function o(){return i=UP(n),a=WP(n),r()[0]<0?(i=fd(i),a=fd(a),e(qP,FP)):e(ld,cd),t}return t.base=function(u){return arguments.length?(n=+u,o()):n},t.domain=function(u){return arguments.length?(r(u),o()):r()},t.ticks=u=>{const l=r();let c=l[0],s=l[l.length-1];const f=s0){for(;d<=h;++d)for(v=1;vs)break;y.push(p)}}else for(;d<=h;++d)for(v=n-1;v>=1;--v)if(p=d>0?v/a(-d):v*a(d),!(ps)break;y.push(p)}y.length*2{if(u==null&&(u=10),l==null&&(l=n===10?"s":","),typeof l!="function"&&(!(n%1)&&(l=ln(l)).precision==null&&(l.trim=!0),l=xs(l)),u===1/0)return l;const c=Math.max(1,n*u/t.ticks().length);return s=>{let f=s/a(Math.round(i(s)));return f*nr(kp(r(),{floor:u=>a(Math.floor(i(u))),ceil:u=>a(Math.ceil(i(u)))})),t}function Mp(){const e=ws(qi()).domain([1,10]);return e.copy=()=>bn(e,Mp()).base(e.base()),at.apply(e,arguments),e}function dd(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function hd(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Ps(e){var t=1,r=e(dd(t),hd(t));return r.constant=function(n){return arguments.length?e(dd(t=+n),hd(t)):t},Ut(r)}function Dp(){var e=Ps(qi());return e.copy=function(){return bn(e,Dp()).constant(e.constant())},at.apply(e,arguments)}function vd(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function HP(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function YP(e){return e<0?-e*e:e*e}function Os(e){var t=e(Te,Te),r=1;function n(){return r===1?e(Te,Te):r===.5?e(HP,YP):e(vd(r),vd(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},Ut(t)}function As(){var e=Os(qi());return e.copy=function(){return bn(e,As()).exponent(e.exponent())},at.apply(e,arguments),e}function GP(){return As.apply(null,arguments).exponent(.5)}function pd(e){return Math.sign(e)*e*e}function VP(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function Ip(){var e=ys(),t=[0,1],r=!1,n;function i(a){var o=VP(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(pd(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,fi)).map(pd)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return Ip(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},at.apply(i,arguments),Ut(i)}function Np(){var e=[],t=[],r=[],n;function i(){var o=0,u=Math.max(1,t.length);for(r=new Array(u-1);++o0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[c-1],n[c]]},o.unknown=function(l){return arguments.length&&(a=l),o},o.thresholds=function(){return n.slice()},o.copy=function(){return $p().domain([e,t]).range(i).unknown(a)},at.apply(Ut(o),arguments)}function Rp(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[gn(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return Rp().domain(e).range(t).unknown(r)},at.apply(i,arguments)}const Oo=new Date,Ao=new Date;function pe(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),u=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,u)=>{const l=[];if(a=i.ceil(a),u=u==null?1:Math.floor(u),!(a0))return l;let c;do l.push(c=new Date(+a)),t(a,u),e(a);while(cpe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,u)=>{if(o>=o)if(u<0)for(;++u<=0;)for(;t(o,-1),!a(o););else for(;--u>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(Oo.setTime(+a),Ao.setTime(+o),e(Oo),e(Ao),Math.floor(r(Oo,Ao))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const hi=pe(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);hi.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?pe(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):hi);hi.range;const gt=1e3,et=gt*60,yt=et*60,St=yt*24,Ss=St*7,md=St*30,So=St*365,nr=pe(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*gt)},(e,t)=>(t-e)/gt,e=>e.getUTCSeconds());nr.range;const Es=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getMinutes());Es.range;const js=pe(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*et)},(e,t)=>(t-e)/et,e=>e.getUTCMinutes());js.range;const Ts=pe(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*gt-e.getMinutes()*et)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getHours());Ts.range;const Cs=pe(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*yt)},(e,t)=>(t-e)/yt,e=>e.getUTCHours());Cs.range;const xn=pe(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*et)/St,e=>e.getDate()-1);xn.range;const Fi=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/St,e=>e.getUTCDate()-1);Fi.range;const Lp=pe(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/St,e=>Math.floor(e/St));Lp.range;function pr(e){return pe(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*et)/Ss)}const zi=pr(0),vi=pr(1),XP=pr(2),ZP=pr(3),_r=pr(4),JP=pr(5),QP=pr(6);zi.range;vi.range;XP.range;ZP.range;_r.range;JP.range;QP.range;function mr(e){return pe(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Ss)}const Wi=mr(0),pi=mr(1),eO=mr(2),tO=mr(3),kr=mr(4),rO=mr(5),nO=mr(6);Wi.range;pi.range;eO.range;tO.range;kr.range;rO.range;nO.range;const _s=pe(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());_s.range;const ks=pe(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());ks.range;const Et=pe(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Et.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});Et.range;const jt=pe(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());jt.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:pe(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});jt.range;function Bp(e,t,r,n,i,a){const o=[[nr,1,gt],[nr,5,5*gt],[nr,15,15*gt],[nr,30,30*gt],[a,1,et],[a,5,5*et],[a,15,15*et],[a,30,30*et],[i,1,yt],[i,3,3*yt],[i,6,6*yt],[i,12,12*yt],[n,1,St],[n,2,2*St],[r,1,Ss],[t,1,md],[t,3,3*md],[e,1,So]];function u(c,s,f){const d=sg).right(o,d);if(h===o.length)return e.every(mu(c/So,s/So,f));if(h===0)return hi.every(Math.max(mu(c,s,f),1));const[v,p]=o[d/o[h-1][2]53)return null;"w"in C||(C.w=1),"Z"in C?(Q=jo(Yr(C.y,0,1)),Ne=Q.getUTCDay(),Q=Ne>4||Ne===0?pi.ceil(Q):pi(Q),Q=Fi.offset(Q,(C.V-1)*7),C.y=Q.getUTCFullYear(),C.m=Q.getUTCMonth(),C.d=Q.getUTCDate()+(C.w+6)%7):(Q=Eo(Yr(C.y,0,1)),Ne=Q.getDay(),Q=Ne>4||Ne===0?vi.ceil(Q):vi(Q),Q=xn.offset(Q,(C.V-1)*7),C.y=Q.getFullYear(),C.m=Q.getMonth(),C.d=Q.getDate()+(C.w+6)%7)}else("W"in C||"U"in C)&&("w"in C||(C.w="u"in C?C.u%7:"W"in C?1:0),Ne="Z"in C?jo(Yr(C.y,0,1)).getUTCDay():Eo(Yr(C.y,0,1)).getDay(),C.m=0,C.d="W"in C?(C.w+6)%7+C.W*7-(Ne+5)%7:C.w+C.U*7-(Ne+6)%7);return"Z"in C?(C.H+=C.Z/100|0,C.M+=C.Z%100,jo(C)):Eo(C)}}function j(N,q,W,C){for(var ke=0,Q=q.length,Ne=W.length,$e,Xt;ke=Ne)return-1;if($e=q.charCodeAt(ke++),$e===37){if($e=q.charAt(ke++),Xt=w[$e in gd?q.charAt(ke++):$e],!Xt||(C=Xt(N,W,C))<0)return-1}else if($e!=W.charCodeAt(C++))return-1}return C}function T(N,q,W){var C=c.exec(q.slice(W));return C?(N.p=s.get(C[0].toLowerCase()),W+C[0].length):-1}function I(N,q,W){var C=h.exec(q.slice(W));return C?(N.w=v.get(C[0].toLowerCase()),W+C[0].length):-1}function _(N,q,W){var C=f.exec(q.slice(W));return C?(N.w=d.get(C[0].toLowerCase()),W+C[0].length):-1}function k(N,q,W){var C=y.exec(q.slice(W));return C?(N.m=b.get(C[0].toLowerCase()),W+C[0].length):-1}function R(N,q,W){var C=p.exec(q.slice(W));return C?(N.m=g.get(C[0].toLowerCase()),W+C[0].length):-1}function B(N,q,W){return j(N,t,q,W)}function z(N,q,W){return j(N,r,q,W)}function V(N,q,W){return j(N,n,q,W)}function K(N){return o[N.getDay()]}function de(N){return a[N.getDay()]}function oe(N){return l[N.getMonth()]}function Ie(N){return u[N.getMonth()]}function Ge(N){return i[+(N.getHours()>=12)]}function L(N){return 1+~~(N.getMonth()/3)}function we(N){return o[N.getUTCDay()]}function Vt(N){return a[N.getUTCDay()]}function Ve(N){return l[N.getUTCMonth()]}function Sy(N){return u[N.getUTCMonth()]}function Ey(N){return i[+(N.getUTCHours()>=12)]}function jy(N){return 1+~~(N.getUTCMonth()/3)}return{format:function(N){var q=O(N+="",x);return q.toString=function(){return N},q},parse:function(N){var q=A(N+="",!1);return q.toString=function(){return N},q},utcFormat:function(N){var q=O(N+="",P);return q.toString=function(){return N},q},utcParse:function(N){var q=A(N+="",!0);return q.toString=function(){return N},q}}}var gd={"-":"",_:" ",0:"0"},be=/^\s*\d+/,lO=/^%/,cO=/[\\^$*+?|[\]().{}]/g;function U(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function dO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function hO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function vO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function pO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function mO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function yd(e,t,r){var n=be.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function bd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function gO(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function yO(e,t,r){var n=be.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function bO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function xd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function xO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function wd(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function wO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function PO(e,t,r){var n=be.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function OO(e,t,r){var n=be.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function AO(e,t,r){var n=be.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function SO(e,t,r){var n=lO.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function EO(e,t,r){var n=be.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function jO(e,t,r){var n=be.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function Pd(e,t){return U(e.getDate(),t,2)}function TO(e,t){return U(e.getHours(),t,2)}function CO(e,t){return U(e.getHours()%12||12,t,2)}function _O(e,t){return U(1+xn.count(Et(e),e),t,3)}function Kp(e,t){return U(e.getMilliseconds(),t,3)}function kO(e,t){return Kp(e,t)+"000"}function MO(e,t){return U(e.getMonth()+1,t,2)}function DO(e,t){return U(e.getMinutes(),t,2)}function IO(e,t){return U(e.getSeconds(),t,2)}function NO(e){var t=e.getDay();return t===0?7:t}function $O(e,t){return U(zi.count(Et(e)-1,e),t,2)}function qp(e){var t=e.getDay();return t>=4||t===0?_r(e):_r.ceil(e)}function RO(e,t){return e=qp(e),U(_r.count(Et(e),e)+(Et(e).getDay()===4),t,2)}function LO(e){return e.getDay()}function BO(e,t){return U(vi.count(Et(e)-1,e),t,2)}function KO(e,t){return U(e.getFullYear()%100,t,2)}function qO(e,t){return e=qp(e),U(e.getFullYear()%100,t,2)}function FO(e,t){return U(e.getFullYear()%1e4,t,4)}function zO(e,t){var r=e.getDay();return e=r>=4||r===0?_r(e):_r.ceil(e),U(e.getFullYear()%1e4,t,4)}function WO(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+U(t/60|0,"0",2)+U(t%60,"0",2)}function Od(e,t){return U(e.getUTCDate(),t,2)}function UO(e,t){return U(e.getUTCHours(),t,2)}function HO(e,t){return U(e.getUTCHours()%12||12,t,2)}function YO(e,t){return U(1+Fi.count(jt(e),e),t,3)}function Fp(e,t){return U(e.getUTCMilliseconds(),t,3)}function GO(e,t){return Fp(e,t)+"000"}function VO(e,t){return U(e.getUTCMonth()+1,t,2)}function XO(e,t){return U(e.getUTCMinutes(),t,2)}function ZO(e,t){return U(e.getUTCSeconds(),t,2)}function JO(e){var t=e.getUTCDay();return t===0?7:t}function QO(e,t){return U(Wi.count(jt(e)-1,e),t,2)}function zp(e){var t=e.getUTCDay();return t>=4||t===0?kr(e):kr.ceil(e)}function eA(e,t){return e=zp(e),U(kr.count(jt(e),e)+(jt(e).getUTCDay()===4),t,2)}function tA(e){return e.getUTCDay()}function rA(e,t){return U(pi.count(jt(e)-1,e),t,2)}function nA(e,t){return U(e.getUTCFullYear()%100,t,2)}function iA(e,t){return e=zp(e),U(e.getUTCFullYear()%100,t,2)}function aA(e,t){return U(e.getUTCFullYear()%1e4,t,4)}function oA(e,t){var r=e.getUTCDay();return e=r>=4||r===0?kr(e):kr.ceil(e),U(e.getUTCFullYear()%1e4,t,4)}function uA(){return"+0000"}function Ad(){return"%"}function Sd(e){return+e}function Ed(e){return Math.floor(+e/1e3)}var xr,Wp,Up;sA({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function sA(e){return xr=sO(e),Wp=xr.format,xr.parse,Up=xr.utcFormat,xr.utcParse,xr}function lA(e){return new Date(e)}function cA(e){return e instanceof Date?+e:+new Date(+e)}function Ms(e,t,r,n,i,a,o,u,l,c){var s=ys(),f=s.invert,d=s.domain,h=c(".%L"),v=c(":%S"),p=c("%I:%M"),g=c("%I %p"),y=c("%a %d"),b=c("%b %d"),x=c("%B"),P=c("%Y");function w(O){return(l(O)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>J1(e,a/n))},r.copy=function(){return Vp(t).domain(e)},kt.apply(r,arguments)}function Hi(){var e=0,t=.5,r=1,n=1,i,a,o,u,l,c=Te,s,f=!1,d;function h(p){return isNaN(p=+p)?d:(p=.5+((p=+s(p))-a)*(n*pe.chartData,Ns=S([gr],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),$s=(e,t,r,n)=>n?Ns(e):gr(e);function Mr(e){if(Array.isArray(e)&&e.length===2){var[t,r]=e;if(Ye(t)&&Ye(r))return!0}return!1}function jd(e,t,r){return r?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}function pA(e,t){if(t&&typeof e!="function"&&Array.isArray(e)&&e.length===2){var[r,n]=e,i,a;if(Ye(r))i=r;else if(typeof r=="function")return;if(Ye(n))a=n;else if(typeof n=="function")return;var o=[i,a];if(Mr(o))return o}}function mA(e,t,r){if(!(!r&&t==null)){if(typeof e=="function"&&t!=null)try{var n=e(t,r);if(Mr(n))return jd(n,t,r)}catch{}if(Array.isArray(e)&&e.length===2){var[i,a]=e,o,u;if(i==="auto")t!=null&&(o=Math.min(...t));else if(D(i))o=i;else if(typeof i=="function")try{t!=null&&(o=i(t==null?void 0:t[0]))}catch{}else if(typeof i=="string"&&mf.test(i)){var l=mf.exec(i);if(l==null||t==null)o=void 0;else{var c=+l[1];o=t[0]-c}}else o=t==null?void 0:t[0];if(a==="auto")t!=null&&(u=Math.max(...t));else if(D(a))u=a;else if(typeof a=="function")try{t!=null&&(u=a(t==null?void 0:t[1]))}catch{}else if(typeof a=="string"&&gf.test(a)){var s=gf.exec(a);if(s==null||t==null)u=void 0;else{var f=+s[1];u=t[1]+f}}else u=t==null?void 0:t[1];var d=[o,u];if(Mr(d))return t==null?d:jd(d,t,r)}}}var $r=1e9,gA={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Ls,ne=!0,rt="[DecimalError] ",sr=rt+"Invalid argument: ",Rs=rt+"Exponent out of range: ",Rr=Math.floor,Qt=Math.pow,yA=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Fe,me=1e7,te=7,Qp=9007199254740991,mi=Rr(Qp/te),M={};M.absoluteValue=M.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};M.comparedTo=M.cmp=function(e){var t,r,n,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};M.decimalPlaces=M.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*te;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};M.dividedBy=M.div=function(e){return Ot(this,new this.constructor(e))};M.dividedToIntegerBy=M.idiv=function(e){var t=this,r=t.constructor;return Z(Ot(t,new r(e),0,1),r.precision)};M.equals=M.eq=function(e){return!this.cmp(e)};M.exponent=function(){return fe(this)};M.greaterThan=M.gt=function(e){return this.cmp(e)>0};M.greaterThanOrEqualTo=M.gte=function(e){return this.cmp(e)>=0};M.isInteger=M.isint=function(){return this.e>this.d.length-2};M.isNegative=M.isneg=function(){return this.s<0};M.isPositive=M.ispos=function(){return this.s>0};M.isZero=function(){return this.s===0};M.lessThan=M.lt=function(e){return this.cmp(e)<0};M.lessThanOrEqualTo=M.lte=function(e){return this.cmp(e)<1};M.logarithm=M.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(Fe))throw Error(rt+"NaN");if(r.s<1)throw Error(rt+(r.s?"NaN":"-Infinity"));return r.eq(Fe)?new n(0):(ne=!1,t=Ot(cn(r,a),cn(e,a),a),ne=!0,Z(t,i))};M.minus=M.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?rm(t,e):em(t,(e.s=-e.s,e))};M.modulo=M.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(rt+"NaN");return r.s?(ne=!1,t=Ot(r,e,0,1).times(e),ne=!0,r.minus(t)):Z(new n(r),i)};M.naturalExponential=M.exp=function(){return tm(this)};M.naturalLogarithm=M.ln=function(){return cn(this)};M.negated=M.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};M.plus=M.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?em(t,e):rm(t,(e.s=-e.s,e))};M.precision=M.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(sr+e);if(t=fe(i)+1,n=i.d.length-1,r=n*te+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};M.squareRoot=M.sqrt=function(){var e,t,r,n,i,a,o,u=this,l=u.constructor;if(u.s<1){if(!u.s)return new l(0);throw Error(rt+"NaN")}for(e=fe(u),ne=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=ct(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Rr((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new l(t)):n=new l(i.toString()),r=l.precision,i=o=r+3;;)if(a=n,n=a.plus(Ot(u,a,o+2)).times(.5),ct(a.d).slice(0,o)===(t=ct(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(Z(a,r+1,0),a.times(a).eq(u)){n=a;break}}else if(t!="9999")break;o+=4}return ne=!0,Z(n,r)};M.times=M.mul=function(e){var t,r,n,i,a,o,u,l,c,s=this,f=s.constructor,d=s.d,h=(e=new f(e)).d;if(!s.s||!e.s)return new f(0);for(e.s*=s.s,r=s.e+e.e,l=d.length,c=h.length,l=0;){for(t=0,i=l+n;i>n;)u=a[i]+h[n]*d[i-n-1]+t,a[i--]=u%me|0,t=u/me|0;a[i]=(a[i]+t)%me|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,ne?Z(e,f.precision):e};M.toDecimalPlaces=M.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(ht(e,0,$r),t===void 0?t=n.rounding:ht(t,0,8),Z(r,e+fe(r)+1,t))};M.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=dr(n,!0):(ht(e,0,$r),t===void 0?t=i.rounding:ht(t,0,8),n=Z(new i(n),e+1,t),r=dr(n,!0,e+1)),r};M.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?dr(i):(ht(e,0,$r),t===void 0?t=a.rounding:ht(t,0,8),n=Z(new a(i),e+fe(i)+1,t),r=dr(n.abs(),!1,e+fe(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};M.toInteger=M.toint=function(){var e=this,t=e.constructor;return Z(new t(e),fe(e)+1,t.rounding)};M.toNumber=function(){return+this};M.toPower=M.pow=function(e){var t,r,n,i,a,o,u=this,l=u.constructor,c=12,s=+(e=new l(e));if(!e.s)return new l(Fe);if(u=new l(u),!u.s){if(e.s<1)throw Error(rt+"Infinity");return u}if(u.eq(Fe))return u;if(n=l.precision,e.eq(Fe))return Z(u,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=u.s,o){if((r=s<0?-s:s)<=Qp){for(i=new l(Fe),t=Math.ceil(n/te+4),ne=!1;r%2&&(i=i.times(u),Cd(i.d,t)),r=Rr(r/2),r!==0;)u=u.times(u),Cd(u.d,t);return ne=!0,e.s<0?new l(Fe).div(i):Z(i,n)}}else if(a<0)throw Error(rt+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,ne=!1,i=e.times(cn(u,n+c)),ne=!0,i=tm(i),i.s=a,i};M.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=fe(i),n=dr(i,r<=a.toExpNeg||r>=a.toExpPos)):(ht(e,1,$r),t===void 0?t=a.rounding:ht(t,0,8),i=Z(new a(i),e,t),r=fe(i),n=dr(i,e<=r||r<=a.toExpNeg,e)),n};M.toSignificantDigits=M.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(ht(e,1,$r),t===void 0?t=n.rounding:ht(t,0,8)),Z(new n(r),e,t)};M.toString=M.valueOf=M.val=M.toJSON=M[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=fe(e),r=e.constructor;return dr(e,t<=r.toExpNeg||t>=r.toExpPos)};function em(e,t){var r,n,i,a,o,u,l,c,s=e.constructor,f=s.precision;if(!e.s||!t.s)return t.s||(t=new s(e)),ne?Z(t,f):t;if(l=e.d,c=t.d,o=e.e,i=t.e,l=l.slice(),a=o-i,a){for(a<0?(n=l,a=-a,u=c.length):(n=c,i=o,u=l.length),o=Math.ceil(f/te),u=o>u?o+1:u+1,a>u&&(a=u,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(u=l.length,a=c.length,u-a<0&&(a=u,n=c,c=l,l=n),r=0;a;)r=(l[--a]=l[a]+c[a]+r)/me|0,l[a]%=me;for(r&&(l.unshift(r),++i),u=l.length;l[--u]==0;)l.pop();return t.d=l,t.e=i,ne?Z(t,f):t}function ht(e,t,r){if(e!==~~e||er)throw Error(sr+e)}function ct(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(u=l=0;ui[u]?1:-1;break}return l}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var u,l,c,s,f,d,h,v,p,g,y,b,x,P,w,O,A,j,T=n.constructor,I=n.s==i.s?1:-1,_=n.d,k=i.d;if(!n.s)return new T(n);if(!i.s)throw Error(rt+"Division by zero");for(l=n.e-i.e,A=k.length,w=_.length,h=new T(I),v=h.d=[],c=0;k[c]==(_[c]||0);)++c;if(k[c]>(_[c]||0)&&--l,a==null?b=a=T.precision:o?b=a+(fe(n)-fe(i))+1:b=a,b<0)return new T(0);if(b=b/te+2|0,c=0,A==1)for(s=0,k=k[0],b++;(c1&&(k=e(k,s),_=e(_,s),A=k.length,w=_.length),P=A,p=_.slice(0,A),g=p.length;g=me/2&&++O;do s=0,u=t(k,p,A,g),u<0?(y=p[0],A!=g&&(y=y*me+(p[1]||0)),s=y/O|0,s>1?(s>=me&&(s=me-1),f=e(k,s),d=f.length,g=p.length,u=t(f,p,d,g),u==1&&(s--,r(f,A16)throw Error(Rs+fe(e));if(!e.s)return new s(Fe);for(ne=!1,u=f,o=new s(.03125);e.abs().gte(.1);)e=e.times(o),c+=5;for(n=Math.log(Qt(2,c))/Math.LN10*2+5|0,u+=n,r=i=a=new s(Fe),s.precision=u;;){if(i=Z(i.times(e),u),r=r.times(++l),o=a.plus(Ot(i,r,u)),ct(o.d).slice(0,u)===ct(a.d).slice(0,u)){for(;c--;)a=Z(a.times(a),u);return s.precision=f,t==null?(ne=!0,Z(a,f)):a}a=o}}function fe(e){for(var t=e.e*te,r=e.d[0];r>=10;r/=10)t++;return t}function To(e,t,r){if(t>e.LN10.sd())throw ne=!0,r&&(e.precision=r),Error(rt+"LN10 precision limit exceeded");return Z(new e(e.LN10),t)}function $t(e){for(var t="";e--;)t+="0";return t}function cn(e,t){var r,n,i,a,o,u,l,c,s,f=1,d=10,h=e,v=h.d,p=h.constructor,g=p.precision;if(h.s<1)throw Error(rt+(h.s?"NaN":"-Infinity"));if(h.eq(Fe))return new p(0);if(t==null?(ne=!1,c=g):c=t,h.eq(10))return t==null&&(ne=!0),To(p,c);if(c+=d,p.precision=c,r=ct(v),n=r.charAt(0),a=fe(h),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)h=h.times(e),r=ct(h.d),n=r.charAt(0),f++;a=fe(h),n>1?(h=new p("0."+r),a++):h=new p(n+"."+r.slice(1))}else return l=To(p,c+2,g).times(a+""),h=cn(new p(n+"."+r.slice(1)),c-d).plus(l),p.precision=g,t==null?(ne=!0,Z(h,g)):h;for(u=o=h=Ot(h.minus(Fe),h.plus(Fe),c),s=Z(h.times(h),c),i=3;;){if(o=Z(o.times(s),c),l=u.plus(Ot(o,new p(i),c)),ct(l.d).slice(0,c)===ct(u.d).slice(0,c))return u=u.times(2),a!==0&&(u=u.plus(To(p,c+2,g).times(a+""))),u=Ot(u,new p(f),c),p.precision=g,t==null?(ne=!0,Z(u,g)):u;u=l,i+=2}}function Td(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Rr(r/te),e.d=[],n=(r+1)%te,r<0&&(n+=te),nmi||e.e<-mi))throw Error(Rs+r)}else e.s=0,e.e=0,e.d=[0];return e}function Z(e,t,r){var n,i,a,o,u,l,c,s,f=e.d;for(o=1,a=f[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=te,i=t,c=f[s=0];else{if(s=Math.ceil((n+1)/te),a=f.length,s>=a)return e;for(c=a=f[s],o=1;a>=10;a/=10)o++;n%=te,i=n-te+o}if(r!==void 0&&(a=Qt(10,o-i-1),u=c/a%10|0,l=t<0||f[s+1]!==void 0||c%a,l=r<4?(u||l)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||l||r==6&&(n>0?i>0?c/Qt(10,o-i):0:f[s-1])%10&1||r==(e.s<0?8:7))),t<1||!f[0])return l?(a=fe(e),f.length=1,t=t-a-1,f[0]=Qt(10,(te-t%te)%te),e.e=Rr(-t/te)||0):(f.length=1,f[0]=e.e=e.s=0),e;if(n==0?(f.length=s,a=1,s--):(f.length=s+1,a=Qt(10,te-n),f[s]=i>0?(c/Qt(10,o-i)%Qt(10,i)|0)*a:0),l)for(;;)if(s==0){(f[0]+=a)==me&&(f[0]=1,++e.e);break}else{if(f[s]+=a,f[s]!=me)break;f[s--]=0,a=1}for(n=f.length;f[--n]===0;)f.pop();if(ne&&(e.e>mi||e.e<-mi))throw Error(Rs+fe(e));return e}function rm(e,t){var r,n,i,a,o,u,l,c,s,f,d=e.constructor,h=d.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new d(e),ne?Z(t,h):t;if(l=e.d,f=t.d,n=t.e,c=e.e,l=l.slice(),o=c-n,o){for(s=o<0,s?(r=l,o=-o,u=f.length):(r=f,n=c,u=l.length),i=Math.max(Math.ceil(h/te),u)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=l.length,u=f.length,s=i0;--i)l[u++]=0;for(i=f.length;i>o;){if(l[--i]0?a=a.charAt(0)+"."+a.slice(1)+$t(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+$t(-i-1)+a,r&&(n=r-o)>0&&(a+=$t(n))):i>=o?(a+=$t(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+$t(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=$t(n))),e.s<0?"-"+a:a}function Cd(e,t){if(e.length>t)return e.length=t,!0}function nm(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(sr+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return Td(o,a.toString())}else if(typeof a!="string")throw Error(sr+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,yA.test(a))Td(o,a);else throw Error(sr+a)}if(i.prototype=M,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=nm,i.config=i.set=bA,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(sr+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(sr+r+": "+n);return this}var Ls=nm(gA);Fe=new Ls(1);const G=Ls;var xA=e=>e,im={},am=e=>e===im,_d=e=>function t(){return arguments.length===0||arguments.length===1&&am(arguments.length<=0?void 0:arguments[0])?t:e(...arguments)},om=(e,t)=>e===1?t:_d(function(){for(var r=arguments.length,n=new Array(r),i=0;io!==im).length;return a>=e?t(...n):om(e-a,_d(function(){for(var o=arguments.length,u=new Array(o),l=0;lam(s)?u.shift():s);return t(...c,...u)}))}),Yi=e=>om(e.length,e),wu=(e,t)=>{for(var r=[],n=e;nArray.isArray(t)?t.map(e):Object.keys(t).map(r=>t[r]).map(e)),PA=function(){for(var t=arguments.length,r=new Array(t),n=0;nl(u),a(...arguments))}},Pu=e=>Array.isArray(e)?e.reverse():e.split("").reverse().join(""),um=e=>{var t=null,r=null;return function(){for(var n=arguments.length,i=new Array(n),a=0;a{var l;return o===((l=t)===null||l===void 0?void 0:l[u])})||(t=i,r=e(...i)),r}};function sm(e){var t;return e===0?t=1:t=Math.floor(new G(e).abs().log(10).toNumber())+1,t}function lm(e,t,r){for(var n=new G(e),i=0,a=[];n.lt(t)&&i<1e5;)a.push(n.toNumber()),n=n.add(r),i++;return a}Yi((e,t,r)=>{var n=+e,i=+t;return n+r*(i-n)});Yi((e,t,r)=>{var n=t-+e;return n=n||1/0,(r-e)/n});Yi((e,t,r)=>{var n=t-+e;return n=n||1/0,Math.max(0,Math.min(1,(r-e)/n))});var cm=e=>{var[t,r]=e,[n,i]=[t,r];return t>r&&([n,i]=[r,t]),[n,i]},fm=(e,t,r)=>{if(e.lte(0))return new G(0);var n=sm(e.toNumber()),i=new G(10).pow(n),a=e.div(i),o=n!==1?.05:.1,u=new G(Math.ceil(a.div(o).toNumber())).add(r).mul(o),l=u.mul(i);return t?new G(l.toNumber()):new G(Math.ceil(l.toNumber()))},OA=(e,t,r)=>{var n=new G(1),i=new G(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new G(10).pow(sm(e)-1),i=new G(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new G(Math.floor(e)))}else e===0?i=new G(Math.floor((t-1)/2)):r||(i=new G(Math.floor(e)));var o=Math.floor((t-1)/2),u=PA(wA(l=>i.add(new G(l-o).mul(n)).toNumber()),wu);return u(0,t)},dm=function(t,r,n,i){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((r-t)/(n-1)))return{step:new G(0),tickMin:new G(0),tickMax:new G(0)};var o=fm(new G(r).sub(t).div(n-1),i,a),u;t<=0&&r>=0?u=new G(0):(u=new G(t).add(r).div(2),u=u.sub(new G(u).mod(o)));var l=Math.ceil(u.sub(t).div(o).toNumber()),c=Math.ceil(new G(r).sub(u).div(o).toNumber()),s=l+c+1;return s>n?dm(t,r,n,i,a+1):(s0?c+(n-s):c,l=r>0?l:l+(n-s)),{step:o,tickMin:u.sub(new G(l).mul(o)),tickMax:u.add(new G(c).mul(o))})};function AA(e){var[t,r]=e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Math.max(n,2),[o,u]=cm([t,r]);if(o===-1/0||u===1/0){var l=u===1/0?[o,...wu(0,n-1).map(()=>1/0)]:[...wu(0,n-1).map(()=>-1/0),u];return t>r?Pu(l):l}if(o===u)return OA(o,n,i);var{step:c,tickMin:s,tickMax:f}=dm(o,u,a,i,0),d=lm(s,f.add(new G(.1).mul(c)),c);return t>r?Pu(d):d}function SA(e,t){var[r,n]=e,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,[a,o]=cm([r,n]);if(a===-1/0||o===1/0)return[r,n];if(a===o)return[a];var u=Math.max(t,2),l=fm(new G(o).sub(a).div(u-1),i,0),c=[...lm(new G(a),new G(o),l),o];return i===!1&&(c=c.map(s=>Math.round(s))),r>n?Pu(c):c}var EA=um(AA),jA=um(SA),hm=e=>e.rootProps.maxBarSize,TA=e=>e.rootProps.barGap,vm=e=>e.rootProps.barCategoryGap,CA=e=>e.rootProps.barSize,wn=e=>e.rootProps.stackOffset,Bs=e=>e.options.chartName,Ks=e=>e.rootProps.syncId,pm=e=>e.rootProps.syncMethod,qs=e=>e.options.eventEmitter,pt={allowDuplicatedCategory:!0,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"category"},Be={allowDataOverflow:!1,allowDuplicatedCategory:!0,radiusAxisId:0,scale:"auto",tick:!0,tickCount:5,type:"number"},Gi=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t},_A={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!1,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:pt.reversed,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:pt.type,unit:void 0},kA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:Be.type,unit:void 0},MA={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:pt.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:pt.angleAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:pt.scale,tick:pt.tick,tickCount:void 0,ticks:void 0,type:"number",unit:void 0},DA={allowDataOverflow:Be.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Be.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Be.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Be.scale,tick:Be.tick,tickCount:Be.tickCount,ticks:void 0,type:"category",unit:void 0},Fs=(e,t)=>e.polarAxis.angleAxis[t]!=null?e.polarAxis.angleAxis[t]:e.layout.layoutType==="radial"?MA:_A,zs=(e,t)=>e.polarAxis.radiusAxis[t]!=null?e.polarAxis.radiusAxis[t]:e.layout.layoutType==="radial"?DA:kA,Vi=e=>e.polarOptions,Ws=S([Ct,_t,ve],Xv),mm=S([Vi,Ws],(e,t)=>{if(e!=null)return Ce(e.innerRadius,t,0)}),gm=S([Vi,Ws],(e,t)=>{if(e!=null)return Ce(e.outerRadius,t,t*.8)}),IA=e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:r}=e;return[t,r]},ym=S([Vi],IA);S([Fs,ym],Gi);var bm=S([Ws,mm,gm],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});S([zs,bm],Gi);var NA=S([Y,Vi,mm,gm,Ct,_t],(e,t,r,n,i,a)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var{cx:o,cy:u,startAngle:l,endAngle:c}=t;return{cx:Ce(o,i,i/2),cy:Ce(u,a,a/2),innerRadius:r,outerRadius:n,startAngle:l,endAngle:c,clockWise:!1}}}),ue=(e,t)=>t,Pn=(e,t,r)=>r;function kd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function gi(e){for(var t=1;t{var r=e.cartesianAxis.xAxis[t];return r??Re},Le={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:Ou,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,width:Ri},Yt=(e,t)=>{var r=e.cartesianAxis.yAxis[t];return r??Le},BA={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},Us=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??BA},se=(e,t,r)=>{switch(t){case"xAxis":return Mt(e,r);case"yAxis":return Yt(e,r);case"zAxis":return Us(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return zs(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},KA=(e,t,r)=>{switch(t){case"xAxis":return Mt(e,r);case"yAxis":return Yt(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},On=(e,t,r)=>{switch(t){case"xAxis":return Mt(e,r);case"yAxis":return Yt(e,r);case"angleAxis":return Fs(e,r);case"radiusAxis":return zs(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},xm=e=>e.graphicalItems.countOfBars>0;function Hs(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var Xi=e=>e.graphicalItems.cartesianItems,qA=S([ue,Pn],Hs),Ys=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),An=S([Xi,se,qA],Ys),wm=e=>e.filter(t=>t.stackId===void 0),FA=S([An],wm),Gs=e=>e.map(t=>t.data).filter(Boolean).flat(1),zA=S([An],Gs),Vs=(e,t)=>{var{chartData:r=[],dataStartIndex:n,dataEndIndex:i}=t;return e.length>0?e:r.slice(n,i+1)},Zi=S([zA,$s],Vs),Xs=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:re(i,n)}))):e.map(n=>({value:n})),Ji=S([Zi,se,An],Xs);function Pm(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function yr(e){return e.filter(t=>dt(t)||t instanceof Date).map(Number).filter(t=>We(t)===!1)}function WA(e,t,r){return!r||typeof t!="number"||We(t)?[]:r.length?yr(r.flatMap(n=>{var i=re(e,n.dataKey),a,o;if(Array.isArray(i)?[a,o]=i:a=o=i,!(!Ye(a)||!Ye(o)))return[t-a,t+o]})):[]}var Om=(e,t,r)=>{var n={},i=t.reduce((a,o)=>(o.stackId==null||(a[o.stackId]==null&&(a[o.stackId]=[]),a[o.stackId].push(o)),a),n);return Object.fromEntries(Object.entries(i).map(a=>{var[o,u]=a,l=u.map(c=>c.dataKey);return[o,{stackedData:iw(e,l,r),graphicalItems:u}]}))},Au=S([Zi,An,wn],Om),Am=(e,t,r)=>{var{dataStartIndex:n,dataEndIndex:i}=t;if(r!=="zAxis"){var a=sw(e,n,i);if(!(a!=null&&a[0]===0&&a[1]===0))return a}},UA=S([Au,gr,ue],Am),Sm=(e,t,r,n)=>r.length>0?e.flatMap(i=>r.flatMap(a=>{var o,u,l=(o=a.errorBars)===null||o===void 0?void 0:o.filter(s=>Pm(n,s)),c=re(i,(u=t.dataKey)!==null&&u!==void 0?u:a.dataKey);return{value:c,errorDomain:WA(i,c,l)}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(i=>({value:re(i,t.dataKey),errorDomain:[]})):e.map(i=>({value:i,errorDomain:[]})),HA=S(Zi,se,FA,ue,Sm);function YA(e){var{value:t}=e;if(dt(t)||t instanceof Date)return t}var GA=e=>{var t=e.flatMap(n=>[n.value,n.errorDomain]).flat(1),r=yr(t);if(r.length!==0)return[Math.min(...r),Math.max(...r)]},VA=(e,t,r)=>{var n=e.map(YA).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&Yh(n))?yp(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},Zs=e=>{var t;if(e==null||!("domain"in e))return Ou;if(e.domain!=null)return e.domain;if(e.ticks!=null){if(e.type==="number"){var r=yr(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:Ou},Js=function(){for(var t=arguments.length,r=new Array(t),n=0;ne.referenceElements.dots,Lr=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),XA=S([Em,ue,Pn],Lr),jm=e=>e.referenceElements.areas,ZA=S([jm,ue,Pn],Lr),Tm=e=>e.referenceElements.lines,JA=S([Tm,ue,Pn],Lr),Cm=(e,t)=>{var r=yr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},QA=S(XA,ue,Cm),_m=(e,t)=>{var r=yr(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},eS=S([ZA,ue],_m),km=(e,t)=>{var r=yr(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]},tS=S(JA,ue,km),rS=S(QA,tS,eS,(e,t,r)=>Js(e,r,t)),Mm=S([se],Zs),Qs=(e,t,r,n,i)=>{var a=pA(t,e.allowDataOverflow);return a??mA(t,Js(r,i,GA(n)),e.allowDataOverflow)},nS=S([se,Mm,UA,HA,rS],Qs),iS=[0,1],el=(e,t,r,n,i,a,o)=>{if(!(e==null||r==null||r.length===0)){var{dataKey:u,type:l}=e,c=Wt(t,a);return c&&u==null?yp(0,r.length):l==="category"?VA(n,e,c):i==="expand"?iS:o}},tl=S([se,Y,Zi,Ji,wn,ue,nS],el),Dm=(e,t,r,n,i)=>{if(e!=null){var{scale:a,type:o}=e;if(a==="auto")return t==="radial"&&i==="radiusAxis"?"band":t==="radial"&&i==="angleAxis"?"linear":o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?"point":o==="category"?"band":"linear";if(typeof a=="string"){var u="scale".concat(vn(a));return u in Jr?u:"point"}}},Br=S([se,Y,xm,Bs,ue],Dm);function aS(e){if(e!=null){if(e in Jr)return Jr[e]();var t="scale".concat(vn(e));if(t in Jr)return Jr[t]()}}function rl(e,t,r,n){if(!(r==null||n==null)){if(typeof e.scale=="function")return e.scale.copy().domain(r).range(n);var i=aS(t);if(i!=null){var a=i.domain(r).range(n);return Qx(a),a}}}var nl=(e,t,r)=>{var n=Zs(t);if(!(r!=="auto"&&r!=="linear")){if(t!=null&&t.tickCount&&Array.isArray(n)&&(n[0]==="auto"||n[1]==="auto")&&Mr(e))return EA(e,t.tickCount,t.allowDecimals);if(t!=null&&t.tickCount&&t.type==="number"&&Mr(e))return jA(e,t.tickCount,t.allowDecimals)}},il=S([tl,On,Br],nl),al=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&Mr(t)&&Array.isArray(r)&&r.length>0){var i=t[0],a=r[0],o=t[1],u=r[r.length-1];return[Math.min(i,a),Math.max(o,u)]}return t},oS=S([se,tl,il,ue],al),uS=S(Ji,se,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(yr(e.map(u=>u.value))).sort((u,l)=>u-l);if(n.length<2)return 1/0;var i=n[n.length-1]-n[0];if(i===0)return 1/0;for(var a=0;an,(e,t,r,n,i)=>{if(!Ye(e))return 0;var a=t==="vertical"?n.height:n.width;if(i==="gap")return e*a/2;if(i==="no-gap"){var o=Ce(r,e*a),u=e*a/2;return u-o-(u-o)/a*o}return 0}),sS=(e,t)=>{var r=Mt(e,t);return r==null||typeof r.padding!="string"?0:Im(e,"xAxis",t,r.padding)},lS=(e,t)=>{var r=Yt(e,t);return r==null||typeof r.padding!="string"?0:Im(e,"yAxis",t,r.padding)},cS=S(Mt,sS,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var{padding:i}=e;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),fS=S(Yt,lS,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var{padding:i}=e;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),dS=S([ve,cS,Bi,Li,(e,t,r)=>r],(e,t,r,n,i)=>{var{padding:a}=n;return i?[a.left,r.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),hS=S([ve,Y,fS,Bi,Li,(e,t,r)=>r],(e,t,r,n,i,a)=>{var{padding:o}=i;return a?[n.height-o.bottom,o.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),Sn=(e,t,r,n)=>{var i;switch(t){case"xAxis":return dS(e,r,n);case"yAxis":return hS(e,r,n);case"zAxis":return(i=Us(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return ym(e);case"radiusAxis":return bm(e,r);default:return}},Nm=S([se,Sn],Gi),Kr=S([se,Br,oS,Nm],rl);S(An,ue,(e,t)=>e.flatMap(r=>{var n;return(n=r.errorBars)!==null&&n!==void 0?n:[]}).filter(r=>Pm(t,r)));function $m(e,t){return e.idt.id?1:0}var Qi=(e,t)=>t,ea=(e,t,r)=>r,vS=S(us,Qi,ea,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort($m)),pS=S(ss,Qi,ea,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort($m)),Rm=(e,t)=>({width:e.width,height:t.height}),mS=(e,t)=>{var r=typeof t.width=="number"?t.width:Ri;return{width:r,height:e.height}},Lm=S(ve,Mt,Rm),gS=(e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}},yS=(e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}},bS=S(_t,ve,vS,Qi,ea,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=Rm(t,u);o==null&&(o=gS(t,n,e));var c=n==="top"&&!i||n==="bottom"&&i;a[u.id]=o-Number(c)*l.height,o+=(c?-1:1)*l.height}),a}),xS=S(Ct,ve,pS,Qi,ea,(e,t,r,n,i)=>{var a={},o;return r.forEach(u=>{var l=mS(t,u);o==null&&(o=yS(t,n,e));var c=n==="left"&&!i||n==="right"&&i;a[u.id]=o-Number(c)*l.width,o+=(c?-1:1)*l.width}),a}),wS=(e,t)=>{var r=ve(e),n=Mt(e,t);if(n!=null){var i=bS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:r.left,y:0}:{x:r.left,y:a}}},PS=(e,t)=>{var r=ve(e),n=Yt(e,t);if(n!=null){var i=xS(e,n.orientation,n.mirror),a=i[t];return a==null?{x:0,y:r.top}:{x:a,y:r.top}}},Bm=S(ve,Yt,(e,t)=>{var r=typeof t.width=="number"?t.width:Ri;return{width:r,height:e.height}}),Md=(e,t,r)=>{switch(t){case"xAxis":return Lm(e,r).width;case"yAxis":return Bm(e,r).height;default:return}},Km=(e,t,r,n)=>{if(r!=null){var{allowDuplicatedCategory:i,type:a,dataKey:o}=r,u=Wt(e,n),l=t.map(c=>c.value);if(o&&u&&a==="category"&&i&&Yh(l))return l}},ol=S([Y,Ji,se,ue],Km),qm=(e,t,r,n)=>{if(!(r==null||r.dataKey==null)){var{type:i,scale:a}=r,o=Wt(e,n);if(o&&(i==="number"||a!=="auto"))return t.map(u=>u.value)}},ul=S([Y,Ji,On,ue],qm),Dd=S([Y,KA,Br,Kr,ol,ul,Sn,il,ue],(e,t,r,n,i,a,o,u,l)=>{if(t==null)return null;var c=Wt(e,l);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:l,categoricalDomain:a,duplicateDomain:i,isCategorical:c,niceTicks:u,range:o,realScaleType:r,scale:n}}),OS=(e,t,r,n,i,a,o,u,l)=>{if(!(t==null||n==null)){var c=Wt(e,l),{type:s,ticks:f,tickCount:d}=t,h=r==="scaleBand"&&typeof n.bandwidth=="function"?n.bandwidth()/2:2,v=s==="category"&&n.bandwidth?n.bandwidth()/h:0;v=l==="angleAxis"&&a!=null&&a.length>=2?ge(a[0]-a[1])*2*v:v;var p=f||i;if(p){var g=p.map((y,b)=>{var x=o?o.indexOf(y):y;return{index:b,coordinate:n(x)+v,value:y,offset:v}});return g.filter(y=>!We(y.coordinate))}return c&&u?u.map((y,b)=>({coordinate:n(y)+v,value:y,index:b,offset:v})):n.ticks?n.ticks(d).map(y=>({coordinate:n(y)+v,value:y,offset:v})):n.domain().map((y,b)=>({coordinate:n(y)+v,value:o?o[y]:y,index:b,offset:v}))}},Fm=S([Y,On,Br,Kr,il,Sn,ol,ul,ue],OS),AS=(e,t,r,n,i,a,o)=>{if(!(t==null||r==null||n==null||n[0]===n[1])){var u=Wt(e,o),{tickCount:l}=t,c=0;return c=o==="angleAxis"&&(n==null?void 0:n.length)>=2?ge(n[0]-n[1])*2*c:c,u&&a?a.map((s,f)=>({coordinate:r(s)+c,value:s,index:f,offset:c})):r.ticks?r.ticks(l).map(s=>({coordinate:r(s)+c,value:s,offset:c})):r.domain().map((s,f)=>({coordinate:r(s)+c,value:i?i[s]:s,index:f,offset:c}))}},Ft=S([Y,On,Kr,Sn,ol,ul,ue],AS),vt=S(se,Kr,(e,t)=>{if(!(e==null||t==null))return gi(gi({},e),{},{scale:t})}),SS=S([se,Br,tl,Nm],rl);S((e,t,r)=>Us(e,r),SS,(e,t)=>{if(!(e==null||t==null))return gi(gi({},e),{},{scale:t})});var ES=S([Y,us,ss],(e,t,r)=>{switch(e){case"horizontal":return t.some(n=>n.reversed)?"right-to-left":"left-to-right";case"vertical":return r.some(n=>n.reversed)?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}}),zm=e=>e.options.defaultTooltipEventType,Wm=e=>e.options.validateTooltipEventTypes;function Um(e,t,r){if(e==null)return t;var n=e?"axis":"item";return r==null?t:r.includes(n)?n:t}function sl(e,t){var r=zm(e),n=Wm(e);return Um(t,r,n)}function jS(e){return $(t=>sl(t,e))}var Hm=(e,t)=>{var r,n=Number(t);if(!(We(n)||t==null))return n>=0?e==null||(r=e[n])===null||r===void 0?void 0:r.value:void 0},TS=e=>e.tooltip.settings,Rt={active:!1,index:null,dataKey:void 0,coordinate:void 0},CS={itemInteraction:{click:Rt,hover:Rt},axisInteraction:{click:Rt,hover:Rt},keyboardInteraction:Rt,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},Ym=nt({name:"tooltip",initialState:CS,reducers:{addTooltipEntrySettings(e,t){e.tooltipItemPayloads.push(t.payload)},removeTooltipEntrySettings(e,t){var r=Pt(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate,e.keyboardInteraction.dataKey=t.payload.activeDataKey}}}),{addTooltipEntrySettings:_S,removeTooltipEntrySettings:kS,setTooltipSettingsState:MS,setActiveMouseOverItemIndex:Gm,mouseLeaveItem:DS,mouseLeaveChart:Vm,setActiveClickItemIndex:IS,setMouseOverAxisIndex:Xm,setMouseClickAxisIndex:NS,setSyncInteraction:Su,setKeyboardInteraction:Eu}=Ym.actions,$S=Ym.reducer;function Id(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Kn(e){for(var t=1;t{if(t==null)return Rt;var i=KS(e,t,r);if(i==null)return Rt;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var a=e.settings.active===!0;if(qS(i)){if(a)return Kn(Kn({},i),{},{active:!0})}else if(n!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:n};return Kn(Kn({},Rt),{},{coordinate:i.coordinate})},ll=(e,t)=>{var r=e==null?void 0:e.index;if(r==null)return null;var n=Number(r);if(!Ye(n))return r;var i=0,a=1/0;return t.length>0&&(a=t.length-1),String(Math.max(i,Math.min(n,a)))},Jm=(e,t,r,n,i,a,o,u)=>{if(!(a==null||u==null)){var l=o[0],c=l==null?void 0:u(l.positions,a);if(c!=null)return c;var s=i==null?void 0:i[Number(a)];if(s)switch(r){case"horizontal":return{x:s.coordinate,y:(n.top+t)/2};default:return{x:(n.left+e)/2,y:s.coordinate}}}},Qm=(e,t,r,n)=>{if(t==="axis")return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i;return r==="hover"?i=e.itemInteraction.hover.dataKey:i=e.itemInteraction.click.dataKey,i==null&&n!=null?[e.tooltipItemPayloads[0]]:e.tooltipItemPayloads.filter(a=>{var o;return((o=a.settings)===null||o===void 0?void 0:o.dataKey)===i})},En=e=>e.options.tooltipPayloadSearcher,qr=e=>e.tooltip;function Nd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $d(e){for(var t=1;t{if(!(t==null||a==null)){var{chartData:u,computedData:l,dataStartIndex:c,dataEndIndex:s}=r,f=[];return e.reduce((d,h)=>{var v,{dataDefinedOnItem:p,settings:g}=h,y=HS(p,u),b=US(y,c,s),x=(v=g==null?void 0:g.dataKey)!==null&&v!==void 0?v:n==null?void 0:n.dataKey,P=g==null?void 0:g.nameKey,w;if(n!=null&&n.dataKey&&Array.isArray(b)&&!Array.isArray(b[0])&&o==="axis"?w=Gh(b,n.dataKey,i):w=a(b,t,l,P),Array.isArray(w))w.forEach(A=>{var j=$d($d({},g),{},{name:A.name,unit:A.unit,color:void 0,fill:void 0});d.push(yf({tooltipEntrySettings:j,dataKey:A.dataKey,payload:A.payload,value:re(A.payload,A.dataKey),name:A.name}))});else{var O;d.push(yf({tooltipEntrySettings:g,dataKey:x,payload:w,value:re(w,x),name:(O=re(w,P))!==null&&O!==void 0?O:g==null?void 0:g.name}))}return d},f)}},xe=e=>{var t=Y(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},Fr=e=>e.tooltip.settings.axisId,Ae=e=>{var t=xe(e),r=Fr(e);return On(e,t,r)},cl=S([Ae,Y,xm,Bs,xe],Dm),YS=S([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),GS=S([xe,Fr],Hs),ta=S([YS,Ae,GS],Ys),VS=S([ta],Gs),br=S([VS,gr],Vs),fl=S([br,Ae,ta],Xs),XS=S([Ae],Zs),ZS=S([br,ta,wn],Om),JS=S([ZS,gr,xe],Am),QS=S([ta],wm),eE=S([br,Ae,QS,xe],Sm),tE=S([Em,xe,Fr],Lr),rE=S([tE,xe],Cm),nE=S([jm,xe,Fr],Lr),iE=S([nE,xe],_m),aE=S([Tm,xe,Fr],Lr),oE=S([aE,xe],km),uE=S([rE,oE,iE],Js),sE=S([Ae,XS,JS,eE,uE],Qs),tg=S([Ae,Y,br,fl,wn,xe,sE],el),lE=S([tg,Ae,cl],nl),cE=S([Ae,tg,lE,xe],al),rg=e=>{var t=xe(e),r=Fr(e),n=!1;return Sn(e,t,r,n)},ng=S([Ae,rg],Gi),ig=S([Ae,cl,cE,ng],rl),fE=S([Y,fl,Ae,xe],Km),dE=S([Y,fl,Ae,xe],qm),hE=(e,t,r,n,i,a,o,u)=>{if(t){var{type:l}=t,c=Wt(e,u);if(n){var s=r==="scaleBand"&&n.bandwidth?n.bandwidth()/2:2,f=l==="category"&&n.bandwidth?n.bandwidth()/s:0;return f=u==="angleAxis"&&i!=null&&(i==null?void 0:i.length)>=2?ge(i[0]-i[1])*2*f:f,c&&o?o.map((d,h)=>({coordinate:n(d)+f,value:d,index:h,offset:f})):n.domain().map((d,h)=>({coordinate:n(d)+f,value:a?a[d]:d,index:h,offset:f}))}}},Dt=S([Y,Ae,cl,ig,rg,fE,dE,xe],hE),dl=S([zm,Wm,TS],(e,t,r)=>Um(r.shared,e,t)),ag=e=>e.tooltip.settings.trigger,hl=e=>e.tooltip.settings.defaultIndex,ra=S([qr,dl,ag,hl],Zm),zt=S([ra,br],ll),og=S([Dt,zt],Hm),ug=S([ra],e=>{if(e)return e.dataKey}),sg=S([qr,dl,ag,hl],Qm),vE=S([Ct,_t,Y,ve,Dt,hl,sg,En],Jm),pE=S([ra,vE],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),mE=S([ra],e=>e.active),gE=S([sg,zt,gr,Ae,og,En,dl],eg),yE=S([gE],e=>{if(e!=null){var t=e.map(r=>r.payload).filter(r=>r!=null);return Array.from(new Set(t))}});function Rd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ld(e){for(var t=1;t$(Ae),OE=()=>{var e=PE(),t=$(Dt),r=$(ig);return nn(Ld(Ld({},e),{},{scale:r}),t)},AE=()=>$(Bs),vl=(e,t)=>t,lg=(e,t,r)=>r,pl=(e,t,r,n)=>n,SE=S(Dt,e=>_i(e,t=>t.coordinate)),ml=S([qr,vl,lg,pl],Zm),cg=S([ml,br],ll),EE=(e,t,r)=>{if(t!=null){var n=qr(e);return t==="axis"?r==="hover"?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:r==="hover"?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},fg=S([qr,vl,lg,pl],Qm),yi=S([Ct,_t,Y,ve,Dt,pl,fg,En],Jm),jE=S([ml,yi],(e,t)=>{var r;return(r=e.coordinate)!==null&&r!==void 0?r:t}),dg=S(Dt,cg,Hm),TE=S([fg,cg,gr,Ae,dg,En,vl],eg),CE=S([ml],e=>({isActive:e.active,activeIndex:e.index})),_E=(e,t,r,n,i,a,o,u)=>{if(!(!e||!t||!n||!i||!a)){var l=lw(e.chartX,e.chartY,t,r,u);if(l){var c=fw(l,t),s=Zx(c,o,a,n,i),f=cw(t,a,s,l);return{activeIndex:String(s),activeCoordinate:f}}}};function ju(){return ju=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.useContext(hg),Co={exports:{}},Kd;function RE(){return Kd||(Kd=1,function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(r=!1));function i(l,c,s){this.fn=l,this.context=c,this.once=s||!1}function a(l,c,s,f,d){if(typeof s!="function")throw new TypeError("The listener must be a function");var h=new i(s,f||l,d),v=r?r+c:c;return l._events[v]?l._events[v].fn?l._events[v]=[l._events[v],h]:l._events[v].push(h):(l._events[v]=h,l._eventsCount++),l}function o(l,c){--l._eventsCount===0?l._events=new n:delete l._events[c]}function u(){this._events=new n,this._eventsCount=0}u.prototype.eventNames=function(){var c=[],s,f;if(this._eventsCount===0)return c;for(f in s=this._events)t.call(s,f)&&c.push(r?f.slice(1):f);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(s)):c},u.prototype.listeners=function(c){var s=r?r+c:c,f=this._events[s];if(!f)return[];if(f.fn)return[f.fn];for(var d=0,h=f.length,v=new Array(h);d{e.eventEmitter==null&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),qE=vg.reducer,{createEventEmitter:FE}=vg.actions;function zE(e){return e.tooltip.syncInteraction}var WE={chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},pg=nt({name:"chartData",initialState:WE,reducers:{setChartData(e,t){if(e.chartData=t.payload,t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var{startIndex:r,endIndex:n}=t.payload;r!=null&&(e.dataStartIndex=r),n!=null&&(e.dataEndIndex=n)}}}),{setChartData:Fd,setDataStartEndIndexes:UE,setComputedData:WD}=pg.actions,HE=pg.reducer,mg=()=>{};function YE(){var e=$(Ks),t=$(qs),r=ae(),n=$(pm),i=$(Dt),a=Ki(),o=ls(),u=$(l=>l.rootProps.className);m.useEffect(()=>{if(e==null)return mg;var l=(c,s,f)=>{if(t!==f&&e===c){if(n==="index"){r(s);return}if(i!=null){var d;if(typeof n=="function"){var h={activeTooltipIndex:s.payload.index==null?void 0:Number(s.payload.index),isTooltipActive:s.payload.active,activeIndex:s.payload.index==null?void 0:Number(s.payload.index),activeLabel:s.payload.label,activeDataKey:s.payload.dataKey,activeCoordinate:s.payload.coordinate},v=n(i,h);d=i[v]}else n==="value"&&(d=i.find(O=>String(O.value)===s.payload.label));var{coordinate:p}=s.payload;if(d==null||s.payload.active===!1||p==null||o==null){r(Su({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0}));return}var{x:g,y}=p,b=Math.min(g,o.x+o.width),x=Math.min(y,o.y+o.height),P={x:a==="horizontal"?d.coordinate:b,y:a==="horizontal"?x:d.coordinate},w=Su({active:s.payload.active,coordinate:P,dataKey:s.payload.dataKey,index:String(d.index),label:s.payload.label});r(w)}}};return fn.on(Tu,l),()=>{fn.off(Tu,l)}},[u,r,t,e,n,i,a,o])}function GE(){var e=$(Ks),t=$(qs),r=ae();m.useEffect(()=>{if(e==null)return mg;var n=(i,a,o)=>{t!==o&&e===i&&r(UE(a))};return fn.on(qd,n),()=>{fn.off(qd,n)}},[r,t,e])}function VE(){var e=ae();m.useEffect(()=>{e(FE())},[e]),YE(),GE()}function XE(e,t,r,n,i,a){var o=$(d=>EE(d,e,t)),u=$(qs),l=$(Ks),c=$(pm),s=$(zE),f=s==null?void 0:s.active;m.useEffect(()=>{if(!f&&l!=null&&u!=null){var d=Su({active:a,coordinate:r,dataKey:o,index:i,label:typeof n=="number"?String(n):n});fn.emit(Tu,l,d,u)}},[f,r,o,i,n,u,l,c,a])}function zd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Wd(e){for(var t=1;t{w(MS({shared:g,trigger:y,axisId:P,active:r,defaultIndex:O}))},[w,g,y,P,r,O]);var A=ls(),j=cp(),T=jS(g),{activeIndex:I,isActive:_}=$(Ve=>CE(Ve,T,y,O)),k=$(Ve=>TE(Ve,T,y,O)),R=$(Ve=>dg(Ve,T,y,O)),B=$(Ve=>jE(Ve,T,y,O)),z=k,V=$E(),K=r??_,[de,oe]=qb([z,K]),Ie=T==="axis"?R:void 0;XE(T,y,B,Ie,I,K);var Ge=x??V;if(Ge==null)return null;var L=z??Ud;K||(L=Ud),u&&L.length&&(L=hb(z.filter(Ve=>Ve.value!=null&&(Ve.hide!==!0||t.includeHidden)),s,ej));var we=L.length>0,Vt=m.createElement(Dw,{allowEscapeViewBox:n,animationDuration:i,animationEasing:a,isAnimationActive:l,active:K,coordinate:B,hasPayload:we,offset:c,position:f,reverseDirection:d,useTranslate3d:h,viewBox:A,wrapperStyle:v,lastBoundingBox:de,innerRef:oe,hasPortalFromProps:!!x},tj(o,Wd(Wd({},t),{},{payload:L,label:Ie,active:K,coordinate:B,accessibilityLayer:j})));return m.createElement(m.Fragment,null,ky.createPortal(Vt,Ge),K&&m.createElement(NE,{cursor:p,tooltipEventType:T,coordinate:B,payload:z,index:I}))}var _o={},ko={},Hd;function nj(){return Hd||(Hd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r,n=0,i={}){typeof i!="object"&&(i={});let a=null,o=null,u=null,l=0,c=null,s;const{leading:f=!1,trailing:d=!0,maxWait:h}=i,v="maxWait"in i,p=v?Math.max(Number(h)||0,n):0,g=A=>(a!==null&&(s=r.apply(o,a)),a=o=null,l=A,s),y=A=>(l=A,c=setTimeout(w,n),f&&a!==null?g(A):s),b=A=>(c=null,d&&a!==null?g(A):s),x=A=>{if(u===null)return!0;const j=A-u,T=j>=n||j<0,I=v&&A-l>=p;return T||I},P=A=>{const j=u===null?0:A-u,T=n-j,I=p-(A-l);return v?Math.min(T,I):T},w=()=>{const A=Date.now();if(x(A))return b(A);c=setTimeout(w,P(A))},O=function(...A){const j=Date.now(),T=x(j);if(a=A,o=this,u=j,T){if(c===null)return y(j);if(v)return clearTimeout(c),c=setTimeout(w,n),g(j)}return c===null&&(c=setTimeout(w,n)),s};return O.cancel=()=>{c!==null&&clearTimeout(c),l=0,u=a=o=c=null},O.flush=()=>c===null?s:b(Date.now()),O}e.debounce=t}(ko)),ko}var Yd;function ij(){return Yd||(Yd=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=nj();function r(n,i=0,a={}){const{leading:o=!0,trailing:u=!0}=a;return t.debounce(n,i,{leading:o,maxWait:i,trailing:u})}e.throttle=r}(_o)),_o}var Mo,Gd;function aj(){return Gd||(Gd=1,Mo=ij().throttle),Mo}var oj=aj();const uj=Tt(oj);var Qr=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;a{var{aspect:r,initialDimension:n={width:-1,height:-1},width:i="100%",height:a="100%",minWidth:o=0,minHeight:u,maxHeight:l,children:c,debounce:s=0,id:f,className:d,onResize:h,style:v={}}=e,p=m.useRef(null),g=m.useRef();g.current=h,m.useImperativeHandle(t,()=>p.current);var[y,b]=m.useState({containerWidth:n.width,containerHeight:n.height}),x=m.useCallback((w,O)=>{b(A=>{var j=Math.round(w),T=Math.round(O);return A.containerWidth===j&&A.containerHeight===T?A:{containerWidth:j,containerHeight:T}})},[]);m.useEffect(()=>{var w=T=>{var I,{width:_,height:k}=T[0].contentRect;x(_,k),(I=g.current)===null||I===void 0||I.call(g,_,k)};s>0&&(w=uj(w,s,{trailing:!0,leading:!1}));var O=new ResizeObserver(w),{width:A,height:j}=p.current.getBoundingClientRect();return x(A,j),O.observe(p.current),()=>{O.disconnect()}},[x,s]);var P=m.useMemo(()=>{var{containerWidth:w,containerHeight:O}=y;if(w<0||O<0)return null;Qr(er(i)||er(a),`The width(%s) and height(%s) are both fixed numbers, maybe you don't need to use a ResponsiveContainer.`,i,a),Qr(!r||r>0,"The aspect(%s) must be greater than zero.",r);var A=er(i)?w:i,j=er(a)?O:a;return r&&r>0&&(A?j=A/r:j&&(A=j*r),l&&j>l&&(j=l)),Qr(A>0||j>0,`The width(%s) and height(%s) of chart should be greater than 0, please check the style of container, or the props width(%s) and height(%s), or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the height and width.`,A,j,i,a,o,u,r),m.Children.map(c,T=>m.cloneElement(T,{width:A,height:j,style:Do({width:A,height:j},T.props.style)}))},[r,c,a,l,u,o,y,i]);return m.createElement("div",{id:f?"".concat(f):void 0,className:H("recharts-responsive-container",d),style:Do(Do({},v),{},{width:i,height:a,minWidth:o,minHeight:u,maxHeight:l}),ref:p},m.createElement("div",{style:{width:0,height:0,overflow:"visible"}},P))}),jn=e=>null;jn.displayName="Cell";function Xd(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Cu(e){for(var t=1;t{t[r]||delete t[r]}),t}var en=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||vr.isSsr)return{width:0,height:0};var n=mj(r),i=JSON.stringify({text:t,copyStyle:n});if(wr.widthCache[i])return wr.widthCache[i];try{var a=document.getElementById(Zd);a||(a=document.createElement("span"),a.setAttribute("id",Zd),a.setAttribute("aria-hidden","true"),document.body.appendChild(a));var o=Cu(Cu({},pj),n);Object.assign(a.style,o),a.textContent="".concat(t);var u=a.getBoundingClientRect(),l={width:u.width,height:u.height};return wr.widthCache[i]=l,++wr.cacheCount>vj&&(wr.cacheCount=0,wr.widthCache={}),l}catch{return{width:0,height:0}}},Jd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,Qd=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,gj=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,yj=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,gg={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},bj=Object.keys(gg),Pr="NaN";function xj(e,t){return e*gg[t]}class Me{static parse(t){var r,[,n,i]=(r=yj.exec(t))!==null&&r!==void 0?r:[];return new Me(parseFloat(n),i??"")}constructor(t,r){this.num=t,this.unit=r,this.num=t,this.unit=r,We(t)&&(this.unit=""),r!==""&&!gj.test(r)&&(this.num=NaN,this.unit=""),bj.includes(r)&&(this.num=xj(t,r),this.unit="px")}add(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num+t.num,this.unit)}subtract(t){return this.unit!==t.unit?new Me(NaN,""):new Me(this.num-t.num,this.unit)}multiply(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num*t.num,this.unit||t.unit)}divide(t){return this.unit!==""&&t.unit!==""&&this.unit!==t.unit?new Me(NaN,""):new Me(this.num/t.num,this.unit||t.unit)}toString(){return"".concat(this.num).concat(this.unit)}isNaN(){return We(this.num)}}function yg(e){if(e.includes(Pr))return Pr;for(var t=e;t.includes("*")||t.includes("/");){var r,[,n,i,a]=(r=Jd.exec(t))!==null&&r!==void 0?r:[],o=Me.parse(n??""),u=Me.parse(a??""),l=i==="*"?o.multiply(u):o.divide(u);if(l.isNaN())return Pr;t=t.replace(Jd,l.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,[,s,f,d]=(c=Qd.exec(t))!==null&&c!==void 0?c:[],h=Me.parse(s??""),v=Me.parse(d??""),p=f==="+"?h.add(v):h.subtract(v);if(p.isNaN())return Pr;t=t.replace(Qd,p.toString())}return t}var eh=/\(([^()]*)\)/;function wj(e){for(var t=e,r;(r=eh.exec(t))!=null;){var[,n]=r;t=t.replace(eh,yg(n))}return t}function Pj(e){var t=e.replace(/\s+/g,"");return t=wj(t),t=yg(t),t}function Oj(e){try{return Pj(e)}catch{return Pr}}function Io(e){var t=Oj(e.slice(5,-1));return t===Pr?"":t}var Aj=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],Sj=["dx","dy","angle","className","breakAll"];function _u(){return _u=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{children:t,breakAll:r,style:n}=e;try{var i=[];J(t)||(r?i=t.toString().split(""):i=t.toString().split(bg));var a=i.map(u=>({word:u,width:en(u,n).width})),o=r?0:en(" ",n).width;return{wordsWithComputedWidth:a,spaceWidth:o}}catch{return null}},jj=(e,t,r,n,i)=>{var{maxLines:a,children:o,style:u,breakAll:l}=e,c=D(a),s=o,f=function(){var _=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return _.reduce((k,R)=>{var{word:B,width:z}=R,V=k[k.length-1];if(V&&(n==null||i||V.width+z+rI.reduce((_,k)=>_.width>k.width?_:k);if(!c||i)return d;var v=d.length>a||h(d).width>Number(n);if(!v)return d;for(var p="…",g=I=>{var _=s.slice(0,I),k=xg({breakAll:l,style:u,children:_+p}).wordsWithComputedWidth,R=f(k),B=R.length>a||h(R).width>Number(n);return[B,R]},y=0,b=s.length-1,x=0,P;y<=b&&x<=s.length-1;){var w=Math.floor((y+b)/2),O=w-1,[A,j]=g(O),[T]=g(w);if(!A&&!T&&(y=w+1),A&&T&&(b=w-1),!A&&T){P=j;break}x++}return P||d},rh=e=>{var t=J(e)?[]:e.toString().split(bg);return[{words:t}]},Tj=e=>{var{width:t,scaleToFit:r,children:n,style:i,breakAll:a,maxLines:o}=e;if((t||r)&&!vr.isSsr){var u,l,c=xg({breakAll:a,children:n,style:i});if(c){var{wordsWithComputedWidth:s,spaceWidth:f}=c;u=s,l=f}else return rh(n);return jj({breakAll:a,children:n,maxLines:o,style:i},u,l,t,r)}return rh(n)},nh="#808080",na=m.forwardRef((e,t)=>{var{x:r=0,y:n=0,lineHeight:i="1em",capHeight:a="0.71em",scaleToFit:o=!1,textAnchor:u="start",verticalAnchor:l="end",fill:c=nh}=e,s=th(e,Aj),f=m.useMemo(()=>Tj({breakAll:s.breakAll,children:s.children,maxLines:s.maxLines,scaleToFit:o,style:s.style,width:s.width}),[s.breakAll,s.children,s.maxLines,o,s.style,s.width]),{dx:d,dy:h,angle:v,className:p,breakAll:g}=s,y=th(s,Sj);if(!dt(r)||!dt(n))return null;var b=r+(D(d)?d:0),x=n+(D(h)?h:0),P;switch(l){case"start":P=Io("calc(".concat(a,")"));break;case"middle":P=Io("calc(".concat((f.length-1)/2," * -").concat(i," + (").concat(a," / 2))"));break;default:P=Io("calc(".concat(f.length-1," * -").concat(i,")"));break}var w=[];if(o){var O=f[0].width,{width:A}=s;w.push("scale(".concat(D(A)?A/O:1,")"))}return v&&w.push("rotate(".concat(v,", ").concat(b,", ").concat(x,")")),w.length&&(y.transform=w.join(" ")),m.createElement("text",_u({},F(y,!0),{ref:t,x:b,y:x,className:H("recharts-text",p),textAnchor:u,fill:c.includes("url")?nh:c}),f.map((j,T)=>{var I=j.words.join(g?"":" ");return m.createElement("tspan",{x:b,dy:T===0?P:i,key:"".concat(I,"-").concat(T)},I)}))});na.displayName="Text";var Cj=["offset"],_j=["labelRef"];function ih(e,t){if(e==null)return{};var r,n,i=kj(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{value:t,formatter:r}=e,n=J(e.children)?t:e.children;return typeof r=="function"?r(n):n},xl=e=>e!=null&&typeof e=="function",$j=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},Rj=(e,t,r)=>{var{position:n,viewBox:i,offset:a,className:o}=e,{cx:u,cy:l,innerRadius:c,outerRadius:s,startAngle:f,endAngle:d,clockWise:h}=i,v=(c+s)/2,p=$j(f,d),g=p>=0?1:-1,y,b;n==="insideStart"?(y=f+g*a,b=h):n==="insideEnd"?(y=d-g*a,b=!h):n==="end"&&(y=d+g*a,b=h),b=p<=0?b:!b;var x=ce(u,l,v,y),P=ce(u,l,v,y+(b?1:-1)*359),w="M".concat(x.x,",").concat(x.y,` A`).concat(v,",").concat(v,",0,1,").concat(b?0:1,`, - `).concat(P.x,",").concat(P.y),O=J(e.id)?lr("recharts-radial-line-"):e.id;return m.createElement("text",mt({},r,{dominantBaseline:"central",className:H("recharts-radial-bar-label",o)}),m.createElement("defs",null,m.createElement("path",{id:O,d:w})),m.createElement("textPath",{xlinkHref:"#".concat(O)},t))},Lj=e=>{var{viewBox:t,offset:r,position:n}=e,{cx:i,cy:a,innerRadius:o,outerRadius:u,startAngle:l,endAngle:c}=t,s=(l+c)/2;if(n==="outside"){var{x:f,y:d}=ce(i,a,u+r,s);return{x:f,y:d,textAnchor:f>=i?"start":"end",verticalAnchor:"middle"}}if(n==="center")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"middle"};if(n==="centerTop")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"start"};if(n==="centerBottom")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"end"};var h=(o+u)/2,{x:v,y:p}=ce(i,a,h,s);return{x:v,y:p,textAnchor:"middle",verticalAnchor:"middle"}},Bj=(e,t)=>{var{parentViewBox:r,offset:n,position:i}=e,{x:a,y:o,width:u,height:l}=t,c=l>=0?1:-1,s=c*n,f=c>0?"end":"start",d=c>0?"start":"end",h=u>=0?1:-1,v=h*n,p=h>0?"end":"start",g=h>0?"start":"end";if(i==="top"){var y={x:a+u/2,y:o-c*n,textAnchor:"middle",verticalAnchor:f};return le(le({},y),r?{height:Math.max(o-r.y,0),width:u}:{})}if(i==="bottom"){var b={x:a+u/2,y:o+l+s,textAnchor:"middle",verticalAnchor:d};return le(le({},b),r?{height:Math.max(r.y+r.height-(o+l),0),width:u}:{})}if(i==="left"){var x={x:a-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"};return le(le({},x),r?{width:Math.max(x.x-r.x,0),height:l}:{})}if(i==="right"){var P={x:a+u+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"};return le(le({},P),r?{width:Math.max(r.x+r.width-P.x,0),height:l}:{})}var w=r?{width:u,height:l}:{};return i==="insideLeft"?le({x:a+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"},w):i==="insideRight"?le({x:a+u-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"},w):i==="insideTop"?le({x:a+u/2,y:o+s,textAnchor:"middle",verticalAnchor:d},w):i==="insideBottom"?le({x:a+u/2,y:o+l-s,textAnchor:"middle",verticalAnchor:f},w):i==="insideTopLeft"?le({x:a+v,y:o+s,textAnchor:g,verticalAnchor:d},w):i==="insideTopRight"?le({x:a+u-v,y:o+s,textAnchor:p,verticalAnchor:d},w):i==="insideBottomLeft"?le({x:a+v,y:o+l-s,textAnchor:g,verticalAnchor:f},w):i==="insideBottomRight"?le({x:a+u-v,y:o+l-s,textAnchor:p,verticalAnchor:f},w):i&&typeof i=="object"&&(D(i.x)||er(i.x))&&(D(i.y)||er(i.y))?le({x:a+Ce(i.x,u),y:o+Ce(i.y,l),textAnchor:"end",verticalAnchor:"end"},w):le({x:a+u/2,y:o+l/2,textAnchor:"middle",verticalAnchor:"middle"},w)},Kj=e=>"cx"in e&&D(e.cx);function qe(e){var{offset:t=5}=e,r=ih(e,Cj),n=le({offset:t},r),{viewBox:i,position:a,value:o,children:u,content:l,className:c="",textBreakAll:s,labelRef:f}=n,d=ls(),h=i||d;if(!h||J(o)&&J(u)&&!m.isValidElement(l)&&typeof l!="function")return null;if(m.isValidElement(l)){var{labelRef:v}=n,p=ih(n,_j);return m.cloneElement(l,p)}var g;if(typeof l=="function"){if(g=m.createElement(l,n),m.isValidElement(g))return g}else g=Nj(n);var y=Kj(h),b=F(n,!0);if(y&&(a==="insideStart"||a==="insideEnd"||a==="end"))return Rj(n,g,b);var x=y?Lj(n):Bj(n,h);return m.createElement(na,mt({ref:f,className:H("recharts-label",c)},b,x,{breakAll:s}),g)}qe.displayName="Label";var wg=e=>{var{cx:t,cy:r,angle:n,startAngle:i,endAngle:a,r:o,radius:u,innerRadius:l,outerRadius:c,x:s,y:f,top:d,left:h,width:v,height:p,clockWise:g,labelViewBox:y}=e;if(y)return y;if(D(v)&&D(p)){if(D(s)&&D(f))return{x:s,y:f,width:v,height:p};if(D(d)&&D(h))return{x:d,y:h,width:v,height:p}}if(D(s)&&D(f))return{x:s,y:f,width:0,height:0};if(D(t)&&D(r))return{cx:t,cy:r,startAngle:i||n||0,endAngle:a||n||0,innerRadius:l||0,outerRadius:c||u||o||0,clockWise:g};if(e.viewBox)return e.viewBox},qj=(e,t,r)=>{if(!e)return null;var n={viewBox:t,labelRef:r};return e===!0?m.createElement(qe,mt({key:"label-implicit"},n)):dt(e)?m.createElement(qe,mt({key:"label-implicit",value:e},n)):m.isValidElement(e)?e.type===qe?m.cloneElement(e,le({key:"label-implicit"},n)):m.createElement(qe,mt({key:"label-implicit",content:e},n)):xl(e)?m.createElement(qe,mt({key:"label-implicit",content:e},n)):e&&typeof e=="object"?m.createElement(qe,mt({},e,{key:"label-implicit"},n)):null},Fj=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var{children:i,labelRef:a}=t,o=wg(t),u=pn(i,qe).map((c,s)=>m.cloneElement(c,{viewBox:r||o,key:"label-".concat(s)}));if(!n)return u;var l=qj(t.label,r||o,a);return[l,...u]};qe.parseViewBox=wg;qe.renderCallByParent=Fj;var No={},$o={},oh;function zj(){return oh||(oh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r[r.length-1]}e.last=t}($o)),$o}var Ro={},uh;function Wj(){return uh||(uh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Array.isArray(r)?r:Array.from(r)}e.toArray=t}(Ro)),Ro}var sh;function Uj(){return sh||(sh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=zj(),r=Wj(),n=Xu();function i(a){if(n.isArrayLike(a))return t.last(r.toArray(a))}e.last=i}(No)),No}var Lo,lh;function Hj(){return lh||(lh=1,Lo=Uj().last),Lo}var Yj=Hj();const Gj=Tt(Yj);var Vj=["valueAccessor"],Xj=["data","dataKey","clockWise","id","textBreakAll"];function bi(){return bi=Object.assign?Object.assign.bind():function(e){for(var t=1;tArray.isArray(e.value)?Gj(e.value):e.value;function Bt(e){var{valueAccessor:t=tT}=e,r=dh(e,Vj),{data:n,dataKey:i,clockWise:a,id:o,textBreakAll:u}=r,l=dh(r,Xj);return!n||!n.length?null:m.createElement(ye,{className:"recharts-label-list"},n.map((c,s)=>{var f=J(i)?t(c,s):re(c&&c.payload,i),d=J(o)?{}:{id:"".concat(o,"-").concat(s)};return m.createElement(qe,bi({},F(c,!0),l,d,{parentViewBox:c.parentViewBox,value:f,textBreakAll:u,viewBox:qe.parseViewBox(J(a)?c:fh(fh({},c),{},{clockWise:a})),key:"label-".concat(s),index:s}))}))}Bt.displayName="LabelList";function rT(e,t){return e?e===!0?m.createElement(Bt,{key:"labelList-implicit",data:t}):m.isValidElement(e)||xl(e)?m.createElement(Bt,{key:"labelList-implicit",data:t,content:e}):typeof e=="object"?m.createElement(Bt,bi({data:t},e,{key:"labelList-implicit"})):null:null}function nT(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var{children:n}=e,i=pn(n,Bt).map((o,u)=>m.cloneElement(o,{data:t,key:"labelList-".concat(u)}));if(!r)return i;var a=rT(e.label,t);return[a,...i]}Bt.renderCallByParent=nT;function ku(){return ku=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{cx:t,cy:r,r:n,className:i}=e,a=H("recharts-dot",i);return t===+t&&r===+r&&n===+n?m.createElement("circle",ku({},F(e,!1),Hu(e),{className:a,cx:t,cy:r,r:n})):null},Og=e=>e.graphicalItems.polarItems,iT=S([ue,Pn],Hs),wl=S([Og,se,iT],Ys),aT=S([wl],Gs),Pl=S([aT,Ns],Vs),oT=S([Pl,se,wl],Xs),uT=S([Pl,se,wl],(e,t,r)=>r.length>0?e.flatMap(n=>r.flatMap(i=>{var a,o=re(n,(a=t.dataKey)!==null&&a!==void 0?a:i.dataKey);return{value:o,errorDomain:[]}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey),errorDomain:[]})):e.map(n=>({value:n,errorDomain:[]}))),hh=()=>{},sT=S([se,Mm,hh,uT,hh],Qs),Ag=S([se,Y,Pl,oT,wn,ue,sT],el),lT=S([Ag,se,Br],nl);S([se,Ag,lT,ue],al);var cT={radiusAxis:{},angleAxis:{}},Sg=nt({name:"polarAxis",initialState:cT,reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),{addRadiusAxis:WD,removeRadiusAxis:UD,addAngleAxis:HD,removeAngleAxis:YD}=Sg.actions,fT=Sg.reducer;function vh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ph(e){for(var t=1;tt,pT=[],Al=(e,t,r)=>(r==null?void 0:r.length)===0?pT:r,Eg=S([Ns,Ol,Al],(e,t,r)=>{var{chartData:n}=e,i;if((t==null?void 0:t.data)!=null&&t.data.length>0?i=t.data:i=n,(!i||!i.length)&&r!=null&&(i=r.map(a=>ph(ph({},t.presentationProps),a.props))),i!=null)return i}),mT=S([Eg,Ol,Al],(e,t,r)=>{if(e!=null)return e.map((n,i)=>{var a,o=re(n,t.nameKey,t.name),u;return r!=null&&(a=r[i])!==null&&a!==void 0&&(a=a.props)!==null&&a!==void 0&&a.fill?u=r[i].props.fill:typeof n=="object"&&n!=null&&"fill"in n?u=n.fill:u=t.fill,{value:Ir(o,t.dataKey),color:u,payload:n,type:t.legendType}})}),gT=S([Og,Ol],(e,t)=>{if(e.some(r=>r.type==="pie"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),yT=S([Eg,gT,Al,ve],(e,t,r,n)=>{if(!(t==null||e==null))return lC({offset:n,pieSettings:t,displayedData:e,cells:r})}),bT={countOfBars:0,cartesianItems:[],polarItems:[]},jg=nt({name:"graphicalItems",initialState:bT,reducers:{addBar(e){e.countOfBars+=1},removeBar(e){e.countOfBars-=1},addCartesianGraphicalItem(e,t){e.cartesianItems.push(t.payload)},replaceCartesianGraphicalItem(e,t){var{prev:r,next:n}=t.payload,i=Pt(e).cartesianItems.indexOf(r);i>-1&&(e.cartesianItems[i]=n)},removeCartesianGraphicalItem(e,t){var r=Pt(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},addPolarGraphicalItem(e,t){e.polarItems.push(t.payload)},removePolarGraphicalItem(e,t){var r=Pt(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)}}}),{addBar:xT,removeBar:wT,addCartesianGraphicalItem:PT,replaceCartesianGraphicalItem:OT,removeCartesianGraphicalItem:AT,addPolarGraphicalItem:ST,removePolarGraphicalItem:ET}=jg.actions,jT=jg.reducer;function mh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function gh(e){for(var t=1;t{var n=gh(gh({},e),{},{stackId:Qv(e.stackId)});r.current===null?t(PT(n)):r.current!==n&&t(OT({prev:r.current,next:n})),r.current=n},[t,e]),m.useEffect(()=>()=>{r.current&&(t(AT(r.current)),r.current=null)},[t]),null}function MT(e){var t=ae();return m.useEffect(()=>(t(ST(e)),()=>{t(ET(e))}),[t,e]),null}var Bo={},yh;function DT(){return yh||(yh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var i;if(typeof r!="object"||r==null)return!1;if(Object.getPrototypeOf(r)===null)return!0;if(Object.prototype.toString.call(r)!=="[object Object]"){const a=r[Symbol.toStringTag];return a==null||!((i=Object.getOwnPropertyDescriptor(r,Symbol.toStringTag))!=null&&i.writable)?!1:r.toString()===`[object ${a}]`}let n=r;for(;Object.getPrototypeOf(n)!==null;)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(r)===n}e.isPlainObject=t}(Bo)),Bo}var Ko,bh;function IT(){return bh||(bh=1,Ko=DT().isPlainObject),Ko}var NT=IT();const $T=Tt(NT);function xi(){return xi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=r-n,o;return o="M ".concat(e,",").concat(t),o+="L ".concat(e+r,",").concat(t),o+="L ".concat(e+r-a/2,",").concat(t+i),o+="L ".concat(e+r-a/2-n,",").concat(t+i),o+="L ".concat(e,",").concat(t," Z"),o},RT={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},LT=e=>{var t=it(e,RT),r=m.useRef(),[n,i]=m.useState(-1);m.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var g=r.current.getTotalLength();g&&i(g)}catch{}},[]);var{x:a,y:o,upperWidth:u,lowerWidth:l,height:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isUpdateAnimationActive:v}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||c!==+c||u===0&&l===0||c===0)return null;var p=H("recharts-trapezoid",s);return v?m.createElement(qt,{canBegin:n>0,from:{upperWidth:0,lowerWidth:0,height:c,x:a,y:o},to:{upperWidth:u,lowerWidth:l,height:c,x:a,y:o},duration:d,animationEasing:f,isActive:v},g=>{var{upperWidth:y,lowerWidth:b,height:x,x:P,y:w}=g;return m.createElement(qt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,easing:f},m.createElement("path",xi({},F(t,!0),{className:p,d:xh(P,w,y,b,x),ref:r})))}):m.createElement("g",null,m.createElement("path",xi({},F(t,!0),{className:p,d:xh(a,o,u,l,c)})))},BT=["option","shapeType","propTransformer","activeClassName","isActive"];function KT(e,t){if(e==null)return{};var r,n,i=qT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(Gm({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}},El=e=>{var t=ae();return(r,n)=>i=>{e==null||e(r,n,i),t(DS())}},jl=(e,t)=>{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(IS({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}};function Tl(e){var{fn:t,args:r}=e,n=ae(),i=_e();return m.useEffect(()=>{if(!i){var a=t(r);return n(_S(a)),()=>{n(kS(a))}}},[t,r,n,i]),null}var Cg=()=>{};function _g(e){var{legendPayload:t}=e,r=ae(),n=_e();return m.useEffect(()=>n?Cg:(r(sp(t)),()=>{r(lp(t))}),[r,n,t]),null}function GT(e){var{legendPayload:t}=e,r=ae(),n=$(Y);return m.useEffect(()=>n!=="centric"&&n!=="radial"?Cg:(r(sp(t)),()=>{r(lp(t))}),[r,n,t]),null}function Cl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"animation-",r=m.useRef(lr(t)),n=m.useRef(e);return n.current!==e&&(r.current=lr(t),n.current=e),r.current}var VT=["onMouseEnter","onClick","onMouseLeave"];function XT(e,t){if(e==null)return{};var r,n,i=ZT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;nF(e,!1),[e]),r=m.useMemo(()=>pn(e.children,jn),[e.children]),n=m.useMemo(()=>({name:e.name,nameKey:e.nameKey,tooltipType:e.tooltipType,data:e.data,dataKey:e.dataKey,cx:e.cx,cy:e.cy,startAngle:e.startAngle,endAngle:e.endAngle,minAngle:e.minAngle,paddingAngle:e.paddingAngle,innerRadius:e.innerRadius,outerRadius:e.outerRadius,cornerRadius:e.cornerRadius,legendType:e.legendType,fill:e.fill,presentationProps:t}),[e.cornerRadius,e.cx,e.cy,e.data,e.dataKey,e.endAngle,e.innerRadius,e.minAngle,e.name,e.nameKey,e.outerRadius,e.paddingAngle,e.startAngle,e.tooltipType,e.legendType,e.fill,t]),i=$(a=>mT(a,n,r));return m.createElement(GT,{legendPayload:i})}function tC(e){var{dataKey:t,nameKey:r,sectors:n,stroke:i,strokeWidth:a,fill:o,name:u,hide:l,tooltipType:c}=e;return{dataDefinedOnItem:n==null?void 0:n.map(s=>s.tooltipPayload),positions:n==null?void 0:n.map(s=>s.tooltipPosition),settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:r,name:Ir(u,t),hide:l,type:c,color:o,unit:""}}}var rC=(e,t)=>e>t?"start":etypeof t=="function"?t(e):Ce(t,r,r*.8),iC=(e,t,r)=>{var{top:n,left:i,width:a,height:o}=t,u=Xv(a,o),l=i+Ce(e.cx,a,a/2),c=n+Ce(e.cy,o,o/2),s=Ce(e.innerRadius,u,0),f=nC(r,e.outerRadius,u),d=e.maxRadius||Math.sqrt(a*a+o*o)/2;return{cx:l,cy:c,innerRadius:s,outerRadius:f,maxRadius:d}},aC=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},oC=(e,t)=>{if(m.isValidElement(e))return m.cloneElement(e,t);if(typeof e=="function")return e(t);var r=H("recharts-pie-label-line",typeof e!="boolean"?e.className:"");return m.createElement(cs,hr({},t,{type:"linear",className:r}))},uC=(e,t,r)=>{if(m.isValidElement(e))return m.cloneElement(e,t);var n=r;if(typeof e=="function"&&(n=e(t),m.isValidElement(n)))return n;var i=H("recharts-pie-label-text",typeof e!="boolean"&&typeof e!="function"?e.className:"");return m.createElement(na,hr({},t,{alignmentBaseline:"middle",className:i}),n)};function sC(e){var{sectors:t,props:r,showLabels:n}=e,{label:i,labelLine:a,dataKey:o}=r;if(!n||!i||!t)return null;var u=F(r,!1),l=F(i,!1),c=F(a,!1),s=typeof i=="object"&&"offsetRadius"in i&&i.offsetRadius||20,f=t.map((d,h)=>{var v=(d.startAngle+d.endAngle)/2,p=ce(d.cx,d.cy,d.outerRadius+s,v),g=ie(ie(ie(ie({},u),d),{},{stroke:"none"},l),{},{index:h,textAnchor:rC(p.x,d.cx)},p),y=ie(ie(ie(ie({},u),d),{},{fill:"none",stroke:d.fill},c),{},{index:h,points:[ce(d.cx,d.cy,d.outerRadius,v),p],key:"line"});return m.createElement(ye,{key:"label-".concat(d.startAngle,"-").concat(d.endAngle,"-").concat(d.midAngle,"-").concat(h)},a&&oC(a,y),uC(i,g,re(d,o)))});return m.createElement(ye,{className:"recharts-pie-labels"},f)}function kg(e){var{sectors:t,activeShape:r,inactiveShape:n,allOtherPieProps:i,showLabels:a}=e,o=$(zt),{onMouseEnter:u,onClick:l,onMouseLeave:c}=i,s=XT(i,VT),f=Sl(u,i.dataKey),d=El(c),h=jl(l,i.dataKey);return t==null?null:m.createElement(m.Fragment,null,t.map((v,p)=>{if((v==null?void 0:v.startAngle)===0&&(v==null?void 0:v.endAngle)===0&&t.length!==1)return null;var g=r&&String(p)===o,y=o?n:null,b=g?r:y,x=ie(ie({},v),{},{stroke:v.stroke,tabIndex:-1,[tp]:p,[rp]:i.dataKey});return m.createElement(ye,hr({tabIndex:-1,className:"recharts-pie-sector"},Ei(s,v,p),{onMouseEnter:f(v,p),onMouseLeave:d(v,p),onClick:h(v,p),key:"sector-".concat(v==null?void 0:v.startAngle,"-").concat(v==null?void 0:v.endAngle,"-").concat(v.midAngle,"-").concat(p)}),m.createElement(Tg,hr({option:b,isActive:g,shapeType:"sector"},x)))}),m.createElement(sC,{sectors:t,props:i,showLabels:a}))}function lC(e){var t,{pieSettings:r,displayedData:n,cells:i,offset:a}=e,{cornerRadius:o,startAngle:u,endAngle:l,dataKey:c,nameKey:s,tooltipType:f}=r,d=Math.abs(r.minAngle),h=aC(u,l),v=Math.abs(h),p=n.length<=1?0:(t=r.paddingAngle)!==null&&t!==void 0?t:0,g=n.filter(O=>re(O,c,0)!==0).length,y=(v>=360?g:g-1)*p,b=v-g*d-y,x=n.reduce((O,A)=>{var j=re(A,c,0);return O+(D(j)?j:0)},0),P;if(x>0){var w;P=n.map((O,A)=>{var j=re(O,c,0),T=re(O,s,A),I=iC(r,a,O),_=(D(j)?j:0)/x,k,R=ie(ie({},O),i&&i[A]&&i[A].props);A?k=w.endAngle+ge(h)*p*(j!==0?1:0):k=u;var B=k+ge(h)*((j!==0?d:0)+_*b),z=(k+B)/2,V=(I.innerRadius+I.outerRadius)/2,K=[{name:T,value:j,payload:R,dataKey:c,type:f}],de=ce(I.cx,I.cy,V,z);return w=ie(ie(ie(ie({},r.presentationProps),{},{percent:_,cornerRadius:o,name:T,tooltipPayload:K,midAngle:z,middleRadius:V,tooltipPosition:de},R),I),{},{value:re(O,c),startAngle:k,endAngle:B,payload:R,paddingAngle:ge(h)*p}),w})}return P}function cC(e){var{props:t,previousSectorsRef:r}=e,{sectors:n,isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:u,activeShape:l,inactiveShape:c,onAnimationStart:s,onAnimationEnd:f}=t,d=Cl(t,"recharts-pie-"),h=r.current,[v,p]=m.useState(!0),g=m.useCallback(()=>{typeof f=="function"&&f(),p(!1)},[f]),y=m.useCallback(()=>{typeof s=="function"&&s(),p(!0)},[s]);return m.createElement(qt,{begin:a,duration:o,isActive:i,easing:u,from:{t:0},to:{t:1},onAnimationStart:y,onAnimationEnd:g,key:d},b=>{var{t:x}=b,P=[],w=n&&n[0],O=w.startAngle;return n.forEach((A,j)=>{var T=h&&h[j],I=j>0?Kt(A,"paddingAngle",0):0;if(T){var _=Ke(T.endAngle-T.startAngle,A.endAngle-A.startAngle),k=ie(ie({},A),{},{startAngle:O+I,endAngle:O+_(x)+I});P.push(k),O=k.endAngle}else{var{endAngle:R,startAngle:B}=A,z=Ke(0,R-B),V=z(x),K=ie(ie({},A),{},{startAngle:O+I,endAngle:O+V+I});P.push(K),O=K.endAngle}}),r.current=P,m.createElement(ye,null,m.createElement(kg,{sectors:P,activeShape:l,inactiveShape:c,allOtherPieProps:t,showLabels:!v}))})}function fC(e){var{sectors:t,isAnimationActive:r,activeShape:n,inactiveShape:i}=e,a=m.useRef(null),o=a.current;return r&&t&&t.length&&(!o||o!==t)?m.createElement(cC,{props:e,previousSectorsRef:a}):m.createElement(kg,{sectors:t,activeShape:n,inactiveShape:i,allOtherPieProps:e,showLabels:!0})}function dC(e){var{hide:t,className:r,rootTabIndex:n}=e,i=H("recharts-pie",r);return t?null:m.createElement(ye,{tabIndex:n,className:i},m.createElement(fC,e))}var Mg={animationBegin:400,animationDuration:1500,animationEasing:"ease",cx:"50%",cy:"50%",dataKey:"value",endAngle:360,fill:"#808080",hide:!1,innerRadius:0,isAnimationActive:!vr.isSsr,labelLine:!0,legendType:"rect",minAngle:0,nameKey:"name",outerRadius:"80%",paddingAngle:0,rootTabIndex:0,startAngle:0,stroke:"#fff"};function hC(e){var t=it(e,Mg),r=m.useMemo(()=>pn(e.children,jn),[e.children]),n=F(t,!1),i=m.useMemo(()=>({name:t.name,nameKey:t.nameKey,tooltipType:t.tooltipType,data:t.data,dataKey:t.dataKey,cx:t.cx,cy:t.cy,startAngle:t.startAngle,endAngle:t.endAngle,minAngle:t.minAngle,paddingAngle:t.paddingAngle,innerRadius:t.innerRadius,outerRadius:t.outerRadius,cornerRadius:t.cornerRadius,legendType:t.legendType,fill:t.fill,presentationProps:n}),[t.cornerRadius,t.cx,t.cy,t.data,t.dataKey,t.endAngle,t.innerRadius,t.minAngle,t.name,t.nameKey,t.outerRadius,t.paddingAngle,t.startAngle,t.tooltipType,t.legendType,t.fill,n]),a=$(o=>yT(o,i,r));return m.createElement(m.Fragment,null,m.createElement(Tl,{fn:tC,args:ie(ie({},t),{},{sectors:a})}),m.createElement(dC,hr({},t,{sectors:a})))}class _l extends m.PureComponent{constructor(){super(...arguments),ia(this,"id",lr("recharts-pie-"))}render(){return m.createElement(m.Fragment,null,m.createElement(MT,{data:this.props.data,dataKey:this.props.dataKey,hide:this.props.hide,angleAxisId:0,radiusAxisId:0,stackId:void 0,barSize:void 0,type:"pie"}),m.createElement(eC,this.props),m.createElement(hC,this.props),this.props.children)}}ia(_l,"displayName","Pie");ia(_l,"defaultProps",Mg);var vC=S([ve],e=>{if(e)return{top:e.top,bottom:e.bottom,left:e.left,right:e.right}}),pC=S([vC,Ct,_t],(e,t,r)=>{if(!(!e||t==null||r==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}}),mC=e=>{var t=_e();return $(r=>vt(r,"xAxis",e,t))},gC=e=>{var t=_e();return $(r=>vt(r,"yAxis",e,t))},kl=()=>$(pC),yC=()=>$(yE);function Ah(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Sh(e){for(var t=1;t{var{point:t,childIndex:r,mainColor:n,activeDot:i,dataKey:a}=e;if(i===!1||t.x==null||t.y==null)return null;var o=Sh(Sh({index:r,dataKey:a,cx:t.x,cy:t.y,r:4,fill:n??"none",strokeWidth:2,stroke:"#fff",payload:t.payload,value:t.value},F(i,!1)),Hu(i)),u;return m.isValidElement(i)?u=m.cloneElement(i,o):typeof i=="function"?u=i(o):u=m.createElement(Pg,o),m.createElement(ye,{className:"recharts-active-dot"},u)};function OC(e){var{points:t,mainColor:r,activeDot:n,itemDataKey:i}=e,a=$(zt),o=yC();if(t==null||o==null)return null;var u=t.find(l=>o.includes(l.payload));return J(u)?null:PC({point:u,childIndex:Number(a),mainColor:r,dataKey:i,activeDot:n})}var AC=()=>{var e=ae();return m.useEffect(()=>(e(xT()),()=>{e(wT())})),null},SC=["children"];function EC(e,t){if(e==null)return{};var r,n,i=jC(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{},Dg=m.createContext({addErrorBar:Eh,removeErrorBar:Eh}),TC={data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0},Ig=m.createContext(TC);function Ng(e){var{children:t}=e,r=EC(e,SC);return m.createElement(Ig.Provider,{value:r},t)}var CC=()=>m.useContext(Ig),$g=e=>{var{children:t,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,data:o,stackId:u,hide:l,type:c,barSize:s}=e,[f,d]=m.useState([]),h=m.useCallback(g=>{d(y=>[...y,g])},[d]),v=m.useCallback(g=>{d(y=>y.filter(b=>b!==g))},[d]),p=_e();return m.createElement(Dg.Provider,{value:{addErrorBar:h,removeErrorBar:v}},m.createElement(kT,{type:c,data:o,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,errorBars:f,stackId:u,hide:l,barSize:s,isPanorama:p}),t)};function _C(e){var{addErrorBar:t,removeErrorBar:r}=m.useContext(Dg);return m.useEffect(()=>(t(e),()=>{r(e)}),[t,r,e]),null}var kC=["direction","width","dataKey","isAnimationActive","animationBegin","animationDuration","animationEasing"];function Rg(e,t,r){return(t=MC(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function MC(e){var t=DC(e,"string");return typeof t=="symbol"?t:t+""}function DC(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function dn(){return dn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{x,y:P,value:w,errorVal:O}=f(b,n,t);if(!O)return null;var A=[],j,T;if(Array.isArray(O)?[j,T]=O:j=T=O,t==="x"){var{scale:I}=p,_=P+v,k=_+r,R=_-r,B=I(w-j),z=I(w+T);A.push({x1:z,y1:k,x2:z,y2:R}),A.push({x1:B,y1:_,x2:z,y2:_}),A.push({x1:B,y1:k,x2:B,y2:R})}else if(t==="y"){var{scale:V}=g,K=x+v,de=K-r,oe=K+r,Ie=V(w-j),Ge=V(w+T);A.push({x1:de,y1:Ge,x2:oe,y2:Ge}),A.push({x1:K,y1:Ie,x2:K,y2:Ge}),A.push({x1:de,y1:Ie,x2:oe,y2:Ie})}var L="".concat(x+v,"px ").concat(P+v,"px");return m.createElement(ye,dn({className:"recharts-errorBar",key:"bar-".concat(A.map(we=>"".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2)))},c),A.map(we=>{var Vt=i?{transformOrigin:"".concat(we.x1-5,"px")}:void 0;return m.createElement(qt,{from:{transform:"scaleY(0)",transformOrigin:L},to:{transform:"scaleY(1)",transformOrigin:L},begin:a,easing:u,isActive:i,duration:o,key:"line-".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2),style:{transformOrigin:L}},m.createElement("line",dn({},we,{style:Vt})))}))});return m.createElement(ye,{className:"recharts-errorBars"},y)}var Lg=m.createContext(void 0);function RC(e){var t=m.useContext(Lg);return e??t??"x"}function Bg(e){var{direction:t,children:r}=e;return m.createElement(Lg.Provider,{value:t},r)}var Kg={stroke:"black",strokeWidth:1.5,width:5,offset:0,isAnimationActive:!0,animationBegin:0,animationDuration:400,animationEasing:"ease-in-out"};function LC(e){var t=RC(e.direction),{width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o}=it(e,Kg);return m.createElement(m.Fragment,null,m.createElement(_C,{dataKey:e.dataKey,direction:t}),m.createElement($C,dn({},e,{direction:t,width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o})))}class qg extends m.Component{render(){return m.createElement(LC,this.props)}}Rg(qg,"defaultProps",Kg);Rg(qg,"displayName","ErrorBar");var BC="Invariant failed";function KC(e,t){throw new Error(BC)}var qC=["x","y"];function Mu(){return Mu=Object.assign?Object.assign.bind():function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:0;return(n,i)=>{if(D(t))return t;var a=D(n)||J(n);return a?t(n,i):(a||KC(),r)}};function Ml(e,t){var r,n,i=$(c=>Mt(c,e)),a=$(c=>Yt(c,t)),o=(r=i==null?void 0:i.allowDataOverflow)!==null&&r!==void 0?r:Re.allowDataOverflow,u=(n=a==null?void 0:a.allowDataOverflow)!==null&&n!==void 0?n:Le.allowDataOverflow,l=o||u;return{needClip:l,needClipX:o,needClipY:u}}function zg(e){var{xAxisId:t,yAxisId:r,clipPathId:n}=e,i=kl(),{needClipX:a,needClipY:o,needClip:u}=Ml(t,r);if(!u)return null;var{x:l,y:c,width:s,height:f}=i;return m.createElement("clipPath",{id:"clipPath-".concat(n)},m.createElement("rect",{x:a?l:l-s/2,y:o?c:c-f/2,width:a?s:s*2,height:o?f:f*2}))}var VC=["onMouseEnter","onMouseLeave","onClick"],XC=["value","background","tooltipPosition"],ZC=["onMouseEnter","onClick","onMouseLeave"];function hn(){return hn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:r,fill:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Ir(r,t),payload:e}]};function r_(e){var{dataKey:t,stroke:r,strokeWidth:n,fill:i,name:a,hide:o,unit:u}=e;return{dataDefinedOnItem:void 0,positions:void 0,settings:{stroke:r,strokeWidth:n,fill:i,dataKey:t,nameKey:void 0,name:Ir(a,t),hide:o,type:e.tooltipType,color:e.fill,unit:u}}}function n_(e){var t=$(zt),{data:r,dataKey:n,background:i,allOtherBarProps:a}=e,{onMouseEnter:o,onMouseLeave:u,onClick:l}=a,c=Du(a,VC),s=Sl(o,n),f=El(u),d=jl(l,n);if(!i||r==null)return null;var h=F(i,!1);return m.createElement(m.Fragment,null,r.map((v,p)=>{var{value:g,background:y,tooltipPosition:b}=v,x=Du(v,XC);if(!y)return null;var P=s(v,p),w=f(v,p),O=d(v,p),A=Ee(Ee(Ee(Ee(Ee({option:i,isActive:String(p)===t},x),{},{fill:"#eee"},y),h),Ei(c,v,p)),{},{onMouseEnter:P,onMouseLeave:w,onClick:O,dataKey:n,index:p,className:"recharts-bar-background-rectangle"});return m.createElement(Fg,hn({key:"background-bar-".concat(p)},A))}))}function Wg(e){var{data:t,props:r,showLabels:n}=e,i=F(r,!1),{shape:a,dataKey:o,activeBar:u}=r,l=$(zt),c=$(ug),{onMouseEnter:s,onClick:f,onMouseLeave:d}=r,h=Du(r,ZC),v=Sl(s,o),p=El(d),g=jl(f,o);return t?m.createElement(m.Fragment,null,t.map((y,b)=>{var x=u&&String(b)===l&&(c==null||o===c),P=x?u:a,w=Ee(Ee(Ee({},i),y),{},{isActive:x,option:P,index:b,dataKey:o});return m.createElement(ye,hn({className:"recharts-bar-rectangle"},Ei(h,y,b),{onMouseEnter:v(y,b),onMouseLeave:p(y,b),onClick:g(y,b),key:"rectangle-".concat(y==null?void 0:y.x,"-").concat(y==null?void 0:y.y,"-").concat(y==null?void 0:y.value,"-").concat(b)}),m.createElement(Fg,w))}),n&&Bt.renderCallByParent(r,t)):null}function i_(e){var{props:t,previousRectanglesRef:r}=e,{data:n,layout:i,isAnimationActive:a,animationBegin:o,animationDuration:u,animationEasing:l,onAnimationEnd:c,onAnimationStart:s}=t,f=r.current,d=Cl(t,"recharts-bar-"),[h,v]=m.useState(!1),p=m.useCallback(()=>{typeof c=="function"&&c(),v(!1)},[c]),g=m.useCallback(()=>{typeof s=="function"&&s(),v(!0)},[s]);return m.createElement(qt,{begin:o,duration:u,isActive:a,easing:l,from:{t:0},to:{t:1},onAnimationEnd:p,onAnimationStart:g,key:d},y=>{var{t:b}=y,x=b===1?n:n.map((P,w)=>{var O=f&&f[w];if(O){var A=Ke(O.x,P.x),j=Ke(O.y,P.y),T=Ke(O.width,P.width),I=Ke(O.height,P.height);return Ee(Ee({},P),{},{x:A(b),y:j(b),width:T(b),height:I(b)})}if(i==="horizontal"){var _=Ke(0,P.height),k=_(b);return Ee(Ee({},P),{},{y:P.y+P.height-k,height:k})}var R=Ke(0,P.width),B=R(b);return Ee(Ee({},P),{},{width:B})});return b>0&&(r.current=x),m.createElement(ye,null,m.createElement(Wg,{props:t,data:x,showLabels:!h}))})}function a_(e){var{data:t,isAnimationActive:r}=e,n=m.useRef(null);return r&&t&&t.length&&(n.current==null||n.current!==t)?m.createElement(i_,{previousRectanglesRef:n,props:e}):m.createElement(Wg,{props:e,data:t,showLabels:!0})}var Ug=0,o_=(e,t)=>{var r=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:r,errorVal:re(e,t)}};class u_ extends m.PureComponent{constructor(){super(...arguments),aa(this,"id",lr("recharts-bar-"))}render(){var{hide:t,data:r,dataKey:n,className:i,xAxisId:a,yAxisId:o,needClip:u,background:l,id:c,layout:s}=this.props;if(t)return null;var f=H("recharts-bar",i),d=J(c)?this.id:c;return m.createElement(ye,{className:f},u&&m.createElement("defs",null,m.createElement(zg,{clipPathId:d,xAxisId:a,yAxisId:o})),m.createElement(ye,{className:"recharts-bar-rectangles",clipPath:u?"url(#clipPath-".concat(d,")"):null},m.createElement(n_,{data:r,dataKey:n,background:l,allOtherBarProps:this.props}),m.createElement(a_,this.props)),m.createElement(Bg,{direction:s==="horizontal"?"y":"x"},this.props.children))}}var Hg={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",hide:!1,isAnimationActive:!vr.isSsr,legendType:"rect",minPointSize:Ug,xAxisId:0,yAxisId:0};function s_(e){var{xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s}=it(e,Hg),{needClip:f}=Ml(t,r),d=Ki(),h=_e(),v=m.useMemo(()=>({barSize:e.barSize,data:void 0,dataKey:e.dataKey,maxBarSize:e.maxBarSize,minPointSize:a,stackId:Qv(e.stackId)}),[e.barSize,e.dataKey,e.maxBarSize,a,e.stackId]),p=pn(e.children,jn),g=$(x=>$_(x,t,r,h,v,p));if(d!=="vertical"&&d!=="horizontal")return null;var y,b=g==null?void 0:g[0];return b==null||b.height==null||b.width==null?y=0:y=d==="vertical"?b.height/2:b.width/2,m.createElement(Ng,{xAxisId:t,yAxisId:r,data:g,dataPointFormatter:o_,errorBarOffset:y},m.createElement(u_,hn({},e,{layout:d,needClip:f,data:g,xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s})))}function l_(e){var{layout:t,barSettings:{dataKey:r,minPointSize:n},pos:i,bandSize:a,xAxis:o,yAxis:u,xAxisTicks:l,yAxisTicks:c,stackedData:s,displayedData:f,offset:d,cells:h}=e,v=t==="horizontal"?u:o,p=s?v.scale.domain():null,g=aw({numericAxis:v});return f.map((y,b)=>{var x,P,w,O,A,j;s?x=ew(s[b],p):(x=re(y,r),Array.isArray(x)||(x=[g,x]));var T=GC(n,Ug)(x[1],b);if(t==="horizontal"){var I,[_,k]=[u.scale(x[0]),u.scale(x[1])];P=pf({axis:o,ticks:l,bandSize:a,offset:i.offset,entry:y,index:b}),w=(I=k??_)!==null&&I!==void 0?I:void 0,O=i.size;var R=_-k;if(A=We(R)?0:R,j={x:P,y:d.top,width:O,height:d.height},Math.abs(T)>0&&Math.abs(A)0&&Math.abs(O)t,v_=(e,t,r)=>r,p_=(e,t,r,n)=>n,Il=(e,t,r,n,i)=>i,m_=(e,t,r,n,i)=>i.maxBarSize,g_=(e,t,r,n,i,a)=>a,_h=(e,t,r)=>{var n=r??e;if(!J(n))return Ce(n,t,0)},y_=S([Y,Xi,h_,v_,p_],(e,t,r,n,i)=>t.filter(a=>e==="horizontal"?a.xAxisId===r:a.yAxisId===n).filter(a=>a.isPanorama===i).filter(a=>a.hide===!1).filter(a=>a.type==="bar")),b_=(e,t,r,n)=>{var i=Y(e);return i==="horizontal"?Au(e,"yAxis",r,n):Au(e,"xAxis",t,n)},x_=(e,t,r)=>{var n=Y(e);return n==="horizontal"?Md(e,"xAxis",t):Md(e,"yAxis",r)};function w_(e){return e.stackId!=null&&e.dataKey!=null}var P_=(e,t,r)=>{var n={},i=e.filter(w_),a=e.filter(c=>c.stackId==null),o=i.reduce((c,s)=>(c[s.stackId]||(c[s.stackId]=[]),c[s.stackId].push(s),c),n),u=Object.entries(o).map(c=>{var[s,f]=c,d=f.map(v=>v.dataKey),h=_h(t,r,f[0].barSize);return{stackId:s,dataKeys:d,barSize:h}}),l=a.map(c=>{var s=[c.dataKey].filter(d=>d!=null),f=_h(t,r,c.barSize);return{stackId:void 0,dataKeys:s,barSize:f}});return[...u,...l]},O_=S([y_,CA,x_],P_),A_=(e,t,r,n,i)=>{var a,o,u=Y(e),l=hm(e),{maxBarSize:c}=i,s=J(c)?l:c,f,d;return u==="horizontal"?(f=vt(e,"xAxis",t,n),d=Ft(e,"xAxis",t,n)):(f=vt(e,"yAxis",r,n),d=Ft(e,"yAxis",r,n)),(a=(o=nn(f,d,!0))!==null&&o!==void 0?o:s)!==null&&a!==void 0?a:0},Yg=(e,t,r,n)=>{var i=Y(e),a,o;return i==="horizontal"?(a=vt(e,"xAxis",t,n),o=Ft(e,"xAxis",t,n)):(a=vt(e,"yAxis",r,n),o=Ft(e,"yAxis",r,n)),nn(a,o)};function S_(e,t,r,n,i){var a=n.length;if(!(a<1)){var o=Ce(e,r,0,!0),u,l=[];if(Ye(n[0].barSize)){var c=!1,s=r/a,f=n.reduce((y,b)=>y+(b.barSize||0),0);f+=(a-1)*o,f>=r&&(f-=(a-1)*o,o=0),f>=r&&s>0&&(c=!0,s*=.9,f=a*s);var d=(r-f)/2>>0,h={offset:d-o,size:0};u=n.reduce((y,b)=>{var x,P={stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:h.offset+h.size+o,size:c?s:(x=b.barSize)!==null&&x!==void 0?x:0}},w=[...y,P];return h=w[w.length-1].position,w},l)}else{var v=Ce(t,r,0,!0);r-2*v-(a-1)*o<=0&&(o=0);var p=(r-2*v-(a-1)*o)/a;p>1&&(p>>=0);var g=Ye(i)?Math.min(p,i):p;u=n.reduce((y,b,x)=>[...y,{stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:v+(p+o)*x+(p-g)/2,size:g}}],l)}return u}}var E_=(e,t,r,n,i,a,o)=>{var u=J(o)?t:o,l=S_(r,n,i!==a?i:a,e,u);return i!==a&&l!=null&&(l=l.map(c=>Fn(Fn({},c),{},{position:Fn(Fn({},c.position),{},{offset:c.position.offset-i/2})}))),l},j_=S([O_,hm,TA,vm,A_,Yg,m_],E_),T_=(e,t,r,n)=>vt(e,"xAxis",t,n),C_=(e,t,r,n)=>vt(e,"yAxis",r,n),__=(e,t,r,n)=>Ft(e,"xAxis",t,n),k_=(e,t,r,n)=>Ft(e,"yAxis",r,n),M_=S([j_,Il],(e,t)=>{if(e!=null){var r=e.find(n=>n.stackId===t.stackId&&n.dataKeys.includes(t.dataKey));if(r!=null)return r.position}}),D_=(e,t)=>{if(!(!e||(t==null?void 0:t.dataKey)==null)){var{stackId:r}=t;if(r!=null){var n=e[r];if(n){var{stackedData:i}=n;if(i){var a=i.find(o=>o.key===t.dataKey);return a}}}}},I_=S([Xi,Il],(e,t)=>{if(e.some(r=>r.type==="bar"&&t.dataKey===r.dataKey&&t.stackId===r.stackId&&t.stackId===r.stackId))return t}),N_=S([b_,Il],D_),$_=S([ve,T_,C_,__,k_,M_,Y,$s,Yg,N_,I_,g_],(e,t,r,n,i,a,o,u,l,c,s,f)=>{var{chartData:d,dataStartIndex:h,dataEndIndex:v}=u;if(!(s==null||a==null||o!=="horizontal"&&o!=="vertical"||t==null||r==null||n==null||i==null||l==null)){var{data:p}=s,g;if(p!=null&&p.length>0?g=p:g=d==null?void 0:d.slice(h,v+1),g!=null)return l_({layout:o,barSettings:s,pos:a,bandSize:l,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,stackedData:c,displayedData:g,offset:e,cells:f})}}),Gg=e=>{var{chartData:t}=e,r=ae(),n=_e();return m.useEffect(()=>n?()=>{}:(r(Fd(t)),()=>{r(Fd(void 0))}),[t,r,n]),null},kh={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},Vg=nt({name:"brush",initialState:kh,reducers:{setBrushSettings(e,t){return t.payload==null?kh:t.payload}}}),{setBrushSettings:GD}=Vg.actions,R_=Vg.reducer;function L_(e,t,r){return(t=B_(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function B_(e){var t=K_(e,"string");return typeof t=="symbol"?t:t+""}function K_(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}class Nl{static create(t){return new Nl(t)}constructor(t){this.scale=t}get domain(){return this.scale.domain}get range(){return this.scale.range}get rangeMin(){return this.range()[0]}get rangeMax(){return this.range()[1]}get bandwidth(){return this.scale.bandwidth}apply(t){var{bandAware:r,position:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t!==void 0){if(n)switch(n){case"start":return this.scale(t);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+i}case"end":{var a=this.bandwidth?this.bandwidth():0;return this.scale(t)+a}default:return this.scale(t)}if(r){var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+o}return this.scale(t)}}isInRange(t){var r=this.range(),n=r[0],i=r[r.length-1];return n<=i?t>=n&&t<=i:t>=i&&t<=n}}L_(Nl,"EPS",1e-4);function q_(e){return(e%180+180)%180}var F_=function(t){var{width:r,height:n}=t,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=q_(i),o=a*Math.PI/180,u=Math.atan(n/r),l=o>u&&o{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=Pt(e).dots.findIndex(n=>n===t.payload);r!==-1&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=Pt(e).areas.findIndex(n=>n===t.payload);r!==-1&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=Pt(e).lines.findIndex(n=>n===t.payload);r!==-1&&e.lines.splice(r,1)}}}),{addDot:VD,removeDot:XD,addArea:ZD,removeArea:JD,addLine:QD,removeLine:eI}=Xg.actions,W_=Xg.reducer,U_=m.createContext(void 0),H_=e=>{var{children:t}=e,[r]=m.useState("".concat(lr("recharts"),"-clip")),n=kl();if(n==null)return null;var{x:i,y:a,width:o,height:u}=n;return m.createElement(U_.Provider,{value:r},m.createElement("defs",null,m.createElement("clipPath",{id:r},m.createElement("rect",{x:i,y:a,height:u,width:o}))),t)};function qo(e,t){for(var r in e)if({}.hasOwnProperty.call(e,r)&&(!{}.hasOwnProperty.call(t,r)||e[r]!==t[r]))return!1;for(var n in t)if({}.hasOwnProperty.call(t,n)&&!{}.hasOwnProperty.call(e,n))return!1;return!0}function Zg(e,t,r){if(t<1)return[];if(t===1&&r===void 0)return e;for(var n=[],i=0;ie*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function V_(e,t){return Zg(e,t+1)}function X_(e,t,r,n,i){for(var a=(n||[]).slice(),{start:o,end:u}=t,l=0,c=1,s=o,f=function(){var v=n==null?void 0:n[l];if(v===void 0)return{v:Zg(n,c)};var p=l,g,y=()=>(g===void 0&&(g=r(v,p)),g),b=v.coordinate,x=l===0||Pi(e,b,y,s,u);x||(l=0,s=o,c+=1),x&&(s=b+e*(y()/2+i),l+=c)},d;c<=a.length;)if(d=f(),d)return d.v;return[]}function Mh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t(v===void 0&&(v=r(h,d)),v);if(d===o-1){var g=e*(h.coordinate+e*p()/2-l);a[d]=h=Se(Se({},h),{},{tickCoord:g>0?h.coordinate-g*e:h.coordinate})}else a[d]=h=Se(Se({},h),{},{tickCoord:h.coordinate});var y=Pi(e,h.tickCoord,p,u,l);y&&(l=h.tickCoord-e*(p()/2+i),a[d]=Se(Se({},h),{},{isShow:!0}))},s=o-1;s>=0;s--)c(s);return a}function tk(e,t,r,n,i,a){var o=(n||[]).slice(),u=o.length,{start:l,end:c}=t;if(a){var s=n[u-1],f=r(s,u-1),d=e*(s.coordinate+e*f/2-c);o[u-1]=s=Se(Se({},s),{},{tickCoord:d>0?s.coordinate-d*e:s.coordinate});var h=Pi(e,s.tickCoord,()=>f,l,c);h&&(c=s.tickCoord-e*(f/2+i),o[u-1]=Se(Se({},s),{},{isShow:!0}))}for(var v=a?u-1:u,p=function(b){var x=o[b],P,w=()=>(P===void 0&&(P=r(x,b)),P);if(b===0){var O=e*(x.coordinate-e*w()/2-l);o[b]=x=Se(Se({},x),{},{tickCoord:O<0?x.coordinate-O*e:x.coordinate})}else o[b]=x=Se(Se({},x),{},{tickCoord:x.coordinate});var A=Pi(e,x.tickCoord,w,l,c);A&&(l=x.tickCoord+e*(w()/2+i),o[b]=Se(Se({},x),{},{isShow:!0}))},g=0;g{var w=typeof c=="function"?c(x.value,P):x.value;return v==="width"?Y_(en(w,{fontSize:t,letterSpacing:r}),p,f):en(w,{fontSize:t,letterSpacing:r})[v]},y=i.length>=2?ge(i[1].coordinate-i[0].coordinate):1,b=G_(a,y,v);return l==="equidistantPreserveStart"?X_(y,b,g,i,o):(l==="preserveStart"||l==="preserveStartEnd"?h=tk(y,b,g,i,o,l==="preserveStartEnd"):h=ek(y,b,g,i,o),h.filter(x=>x.isShow))}var rk=["viewBox"],nk=["viewBox"];function Or(){return Or=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:[],{tickLine:i,stroke:a,tick:o,tickFormatter:u,unit:l}=this.props,c=$l(he(he({},this.props),{},{ticks:n}),t,r),s=this.getTickTextAnchor(),f=this.getTickVerticalAnchor(),d=F(this.props,!1),h=F(o,!1),v=he(he({},d),{},{fill:"none"},F(i,!1)),p=c.map((g,y)=>{var{line:b,tick:x}=this.getTickLineCoord(g),P=he(he(he(he({textAnchor:s,verticalAnchor:f},d),{},{stroke:"none",fill:a},h),x),{},{index:y,payload:g,visibleTicksCount:c.length,tickFormatter:u});return m.createElement(ye,Or({className:"recharts-cartesian-axis-tick",key:"tick-".concat(g.value,"-").concat(g.coordinate,"-").concat(g.tickCoord)},Ei(this.props,g,y)),i&&m.createElement("line",Or({},v,b,{className:H("recharts-cartesian-axis-tick-line",Kt(i,"className"))})),o&&Gt.renderTickItem(o,P,"".concat(typeof u=="function"?u(g.value,y):g.value).concat(l||"")))});return p.length>0?m.createElement("g",{className:"recharts-cartesian-axis-ticks"},p):null}render(){var{axisLine:t,width:r,height:n,className:i,hide:a}=this.props;if(a)return null;var{ticks:o}=this.props;return r!=null&&r<=0||n!=null&&n<=0?null:m.createElement(ye,{className:H("recharts-cartesian-axis",i),ref:u=>{if(u){var l=u.getElementsByClassName("recharts-cartesian-axis-tick-value");this.tickRefs.current=Array.from(l);var c=l[0];if(c){var s=window.getComputedStyle(c).fontSize,f=window.getComputedStyle(c).letterSpacing;(s!==this.state.fontSize||f!==this.state.letterSpacing)&&this.setState({fontSize:window.getComputedStyle(c).fontSize,letterSpacing:window.getComputedStyle(c).letterSpacing})}}}},t&&this.renderAxisLine(),this.renderTicks(this.state.fontSize,this.state.letterSpacing,o),qe.renderCallByParent(this.props))}}Rl(Gt,"displayName","CartesianAxis");Rl(Gt,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var uk=["x1","y1","x2","y2","key"],sk=["offset"],lk=["xAxisId","yAxisId"],ck=["xAxisId","yAxisId"];function Nh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function je(e){for(var t=1;t{var{fill:t}=e;if(!t||t==="none")return null;var{fillOpacity:r,x:n,y:i,width:a,height:o,ry:u}=e;return m.createElement("rect",{x:n,y:i,ry:u,width:a,height:o,stroke:"none",fill:t,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function Jg(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var{x1:n,y1:i,x2:a,y2:o,key:u}=t,l=Oi(t,uk),c=F(l,!1),{offset:s}=c,f=Oi(c,sk);r=m.createElement("line",ir({},f,{x1:n,y1:i,x2:a,y2:o,fill:"none",key:u}))}return r}function mk(e){var{x:t,width:r,horizontal:n=!0,horizontalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Oi(e,lk),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:t,y1:c,x2:t+r,y2:c,key:"line-".concat(s),index:s});return Jg(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-horizontal"},l)}function gk(e){var{y:t,height:r,vertical:n=!0,verticalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Oi(e,ck),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:c,y1:t,x2:c,y2:t+r,key:"line-".concat(s),index:s});return Jg(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-vertical"},l)}function yk(e){var{horizontalFill:t,fillOpacity:r,x:n,y:i,width:a,height:o,horizontalPoints:u,horizontal:l=!0}=e;if(!l||!t||!t.length)return null;var c=u.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%t.length;return m.createElement("rect",{key:"react-".concat(d),y:f,x:n,height:v,width:a,stroke:"none",fill:t[p],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},s)}function bk(e){var{vertical:t=!0,verticalFill:r,fillOpacity:n,x:i,y:a,width:o,height:u,verticalPoints:l}=e;if(!t||!r||!r.length)return null;var c=l.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%r.length;return m.createElement("rect",{key:"react-".concat(d),x:f,y:a,width:v,height:u,stroke:"none",fill:r[p],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},s)}var xk=(e,t)=>{var{xAxis:r,width:n,height:i,offset:a}=e;return Zv($l(je(je(je({},Gt.defaultProps),r),{},{ticks:Jv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.left,a.left+a.width,t)},wk=(e,t)=>{var{yAxis:r,width:n,height:i,offset:a}=e;return Zv($l(je(je(je({},Gt.defaultProps),r),{},{ticks:Jv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.top,a.top+a.height,t)},Pk={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0};function Ll(e){var t=ap(),r=op(),n=ip(),i=je(je({},it(e,Pk)),{},{x:D(e.x)?e.x:n.left,y:D(e.y)?e.y:n.top,width:D(e.width)?e.width:n.width,height:D(e.height)?e.height:n.height}),{xAxisId:a,yAxisId:o,x:u,y:l,width:c,height:s,syncWithTicks:f,horizontalValues:d,verticalValues:h}=i,v=_e(),p=$(T=>Dd(T,"xAxis",a,v)),g=$(T=>Dd(T,"yAxis",o,v));if(!D(c)||c<=0||!D(s)||s<=0||!D(u)||u!==+u||!D(l)||l!==+l)return null;var y=i.verticalCoordinatesGenerator||xk,b=i.horizontalCoordinatesGenerator||wk,{horizontalPoints:x,verticalPoints:P}=i;if((!x||!x.length)&&typeof b=="function"){var w=d&&d.length,O=b({yAxis:g?je(je({},g),{},{ticks:w?d:g.ticks}):void 0,width:t,height:r,offset:n},w?!0:f);Qr(Array.isArray(O),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof O,"]")),Array.isArray(O)&&(x=O)}if((!P||!P.length)&&typeof y=="function"){var A=h&&h.length,j=y({xAxis:p?je(je({},p),{},{ticks:A?h:p.ticks}):void 0,width:t,height:r,offset:n},A?!0:f);Qr(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(P=j)}return m.createElement("g",{className:"recharts-cartesian-grid"},m.createElement(pk,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),m.createElement(yk,ir({},i,{horizontalPoints:x})),m.createElement(bk,ir({},i,{verticalPoints:P})),m.createElement(mk,ir({},i,{offset:n,horizontalPoints:x,xAxis:p,yAxis:g})),m.createElement(gk,ir({},i,{offset:n,verticalPoints:P,xAxis:p,yAxis:g})))}Ll.displayName="CartesianGrid";var Qg=(e,t,r,n)=>vt(e,"xAxis",t,n),ey=(e,t,r,n)=>Ft(e,"xAxis",t,n),ty=(e,t,r,n)=>vt(e,"yAxis",r,n),ry=(e,t,r,n)=>Ft(e,"yAxis",r,n),Ok=S([Y,Qg,ty,ey,ry],(e,t,r,n,i)=>Wt(e,"xAxis")?nn(t,n,!1):nn(r,i,!1)),Ak=(e,t,r,n,i)=>i,Sk=S([Xi,Ak],(e,t)=>{if(e.some(r=>r.type==="line"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),Ek=S([Y,Qg,ty,ey,ry,Sk,Ok,$s],(e,t,r,n,i,a,o,u)=>{var{chartData:l,dataStartIndex:c,dataEndIndex:s}=u;if(!(a==null||t==null||r==null||n==null||i==null||n.length===0||i.length===0||o==null)){var{dataKey:f,data:d}=a,h;if(d!=null&&d.length>0?h=d:h=l==null?void 0:l.slice(c,s+1),h!=null)return Uk({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataKey:f,bandSize:o,displayedData:h})}}),jk=["type","layout","connectNulls","needClip"],Tk=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId"];function ny(e,t){if(e==null)return{};var r,n,i=Ck(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{dataKey:t,name:r,stroke:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Ir(r,t),payload:e}]};function Dk(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:u,unit:l}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:Ir(o,t),hide:u,type:e.tooltipType,color:e.stroke,unit:l}}}var iy=(e,t)=>"".concat(t,"px ").concat(e-t,"px");function Ik(e,t){for(var r=e.length%2!==0?[...e,0]:e,n=[],i=0;i{var n=r.reduce((f,d)=>f+d);if(!n)return iy(t,e);for(var i=Math.floor(e/n),a=e%n,o=t-e,u=[],l=0,c=0;la){u=[...r.slice(0,l),a-c];break}var s=u.length%2===0?[0,o]:[o];return[...Ik(r,i),...u,...s].map(f=>"".concat(f,"px")).join(", ")};function $k(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var n=H("recharts-line-dot",typeof e!="boolean"?e.className:"");r=m.createElement(Pg,Dr({},t,{className:n}))}return r}function Rk(e,t){return e==null?!1:t?!0:e.length===1}function Lk(e){var{clipPathId:t,points:r,props:n}=e,{dot:i,dataKey:a,needClip:o}=n;if(!Rk(r,i))return null;var u=Xh(i),l=F(n,!1),c=F(i,!0),s=r.map((d,h)=>{var v=ot(ot(ot({key:"dot-".concat(h),r:3},l),c),{},{index:h,cx:d.x,cy:d.y,dataKey:a,value:d.value,payload:d.payload,points:r});return $k(i,v)}),f={clipPath:o?"url(#clipPath-".concat(u?"":"dots-").concat(t,")"):null};return m.createElement(ye,Dr({className:"recharts-line-dots",key:"dots"},f),s)}function Iu(e){var{clipPathId:t,pathRef:r,points:n,strokeDasharray:i,props:a,showLabels:o}=e,{type:u,layout:l,connectNulls:c,needClip:s}=a,f=ny(a,jk),d=ot(ot({},F(f,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:s?"url(#clipPath-".concat(t,")"):null,points:n,type:u,layout:l,connectNulls:c,strokeDasharray:i??a.strokeDasharray});return m.createElement(m.Fragment,null,(n==null?void 0:n.length)>1&&m.createElement(cs,Dr({},d,{pathRef:r})),m.createElement(Lk,{points:n,clipPathId:t,props:a}),o&&Bt.renderCallByParent(a,n))}function Bk(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function Kk(e){var{clipPathId:t,props:r,pathRef:n,previousPointsRef:i,longestAnimatedLengthRef:a}=e,{points:o,strokeDasharray:u,isAnimationActive:l,animationBegin:c,animationDuration:s,animationEasing:f,animateNewValues:d,width:h,height:v,onAnimationEnd:p,onAnimationStart:g}=r,y=i.current,b=Cl(r,"recharts-line-"),[x,P]=m.useState(!1),w=m.useCallback(()=>{typeof p=="function"&&p(),P(!1)},[p]),O=m.useCallback(()=>{typeof g=="function"&&g(),P(!0)},[g]),A=Bk(n.current),j=a.current;return m.createElement(qt,{begin:c,duration:s,isActive:l,easing:f,from:{t:0},to:{t:1},onAnimationEnd:w,onAnimationStart:O,key:b},T=>{var{t:I}=T,_=Ke(j,A+j),k=Math.min(_(I),A),R;if(u){var B="".concat(u).split(/[,\s]+/gim).map(K=>parseFloat(K));R=Nk(k,A,B)}else R=iy(A,k);if(y){var z=y.length/o.length,V=I===1?o:o.map((K,de)=>{var oe=Math.floor(de*z);if(y[oe]){var Ie=y[oe],Ge=Ke(Ie.x,K.x),L=Ke(Ie.y,K.y);return ot(ot({},K),{},{x:Ge(I),y:L(I)})}if(d){var we=Ke(h*2,K.x),Vt=Ke(v/2,K.y);return ot(ot({},K),{},{x:we(I),y:Vt(I)})}return ot(ot({},K),{},{x:K.x,y:K.y})});return i.current=V,m.createElement(Iu,{props:r,points:V,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})}return I>0&&A>0&&(i.current=o,a.current=k),m.createElement(Iu,{props:r,points:o,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})})}function qk(e){var{clipPathId:t,props:r}=e,{points:n,isAnimationActive:i}=r,a=m.useRef(null),o=m.useRef(0),u=m.useRef(null),l=a.current;return i&&n&&n.length&&l!==n?m.createElement(Kk,{props:r,clipPathId:t,previousPointsRef:a,longestAnimatedLengthRef:o,pathRef:u}):m.createElement(Iu,{props:r,points:n,clipPathId:t,pathRef:u,showLabels:!0})}var Fk=(e,t)=>({x:e.x,y:e.y,value:e.value,errorVal:re(e.payload,t)});class zk extends m.Component{constructor(){super(...arguments),oa(this,"id",lr("recharts-line-"))}render(){var t,{hide:r,dot:n,points:i,className:a,xAxisId:o,yAxisId:u,top:l,left:c,width:s,height:f,id:d,needClip:h,layout:v}=this.props;if(r)return null;var p=H("recharts-line",a),g=J(d)?this.id:d,{r:y=3,strokeWidth:b=2}=(t=F(n,!1))!==null&&t!==void 0?t:{r:3,strokeWidth:2},x=Xh(n),P=y*2+b;return m.createElement(m.Fragment,null,m.createElement(ye,{className:p},h&&m.createElement("defs",null,m.createElement(zg,{clipPathId:g,xAxisId:o,yAxisId:u}),!x&&m.createElement("clipPath",{id:"clipPath-dots-".concat(g)},m.createElement("rect",{x:c-P/2,y:l-P/2,width:s+P,height:f+P}))),m.createElement(qk,{props:this.props,clipPathId:g}),m.createElement(Bg,{direction:v==="horizontal"?"y":"x"},m.createElement(Ng,{xAxisId:o,yAxisId:u,data:i,dataPointFormatter:Fk,errorBarOffset:0},this.props.children))),m.createElement(OC,{activeDot:this.props.activeDot,points:i,mainColor:this.props.stroke,itemDataKey:this.props.dataKey}))}}var ay={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:!vr.isSsr,label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0};function Wk(e){var t=it(e,ay),{activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,connectNulls:u,dot:l,hide:c,isAnimationActive:s,label:f,legendType:d,xAxisId:h,yAxisId:v}=t,p=ny(t,Tk),{needClip:g}=Ml(h,v),{height:y,width:b,x,y:P}=kl(),w=Ki(),O=_e(),A=m.useMemo(()=>({dataKey:e.dataKey,data:e.data}),[e.dataKey,e.data]),j=$(T=>Ek(T,h,v,O,A));return w!=="horizontal"&&w!=="vertical"?null:m.createElement(zk,Dr({},p,{connectNulls:u,dot:l,activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:s,hide:c,label:f,legendType:d,xAxisId:h,yAxisId:v,points:j,layout:w,height:y,width:b,left:x,top:P,needClip:g}))}function Uk(e){var{layout:t,xAxis:r,yAxis:n,xAxisTicks:i,yAxisTicks:a,dataKey:o,bandSize:u,displayedData:l}=e;return l.map((c,s)=>{var f=re(c,o);return t==="horizontal"?{x:vf({axis:r,ticks:i,bandSize:u,entry:c,index:s}),y:J(f)?null:n.scale(f),value:f,payload:c}:{x:J(f)?null:r.scale(f),y:vf({axis:n,ticks:a,bandSize:u,entry:c,index:s}),value:f,payload:c}})}class Bl extends m.PureComponent{render(){return m.createElement($g,{type:"line",data:this.props.data,xAxisId:this.props.xAxisId,yAxisId:this.props.yAxisId,zAxisId:0,dataKey:this.props.dataKey,stackId:void 0,hide:this.props.hide,barSize:void 0},m.createElement(_g,{legendPayload:Mk(this.props)}),m.createElement(Tl,{fn:Dk,args:this.props}),m.createElement(Wk,this.props))}}oa(Bl,"displayName","Line");oa(Bl,"defaultProps",ay);function Rh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Lh(e){for(var t=1;t{var{children:a}=e,o=sy(e,rM);return o},[e]),n=$(a=>Mt(a,r.id)),i=r===n;return m.useEffect(()=>(t(Xk(r)),()=>{t(Zk(r))}),[r,t]),i?e.children:null}var sM=e=>{var{xAxisId:t,className:r}=e,n=$(np),i=_e(),a="xAxis",o=$(h=>Kr(h,a,t,i)),u=$(h=>Fm(h,a,t,i)),l=$(h=>Lm(h,t)),c=$(h=>wS(h,t));if(l==null||c==null)return null;var{dangerouslySetInnerHTML:s,ticks:f}=e,d=sy(e,nM);return m.createElement(Gt,Nu({},d,{scale:o,x:c.x,y:c.y,width:l.width,height:l.height,className:H("recharts-".concat(a," ").concat(a),r),viewBox:n,ticks:u}))},lM=e=>{var t,r,n,i,a;return m.createElement(uM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.xAxisId,scale:e.scale,type:e.type,padding:e.padding,allowDataOverflow:e.allowDataOverflow,domain:e.domain,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,height:e.height,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter},m.createElement(sM,e))};class ua extends m.Component{render(){return m.createElement(lM,this.props)}}uy(ua,"displayName","XAxis");uy(ua,"defaultProps",{allowDataOverflow:Re.allowDataOverflow,allowDecimals:Re.allowDecimals,allowDuplicatedCategory:Re.allowDuplicatedCategory,height:Re.height,hide:!1,mirror:Re.mirror,orientation:Re.orientation,padding:Re.padding,reversed:Re.reversed,scale:Re.scale,tickCount:Re.tickCount,type:Re.type,xAxisId:0});var cM=e=>{var{ticks:t,label:r,labelGapWithTick:n=5,tickSize:i=0,tickMargin:a=0}=e,o=0;if(t){t.forEach(s=>{if(s){var f=s.getBoundingClientRect();f.width>o&&(o=f.width)}});var u=r?r.getBoundingClientRect().width:0,l=i+a,c=o+l+u+(r?n:0);return Math.round(c)}return 0},fM=["dangerouslySetInnerHTML","ticks"];function ly(e,t,r){return(t=dM(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dM(e){var t=hM(e,"string");return typeof t=="symbol"?t:t+""}function hM(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function $u(){return $u=Object.assign?Object.assign.bind():function(e){for(var t=1;t(t(Jk(e)),()=>{t(Qk(e))}),[e,t]),null}var gM=e=>{var t,{yAxisId:r,className:n,width:i,label:a}=e,o=m.useRef(null),u=m.useRef(null),l=$(np),c=_e(),s=ae(),f="yAxis",d=$(x=>Kr(x,f,r,c)),h=$(x=>Bm(x,r)),v=$(x=>PS(x,r)),p=$(x=>Fm(x,f,r,c));if(m.useLayoutEffect(()=>{var x;if(!(i!=="auto"||!h||xl(a)||m.isValidElement(a))){var P=o.current,w=P==null||(x=P.tickRefs)===null||x===void 0?void 0:x.current,{tickSize:O,tickMargin:A}=P.props,j=cM({ticks:w,label:u.current,labelGapWithTick:5,tickSize:O,tickMargin:A});Math.round(h.width)!==Math.round(j)&&s(eM({id:r,width:j}))}},[o,o==null||(t=o.current)===null||t===void 0||(t=t.tickRefs)===null||t===void 0?void 0:t.current,h==null?void 0:h.width,h,s,a,r,i]),h==null||v==null)return null;var{dangerouslySetInnerHTML:g,ticks:y}=e,b=vM(e,fM);return m.createElement(Gt,$u({},b,{ref:o,labelRef:u,scale:d,x:v.x,y:v.y,width:h.width,height:h.height,className:H("recharts-".concat(f," ").concat(f),n),viewBox:l,ticks:p}))},yM=e=>{var t,r,n,i,a;return m.createElement(m.Fragment,null,m.createElement(mM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.yAxisId,scale:e.scale,type:e.type,domain:e.domain,allowDataOverflow:e.allowDataOverflow,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,padding:e.padding,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,width:e.width,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter}),m.createElement(gM,e))},bM={allowDataOverflow:Le.allowDataOverflow,allowDecimals:Le.allowDecimals,allowDuplicatedCategory:Le.allowDuplicatedCategory,hide:!1,mirror:Le.mirror,orientation:Le.orientation,padding:Le.padding,reversed:Le.reversed,scale:Le.scale,tickCount:Le.tickCount,type:Le.type,width:Le.width,yAxisId:0};class sa extends m.Component{render(){return m.createElement(yM,this.props)}}ly(sa,"displayName","YAxis");ly(sa,"defaultProps",bM);var Fo={exports:{}},zo={};/** + `).concat(P.x,",").concat(P.y),O=J(e.id)?lr("recharts-radial-line-"):e.id;return m.createElement("text",mt({},r,{dominantBaseline:"central",className:H("recharts-radial-bar-label",o)}),m.createElement("defs",null,m.createElement("path",{id:O,d:w})),m.createElement("textPath",{xlinkHref:"#".concat(O)},t))},Lj=e=>{var{viewBox:t,offset:r,position:n}=e,{cx:i,cy:a,innerRadius:o,outerRadius:u,startAngle:l,endAngle:c}=t,s=(l+c)/2;if(n==="outside"){var{x:f,y:d}=ce(i,a,u+r,s);return{x:f,y:d,textAnchor:f>=i?"start":"end",verticalAnchor:"middle"}}if(n==="center")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"middle"};if(n==="centerTop")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"start"};if(n==="centerBottom")return{x:i,y:a,textAnchor:"middle",verticalAnchor:"end"};var h=(o+u)/2,{x:v,y:p}=ce(i,a,h,s);return{x:v,y:p,textAnchor:"middle",verticalAnchor:"middle"}},Bj=(e,t)=>{var{parentViewBox:r,offset:n,position:i}=e,{x:a,y:o,width:u,height:l}=t,c=l>=0?1:-1,s=c*n,f=c>0?"end":"start",d=c>0?"start":"end",h=u>=0?1:-1,v=h*n,p=h>0?"end":"start",g=h>0?"start":"end";if(i==="top"){var y={x:a+u/2,y:o-c*n,textAnchor:"middle",verticalAnchor:f};return le(le({},y),r?{height:Math.max(o-r.y,0),width:u}:{})}if(i==="bottom"){var b={x:a+u/2,y:o+l+s,textAnchor:"middle",verticalAnchor:d};return le(le({},b),r?{height:Math.max(r.y+r.height-(o+l),0),width:u}:{})}if(i==="left"){var x={x:a-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"};return le(le({},x),r?{width:Math.max(x.x-r.x,0),height:l}:{})}if(i==="right"){var P={x:a+u+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"};return le(le({},P),r?{width:Math.max(r.x+r.width-P.x,0),height:l}:{})}var w=r?{width:u,height:l}:{};return i==="insideLeft"?le({x:a+v,y:o+l/2,textAnchor:g,verticalAnchor:"middle"},w):i==="insideRight"?le({x:a+u-v,y:o+l/2,textAnchor:p,verticalAnchor:"middle"},w):i==="insideTop"?le({x:a+u/2,y:o+s,textAnchor:"middle",verticalAnchor:d},w):i==="insideBottom"?le({x:a+u/2,y:o+l-s,textAnchor:"middle",verticalAnchor:f},w):i==="insideTopLeft"?le({x:a+v,y:o+s,textAnchor:g,verticalAnchor:d},w):i==="insideTopRight"?le({x:a+u-v,y:o+s,textAnchor:p,verticalAnchor:d},w):i==="insideBottomLeft"?le({x:a+v,y:o+l-s,textAnchor:g,verticalAnchor:f},w):i==="insideBottomRight"?le({x:a+u-v,y:o+l-s,textAnchor:p,verticalAnchor:f},w):i&&typeof i=="object"&&(D(i.x)||er(i.x))&&(D(i.y)||er(i.y))?le({x:a+Ce(i.x,u),y:o+Ce(i.y,l),textAnchor:"end",verticalAnchor:"end"},w):le({x:a+u/2,y:o+l/2,textAnchor:"middle",verticalAnchor:"middle"},w)},Kj=e=>"cx"in e&&D(e.cx);function qe(e){var{offset:t=5}=e,r=ih(e,Cj),n=le({offset:t},r),{viewBox:i,position:a,value:o,children:u,content:l,className:c="",textBreakAll:s,labelRef:f}=n,d=ls(),h=i||d;if(!h||J(o)&&J(u)&&!m.isValidElement(l)&&typeof l!="function")return null;if(m.isValidElement(l)){var{labelRef:v}=n,p=ih(n,_j);return m.cloneElement(l,p)}var g;if(typeof l=="function"){if(g=m.createElement(l,n),m.isValidElement(g))return g}else g=Nj(n);var y=Kj(h),b=F(n,!0);if(y&&(a==="insideStart"||a==="insideEnd"||a==="end"))return Rj(n,g,b);var x=y?Lj(n):Bj(n,h);return m.createElement(na,mt({ref:f,className:H("recharts-label",c)},b,x,{breakAll:s}),g)}qe.displayName="Label";var wg=e=>{var{cx:t,cy:r,angle:n,startAngle:i,endAngle:a,r:o,radius:u,innerRadius:l,outerRadius:c,x:s,y:f,top:d,left:h,width:v,height:p,clockWise:g,labelViewBox:y}=e;if(y)return y;if(D(v)&&D(p)){if(D(s)&&D(f))return{x:s,y:f,width:v,height:p};if(D(d)&&D(h))return{x:d,y:h,width:v,height:p}}if(D(s)&&D(f))return{x:s,y:f,width:0,height:0};if(D(t)&&D(r))return{cx:t,cy:r,startAngle:i||n||0,endAngle:a||n||0,innerRadius:l||0,outerRadius:c||u||o||0,clockWise:g};if(e.viewBox)return e.viewBox},qj=(e,t,r)=>{if(!e)return null;var n={viewBox:t,labelRef:r};return e===!0?m.createElement(qe,mt({key:"label-implicit"},n)):dt(e)?m.createElement(qe,mt({key:"label-implicit",value:e},n)):m.isValidElement(e)?e.type===qe?m.cloneElement(e,le({key:"label-implicit"},n)):m.createElement(qe,mt({key:"label-implicit",content:e},n)):xl(e)?m.createElement(qe,mt({key:"label-implicit",content:e},n)):e&&typeof e=="object"?m.createElement(qe,mt({},e,{key:"label-implicit"},n)):null},Fj=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var{children:i,labelRef:a}=t,o=wg(t),u=pn(i,qe).map((c,s)=>m.cloneElement(c,{viewBox:r||o,key:"label-".concat(s)}));if(!n)return u;var l=qj(t.label,r||o,a);return[l,...u]};qe.parseViewBox=wg;qe.renderCallByParent=Fj;var No={},$o={},oh;function zj(){return oh||(oh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return r[r.length-1]}e.last=t}($o)),$o}var Ro={},uh;function Wj(){return uh||(uh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){return Array.isArray(r)?r:Array.from(r)}e.toArray=t}(Ro)),Ro}var sh;function Uj(){return sh||(sh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t=zj(),r=Wj(),n=Xu();function i(a){if(n.isArrayLike(a))return t.last(r.toArray(a))}e.last=i}(No)),No}var Lo,lh;function Hj(){return lh||(lh=1,Lo=Uj().last),Lo}var Yj=Hj();const Gj=Tt(Yj);var Vj=["valueAccessor"],Xj=["data","dataKey","clockWise","id","textBreakAll"];function bi(){return bi=Object.assign?Object.assign.bind():function(e){for(var t=1;tArray.isArray(e.value)?Gj(e.value):e.value;function Bt(e){var{valueAccessor:t=tT}=e,r=dh(e,Vj),{data:n,dataKey:i,clockWise:a,id:o,textBreakAll:u}=r,l=dh(r,Xj);return!n||!n.length?null:m.createElement(ye,{className:"recharts-label-list"},n.map((c,s)=>{var f=J(i)?t(c,s):re(c&&c.payload,i),d=J(o)?{}:{id:"".concat(o,"-").concat(s)};return m.createElement(qe,bi({},F(c,!0),l,d,{parentViewBox:c.parentViewBox,value:f,textBreakAll:u,viewBox:qe.parseViewBox(J(a)?c:fh(fh({},c),{},{clockWise:a})),key:"label-".concat(s),index:s}))}))}Bt.displayName="LabelList";function rT(e,t){return e?e===!0?m.createElement(Bt,{key:"labelList-implicit",data:t}):m.isValidElement(e)||xl(e)?m.createElement(Bt,{key:"labelList-implicit",data:t,content:e}):typeof e=="object"?m.createElement(Bt,bi({data:t},e,{key:"labelList-implicit"})):null:null}function nT(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var{children:n}=e,i=pn(n,Bt).map((o,u)=>m.cloneElement(o,{data:t,key:"labelList-".concat(u)}));if(!r)return i;var a=rT(e.label,t);return[a,...i]}Bt.renderCallByParent=nT;function ku(){return ku=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{cx:t,cy:r,r:n,className:i}=e,a=H("recharts-dot",i);return t===+t&&r===+r&&n===+n?m.createElement("circle",ku({},F(e,!1),Hu(e),{className:a,cx:t,cy:r,r:n})):null},Og=e=>e.graphicalItems.polarItems,iT=S([ue,Pn],Hs),wl=S([Og,se,iT],Ys),aT=S([wl],Gs),Pl=S([aT,Ns],Vs),oT=S([Pl,se,wl],Xs),uT=S([Pl,se,wl],(e,t,r)=>r.length>0?e.flatMap(n=>r.flatMap(i=>{var a,o=re(n,(a=t.dataKey)!==null&&a!==void 0?a:i.dataKey);return{value:o,errorDomain:[]}})).filter(Boolean):(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:re(n,t.dataKey),errorDomain:[]})):e.map(n=>({value:n,errorDomain:[]}))),hh=()=>{},sT=S([se,Mm,hh,uT,hh],Qs),Ag=S([se,Y,Pl,oT,wn,ue,sT],el),lT=S([Ag,se,Br],nl);S([se,Ag,lT,ue],al);var cT={radiusAxis:{},angleAxis:{}},Sg=nt({name:"polarAxis",initialState:cT,reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),{addRadiusAxis:UD,removeRadiusAxis:HD,addAngleAxis:YD,removeAngleAxis:GD}=Sg.actions,fT=Sg.reducer;function vh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ph(e){for(var t=1;tt,pT=[],Al=(e,t,r)=>(r==null?void 0:r.length)===0?pT:r,Eg=S([Ns,Ol,Al],(e,t,r)=>{var{chartData:n}=e,i;if((t==null?void 0:t.data)!=null&&t.data.length>0?i=t.data:i=n,(!i||!i.length)&&r!=null&&(i=r.map(a=>ph(ph({},t.presentationProps),a.props))),i!=null)return i}),mT=S([Eg,Ol,Al],(e,t,r)=>{if(e!=null)return e.map((n,i)=>{var a,o=re(n,t.nameKey,t.name),u;return r!=null&&(a=r[i])!==null&&a!==void 0&&(a=a.props)!==null&&a!==void 0&&a.fill?u=r[i].props.fill:typeof n=="object"&&n!=null&&"fill"in n?u=n.fill:u=t.fill,{value:Ir(o,t.dataKey),color:u,payload:n,type:t.legendType}})}),gT=S([Og,Ol],(e,t)=>{if(e.some(r=>r.type==="pie"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),yT=S([Eg,gT,Al,ve],(e,t,r,n)=>{if(!(t==null||e==null))return lC({offset:n,pieSettings:t,displayedData:e,cells:r})}),bT={countOfBars:0,cartesianItems:[],polarItems:[]},jg=nt({name:"graphicalItems",initialState:bT,reducers:{addBar(e){e.countOfBars+=1},removeBar(e){e.countOfBars-=1},addCartesianGraphicalItem(e,t){e.cartesianItems.push(t.payload)},replaceCartesianGraphicalItem(e,t){var{prev:r,next:n}=t.payload,i=Pt(e).cartesianItems.indexOf(r);i>-1&&(e.cartesianItems[i]=n)},removeCartesianGraphicalItem(e,t){var r=Pt(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},addPolarGraphicalItem(e,t){e.polarItems.push(t.payload)},removePolarGraphicalItem(e,t){var r=Pt(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)}}}),{addBar:xT,removeBar:wT,addCartesianGraphicalItem:PT,replaceCartesianGraphicalItem:OT,removeCartesianGraphicalItem:AT,addPolarGraphicalItem:ST,removePolarGraphicalItem:ET}=jg.actions,jT=jg.reducer;function mh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function gh(e){for(var t=1;t{var n=gh(gh({},e),{},{stackId:Qv(e.stackId)});r.current===null?t(PT(n)):r.current!==n&&t(OT({prev:r.current,next:n})),r.current=n},[t,e]),m.useEffect(()=>()=>{r.current&&(t(AT(r.current)),r.current=null)},[t]),null}function MT(e){var t=ae();return m.useEffect(()=>(t(ST(e)),()=>{t(ET(e))}),[t,e]),null}var Bo={},yh;function DT(){return yh||(yh=1,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});function t(r){var i;if(typeof r!="object"||r==null)return!1;if(Object.getPrototypeOf(r)===null)return!0;if(Object.prototype.toString.call(r)!=="[object Object]"){const a=r[Symbol.toStringTag];return a==null||!((i=Object.getOwnPropertyDescriptor(r,Symbol.toStringTag))!=null&&i.writable)?!1:r.toString()===`[object ${a}]`}let n=r;for(;Object.getPrototypeOf(n)!==null;)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(r)===n}e.isPlainObject=t}(Bo)),Bo}var Ko,bh;function IT(){return bh||(bh=1,Ko=DT().isPlainObject),Ko}var NT=IT();const $T=Tt(NT);function xi(){return xi=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var a=r-n,o;return o="M ".concat(e,",").concat(t),o+="L ".concat(e+r,",").concat(t),o+="L ".concat(e+r-a/2,",").concat(t+i),o+="L ".concat(e+r-a/2-n,",").concat(t+i),o+="L ".concat(e,",").concat(t," Z"),o},RT={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},LT=e=>{var t=it(e,RT),r=m.useRef(),[n,i]=m.useState(-1);m.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var g=r.current.getTotalLength();g&&i(g)}catch{}},[]);var{x:a,y:o,upperWidth:u,lowerWidth:l,height:c,className:s}=t,{animationEasing:f,animationDuration:d,animationBegin:h,isUpdateAnimationActive:v}=t;if(a!==+a||o!==+o||u!==+u||l!==+l||c!==+c||u===0&&l===0||c===0)return null;var p=H("recharts-trapezoid",s);return v?m.createElement(qt,{canBegin:n>0,from:{upperWidth:0,lowerWidth:0,height:c,x:a,y:o},to:{upperWidth:u,lowerWidth:l,height:c,x:a,y:o},duration:d,animationEasing:f,isActive:v},g=>{var{upperWidth:y,lowerWidth:b,height:x,x:P,y:w}=g;return m.createElement(qt,{canBegin:n>0,from:"0px ".concat(n===-1?1:n,"px"),to:"".concat(n,"px 0px"),attributeName:"strokeDasharray",begin:h,duration:d,easing:f},m.createElement("path",xi({},F(t,!0),{className:p,d:xh(P,w,y,b,x),ref:r})))}):m.createElement("g",null,m.createElement("path",xi({},F(t,!0),{className:p,d:xh(a,o,u,l,c)})))},BT=["option","shapeType","propTransformer","activeClassName","isActive"];function KT(e,t){if(e==null)return{};var r,n,i=qT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(Gm({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}},El=e=>{var t=ae();return(r,n)=>i=>{e==null||e(r,n,i),t(DS())}},jl=(e,t)=>{var r=ae();return(n,i)=>a=>{e==null||e(n,i,a),r(IS({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}};function Tl(e){var{fn:t,args:r}=e,n=ae(),i=_e();return m.useEffect(()=>{if(!i){var a=t(r);return n(_S(a)),()=>{n(kS(a))}}},[t,r,n,i]),null}var Cg=()=>{};function _g(e){var{legendPayload:t}=e,r=ae(),n=_e();return m.useEffect(()=>n?Cg:(r(sp(t)),()=>{r(lp(t))}),[r,n,t]),null}function GT(e){var{legendPayload:t}=e,r=ae(),n=$(Y);return m.useEffect(()=>n!=="centric"&&n!=="radial"?Cg:(r(sp(t)),()=>{r(lp(t))}),[r,n,t]),null}function Cl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"animation-",r=m.useRef(lr(t)),n=m.useRef(e);return n.current!==e&&(r.current=lr(t),n.current=e),r.current}var VT=["onMouseEnter","onClick","onMouseLeave"];function XT(e,t){if(e==null)return{};var r,n,i=ZT(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;nF(e,!1),[e]),r=m.useMemo(()=>pn(e.children,jn),[e.children]),n=m.useMemo(()=>({name:e.name,nameKey:e.nameKey,tooltipType:e.tooltipType,data:e.data,dataKey:e.dataKey,cx:e.cx,cy:e.cy,startAngle:e.startAngle,endAngle:e.endAngle,minAngle:e.minAngle,paddingAngle:e.paddingAngle,innerRadius:e.innerRadius,outerRadius:e.outerRadius,cornerRadius:e.cornerRadius,legendType:e.legendType,fill:e.fill,presentationProps:t}),[e.cornerRadius,e.cx,e.cy,e.data,e.dataKey,e.endAngle,e.innerRadius,e.minAngle,e.name,e.nameKey,e.outerRadius,e.paddingAngle,e.startAngle,e.tooltipType,e.legendType,e.fill,t]),i=$(a=>mT(a,n,r));return m.createElement(GT,{legendPayload:i})}function tC(e){var{dataKey:t,nameKey:r,sectors:n,stroke:i,strokeWidth:a,fill:o,name:u,hide:l,tooltipType:c}=e;return{dataDefinedOnItem:n==null?void 0:n.map(s=>s.tooltipPayload),positions:n==null?void 0:n.map(s=>s.tooltipPosition),settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:r,name:Ir(u,t),hide:l,type:c,color:o,unit:""}}}var rC=(e,t)=>e>t?"start":etypeof t=="function"?t(e):Ce(t,r,r*.8),iC=(e,t,r)=>{var{top:n,left:i,width:a,height:o}=t,u=Xv(a,o),l=i+Ce(e.cx,a,a/2),c=n+Ce(e.cy,o,o/2),s=Ce(e.innerRadius,u,0),f=nC(r,e.outerRadius,u),d=e.maxRadius||Math.sqrt(a*a+o*o)/2;return{cx:l,cy:c,innerRadius:s,outerRadius:f,maxRadius:d}},aC=(e,t)=>{var r=ge(t-e),n=Math.min(Math.abs(t-e),360);return r*n},oC=(e,t)=>{if(m.isValidElement(e))return m.cloneElement(e,t);if(typeof e=="function")return e(t);var r=H("recharts-pie-label-line",typeof e!="boolean"?e.className:"");return m.createElement(cs,hr({},t,{type:"linear",className:r}))},uC=(e,t,r)=>{if(m.isValidElement(e))return m.cloneElement(e,t);var n=r;if(typeof e=="function"&&(n=e(t),m.isValidElement(n)))return n;var i=H("recharts-pie-label-text",typeof e!="boolean"&&typeof e!="function"?e.className:"");return m.createElement(na,hr({},t,{alignmentBaseline:"middle",className:i}),n)};function sC(e){var{sectors:t,props:r,showLabels:n}=e,{label:i,labelLine:a,dataKey:o}=r;if(!n||!i||!t)return null;var u=F(r,!1),l=F(i,!1),c=F(a,!1),s=typeof i=="object"&&"offsetRadius"in i&&i.offsetRadius||20,f=t.map((d,h)=>{var v=(d.startAngle+d.endAngle)/2,p=ce(d.cx,d.cy,d.outerRadius+s,v),g=ie(ie(ie(ie({},u),d),{},{stroke:"none"},l),{},{index:h,textAnchor:rC(p.x,d.cx)},p),y=ie(ie(ie(ie({},u),d),{},{fill:"none",stroke:d.fill},c),{},{index:h,points:[ce(d.cx,d.cy,d.outerRadius,v),p],key:"line"});return m.createElement(ye,{key:"label-".concat(d.startAngle,"-").concat(d.endAngle,"-").concat(d.midAngle,"-").concat(h)},a&&oC(a,y),uC(i,g,re(d,o)))});return m.createElement(ye,{className:"recharts-pie-labels"},f)}function kg(e){var{sectors:t,activeShape:r,inactiveShape:n,allOtherPieProps:i,showLabels:a}=e,o=$(zt),{onMouseEnter:u,onClick:l,onMouseLeave:c}=i,s=XT(i,VT),f=Sl(u,i.dataKey),d=El(c),h=jl(l,i.dataKey);return t==null?null:m.createElement(m.Fragment,null,t.map((v,p)=>{if((v==null?void 0:v.startAngle)===0&&(v==null?void 0:v.endAngle)===0&&t.length!==1)return null;var g=r&&String(p)===o,y=o?n:null,b=g?r:y,x=ie(ie({},v),{},{stroke:v.stroke,tabIndex:-1,[tp]:p,[rp]:i.dataKey});return m.createElement(ye,hr({tabIndex:-1,className:"recharts-pie-sector"},Ei(s,v,p),{onMouseEnter:f(v,p),onMouseLeave:d(v,p),onClick:h(v,p),key:"sector-".concat(v==null?void 0:v.startAngle,"-").concat(v==null?void 0:v.endAngle,"-").concat(v.midAngle,"-").concat(p)}),m.createElement(Tg,hr({option:b,isActive:g,shapeType:"sector"},x)))}),m.createElement(sC,{sectors:t,props:i,showLabels:a}))}function lC(e){var t,{pieSettings:r,displayedData:n,cells:i,offset:a}=e,{cornerRadius:o,startAngle:u,endAngle:l,dataKey:c,nameKey:s,tooltipType:f}=r,d=Math.abs(r.minAngle),h=aC(u,l),v=Math.abs(h),p=n.length<=1?0:(t=r.paddingAngle)!==null&&t!==void 0?t:0,g=n.filter(O=>re(O,c,0)!==0).length,y=(v>=360?g:g-1)*p,b=v-g*d-y,x=n.reduce((O,A)=>{var j=re(A,c,0);return O+(D(j)?j:0)},0),P;if(x>0){var w;P=n.map((O,A)=>{var j=re(O,c,0),T=re(O,s,A),I=iC(r,a,O),_=(D(j)?j:0)/x,k,R=ie(ie({},O),i&&i[A]&&i[A].props);A?k=w.endAngle+ge(h)*p*(j!==0?1:0):k=u;var B=k+ge(h)*((j!==0?d:0)+_*b),z=(k+B)/2,V=(I.innerRadius+I.outerRadius)/2,K=[{name:T,value:j,payload:R,dataKey:c,type:f}],de=ce(I.cx,I.cy,V,z);return w=ie(ie(ie(ie({},r.presentationProps),{},{percent:_,cornerRadius:o,name:T,tooltipPayload:K,midAngle:z,middleRadius:V,tooltipPosition:de},R),I),{},{value:re(O,c),startAngle:k,endAngle:B,payload:R,paddingAngle:ge(h)*p}),w})}return P}function cC(e){var{props:t,previousSectorsRef:r}=e,{sectors:n,isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:u,activeShape:l,inactiveShape:c,onAnimationStart:s,onAnimationEnd:f}=t,d=Cl(t,"recharts-pie-"),h=r.current,[v,p]=m.useState(!0),g=m.useCallback(()=>{typeof f=="function"&&f(),p(!1)},[f]),y=m.useCallback(()=>{typeof s=="function"&&s(),p(!0)},[s]);return m.createElement(qt,{begin:a,duration:o,isActive:i,easing:u,from:{t:0},to:{t:1},onAnimationStart:y,onAnimationEnd:g,key:d},b=>{var{t:x}=b,P=[],w=n&&n[0],O=w.startAngle;return n.forEach((A,j)=>{var T=h&&h[j],I=j>0?Kt(A,"paddingAngle",0):0;if(T){var _=Ke(T.endAngle-T.startAngle,A.endAngle-A.startAngle),k=ie(ie({},A),{},{startAngle:O+I,endAngle:O+_(x)+I});P.push(k),O=k.endAngle}else{var{endAngle:R,startAngle:B}=A,z=Ke(0,R-B),V=z(x),K=ie(ie({},A),{},{startAngle:O+I,endAngle:O+V+I});P.push(K),O=K.endAngle}}),r.current=P,m.createElement(ye,null,m.createElement(kg,{sectors:P,activeShape:l,inactiveShape:c,allOtherPieProps:t,showLabels:!v}))})}function fC(e){var{sectors:t,isAnimationActive:r,activeShape:n,inactiveShape:i}=e,a=m.useRef(null),o=a.current;return r&&t&&t.length&&(!o||o!==t)?m.createElement(cC,{props:e,previousSectorsRef:a}):m.createElement(kg,{sectors:t,activeShape:n,inactiveShape:i,allOtherPieProps:e,showLabels:!0})}function dC(e){var{hide:t,className:r,rootTabIndex:n}=e,i=H("recharts-pie",r);return t?null:m.createElement(ye,{tabIndex:n,className:i},m.createElement(fC,e))}var Mg={animationBegin:400,animationDuration:1500,animationEasing:"ease",cx:"50%",cy:"50%",dataKey:"value",endAngle:360,fill:"#808080",hide:!1,innerRadius:0,isAnimationActive:!vr.isSsr,labelLine:!0,legendType:"rect",minAngle:0,nameKey:"name",outerRadius:"80%",paddingAngle:0,rootTabIndex:0,startAngle:0,stroke:"#fff"};function hC(e){var t=it(e,Mg),r=m.useMemo(()=>pn(e.children,jn),[e.children]),n=F(t,!1),i=m.useMemo(()=>({name:t.name,nameKey:t.nameKey,tooltipType:t.tooltipType,data:t.data,dataKey:t.dataKey,cx:t.cx,cy:t.cy,startAngle:t.startAngle,endAngle:t.endAngle,minAngle:t.minAngle,paddingAngle:t.paddingAngle,innerRadius:t.innerRadius,outerRadius:t.outerRadius,cornerRadius:t.cornerRadius,legendType:t.legendType,fill:t.fill,presentationProps:n}),[t.cornerRadius,t.cx,t.cy,t.data,t.dataKey,t.endAngle,t.innerRadius,t.minAngle,t.name,t.nameKey,t.outerRadius,t.paddingAngle,t.startAngle,t.tooltipType,t.legendType,t.fill,n]),a=$(o=>yT(o,i,r));return m.createElement(m.Fragment,null,m.createElement(Tl,{fn:tC,args:ie(ie({},t),{},{sectors:a})}),m.createElement(dC,hr({},t,{sectors:a})))}class _l extends m.PureComponent{constructor(){super(...arguments),ia(this,"id",lr("recharts-pie-"))}render(){return m.createElement(m.Fragment,null,m.createElement(MT,{data:this.props.data,dataKey:this.props.dataKey,hide:this.props.hide,angleAxisId:0,radiusAxisId:0,stackId:void 0,barSize:void 0,type:"pie"}),m.createElement(eC,this.props),m.createElement(hC,this.props),this.props.children)}}ia(_l,"displayName","Pie");ia(_l,"defaultProps",Mg);var vC=S([ve],e=>{if(e)return{top:e.top,bottom:e.bottom,left:e.left,right:e.right}}),pC=S([vC,Ct,_t],(e,t,r)=>{if(!(!e||t==null||r==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}}),mC=e=>{var t=_e();return $(r=>vt(r,"xAxis",e,t))},gC=e=>{var t=_e();return $(r=>vt(r,"yAxis",e,t))},kl=()=>$(pC),yC=()=>$(yE);function Ah(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Sh(e){for(var t=1;t{var{point:t,childIndex:r,mainColor:n,activeDot:i,dataKey:a}=e;if(i===!1||t.x==null||t.y==null)return null;var o=Sh(Sh({index:r,dataKey:a,cx:t.x,cy:t.y,r:4,fill:n??"none",strokeWidth:2,stroke:"#fff",payload:t.payload,value:t.value},F(i,!1)),Hu(i)),u;return m.isValidElement(i)?u=m.cloneElement(i,o):typeof i=="function"?u=i(o):u=m.createElement(Pg,o),m.createElement(ye,{className:"recharts-active-dot"},u)};function OC(e){var{points:t,mainColor:r,activeDot:n,itemDataKey:i}=e,a=$(zt),o=yC();if(t==null||o==null)return null;var u=t.find(l=>o.includes(l.payload));return J(u)?null:PC({point:u,childIndex:Number(a),mainColor:r,dataKey:i,activeDot:n})}var AC=()=>{var e=ae();return m.useEffect(()=>(e(xT()),()=>{e(wT())})),null},SC=["children"];function EC(e,t){if(e==null)return{};var r,n,i=jC(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{},Dg=m.createContext({addErrorBar:Eh,removeErrorBar:Eh}),TC={data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0},Ig=m.createContext(TC);function Ng(e){var{children:t}=e,r=EC(e,SC);return m.createElement(Ig.Provider,{value:r},t)}var CC=()=>m.useContext(Ig),$g=e=>{var{children:t,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,data:o,stackId:u,hide:l,type:c,barSize:s}=e,[f,d]=m.useState([]),h=m.useCallback(g=>{d(y=>[...y,g])},[d]),v=m.useCallback(g=>{d(y=>y.filter(b=>b!==g))},[d]),p=_e();return m.createElement(Dg.Provider,{value:{addErrorBar:h,removeErrorBar:v}},m.createElement(kT,{type:c,data:o,xAxisId:r,yAxisId:n,zAxisId:i,dataKey:a,errorBars:f,stackId:u,hide:l,barSize:s,isPanorama:p}),t)};function _C(e){var{addErrorBar:t,removeErrorBar:r}=m.useContext(Dg);return m.useEffect(()=>(t(e),()=>{r(e)}),[t,r,e]),null}var kC=["direction","width","dataKey","isAnimationActive","animationBegin","animationDuration","animationEasing"];function Rg(e,t,r){return(t=MC(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function MC(e){var t=DC(e,"string");return typeof t=="symbol"?t:t+""}function DC(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function dn(){return dn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{x,y:P,value:w,errorVal:O}=f(b,n,t);if(!O)return null;var A=[],j,T;if(Array.isArray(O)?[j,T]=O:j=T=O,t==="x"){var{scale:I}=p,_=P+v,k=_+r,R=_-r,B=I(w-j),z=I(w+T);A.push({x1:z,y1:k,x2:z,y2:R}),A.push({x1:B,y1:_,x2:z,y2:_}),A.push({x1:B,y1:k,x2:B,y2:R})}else if(t==="y"){var{scale:V}=g,K=x+v,de=K-r,oe=K+r,Ie=V(w-j),Ge=V(w+T);A.push({x1:de,y1:Ge,x2:oe,y2:Ge}),A.push({x1:K,y1:Ie,x2:K,y2:Ge}),A.push({x1:de,y1:Ie,x2:oe,y2:Ie})}var L="".concat(x+v,"px ").concat(P+v,"px");return m.createElement(ye,dn({className:"recharts-errorBar",key:"bar-".concat(A.map(we=>"".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2)))},c),A.map(we=>{var Vt=i?{transformOrigin:"".concat(we.x1-5,"px")}:void 0;return m.createElement(qt,{from:{transform:"scaleY(0)",transformOrigin:L},to:{transform:"scaleY(1)",transformOrigin:L},begin:a,easing:u,isActive:i,duration:o,key:"line-".concat(we.x1,"-").concat(we.x2,"-").concat(we.y1,"-").concat(we.y2),style:{transformOrigin:L}},m.createElement("line",dn({},we,{style:Vt})))}))});return m.createElement(ye,{className:"recharts-errorBars"},y)}var Lg=m.createContext(void 0);function RC(e){var t=m.useContext(Lg);return e??t??"x"}function Bg(e){var{direction:t,children:r}=e;return m.createElement(Lg.Provider,{value:t},r)}var Kg={stroke:"black",strokeWidth:1.5,width:5,offset:0,isAnimationActive:!0,animationBegin:0,animationDuration:400,animationEasing:"ease-in-out"};function LC(e){var t=RC(e.direction),{width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o}=it(e,Kg);return m.createElement(m.Fragment,null,m.createElement(_C,{dataKey:e.dataKey,direction:t}),m.createElement($C,dn({},e,{direction:t,width:r,isAnimationActive:n,animationBegin:i,animationDuration:a,animationEasing:o})))}class qg extends m.Component{render(){return m.createElement(LC,this.props)}}Rg(qg,"defaultProps",Kg);Rg(qg,"displayName","ErrorBar");var BC="Invariant failed";function KC(e,t){throw new Error(BC)}var qC=["x","y"];function Mu(){return Mu=Object.assign?Object.assign.bind():function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:0;return(n,i)=>{if(D(t))return t;var a=D(n)||J(n);return a?t(n,i):(a||KC(),r)}};function Ml(e,t){var r,n,i=$(c=>Mt(c,e)),a=$(c=>Yt(c,t)),o=(r=i==null?void 0:i.allowDataOverflow)!==null&&r!==void 0?r:Re.allowDataOverflow,u=(n=a==null?void 0:a.allowDataOverflow)!==null&&n!==void 0?n:Le.allowDataOverflow,l=o||u;return{needClip:l,needClipX:o,needClipY:u}}function zg(e){var{xAxisId:t,yAxisId:r,clipPathId:n}=e,i=kl(),{needClipX:a,needClipY:o,needClip:u}=Ml(t,r);if(!u)return null;var{x:l,y:c,width:s,height:f}=i;return m.createElement("clipPath",{id:"clipPath-".concat(n)},m.createElement("rect",{x:a?l:l-s/2,y:o?c:c-f/2,width:a?s:s*2,height:o?f:f*2}))}var VC=["onMouseEnter","onMouseLeave","onClick"],XC=["value","background","tooltipPosition"],ZC=["onMouseEnter","onClick","onMouseLeave"];function hn(){return hn=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var{dataKey:t,name:r,fill:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Ir(r,t),payload:e}]};function r_(e){var{dataKey:t,stroke:r,strokeWidth:n,fill:i,name:a,hide:o,unit:u}=e;return{dataDefinedOnItem:void 0,positions:void 0,settings:{stroke:r,strokeWidth:n,fill:i,dataKey:t,nameKey:void 0,name:Ir(a,t),hide:o,type:e.tooltipType,color:e.fill,unit:u}}}function n_(e){var t=$(zt),{data:r,dataKey:n,background:i,allOtherBarProps:a}=e,{onMouseEnter:o,onMouseLeave:u,onClick:l}=a,c=Du(a,VC),s=Sl(o,n),f=El(u),d=jl(l,n);if(!i||r==null)return null;var h=F(i,!1);return m.createElement(m.Fragment,null,r.map((v,p)=>{var{value:g,background:y,tooltipPosition:b}=v,x=Du(v,XC);if(!y)return null;var P=s(v,p),w=f(v,p),O=d(v,p),A=Ee(Ee(Ee(Ee(Ee({option:i,isActive:String(p)===t},x),{},{fill:"#eee"},y),h),Ei(c,v,p)),{},{onMouseEnter:P,onMouseLeave:w,onClick:O,dataKey:n,index:p,className:"recharts-bar-background-rectangle"});return m.createElement(Fg,hn({key:"background-bar-".concat(p)},A))}))}function Wg(e){var{data:t,props:r,showLabels:n}=e,i=F(r,!1),{shape:a,dataKey:o,activeBar:u}=r,l=$(zt),c=$(ug),{onMouseEnter:s,onClick:f,onMouseLeave:d}=r,h=Du(r,ZC),v=Sl(s,o),p=El(d),g=jl(f,o);return t?m.createElement(m.Fragment,null,t.map((y,b)=>{var x=u&&String(b)===l&&(c==null||o===c),P=x?u:a,w=Ee(Ee(Ee({},i),y),{},{isActive:x,option:P,index:b,dataKey:o});return m.createElement(ye,hn({className:"recharts-bar-rectangle"},Ei(h,y,b),{onMouseEnter:v(y,b),onMouseLeave:p(y,b),onClick:g(y,b),key:"rectangle-".concat(y==null?void 0:y.x,"-").concat(y==null?void 0:y.y,"-").concat(y==null?void 0:y.value,"-").concat(b)}),m.createElement(Fg,w))}),n&&Bt.renderCallByParent(r,t)):null}function i_(e){var{props:t,previousRectanglesRef:r}=e,{data:n,layout:i,isAnimationActive:a,animationBegin:o,animationDuration:u,animationEasing:l,onAnimationEnd:c,onAnimationStart:s}=t,f=r.current,d=Cl(t,"recharts-bar-"),[h,v]=m.useState(!1),p=m.useCallback(()=>{typeof c=="function"&&c(),v(!1)},[c]),g=m.useCallback(()=>{typeof s=="function"&&s(),v(!0)},[s]);return m.createElement(qt,{begin:o,duration:u,isActive:a,easing:l,from:{t:0},to:{t:1},onAnimationEnd:p,onAnimationStart:g,key:d},y=>{var{t:b}=y,x=b===1?n:n.map((P,w)=>{var O=f&&f[w];if(O){var A=Ke(O.x,P.x),j=Ke(O.y,P.y),T=Ke(O.width,P.width),I=Ke(O.height,P.height);return Ee(Ee({},P),{},{x:A(b),y:j(b),width:T(b),height:I(b)})}if(i==="horizontal"){var _=Ke(0,P.height),k=_(b);return Ee(Ee({},P),{},{y:P.y+P.height-k,height:k})}var R=Ke(0,P.width),B=R(b);return Ee(Ee({},P),{},{width:B})});return b>0&&(r.current=x),m.createElement(ye,null,m.createElement(Wg,{props:t,data:x,showLabels:!h}))})}function a_(e){var{data:t,isAnimationActive:r}=e,n=m.useRef(null);return r&&t&&t.length&&(n.current==null||n.current!==t)?m.createElement(i_,{previousRectanglesRef:n,props:e}):m.createElement(Wg,{props:e,data:t,showLabels:!0})}var Ug=0,o_=(e,t)=>{var r=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:r,errorVal:re(e,t)}};class u_ extends m.PureComponent{constructor(){super(...arguments),aa(this,"id",lr("recharts-bar-"))}render(){var{hide:t,data:r,dataKey:n,className:i,xAxisId:a,yAxisId:o,needClip:u,background:l,id:c,layout:s}=this.props;if(t)return null;var f=H("recharts-bar",i),d=J(c)?this.id:c;return m.createElement(ye,{className:f},u&&m.createElement("defs",null,m.createElement(zg,{clipPathId:d,xAxisId:a,yAxisId:o})),m.createElement(ye,{className:"recharts-bar-rectangles",clipPath:u?"url(#clipPath-".concat(d,")"):null},m.createElement(n_,{data:r,dataKey:n,background:l,allOtherBarProps:this.props}),m.createElement(a_,this.props)),m.createElement(Bg,{direction:s==="horizontal"?"y":"x"},this.props.children))}}var Hg={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",hide:!1,isAnimationActive:!vr.isSsr,legendType:"rect",minPointSize:Ug,xAxisId:0,yAxisId:0};function s_(e){var{xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s}=it(e,Hg),{needClip:f}=Ml(t,r),d=Ki(),h=_e(),v=m.useMemo(()=>({barSize:e.barSize,data:void 0,dataKey:e.dataKey,maxBarSize:e.maxBarSize,minPointSize:a,stackId:Qv(e.stackId)}),[e.barSize,e.dataKey,e.maxBarSize,a,e.stackId]),p=pn(e.children,jn),g=$(x=>$_(x,t,r,h,v,p));if(d!=="vertical"&&d!=="horizontal")return null;var y,b=g==null?void 0:g[0];return b==null||b.height==null||b.width==null?y=0:y=d==="vertical"?b.height/2:b.width/2,m.createElement(Ng,{xAxisId:t,yAxisId:r,data:g,dataPointFormatter:o_,errorBarOffset:y},m.createElement(u_,hn({},e,{layout:d,needClip:f,data:g,xAxisId:t,yAxisId:r,hide:n,legendType:i,minPointSize:a,activeBar:o,animationBegin:u,animationDuration:l,animationEasing:c,isAnimationActive:s})))}function l_(e){var{layout:t,barSettings:{dataKey:r,minPointSize:n},pos:i,bandSize:a,xAxis:o,yAxis:u,xAxisTicks:l,yAxisTicks:c,stackedData:s,displayedData:f,offset:d,cells:h}=e,v=t==="horizontal"?u:o,p=s?v.scale.domain():null,g=aw({numericAxis:v});return f.map((y,b)=>{var x,P,w,O,A,j;s?x=ew(s[b],p):(x=re(y,r),Array.isArray(x)||(x=[g,x]));var T=GC(n,Ug)(x[1],b);if(t==="horizontal"){var I,[_,k]=[u.scale(x[0]),u.scale(x[1])];P=pf({axis:o,ticks:l,bandSize:a,offset:i.offset,entry:y,index:b}),w=(I=k??_)!==null&&I!==void 0?I:void 0,O=i.size;var R=_-k;if(A=We(R)?0:R,j={x:P,y:d.top,width:O,height:d.height},Math.abs(T)>0&&Math.abs(A)0&&Math.abs(O)t,v_=(e,t,r)=>r,p_=(e,t,r,n)=>n,Il=(e,t,r,n,i)=>i,m_=(e,t,r,n,i)=>i.maxBarSize,g_=(e,t,r,n,i,a)=>a,_h=(e,t,r)=>{var n=r??e;if(!J(n))return Ce(n,t,0)},y_=S([Y,Xi,h_,v_,p_],(e,t,r,n,i)=>t.filter(a=>e==="horizontal"?a.xAxisId===r:a.yAxisId===n).filter(a=>a.isPanorama===i).filter(a=>a.hide===!1).filter(a=>a.type==="bar")),b_=(e,t,r,n)=>{var i=Y(e);return i==="horizontal"?Au(e,"yAxis",r,n):Au(e,"xAxis",t,n)},x_=(e,t,r)=>{var n=Y(e);return n==="horizontal"?Md(e,"xAxis",t):Md(e,"yAxis",r)};function w_(e){return e.stackId!=null&&e.dataKey!=null}var P_=(e,t,r)=>{var n={},i=e.filter(w_),a=e.filter(c=>c.stackId==null),o=i.reduce((c,s)=>(c[s.stackId]||(c[s.stackId]=[]),c[s.stackId].push(s),c),n),u=Object.entries(o).map(c=>{var[s,f]=c,d=f.map(v=>v.dataKey),h=_h(t,r,f[0].barSize);return{stackId:s,dataKeys:d,barSize:h}}),l=a.map(c=>{var s=[c.dataKey].filter(d=>d!=null),f=_h(t,r,c.barSize);return{stackId:void 0,dataKeys:s,barSize:f}});return[...u,...l]},O_=S([y_,CA,x_],P_),A_=(e,t,r,n,i)=>{var a,o,u=Y(e),l=hm(e),{maxBarSize:c}=i,s=J(c)?l:c,f,d;return u==="horizontal"?(f=vt(e,"xAxis",t,n),d=Ft(e,"xAxis",t,n)):(f=vt(e,"yAxis",r,n),d=Ft(e,"yAxis",r,n)),(a=(o=nn(f,d,!0))!==null&&o!==void 0?o:s)!==null&&a!==void 0?a:0},Yg=(e,t,r,n)=>{var i=Y(e),a,o;return i==="horizontal"?(a=vt(e,"xAxis",t,n),o=Ft(e,"xAxis",t,n)):(a=vt(e,"yAxis",r,n),o=Ft(e,"yAxis",r,n)),nn(a,o)};function S_(e,t,r,n,i){var a=n.length;if(!(a<1)){var o=Ce(e,r,0,!0),u,l=[];if(Ye(n[0].barSize)){var c=!1,s=r/a,f=n.reduce((y,b)=>y+(b.barSize||0),0);f+=(a-1)*o,f>=r&&(f-=(a-1)*o,o=0),f>=r&&s>0&&(c=!0,s*=.9,f=a*s);var d=(r-f)/2>>0,h={offset:d-o,size:0};u=n.reduce((y,b)=>{var x,P={stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:h.offset+h.size+o,size:c?s:(x=b.barSize)!==null&&x!==void 0?x:0}},w=[...y,P];return h=w[w.length-1].position,w},l)}else{var v=Ce(t,r,0,!0);r-2*v-(a-1)*o<=0&&(o=0);var p=(r-2*v-(a-1)*o)/a;p>1&&(p>>=0);var g=Ye(i)?Math.min(p,i):p;u=n.reduce((y,b,x)=>[...y,{stackId:b.stackId,dataKeys:b.dataKeys,position:{offset:v+(p+o)*x+(p-g)/2,size:g}}],l)}return u}}var E_=(e,t,r,n,i,a,o)=>{var u=J(o)?t:o,l=S_(r,n,i!==a?i:a,e,u);return i!==a&&l!=null&&(l=l.map(c=>Fn(Fn({},c),{},{position:Fn(Fn({},c.position),{},{offset:c.position.offset-i/2})}))),l},j_=S([O_,hm,TA,vm,A_,Yg,m_],E_),T_=(e,t,r,n)=>vt(e,"xAxis",t,n),C_=(e,t,r,n)=>vt(e,"yAxis",r,n),__=(e,t,r,n)=>Ft(e,"xAxis",t,n),k_=(e,t,r,n)=>Ft(e,"yAxis",r,n),M_=S([j_,Il],(e,t)=>{if(e!=null){var r=e.find(n=>n.stackId===t.stackId&&n.dataKeys.includes(t.dataKey));if(r!=null)return r.position}}),D_=(e,t)=>{if(!(!e||(t==null?void 0:t.dataKey)==null)){var{stackId:r}=t;if(r!=null){var n=e[r];if(n){var{stackedData:i}=n;if(i){var a=i.find(o=>o.key===t.dataKey);return a}}}}},I_=S([Xi,Il],(e,t)=>{if(e.some(r=>r.type==="bar"&&t.dataKey===r.dataKey&&t.stackId===r.stackId&&t.stackId===r.stackId))return t}),N_=S([b_,Il],D_),$_=S([ve,T_,C_,__,k_,M_,Y,$s,Yg,N_,I_,g_],(e,t,r,n,i,a,o,u,l,c,s,f)=>{var{chartData:d,dataStartIndex:h,dataEndIndex:v}=u;if(!(s==null||a==null||o!=="horizontal"&&o!=="vertical"||t==null||r==null||n==null||i==null||l==null)){var{data:p}=s,g;if(p!=null&&p.length>0?g=p:g=d==null?void 0:d.slice(h,v+1),g!=null)return l_({layout:o,barSettings:s,pos:a,bandSize:l,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,stackedData:c,displayedData:g,offset:e,cells:f})}}),Gg=e=>{var{chartData:t}=e,r=ae(),n=_e();return m.useEffect(()=>n?()=>{}:(r(Fd(t)),()=>{r(Fd(void 0))}),[t,r,n]),null},kh={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},Vg=nt({name:"brush",initialState:kh,reducers:{setBrushSettings(e,t){return t.payload==null?kh:t.payload}}}),{setBrushSettings:VD}=Vg.actions,R_=Vg.reducer;function L_(e,t,r){return(t=B_(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function B_(e){var t=K_(e,"string");return typeof t=="symbol"?t:t+""}function K_(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}class Nl{static create(t){return new Nl(t)}constructor(t){this.scale=t}get domain(){return this.scale.domain}get range(){return this.scale.range}get rangeMin(){return this.range()[0]}get rangeMax(){return this.range()[1]}get bandwidth(){return this.scale.bandwidth}apply(t){var{bandAware:r,position:n}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t!==void 0){if(n)switch(n){case"start":return this.scale(t);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+i}case"end":{var a=this.bandwidth?this.bandwidth():0;return this.scale(t)+a}default:return this.scale(t)}if(r){var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+o}return this.scale(t)}}isInRange(t){var r=this.range(),n=r[0],i=r[r.length-1];return n<=i?t>=n&&t<=i:t>=i&&t<=n}}L_(Nl,"EPS",1e-4);function q_(e){return(e%180+180)%180}var F_=function(t){var{width:r,height:n}=t,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=q_(i),o=a*Math.PI/180,u=Math.atan(n/r),l=o>u&&o{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=Pt(e).dots.findIndex(n=>n===t.payload);r!==-1&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=Pt(e).areas.findIndex(n=>n===t.payload);r!==-1&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=Pt(e).lines.findIndex(n=>n===t.payload);r!==-1&&e.lines.splice(r,1)}}}),{addDot:XD,removeDot:ZD,addArea:JD,removeArea:QD,addLine:eI,removeLine:tI}=Xg.actions,W_=Xg.reducer,U_=m.createContext(void 0),H_=e=>{var{children:t}=e,[r]=m.useState("".concat(lr("recharts"),"-clip")),n=kl();if(n==null)return null;var{x:i,y:a,width:o,height:u}=n;return m.createElement(U_.Provider,{value:r},m.createElement("defs",null,m.createElement("clipPath",{id:r},m.createElement("rect",{x:i,y:a,height:u,width:o}))),t)};function qo(e,t){for(var r in e)if({}.hasOwnProperty.call(e,r)&&(!{}.hasOwnProperty.call(t,r)||e[r]!==t[r]))return!1;for(var n in t)if({}.hasOwnProperty.call(t,n)&&!{}.hasOwnProperty.call(e,n))return!1;return!0}function Zg(e,t,r){if(t<1)return[];if(t===1&&r===void 0)return e;for(var n=[],i=0;ie*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function V_(e,t){return Zg(e,t+1)}function X_(e,t,r,n,i){for(var a=(n||[]).slice(),{start:o,end:u}=t,l=0,c=1,s=o,f=function(){var v=n==null?void 0:n[l];if(v===void 0)return{v:Zg(n,c)};var p=l,g,y=()=>(g===void 0&&(g=r(v,p)),g),b=v.coordinate,x=l===0||Pi(e,b,y,s,u);x||(l=0,s=o,c+=1),x&&(s=b+e*(y()/2+i),l+=c)},d;c<=a.length;)if(d=f(),d)return d.v;return[]}function Mh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t(v===void 0&&(v=r(h,d)),v);if(d===o-1){var g=e*(h.coordinate+e*p()/2-l);a[d]=h=Se(Se({},h),{},{tickCoord:g>0?h.coordinate-g*e:h.coordinate})}else a[d]=h=Se(Se({},h),{},{tickCoord:h.coordinate});var y=Pi(e,h.tickCoord,p,u,l);y&&(l=h.tickCoord-e*(p()/2+i),a[d]=Se(Se({},h),{},{isShow:!0}))},s=o-1;s>=0;s--)c(s);return a}function tk(e,t,r,n,i,a){var o=(n||[]).slice(),u=o.length,{start:l,end:c}=t;if(a){var s=n[u-1],f=r(s,u-1),d=e*(s.coordinate+e*f/2-c);o[u-1]=s=Se(Se({},s),{},{tickCoord:d>0?s.coordinate-d*e:s.coordinate});var h=Pi(e,s.tickCoord,()=>f,l,c);h&&(c=s.tickCoord-e*(f/2+i),o[u-1]=Se(Se({},s),{},{isShow:!0}))}for(var v=a?u-1:u,p=function(b){var x=o[b],P,w=()=>(P===void 0&&(P=r(x,b)),P);if(b===0){var O=e*(x.coordinate-e*w()/2-l);o[b]=x=Se(Se({},x),{},{tickCoord:O<0?x.coordinate-O*e:x.coordinate})}else o[b]=x=Se(Se({},x),{},{tickCoord:x.coordinate});var A=Pi(e,x.tickCoord,w,l,c);A&&(l=x.tickCoord+e*(w()/2+i),o[b]=Se(Se({},x),{},{isShow:!0}))},g=0;g{var w=typeof c=="function"?c(x.value,P):x.value;return v==="width"?Y_(en(w,{fontSize:t,letterSpacing:r}),p,f):en(w,{fontSize:t,letterSpacing:r})[v]},y=i.length>=2?ge(i[1].coordinate-i[0].coordinate):1,b=G_(a,y,v);return l==="equidistantPreserveStart"?X_(y,b,g,i,o):(l==="preserveStart"||l==="preserveStartEnd"?h=tk(y,b,g,i,o,l==="preserveStartEnd"):h=ek(y,b,g,i,o),h.filter(x=>x.isShow))}var rk=["viewBox"],nk=["viewBox"];function Or(){return Or=Object.assign?Object.assign.bind():function(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:[],{tickLine:i,stroke:a,tick:o,tickFormatter:u,unit:l}=this.props,c=$l(he(he({},this.props),{},{ticks:n}),t,r),s=this.getTickTextAnchor(),f=this.getTickVerticalAnchor(),d=F(this.props,!1),h=F(o,!1),v=he(he({},d),{},{fill:"none"},F(i,!1)),p=c.map((g,y)=>{var{line:b,tick:x}=this.getTickLineCoord(g),P=he(he(he(he({textAnchor:s,verticalAnchor:f},d),{},{stroke:"none",fill:a},h),x),{},{index:y,payload:g,visibleTicksCount:c.length,tickFormatter:u});return m.createElement(ye,Or({className:"recharts-cartesian-axis-tick",key:"tick-".concat(g.value,"-").concat(g.coordinate,"-").concat(g.tickCoord)},Ei(this.props,g,y)),i&&m.createElement("line",Or({},v,b,{className:H("recharts-cartesian-axis-tick-line",Kt(i,"className"))})),o&&Gt.renderTickItem(o,P,"".concat(typeof u=="function"?u(g.value,y):g.value).concat(l||"")))});return p.length>0?m.createElement("g",{className:"recharts-cartesian-axis-ticks"},p):null}render(){var{axisLine:t,width:r,height:n,className:i,hide:a}=this.props;if(a)return null;var{ticks:o}=this.props;return r!=null&&r<=0||n!=null&&n<=0?null:m.createElement(ye,{className:H("recharts-cartesian-axis",i),ref:u=>{if(u){var l=u.getElementsByClassName("recharts-cartesian-axis-tick-value");this.tickRefs.current=Array.from(l);var c=l[0];if(c){var s=window.getComputedStyle(c).fontSize,f=window.getComputedStyle(c).letterSpacing;(s!==this.state.fontSize||f!==this.state.letterSpacing)&&this.setState({fontSize:window.getComputedStyle(c).fontSize,letterSpacing:window.getComputedStyle(c).letterSpacing})}}}},t&&this.renderAxisLine(),this.renderTicks(this.state.fontSize,this.state.letterSpacing,o),qe.renderCallByParent(this.props))}}Rl(Gt,"displayName","CartesianAxis");Rl(Gt,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var uk=["x1","y1","x2","y2","key"],sk=["offset"],lk=["xAxisId","yAxisId"],ck=["xAxisId","yAxisId"];function Nh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function je(e){for(var t=1;t{var{fill:t}=e;if(!t||t==="none")return null;var{fillOpacity:r,x:n,y:i,width:a,height:o,ry:u}=e;return m.createElement("rect",{x:n,y:i,ry:u,width:a,height:o,stroke:"none",fill:t,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function Jg(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var{x1:n,y1:i,x2:a,y2:o,key:u}=t,l=Oi(t,uk),c=F(l,!1),{offset:s}=c,f=Oi(c,sk);r=m.createElement("line",ir({},f,{x1:n,y1:i,x2:a,y2:o,fill:"none",key:u}))}return r}function mk(e){var{x:t,width:r,horizontal:n=!0,horizontalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Oi(e,lk),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:t,y1:c,x2:t+r,y2:c,key:"line-".concat(s),index:s});return Jg(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-horizontal"},l)}function gk(e){var{y:t,height:r,vertical:n=!0,verticalPoints:i}=e;if(!n||!i||!i.length)return null;var{xAxisId:a,yAxisId:o}=e,u=Oi(e,ck),l=i.map((c,s)=>{var f=je(je({},u),{},{x1:c,y1:t,x2:c,y2:t+r,key:"line-".concat(s),index:s});return Jg(n,f)});return m.createElement("g",{className:"recharts-cartesian-grid-vertical"},l)}function yk(e){var{horizontalFill:t,fillOpacity:r,x:n,y:i,width:a,height:o,horizontalPoints:u,horizontal:l=!0}=e;if(!l||!t||!t.length)return null;var c=u.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%t.length;return m.createElement("rect",{key:"react-".concat(d),y:f,x:n,height:v,width:a,stroke:"none",fill:t[p],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},s)}function bk(e){var{vertical:t=!0,verticalFill:r,fillOpacity:n,x:i,y:a,width:o,height:u,verticalPoints:l}=e;if(!t||!r||!r.length)return null;var c=l.map(f=>Math.round(f+i-i)).sort((f,d)=>f-d);i!==c[0]&&c.unshift(0);var s=c.map((f,d)=>{var h=!c[d+1],v=h?i+o-f:c[d+1]-f;if(v<=0)return null;var p=d%r.length;return m.createElement("rect",{key:"react-".concat(d),x:f,y:a,width:v,height:u,stroke:"none",fill:r[p],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return m.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},s)}var xk=(e,t)=>{var{xAxis:r,width:n,height:i,offset:a}=e;return Zv($l(je(je(je({},Gt.defaultProps),r),{},{ticks:Jv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.left,a.left+a.width,t)},wk=(e,t)=>{var{yAxis:r,width:n,height:i,offset:a}=e;return Zv($l(je(je(je({},Gt.defaultProps),r),{},{ticks:Jv(r),viewBox:{x:0,y:0,width:n,height:i}})),a.top,a.top+a.height,t)},Pk={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0};function Ll(e){var t=ap(),r=op(),n=ip(),i=je(je({},it(e,Pk)),{},{x:D(e.x)?e.x:n.left,y:D(e.y)?e.y:n.top,width:D(e.width)?e.width:n.width,height:D(e.height)?e.height:n.height}),{xAxisId:a,yAxisId:o,x:u,y:l,width:c,height:s,syncWithTicks:f,horizontalValues:d,verticalValues:h}=i,v=_e(),p=$(T=>Dd(T,"xAxis",a,v)),g=$(T=>Dd(T,"yAxis",o,v));if(!D(c)||c<=0||!D(s)||s<=0||!D(u)||u!==+u||!D(l)||l!==+l)return null;var y=i.verticalCoordinatesGenerator||xk,b=i.horizontalCoordinatesGenerator||wk,{horizontalPoints:x,verticalPoints:P}=i;if((!x||!x.length)&&typeof b=="function"){var w=d&&d.length,O=b({yAxis:g?je(je({},g),{},{ticks:w?d:g.ticks}):void 0,width:t,height:r,offset:n},w?!0:f);Qr(Array.isArray(O),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof O,"]")),Array.isArray(O)&&(x=O)}if((!P||!P.length)&&typeof y=="function"){var A=h&&h.length,j=y({xAxis:p?je(je({},p),{},{ticks:A?h:p.ticks}):void 0,width:t,height:r,offset:n},A?!0:f);Qr(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(P=j)}return m.createElement("g",{className:"recharts-cartesian-grid"},m.createElement(pk,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),m.createElement(yk,ir({},i,{horizontalPoints:x})),m.createElement(bk,ir({},i,{verticalPoints:P})),m.createElement(mk,ir({},i,{offset:n,horizontalPoints:x,xAxis:p,yAxis:g})),m.createElement(gk,ir({},i,{offset:n,verticalPoints:P,xAxis:p,yAxis:g})))}Ll.displayName="CartesianGrid";var Qg=(e,t,r,n)=>vt(e,"xAxis",t,n),ey=(e,t,r,n)=>Ft(e,"xAxis",t,n),ty=(e,t,r,n)=>vt(e,"yAxis",r,n),ry=(e,t,r,n)=>Ft(e,"yAxis",r,n),Ok=S([Y,Qg,ty,ey,ry],(e,t,r,n,i)=>Wt(e,"xAxis")?nn(t,n,!1):nn(r,i,!1)),Ak=(e,t,r,n,i)=>i,Sk=S([Xi,Ak],(e,t)=>{if(e.some(r=>r.type==="line"&&t.dataKey===r.dataKey&&t.data===r.data))return t}),Ek=S([Y,Qg,ty,ey,ry,Sk,Ok,$s],(e,t,r,n,i,a,o,u)=>{var{chartData:l,dataStartIndex:c,dataEndIndex:s}=u;if(!(a==null||t==null||r==null||n==null||i==null||n.length===0||i.length===0||o==null)){var{dataKey:f,data:d}=a,h;if(d!=null&&d.length>0?h=d:h=l==null?void 0:l.slice(c,s+1),h!=null)return Uk({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataKey:f,bandSize:o,displayedData:h})}}),jk=["type","layout","connectNulls","needClip"],Tk=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId"];function ny(e,t){if(e==null)return{};var r,n,i=Ck(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{dataKey:t,name:r,stroke:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Ir(r,t),payload:e}]};function Dk(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:u,unit:l}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:Ir(o,t),hide:u,type:e.tooltipType,color:e.stroke,unit:l}}}var iy=(e,t)=>"".concat(t,"px ").concat(e-t,"px");function Ik(e,t){for(var r=e.length%2!==0?[...e,0]:e,n=[],i=0;i{var n=r.reduce((f,d)=>f+d);if(!n)return iy(t,e);for(var i=Math.floor(e/n),a=e%n,o=t-e,u=[],l=0,c=0;la){u=[...r.slice(0,l),a-c];break}var s=u.length%2===0?[0,o]:[o];return[...Ik(r,i),...u,...s].map(f=>"".concat(f,"px")).join(", ")};function $k(e,t){var r;if(m.isValidElement(e))r=m.cloneElement(e,t);else if(typeof e=="function")r=e(t);else{var n=H("recharts-line-dot",typeof e!="boolean"?e.className:"");r=m.createElement(Pg,Dr({},t,{className:n}))}return r}function Rk(e,t){return e==null?!1:t?!0:e.length===1}function Lk(e){var{clipPathId:t,points:r,props:n}=e,{dot:i,dataKey:a,needClip:o}=n;if(!Rk(r,i))return null;var u=Xh(i),l=F(n,!1),c=F(i,!0),s=r.map((d,h)=>{var v=ot(ot(ot({key:"dot-".concat(h),r:3},l),c),{},{index:h,cx:d.x,cy:d.y,dataKey:a,value:d.value,payload:d.payload,points:r});return $k(i,v)}),f={clipPath:o?"url(#clipPath-".concat(u?"":"dots-").concat(t,")"):null};return m.createElement(ye,Dr({className:"recharts-line-dots",key:"dots"},f),s)}function Iu(e){var{clipPathId:t,pathRef:r,points:n,strokeDasharray:i,props:a,showLabels:o}=e,{type:u,layout:l,connectNulls:c,needClip:s}=a,f=ny(a,jk),d=ot(ot({},F(f,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:s?"url(#clipPath-".concat(t,")"):null,points:n,type:u,layout:l,connectNulls:c,strokeDasharray:i??a.strokeDasharray});return m.createElement(m.Fragment,null,(n==null?void 0:n.length)>1&&m.createElement(cs,Dr({},d,{pathRef:r})),m.createElement(Lk,{points:n,clipPathId:t,props:a}),o&&Bt.renderCallByParent(a,n))}function Bk(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}function Kk(e){var{clipPathId:t,props:r,pathRef:n,previousPointsRef:i,longestAnimatedLengthRef:a}=e,{points:o,strokeDasharray:u,isAnimationActive:l,animationBegin:c,animationDuration:s,animationEasing:f,animateNewValues:d,width:h,height:v,onAnimationEnd:p,onAnimationStart:g}=r,y=i.current,b=Cl(r,"recharts-line-"),[x,P]=m.useState(!1),w=m.useCallback(()=>{typeof p=="function"&&p(),P(!1)},[p]),O=m.useCallback(()=>{typeof g=="function"&&g(),P(!0)},[g]),A=Bk(n.current),j=a.current;return m.createElement(qt,{begin:c,duration:s,isActive:l,easing:f,from:{t:0},to:{t:1},onAnimationEnd:w,onAnimationStart:O,key:b},T=>{var{t:I}=T,_=Ke(j,A+j),k=Math.min(_(I),A),R;if(u){var B="".concat(u).split(/[,\s]+/gim).map(K=>parseFloat(K));R=Nk(k,A,B)}else R=iy(A,k);if(y){var z=y.length/o.length,V=I===1?o:o.map((K,de)=>{var oe=Math.floor(de*z);if(y[oe]){var Ie=y[oe],Ge=Ke(Ie.x,K.x),L=Ke(Ie.y,K.y);return ot(ot({},K),{},{x:Ge(I),y:L(I)})}if(d){var we=Ke(h*2,K.x),Vt=Ke(v/2,K.y);return ot(ot({},K),{},{x:we(I),y:Vt(I)})}return ot(ot({},K),{},{x:K.x,y:K.y})});return i.current=V,m.createElement(Iu,{props:r,points:V,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})}return I>0&&A>0&&(i.current=o,a.current=k),m.createElement(Iu,{props:r,points:o,clipPathId:t,pathRef:n,showLabels:!x,strokeDasharray:R})})}function qk(e){var{clipPathId:t,props:r}=e,{points:n,isAnimationActive:i}=r,a=m.useRef(null),o=m.useRef(0),u=m.useRef(null),l=a.current;return i&&n&&n.length&&l!==n?m.createElement(Kk,{props:r,clipPathId:t,previousPointsRef:a,longestAnimatedLengthRef:o,pathRef:u}):m.createElement(Iu,{props:r,points:n,clipPathId:t,pathRef:u,showLabels:!0})}var Fk=(e,t)=>({x:e.x,y:e.y,value:e.value,errorVal:re(e.payload,t)});class zk extends m.Component{constructor(){super(...arguments),oa(this,"id",lr("recharts-line-"))}render(){var t,{hide:r,dot:n,points:i,className:a,xAxisId:o,yAxisId:u,top:l,left:c,width:s,height:f,id:d,needClip:h,layout:v}=this.props;if(r)return null;var p=H("recharts-line",a),g=J(d)?this.id:d,{r:y=3,strokeWidth:b=2}=(t=F(n,!1))!==null&&t!==void 0?t:{r:3,strokeWidth:2},x=Xh(n),P=y*2+b;return m.createElement(m.Fragment,null,m.createElement(ye,{className:p},h&&m.createElement("defs",null,m.createElement(zg,{clipPathId:g,xAxisId:o,yAxisId:u}),!x&&m.createElement("clipPath",{id:"clipPath-dots-".concat(g)},m.createElement("rect",{x:c-P/2,y:l-P/2,width:s+P,height:f+P}))),m.createElement(qk,{props:this.props,clipPathId:g}),m.createElement(Bg,{direction:v==="horizontal"?"y":"x"},m.createElement(Ng,{xAxisId:o,yAxisId:u,data:i,dataPointFormatter:Fk,errorBarOffset:0},this.props.children))),m.createElement(OC,{activeDot:this.props.activeDot,points:i,mainColor:this.props.stroke,itemDataKey:this.props.dataKey}))}}var ay={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:!vr.isSsr,label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0};function Wk(e){var t=it(e,ay),{activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,connectNulls:u,dot:l,hide:c,isAnimationActive:s,label:f,legendType:d,xAxisId:h,yAxisId:v}=t,p=ny(t,Tk),{needClip:g}=Ml(h,v),{height:y,width:b,x,y:P}=kl(),w=Ki(),O=_e(),A=m.useMemo(()=>({dataKey:e.dataKey,data:e.data}),[e.dataKey,e.data]),j=$(T=>Ek(T,h,v,O,A));return w!=="horizontal"&&w!=="vertical"?null:m.createElement(zk,Dr({},p,{connectNulls:u,dot:l,activeDot:r,animateNewValues:n,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:s,hide:c,label:f,legendType:d,xAxisId:h,yAxisId:v,points:j,layout:w,height:y,width:b,left:x,top:P,needClip:g}))}function Uk(e){var{layout:t,xAxis:r,yAxis:n,xAxisTicks:i,yAxisTicks:a,dataKey:o,bandSize:u,displayedData:l}=e;return l.map((c,s)=>{var f=re(c,o);return t==="horizontal"?{x:vf({axis:r,ticks:i,bandSize:u,entry:c,index:s}),y:J(f)?null:n.scale(f),value:f,payload:c}:{x:J(f)?null:r.scale(f),y:vf({axis:n,ticks:a,bandSize:u,entry:c,index:s}),value:f,payload:c}})}class Bl extends m.PureComponent{render(){return m.createElement($g,{type:"line",data:this.props.data,xAxisId:this.props.xAxisId,yAxisId:this.props.yAxisId,zAxisId:0,dataKey:this.props.dataKey,stackId:void 0,hide:this.props.hide,barSize:void 0},m.createElement(_g,{legendPayload:Mk(this.props)}),m.createElement(Tl,{fn:Dk,args:this.props}),m.createElement(Wk,this.props))}}oa(Bl,"displayName","Line");oa(Bl,"defaultProps",ay);function Rh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Lh(e){for(var t=1;t{var{children:a}=e,o=sy(e,rM);return o},[e]),n=$(a=>Mt(a,r.id)),i=r===n;return m.useEffect(()=>(t(Xk(r)),()=>{t(Zk(r))}),[r,t]),i?e.children:null}var sM=e=>{var{xAxisId:t,className:r}=e,n=$(np),i=_e(),a="xAxis",o=$(h=>Kr(h,a,t,i)),u=$(h=>Fm(h,a,t,i)),l=$(h=>Lm(h,t)),c=$(h=>wS(h,t));if(l==null||c==null)return null;var{dangerouslySetInnerHTML:s,ticks:f}=e,d=sy(e,nM);return m.createElement(Gt,Nu({},d,{scale:o,x:c.x,y:c.y,width:l.width,height:l.height,className:H("recharts-".concat(a," ").concat(a),r),viewBox:n,ticks:u}))},lM=e=>{var t,r,n,i,a;return m.createElement(uM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.xAxisId,scale:e.scale,type:e.type,padding:e.padding,allowDataOverflow:e.allowDataOverflow,domain:e.domain,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,height:e.height,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter},m.createElement(sM,e))};class ua extends m.Component{render(){return m.createElement(lM,this.props)}}uy(ua,"displayName","XAxis");uy(ua,"defaultProps",{allowDataOverflow:Re.allowDataOverflow,allowDecimals:Re.allowDecimals,allowDuplicatedCategory:Re.allowDuplicatedCategory,height:Re.height,hide:!1,mirror:Re.mirror,orientation:Re.orientation,padding:Re.padding,reversed:Re.reversed,scale:Re.scale,tickCount:Re.tickCount,type:Re.type,xAxisId:0});var cM=e=>{var{ticks:t,label:r,labelGapWithTick:n=5,tickSize:i=0,tickMargin:a=0}=e,o=0;if(t){t.forEach(s=>{if(s){var f=s.getBoundingClientRect();f.width>o&&(o=f.width)}});var u=r?r.getBoundingClientRect().width:0,l=i+a,c=o+l+u+(r?n:0);return Math.round(c)}return 0},fM=["dangerouslySetInnerHTML","ticks"];function ly(e,t,r){return(t=dM(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dM(e){var t=hM(e,"string");return typeof t=="symbol"?t:t+""}function hM(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function $u(){return $u=Object.assign?Object.assign.bind():function(e){for(var t=1;t(t(Jk(e)),()=>{t(Qk(e))}),[e,t]),null}var gM=e=>{var t,{yAxisId:r,className:n,width:i,label:a}=e,o=m.useRef(null),u=m.useRef(null),l=$(np),c=_e(),s=ae(),f="yAxis",d=$(x=>Kr(x,f,r,c)),h=$(x=>Bm(x,r)),v=$(x=>PS(x,r)),p=$(x=>Fm(x,f,r,c));if(m.useLayoutEffect(()=>{var x;if(!(i!=="auto"||!h||xl(a)||m.isValidElement(a))){var P=o.current,w=P==null||(x=P.tickRefs)===null||x===void 0?void 0:x.current,{tickSize:O,tickMargin:A}=P.props,j=cM({ticks:w,label:u.current,labelGapWithTick:5,tickSize:O,tickMargin:A});Math.round(h.width)!==Math.round(j)&&s(eM({id:r,width:j}))}},[o,o==null||(t=o.current)===null||t===void 0||(t=t.tickRefs)===null||t===void 0?void 0:t.current,h==null?void 0:h.width,h,s,a,r,i]),h==null||v==null)return null;var{dangerouslySetInnerHTML:g,ticks:y}=e,b=vM(e,fM);return m.createElement(Gt,$u({},b,{ref:o,labelRef:u,scale:d,x:v.x,y:v.y,width:h.width,height:h.height,className:H("recharts-".concat(f," ").concat(f),n),viewBox:l,ticks:p}))},yM=e=>{var t,r,n,i,a;return m.createElement(m.Fragment,null,m.createElement(mM,{interval:(t=e.interval)!==null&&t!==void 0?t:"preserveEnd",id:e.yAxisId,scale:e.scale,type:e.type,domain:e.domain,allowDataOverflow:e.allowDataOverflow,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,padding:e.padding,includeHidden:(r=e.includeHidden)!==null&&r!==void 0?r:!1,reversed:e.reversed,ticks:e.ticks,width:e.width,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:(n=e.angle)!==null&&n!==void 0?n:0,minTickGap:(i=e.minTickGap)!==null&&i!==void 0?i:5,tick:(a=e.tick)!==null&&a!==void 0?a:!0,tickFormatter:e.tickFormatter}),m.createElement(gM,e))},bM={allowDataOverflow:Le.allowDataOverflow,allowDecimals:Le.allowDecimals,allowDuplicatedCategory:Le.allowDuplicatedCategory,hide:!1,mirror:Le.mirror,orientation:Le.orientation,padding:Le.padding,reversed:Le.reversed,scale:Le.scale,tickCount:Le.tickCount,type:Le.type,width:Le.width,yAxisId:0};class sa extends m.Component{render(){return m.createElement(yM,this.props)}}ly(sa,"displayName","YAxis");ly(sa,"defaultProps",bM);var Fo={exports:{}},zo={};/** * @license React * use-sync-external-store-with-selector.production.js * @@ -63,4 +63,4 @@ var Ty=Object.defineProperty;var Cy=(e,t,r)=>t in e?Ty(e,t,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Bh;function xM(){if(Bh)return zo;Bh=1;var e=qu();function t(l,c){return l===c&&(l!==0||1/l===1/c)||l!==l&&c!==c}var r=typeof Object.is=="function"?Object.is:t,n=e.useSyncExternalStore,i=e.useRef,a=e.useEffect,o=e.useMemo,u=e.useDebugValue;return zo.useSyncExternalStoreWithSelector=function(l,c,s,f,d){var h=i(null);if(h.current===null){var v={hasValue:!1,value:null};h.current=v}else v=h.current;h=o(function(){function g(w){if(!y){if(y=!0,b=w,w=f(w),d!==void 0&&v.hasValue){var O=v.value;if(d(O,w))return x=O}return x=w}if(O=x,r(b,w))return O;var A=f(w);return d!==void 0&&d(O,A)?(b=w,O):(b=w,x=A)}var y=!1,b,x,P=s===void 0?null:s;return[function(){return g(c())},P===null?void 0:function(){return g(P())}]},[c,s,f,d]);var p=n(l,h[0],h[1]);return a(function(){v.hasValue=!0,v.value=p},[p]),u(p),p},zo}var Kh;function wM(){return Kh||(Kh=1,Fo.exports=xM()),Fo.exports}wM();function PM(e){e()}function OM(){let e=null,t=null;return{clear(){e=null,t=null},notify(){PM(()=>{let r=e;for(;r;)r.callback(),r=r.next})},get(){const r=[];let n=e;for(;n;)r.push(n),n=n.next;return r},subscribe(r){let n=!0;const i=t={callback:r,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!n||e===null||(n=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var qh={notify(){},get:()=>[]};function AM(e,t){let r,n=qh,i=0,a=!1;function o(p){s();const g=n.subscribe(p);let y=!1;return()=>{y||(y=!0,g(),f())}}function u(){n.notify()}function l(){v.onStateChange&&v.onStateChange()}function c(){return a}function s(){i++,r||(r=e.subscribe(l),n=OM())}function f(){i--,r&&i===0&&(r(),r=void 0,n.clear(),n=qh)}function d(){a||(a=!0,s())}function h(){a&&(a=!1,f())}const v={addNestedSub:o,notifyNestedSubs:u,handleChangeWrapper:l,isSubscribed:c,trySubscribe:d,tryUnsubscribe:h,getListeners:()=>n};return v}var SM=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",EM=SM(),jM=()=>typeof navigator<"u"&&navigator.product==="ReactNative",TM=jM(),CM=()=>EM||TM?m.useLayoutEffect:m.useEffect,_M=CM(),Wo=Symbol.for("react-redux-context"),Uo=typeof globalThis<"u"?globalThis:{};function kM(){if(!m.createContext)return{};const e=Uo[Wo]??(Uo[Wo]=new Map);let t=e.get(m.createContext);return t||(t=m.createContext(null),e.set(m.createContext,t)),t}var MM=kM();function DM(e){const{children:t,context:r,serverState:n,store:i}=e,a=m.useMemo(()=>{const l=AM(i);return{store:i,subscription:l,getServerState:n?()=>n:void 0}},[i,n]),o=m.useMemo(()=>i.getState(),[i]);_M(()=>{const{subscription:l}=a;return l.onStateChange=l.notifyNestedSubs,l.trySubscribe(),o!==i.getState()&&l.notifyNestedSubs(),()=>{l.tryUnsubscribe(),l.onStateChange=void 0}},[a,o]);const u=r||MM;return m.createElement(u.Provider,{value:a},t)}var IM=DM,NM=(e,t)=>t,Kl=S([NM,Y,NA,xe,ng,Dt,SE,ve],_E),ql=e=>{var t=e.currentTarget.getBoundingClientRect(),r=t.width/e.currentTarget.offsetWidth,n=t.height/e.currentTarget.offsetHeight;return{chartX:Math.round((e.clientX-t.left)/r),chartY:Math.round((e.clientY-t.top)/n)}},cy=tt("mouseClick"),fy=mn();fy.startListening({actionCreator:cy,effect:(e,t)=>{var r=e.payload,n=Kl(t.getState(),ql(r));(n==null?void 0:n.activeIndex)!=null&&t.dispatch(NS({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var Ru=tt("mouseMove"),dy=mn();dy.startListening({actionCreator:Ru,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=sl(n,n.tooltip.settings.shared),a=Kl(n,ql(r));i==="axis"&&((a==null?void 0:a.activeIndex)!=null?t.dispatch(Xm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate})):t.dispatch(Vm()))}});function $M(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":t}var Fh={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index"},hy=nt({name:"rootProps",initialState:Fh,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=(r=t.payload.barGap)!==null&&r!==void 0?r:Fh.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className}}}),RM=hy.reducer,{updateOptions:LM}=hy.actions,vy=nt({name:"polarOptions",initialState:null,reducers:{updatePolarOptions:(e,t)=>t.payload}}),{updatePolarOptions:BM}=vy.actions,KM=vy.reducer,py=tt("keyDown"),my=tt("focus"),Fl=mn();Fl.startListening({actionCreator:py,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip,a=e.payload;if(!(a!=="ArrowRight"&&a!=="ArrowLeft"&&a!=="Enter")){var o=Number(ll(i,br(r))),u=Dt(r);if(a==="Enter"){var l=yi(r,"axis","hover",String(i.index));t.dispatch(Eu({active:!i.active,activeIndex:i.index,activeDataKey:i.dataKey,activeCoordinate:l}));return}var c=ES(r),s=c==="left-to-right"?1:-1,f=a==="ArrowRight"?1:-1,d=o+f*s;if(!(u==null||d>=u.length||d<0)){var h=yi(r,"axis","hover",String(d));t.dispatch(Eu({active:!0,activeIndex:d.toString(),activeDataKey:void 0,activeCoordinate:h}))}}}}});Fl.startListening({actionCreator:my,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip;if(!i.active&&i.index==null){var a="0",o=yi(r,"axis","hover",String(a));t.dispatch(Eu({activeDataKey:void 0,active:!0,activeIndex:a,activeCoordinate:o}))}}}});var Je=tt("externalEvent"),gy=mn();gy.startListening({actionCreator:Je,effect:(e,t)=>{if(e.payload.handler!=null){var r=t.getState(),n={activeCoordinate:pE(r),activeDataKey:ug(r),activeIndex:zt(r),activeLabel:og(r),activeTooltipIndex:zt(r),isTooltipActive:mE(r)};e.payload.handler(n,e.payload.reactEvent)}}});var qM=S([qr],e=>e.tooltipItemPayloads),FM=S([qM,En,(e,t,r)=>t,(e,t,r)=>r],(e,t,r,n)=>{var i=e.find(u=>u.settings.dataKey===n);if(i!=null){var{positions:a}=i;if(a!=null){var o=t(a,r);return o}}}),yy=tt("touchMove"),by=mn();by.startListening({actionCreator:yy,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=sl(n,n.tooltip.settings.shared);if(i==="axis"){var a=Kl(n,ql({clientX:r.touches[0].clientX,clientY:r.touches[0].clientY,currentTarget:r.currentTarget}));(a==null?void 0:a.activeIndex)!=null&&t.dispatch(Xm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate}))}else if(i==="item"){var o,u=r.touches[0],l=document.elementFromPoint(u.clientX,u.clientY);if(!l||!l.getAttribute)return;var c=l.getAttribute(tp),s=(o=l.getAttribute(rp))!==null&&o!==void 0?o:void 0,f=FM(t.getState(),c,s);t.dispatch(Gm({activeDataKey:s,activeIndex:c,activeCoordinate:f}))}}});var zM=jv({brush:R_,cartesianAxis:tM,chartData:HE,graphicalItems:jT,layout:Lx,legend:ww,options:qE,polarAxis:fT,polarOptions:KM,referenceElements:W_,rootProps:RM,tooltip:$S}),WM=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Chart";return lx({reducer:zM,preloadedState:t,middleware:n=>n({serializableCheck:!1}).concat([fy.middleware,dy.middleware,Fl.middleware,gy.middleware,by.middleware]),devTools:{serialize:{replacer:$M},name:"recharts-".concat(r)}})};function xy(e){var{preloadedState:t,children:r,reduxStoreName:n}=e,i=_e(),a=m.useRef(null);if(i)return r;a.current==null&&(a.current=WM(t,n));var o=ts;return m.createElement(IM,{context:o,store:a.current},r)}function wy(e){var{layout:t,width:r,height:n,margin:i}=e,a=ae(),o=_e();return m.useEffect(()=>{o||(a(Nx(t)),a($x({width:r,height:n})),a(Ix(i)))},[a,o,t,r,n,i]),null}function Py(e){var t=ae();return m.useEffect(()=>{t(LM(e))},[t,e]),null}var UM=["children"];function HM(e,t){if(e==null)return{};var r,n,i=YM(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ap(),n=op(),i=cp();if(!Tr(r)||!Tr(n))return null;var{children:a,otherAttributes:o,title:u,desc:l}=e,c,s;return typeof o.tabIndex=="number"?c=o.tabIndex:c=i?0:void 0,typeof o.role=="string"?s=o.role:s=i?"application":void 0,m.createElement(Zh,Ai({},o,{title:u,desc:l,role:s,tabIndex:c,width:r,height:n,style:GM,ref:t}),a)}),XM=e=>{var{children:t}=e,r=$(Bi);if(!r)return null;var{width:n,height:i,y:a,x:o}=r;return m.createElement(Zh,{width:n,height:i,x:o,y:a},t)},zh=m.forwardRef((e,t)=>{var{children:r}=e,n=HM(e,UM),i=_e();return i?m.createElement(XM,null,r):m.createElement(VM,Ai({ref:t},n),r)});function ZM(){var e=ae(),[t,r]=m.useState(null),n=$(dw);return m.useEffect(()=>{if(t!=null){var i=t.getBoundingClientRect(),a=i.width/t.offsetWidth;Ye(a)&&a!==n&&e(Rx(a))}},[t,e,n]),r}function Wh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function JM(e){for(var t=1;t{var{children:r,className:n,height:i,onClick:a,onContextMenu:o,onDoubleClick:u,onMouseDown:l,onMouseEnter:c,onMouseLeave:s,onMouseMove:f,onMouseUp:d,onTouchEnd:h,onTouchMove:v,onTouchStart:p,style:g,width:y}=e,b=ae(),[x,P]=m.useState(null),[w,O]=m.useState(null);VE();var A=ZM(),j=m.useCallback(L=>{A(L),typeof t=="function"&&t(L),P(L),O(L)},[A,t,P,O]),T=m.useCallback(L=>{b(cy(L)),b(Je({handler:a,reactEvent:L}))},[b,a]),I=m.useCallback(L=>{b(Ru(L)),b(Je({handler:c,reactEvent:L}))},[b,c]),_=m.useCallback(L=>{b(Vm()),b(Je({handler:s,reactEvent:L}))},[b,s]),k=m.useCallback(L=>{b(Ru(L)),b(Je({handler:f,reactEvent:L}))},[b,f]),R=m.useCallback(()=>{b(my())},[b]),B=m.useCallback(L=>{b(py(L.key))},[b]),z=m.useCallback(L=>{b(Je({handler:o,reactEvent:L}))},[b,o]),V=m.useCallback(L=>{b(Je({handler:u,reactEvent:L}))},[b,u]),K=m.useCallback(L=>{b(Je({handler:l,reactEvent:L}))},[b,l]),de=m.useCallback(L=>{b(Je({handler:d,reactEvent:L}))},[b,d]),oe=m.useCallback(L=>{b(Je({handler:p,reactEvent:L}))},[b,p]),Ie=m.useCallback(L=>{b(yy(L)),b(Je({handler:v,reactEvent:L}))},[b,v]),Ge=m.useCallback(L=>{b(Je({handler:h,reactEvent:L}))},[b,h]);return m.createElement(hg.Provider,{value:x},m.createElement(a0.Provider,{value:w},m.createElement("div",{className:H("recharts-wrapper",n),style:JM({position:"relative",cursor:"default",width:y,height:i},g),onClick:T,onContextMenu:z,onDoubleClick:V,onFocus:R,onKeyDown:B,onMouseDown:K,onMouseEnter:I,onMouseLeave:_,onMouseMove:k,onMouseUp:de,onTouchEnd:Ge,onTouchMove:Ie,onTouchStart:oe,ref:j},r)))}),nD=["children","className","width","height","style","compact","title","desc"];function iD(e,t){if(e==null)return{};var r,n,i=aD(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{children:r,className:n,width:i,height:a,style:o,compact:u,title:l,desc:c}=e,s=iD(e,nD),f=F(s,!1);return u?m.createElement(zh,{otherAttributes:f,title:l,desc:c},r):m.createElement(rD,{className:n,style:o,width:i,height:a,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},m.createElement(zh,{otherAttributes:f,title:l,desc:c,ref:t},m.createElement(H_,null,r)))}),oD=["width","height"];function Lu(){return Lu=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.createElement(Ay,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:fD,tooltipPayloadSearcher:gl,categoricalChartProps:e,ref:t})),hD=["axis","item"],vD=m.forwardRef((e,t)=>m.createElement(Ay,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:hD,tooltipPayloadSearcher:gl,categoricalChartProps:e,ref:t}));function pD(e){var t=ae();return m.useEffect(()=>{t(BM(e))},[t,e]),null}var mD=["width","height","layout"];function Bu(){return Bu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=it(e,OD);return m.createElement(wD,{chartName:"PieChart",defaultTooltipEventType:"item",validateTooltipEventTypes:PD,tooltipPayloadSearcher:gl,categoricalChartProps:r,ref:t})});const zl=(e="line")=>m.useMemo(()=>({...{margin:{top:5,right:30,left:20,bottom:5},gridProps:{strokeDasharray:"3 3",stroke:"#f3f4f6"},axisProps:{stroke:"#6b7280",fontSize:12}},...{line:{strokeWidth:3,dot:{strokeWidth:2,r:4},activeDot:{r:6,strokeWidth:2}},bar:{radius:[4,4,0,0]},pie:{innerRadius:60,outerRadius:80,paddingAngle:5}}[e]}),[e]),Wl=(e,t={})=>{const[r,n]=m.useState(null),[i,a]=m.useState(!0),[o,u]=m.useState(null),l=m.useMemo(()=>t,[t==null?void 0:t.forestId,t==null?void 0:t.startDate,t==null?void 0:t.endDate,t==null?void 0:t.species]),c=m.useCallback(async()=>{try{a(!0),u(null);const f=await e(l);n(f.data)}catch(f){console.error("Error fetching chart data:",f),u(f.message||"Failed to fetch chart data")}finally{a(!1)}},[e,l]);m.useEffect(()=>{c()},[c]);const s=m.useCallback(()=>{c()},[c]);return{data:r,loading:i,error:o,refresh:s}},SD=(e={})=>Wl(Fu.getSurvivalRate,e),ED=(e={})=>Wl(Fu.getHeightGrowth,e),jD=(e={})=>Wl(Fu.getCO2Absorption,e),TD=({filters:e={}})=>{var l,c;const{data:t,loading:r,error:n}=SD(e),i=((l=t==null?void 0:t.chartData)==null?void 0:l.length)>0&&((c=t.chartData[t.chartData.length-1])==null?void 0:c.survivalRate)||0,a={survived:i,lost:100-i},o=zl("pie"),u=[{name:"Survived",value:a.survived,color:"#10b981"},{name:"Lost",value:a.lost,color:"#ef4444"}];return r?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Tree Survival Rate"})}),E.jsx("div",{className:"flex justify-center items-center h-48",children:E.jsx(Si,{size:"32px",text:"Loading chart data..."})})]}):n?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Tree Survival Rate"})}),E.jsx("div",{className:"flex justify-center items-center h-48",children:E.jsxs("div",{className:"text-center",children:[E.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),E.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Tree Survival Rate"})}),E.jsx(My,{value:a.survived,label:"Survival Rate"}),E.jsx(bl,{width:"100%",height:200,children:E.jsxs(AD,{children:[E.jsx(_l,{data:u,cx:"50%",cy:"50%",innerRadius:o.innerRadius,outerRadius:o.outerRadius,paddingAngle:o.paddingAngle,dataKey:"value",children:u.map((s,f)=>E.jsx(jn,{fill:s.color},`cell-${f}`))}),E.jsx(yl,{content:E.jsx(Ku,{valueFormatter:s=>`${s.toFixed(1)}%`})})]})}),E.jsx(Dy,{data:u})]})},CD=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=ED(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>{var l,c;return{period:u.period,height:((l=u.species)==null?void 0:l.reduce((s,f)=>s+f.avgHeight,0))/(((c=u.species)==null?void 0:c.length)||1)||0}}))||[],a=zl("line");return r?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Average Tree Height Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsx(Si,{size:"32px",text:"Loading chart data..."})})]}):n?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Average Tree Height Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsxs("div",{className:"text-center",children:[E.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),E.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Average Tree Height Over Time"})}),E.jsx(bl,{width:"100%",height:300,children:E.jsxs(dD,{data:i,margin:a.margin,children:[E.jsx(Ll,{...a.gridProps}),E.jsx(ua,{dataKey:"period",...a.axisProps}),E.jsx(sa,{...a.axisProps,label:{value:"Height (m)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(yl,{content:E.jsx(Ku,{valueFormatter:u=>`Average Height: ${u.toFixed(1)}m`})}),E.jsx(Bl,{type:"monotone",dataKey:"height",stroke:"#10b981",strokeWidth:a.strokeWidth,dot:{fill:"#10b981",...a.dot},activeDot:{r:6,stroke:"#10b981",...a.activeDot}})]})})]})},_D=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=jD(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>({period:u.period,co2:u.totalCO2||0})))||[],a=zl("bar");return r?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"CO₂ Absorption Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsx(Si,{size:"32px",text:"Loading chart data..."})})]}):n?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"CO₂ Absorption Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsxs("div",{className:"text-center",children:[E.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),E.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"CO₂ Absorption Over Time"})}),E.jsx(bl,{width:"100%",height:300,children:E.jsxs(vD,{data:i,margin:a.margin,children:[E.jsx(Ll,{...a.gridProps}),E.jsx(ua,{dataKey:"period",...a.axisProps}),E.jsx(sa,{...a.axisProps,label:{value:"CO₂ (tons)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(yl,{content:E.jsx(Ku,{valueFormatter:u=>`CO₂ Absorption: ${u.toFixed(1)} tons`})}),E.jsx(Dl,{dataKey:"co2",fill:"#8b5cf6",radius:a.radius})]})})]})},kD=(e={})=>{const[t,r]=m.useState(null),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useMemo(()=>e,[e==null?void 0:e.forestId,e==null?void 0:e.startDate,e==null?void 0:e.endDate,e==null?void 0:e.species]),l=m.useCallback(async()=>{try{i(!0),o(null);const s=await Ky.getStats(u);r(s.data)}catch(s){console.error("Error fetching dashboard stats:",s),o(s.message||"Failed to fetch dashboard statistics")}finally{i(!1)}},[u]);m.useEffect(()=>{l()},[l]);const c=m.useCallback(()=>{l()},[l]);return{stats:t,loading:n,error:a,refresh:c}},MD=(e={})=>{const[t,r]=m.useState([]),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useMemo(()=>e,[e==null?void 0:e.forestId,e==null?void 0:e.startDate,e==null?void 0:e.endDate,e==null?void 0:e.species,e==null?void 0:e.page,e==null?void 0:e.limit]),l=m.useCallback(async()=>{try{i(!0),o(null);const s=await Iy.getAll(u);r(s.data||[])}catch(s){console.error("Error fetching tree data:",s),o(s.message||"Failed to fetch tree data")}finally{i(!1)}},[u]);m.useEffect(()=>{l()},[l]);const c=m.useCallback(()=>{l()},[l]);return{trees:t,loading:n,error:a,refresh:c}},nI=()=>{var y,b,x,P;const{sidebarOpen:e,toggleSidebar:t,closeSidebar:r}=Ny(),[n,i]=m.useState({}),{stats:a,loading:o,error:u,refresh:l}=kD(n);MD(n);const c=m.useCallback(w=>{i(w)},[]),s=w=>w?w.toLocaleString():"0",f=w=>w?`${w.toFixed(1)}%`:"0%",d=w=>w?`${w.toFixed(1)}m`:"0m",h=w=>w?`${w.toFixed(1)}t`:"0t",v=()=>{console.log("Export started")},p=(w,O)=>{console.log(`Export completed: ${w} with ${O} records`)},g=w=>{console.error("Export error:",w)};return E.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[E.jsx($y,{onToggleSidebar:t}),E.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[E.jsx(Ry,{isOpen:e,onClose:r}),E.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:E.jsxs("div",{className:"max-w-7xl mx-auto",children:[E.jsx("div",{className:"mb-8",children:E.jsxs("div",{className:"flex justify-between items-center mb-4",children:[E.jsxs("div",{children:[E.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome to Nanwa"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Monitor your forests and track tree growth with real-time insights."})]}),E.jsx("div",{className:"flex items-center space-x-4",children:E.jsx(By,{filters:n,onExportStart:v,onExportComplete:p,onExportError:g})})]})}),E.jsx(Ly,{onFiltersChange:c}),o?E.jsx("div",{className:"flex justify-center items-center py-12",children:E.jsx(Si,{text:"Loading dashboard statistics..."})}):u?E.jsxs("div",{className:"bg-red-50 border border-red-200 rounded-lg p-4 mb-8",children:[E.jsxs("p",{className:"text-red-600",children:["Error loading dashboard statistics: ",u]}),E.jsx("button",{onClick:l,className:"mt-2 text-red-600 hover:text-red-800 underline",children:"Try again"})]}):E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:[E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),title:"Total Trees",value:s((y=a==null?void 0:a.overview)==null?void 0:y.totalTrees),color:"green"}),E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Survival Rate",value:f((b=a==null?void 0:a.overview)==null?void 0:b.survivalRate),color:"blue"}),E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"})}),title:"Avg Height",value:d((x=a==null?void 0:a.height)==null?void 0:x.average),color:"yellow"}),E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),title:"CO₂ Absorbed",value:h((P=a==null?void 0:a.co2)==null?void 0:P.totalAbsorption),color:"purple"})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6 mb-8",children:[E.jsx("div",{className:"lg:col-span-1",children:E.jsx(TD,{filters:n})}),E.jsx("div",{className:"lg:col-span-1 xl:col-span-2",children:E.jsx(CD,{filters:n})}),E.jsx("div",{className:"lg:col-span-2 xl:col-span-3",children:E.jsx(_D,{filters:n})})]}),E.jsx(qy,{})]})})]})]})};export{nI as DashboardPage}; + */var Bh;function xM(){if(Bh)return zo;Bh=1;var e=qu();function t(l,c){return l===c&&(l!==0||1/l===1/c)||l!==l&&c!==c}var r=typeof Object.is=="function"?Object.is:t,n=e.useSyncExternalStore,i=e.useRef,a=e.useEffect,o=e.useMemo,u=e.useDebugValue;return zo.useSyncExternalStoreWithSelector=function(l,c,s,f,d){var h=i(null);if(h.current===null){var v={hasValue:!1,value:null};h.current=v}else v=h.current;h=o(function(){function g(w){if(!y){if(y=!0,b=w,w=f(w),d!==void 0&&v.hasValue){var O=v.value;if(d(O,w))return x=O}return x=w}if(O=x,r(b,w))return O;var A=f(w);return d!==void 0&&d(O,A)?(b=w,O):(b=w,x=A)}var y=!1,b,x,P=s===void 0?null:s;return[function(){return g(c())},P===null?void 0:function(){return g(P())}]},[c,s,f,d]);var p=n(l,h[0],h[1]);return a(function(){v.hasValue=!0,v.value=p},[p]),u(p),p},zo}var Kh;function wM(){return Kh||(Kh=1,Fo.exports=xM()),Fo.exports}wM();function PM(e){e()}function OM(){let e=null,t=null;return{clear(){e=null,t=null},notify(){PM(()=>{let r=e;for(;r;)r.callback(),r=r.next})},get(){const r=[];let n=e;for(;n;)r.push(n),n=n.next;return r},subscribe(r){let n=!0;const i=t={callback:r,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!n||e===null||(n=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var qh={notify(){},get:()=>[]};function AM(e,t){let r,n=qh,i=0,a=!1;function o(p){s();const g=n.subscribe(p);let y=!1;return()=>{y||(y=!0,g(),f())}}function u(){n.notify()}function l(){v.onStateChange&&v.onStateChange()}function c(){return a}function s(){i++,r||(r=e.subscribe(l),n=OM())}function f(){i--,r&&i===0&&(r(),r=void 0,n.clear(),n=qh)}function d(){a||(a=!0,s())}function h(){a&&(a=!1,f())}const v={addNestedSub:o,notifyNestedSubs:u,handleChangeWrapper:l,isSubscribed:c,trySubscribe:d,tryUnsubscribe:h,getListeners:()=>n};return v}var SM=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",EM=SM(),jM=()=>typeof navigator<"u"&&navigator.product==="ReactNative",TM=jM(),CM=()=>EM||TM?m.useLayoutEffect:m.useEffect,_M=CM(),Wo=Symbol.for("react-redux-context"),Uo=typeof globalThis<"u"?globalThis:{};function kM(){if(!m.createContext)return{};const e=Uo[Wo]??(Uo[Wo]=new Map);let t=e.get(m.createContext);return t||(t=m.createContext(null),e.set(m.createContext,t)),t}var MM=kM();function DM(e){const{children:t,context:r,serverState:n,store:i}=e,a=m.useMemo(()=>{const l=AM(i);return{store:i,subscription:l,getServerState:n?()=>n:void 0}},[i,n]),o=m.useMemo(()=>i.getState(),[i]);_M(()=>{const{subscription:l}=a;return l.onStateChange=l.notifyNestedSubs,l.trySubscribe(),o!==i.getState()&&l.notifyNestedSubs(),()=>{l.tryUnsubscribe(),l.onStateChange=void 0}},[a,o]);const u=r||MM;return m.createElement(u.Provider,{value:a},t)}var IM=DM,NM=(e,t)=>t,Kl=S([NM,Y,NA,xe,ng,Dt,SE,ve],_E),ql=e=>{var t=e.currentTarget.getBoundingClientRect(),r=t.width/e.currentTarget.offsetWidth,n=t.height/e.currentTarget.offsetHeight;return{chartX:Math.round((e.clientX-t.left)/r),chartY:Math.round((e.clientY-t.top)/n)}},cy=tt("mouseClick"),fy=mn();fy.startListening({actionCreator:cy,effect:(e,t)=>{var r=e.payload,n=Kl(t.getState(),ql(r));(n==null?void 0:n.activeIndex)!=null&&t.dispatch(NS({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var Ru=tt("mouseMove"),dy=mn();dy.startListening({actionCreator:Ru,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=sl(n,n.tooltip.settings.shared),a=Kl(n,ql(r));i==="axis"&&((a==null?void 0:a.activeIndex)!=null?t.dispatch(Xm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate})):t.dispatch(Vm()))}});function $M(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":t}var Fh={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index"},hy=nt({name:"rootProps",initialState:Fh,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=(r=t.payload.barGap)!==null&&r!==void 0?r:Fh.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className}}}),RM=hy.reducer,{updateOptions:LM}=hy.actions,vy=nt({name:"polarOptions",initialState:null,reducers:{updatePolarOptions:(e,t)=>t.payload}}),{updatePolarOptions:BM}=vy.actions,KM=vy.reducer,py=tt("keyDown"),my=tt("focus"),Fl=mn();Fl.startListening({actionCreator:py,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip,a=e.payload;if(!(a!=="ArrowRight"&&a!=="ArrowLeft"&&a!=="Enter")){var o=Number(ll(i,br(r))),u=Dt(r);if(a==="Enter"){var l=yi(r,"axis","hover",String(i.index));t.dispatch(Eu({active:!i.active,activeIndex:i.index,activeDataKey:i.dataKey,activeCoordinate:l}));return}var c=ES(r),s=c==="left-to-right"?1:-1,f=a==="ArrowRight"?1:-1,d=o+f*s;if(!(u==null||d>=u.length||d<0)){var h=yi(r,"axis","hover",String(d));t.dispatch(Eu({active:!0,activeIndex:d.toString(),activeDataKey:void 0,activeCoordinate:h}))}}}}});Fl.startListening({actionCreator:my,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var{keyboardInteraction:i}=r.tooltip;if(!i.active&&i.index==null){var a="0",o=yi(r,"axis","hover",String(a));t.dispatch(Eu({activeDataKey:void 0,active:!0,activeIndex:a,activeCoordinate:o}))}}}});var Je=tt("externalEvent"),gy=mn();gy.startListening({actionCreator:Je,effect:(e,t)=>{if(e.payload.handler!=null){var r=t.getState(),n={activeCoordinate:pE(r),activeDataKey:ug(r),activeIndex:zt(r),activeLabel:og(r),activeTooltipIndex:zt(r),isTooltipActive:mE(r)};e.payload.handler(n,e.payload.reactEvent)}}});var qM=S([qr],e=>e.tooltipItemPayloads),FM=S([qM,En,(e,t,r)=>t,(e,t,r)=>r],(e,t,r,n)=>{var i=e.find(u=>u.settings.dataKey===n);if(i!=null){var{positions:a}=i;if(a!=null){var o=t(a,r);return o}}}),yy=tt("touchMove"),by=mn();by.startListening({actionCreator:yy,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=sl(n,n.tooltip.settings.shared);if(i==="axis"){var a=Kl(n,ql({clientX:r.touches[0].clientX,clientY:r.touches[0].clientY,currentTarget:r.currentTarget}));(a==null?void 0:a.activeIndex)!=null&&t.dispatch(Xm({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate}))}else if(i==="item"){var o,u=r.touches[0],l=document.elementFromPoint(u.clientX,u.clientY);if(!l||!l.getAttribute)return;var c=l.getAttribute(tp),s=(o=l.getAttribute(rp))!==null&&o!==void 0?o:void 0,f=FM(t.getState(),c,s);t.dispatch(Gm({activeDataKey:s,activeIndex:c,activeCoordinate:f}))}}});var zM=jv({brush:R_,cartesianAxis:tM,chartData:HE,graphicalItems:jT,layout:Lx,legend:ww,options:qE,polarAxis:fT,polarOptions:KM,referenceElements:W_,rootProps:RM,tooltip:$S}),WM=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Chart";return lx({reducer:zM,preloadedState:t,middleware:n=>n({serializableCheck:!1}).concat([fy.middleware,dy.middleware,Fl.middleware,gy.middleware,by.middleware]),devTools:{serialize:{replacer:$M},name:"recharts-".concat(r)}})};function xy(e){var{preloadedState:t,children:r,reduxStoreName:n}=e,i=_e(),a=m.useRef(null);if(i)return r;a.current==null&&(a.current=WM(t,n));var o=ts;return m.createElement(IM,{context:o,store:a.current},r)}function wy(e){var{layout:t,width:r,height:n,margin:i}=e,a=ae(),o=_e();return m.useEffect(()=>{o||(a(Nx(t)),a($x({width:r,height:n})),a(Ix(i)))},[a,o,t,r,n,i]),null}function Py(e){var t=ae();return m.useEffect(()=>{t(LM(e))},[t,e]),null}var UM=["children"];function HM(e,t){if(e==null)return{};var r,n,i=YM(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var r=ap(),n=op(),i=cp();if(!Tr(r)||!Tr(n))return null;var{children:a,otherAttributes:o,title:u,desc:l}=e,c,s;return typeof o.tabIndex=="number"?c=o.tabIndex:c=i?0:void 0,typeof o.role=="string"?s=o.role:s=i?"application":void 0,m.createElement(Zh,Ai({},o,{title:u,desc:l,role:s,tabIndex:c,width:r,height:n,style:GM,ref:t}),a)}),XM=e=>{var{children:t}=e,r=$(Bi);if(!r)return null;var{width:n,height:i,y:a,x:o}=r;return m.createElement(Zh,{width:n,height:i,x:o,y:a},t)},zh=m.forwardRef((e,t)=>{var{children:r}=e,n=HM(e,UM),i=_e();return i?m.createElement(XM,null,r):m.createElement(VM,Ai({ref:t},n),r)});function ZM(){var e=ae(),[t,r]=m.useState(null),n=$(dw);return m.useEffect(()=>{if(t!=null){var i=t.getBoundingClientRect(),a=i.width/t.offsetWidth;Ye(a)&&a!==n&&e(Rx(a))}},[t,e,n]),r}function Wh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function JM(e){for(var t=1;t{var{children:r,className:n,height:i,onClick:a,onContextMenu:o,onDoubleClick:u,onMouseDown:l,onMouseEnter:c,onMouseLeave:s,onMouseMove:f,onMouseUp:d,onTouchEnd:h,onTouchMove:v,onTouchStart:p,style:g,width:y}=e,b=ae(),[x,P]=m.useState(null),[w,O]=m.useState(null);VE();var A=ZM(),j=m.useCallback(L=>{A(L),typeof t=="function"&&t(L),P(L),O(L)},[A,t,P,O]),T=m.useCallback(L=>{b(cy(L)),b(Je({handler:a,reactEvent:L}))},[b,a]),I=m.useCallback(L=>{b(Ru(L)),b(Je({handler:c,reactEvent:L}))},[b,c]),_=m.useCallback(L=>{b(Vm()),b(Je({handler:s,reactEvent:L}))},[b,s]),k=m.useCallback(L=>{b(Ru(L)),b(Je({handler:f,reactEvent:L}))},[b,f]),R=m.useCallback(()=>{b(my())},[b]),B=m.useCallback(L=>{b(py(L.key))},[b]),z=m.useCallback(L=>{b(Je({handler:o,reactEvent:L}))},[b,o]),V=m.useCallback(L=>{b(Je({handler:u,reactEvent:L}))},[b,u]),K=m.useCallback(L=>{b(Je({handler:l,reactEvent:L}))},[b,l]),de=m.useCallback(L=>{b(Je({handler:d,reactEvent:L}))},[b,d]),oe=m.useCallback(L=>{b(Je({handler:p,reactEvent:L}))},[b,p]),Ie=m.useCallback(L=>{b(yy(L)),b(Je({handler:v,reactEvent:L}))},[b,v]),Ge=m.useCallback(L=>{b(Je({handler:h,reactEvent:L}))},[b,h]);return m.createElement(hg.Provider,{value:x},m.createElement(a0.Provider,{value:w},m.createElement("div",{className:H("recharts-wrapper",n),style:JM({position:"relative",cursor:"default",width:y,height:i},g),onClick:T,onContextMenu:z,onDoubleClick:V,onFocus:R,onKeyDown:B,onMouseDown:K,onMouseEnter:I,onMouseLeave:_,onMouseMove:k,onMouseUp:de,onTouchEnd:Ge,onTouchMove:Ie,onTouchStart:oe,ref:j},r)))}),nD=["children","className","width","height","style","compact","title","desc"];function iD(e,t){if(e==null)return{};var r,n,i=aD(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n{var{children:r,className:n,width:i,height:a,style:o,compact:u,title:l,desc:c}=e,s=iD(e,nD),f=F(s,!1);return u?m.createElement(zh,{otherAttributes:f,title:l,desc:c},r):m.createElement(rD,{className:n,style:o,width:i,height:a,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},m.createElement(zh,{otherAttributes:f,title:l,desc:c,ref:t},m.createElement(H_,null,r)))}),oD=["width","height"];function Lu(){return Lu=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.createElement(Ay,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:fD,tooltipPayloadSearcher:gl,categoricalChartProps:e,ref:t})),hD=["axis","item"],vD=m.forwardRef((e,t)=>m.createElement(Ay,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:hD,tooltipPayloadSearcher:gl,categoricalChartProps:e,ref:t}));function pD(e){var t=ae();return m.useEffect(()=>{t(BM(e))},[t,e]),null}var mD=["width","height","layout"];function Bu(){return Bu=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=it(e,OD);return m.createElement(wD,{chartName:"PieChart",defaultTooltipEventType:"item",validateTooltipEventTypes:PD,tooltipPayloadSearcher:gl,categoricalChartProps:r,ref:t})});const zl=(e="line")=>m.useMemo(()=>({...{margin:{top:5,right:30,left:20,bottom:5},gridProps:{strokeDasharray:"3 3",stroke:"#f3f4f6"},axisProps:{stroke:"#6b7280",fontSize:12}},...{line:{strokeWidth:3,dot:{strokeWidth:2,r:4},activeDot:{r:6,strokeWidth:2}},bar:{radius:[4,4,0,0]},pie:{innerRadius:60,outerRadius:80,paddingAngle:5}}[e]}),[e]),Wl=(e,t={})=>{const[r,n]=m.useState(null),[i,a]=m.useState(!0),[o,u]=m.useState(null),l=m.useMemo(()=>t,[t==null?void 0:t.forestId,t==null?void 0:t.startDate,t==null?void 0:t.endDate,t==null?void 0:t.species]),c=m.useCallback(async()=>{try{a(!0),u(null);const f=await e(l);n(f.data)}catch(f){console.error("Error fetching chart data:",f),u(f.message||"Failed to fetch chart data")}finally{a(!1)}},[e,l]);m.useEffect(()=>{c()},[c]);const s=m.useCallback(()=>{c()},[c]);return{data:r,loading:i,error:o,refresh:s}},SD=(e={})=>Wl(Fu.getSurvivalRate,e),ED=(e={})=>Wl(Fu.getHeightGrowth,e),jD=(e={})=>Wl(Fu.getCO2Absorption,e),TD=({filters:e={}})=>{var l,c;const{data:t,loading:r,error:n}=SD(e),i=((l=t==null?void 0:t.chartData)==null?void 0:l.length)>0&&((c=t.chartData[t.chartData.length-1])==null?void 0:c.survivalRate)||0,a={survived:i,lost:100-i},o=zl("pie"),u=[{name:"Survived",value:a.survived,color:"#10b981"},{name:"Lost",value:a.lost,color:"#ef4444"}];return r?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Tree Survival Rate"})}),E.jsx("div",{className:"flex justify-center items-center h-48",children:E.jsx(Si,{size:"32px",text:"Loading chart data..."})})]}):n?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Tree Survival Rate"})}),E.jsx("div",{className:"flex justify-center items-center h-48",children:E.jsxs("div",{className:"text-center",children:[E.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),E.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Tree Survival Rate"})}),E.jsx(My,{value:a.survived,label:"Survival Rate"}),E.jsx(bl,{width:"100%",height:200,children:E.jsxs(AD,{children:[E.jsx(_l,{data:u,cx:"50%",cy:"50%",innerRadius:o.innerRadius,outerRadius:o.outerRadius,paddingAngle:o.paddingAngle,dataKey:"value",children:u.map((s,f)=>E.jsx(jn,{fill:s.color},`cell-${f}`))}),E.jsx(yl,{content:E.jsx(Ku,{valueFormatter:s=>`${s.toFixed(1)}%`})})]})}),E.jsx(Dy,{data:u})]})},CD=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=ED(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>{var l,c;return{period:u.period,height:((l=u.species)==null?void 0:l.reduce((s,f)=>s+f.avgHeight,0))/(((c=u.species)==null?void 0:c.length)||1)||0}}))||[],a=zl("line");return r?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Average Tree Height Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsx(Si,{size:"32px",text:"Loading chart data..."})})]}):n?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Average Tree Height Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsxs("div",{className:"text-center",children:[E.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),E.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"Average Tree Height Over Time"})}),E.jsx(bl,{width:"100%",height:300,children:E.jsxs(dD,{data:i,margin:a.margin,children:[E.jsx(Ll,{...a.gridProps}),E.jsx(ua,{dataKey:"period",...a.axisProps}),E.jsx(sa,{...a.axisProps,label:{value:"Height (m)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(yl,{content:E.jsx(Ku,{valueFormatter:u=>`Average Height: ${u.toFixed(1)}m`})}),E.jsx(Bl,{type:"monotone",dataKey:"height",stroke:"#10b981",strokeWidth:a.strokeWidth,dot:{fill:"#10b981",...a.dot},activeDot:{r:6,stroke:"#10b981",...a.activeDot}})]})})]})},_D=({filters:e={}})=>{var o;const{data:t,loading:r,error:n}=jD(e),i=((o=t==null?void 0:t.chartData)==null?void 0:o.map(u=>({period:u.period,co2:u.totalCO2||0})))||[],a=zl("bar");return r?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"CO₂ Absorption Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsx(Si,{size:"32px",text:"Loading chart data..."})})]}):n?E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"CO₂ Absorption Over Time"})}),E.jsx("div",{className:"flex justify-center items-center h-72",children:E.jsxs("div",{className:"text-center",children:[E.jsx("p",{className:"text-red-600 mb-2",children:"Error loading chart data"}),E.jsx("p",{className:"text-sm text-gray-500",children:n})]})})]}):E.jsxs(bt,{children:[E.jsx(xt,{children:E.jsx(wt,{children:"CO₂ Absorption Over Time"})}),E.jsx(bl,{width:"100%",height:300,children:E.jsxs(vD,{data:i,margin:a.margin,children:[E.jsx(Ll,{...a.gridProps}),E.jsx(ua,{dataKey:"period",...a.axisProps}),E.jsx(sa,{...a.axisProps,label:{value:"CO₂ (tons)",angle:-90,position:"insideLeft",fontSize:12}}),E.jsx(yl,{content:E.jsx(Ku,{valueFormatter:u=>`CO₂ Absorption: ${u.toFixed(1)} tons`})}),E.jsx(Dl,{dataKey:"co2",fill:"#8b5cf6",radius:a.radius})]})})]})},kD=(e={})=>{const[t,r]=m.useState(null),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useMemo(()=>e,[e==null?void 0:e.forestId,e==null?void 0:e.startDate,e==null?void 0:e.endDate,e==null?void 0:e.species]),l=m.useCallback(async()=>{try{i(!0),o(null);const s=await Ky.getStats(u);r(s.data)}catch(s){console.error("Error fetching dashboard stats:",s),o(s.message||"Failed to fetch dashboard statistics")}finally{i(!1)}},[u]);m.useEffect(()=>{l()},[l]);const c=m.useCallback(()=>{l()},[l]);return{stats:t,loading:n,error:a,refresh:c}},MD=(e={})=>{const[t,r]=m.useState([]),[n,i]=m.useState(!0),[a,o]=m.useState(null),u=m.useMemo(()=>e,[e==null?void 0:e.forestId,e==null?void 0:e.startDate,e==null?void 0:e.endDate,e==null?void 0:e.species,e==null?void 0:e.page,e==null?void 0:e.limit]),l=m.useCallback(async()=>{try{i(!0),o(null);const s=await By.getAll(u);r(s.data||[])}catch(s){console.error("Error fetching tree data:",s),o(s.message||"Failed to fetch tree data")}finally{i(!1)}},[u]);m.useEffect(()=>{l()},[l]);const c=m.useCallback(()=>{l()},[l]);return{trees:t,loading:n,error:a,refresh:c}},iI=()=>{var y,b,x,P;const{sidebarOpen:e,toggleSidebar:t,closeSidebar:r}=Iy(),[n,i]=m.useState({}),{stats:a,loading:o,error:u,refresh:l}=kD(n);MD(n);const c=m.useCallback(w=>{i(w)},[]),s=w=>w?w.toLocaleString():"0",f=w=>w?`${w.toFixed(1)}%`:"0%",d=w=>w?`${w.toFixed(1)}m`:"0m",h=w=>w?`${w.toFixed(1)}t`:"0t",v=()=>{console.log("Export started")},p=(w,O)=>{console.log(`Export completed: ${w} with ${O} records`)},g=w=>{console.error("Export error:",w)};return E.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[E.jsx(Ny,{onToggleSidebar:t}),E.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[E.jsx($y,{isOpen:e,onClose:r}),E.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:E.jsxs("div",{className:"max-w-7xl mx-auto",children:[E.jsx("div",{className:"mb-8",children:E.jsxs("div",{className:"flex justify-between items-center mb-4",children:[E.jsxs("div",{children:[E.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome to Nanwa"}),E.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Monitor your forests and track tree growth with real-time insights."})]}),E.jsx("div",{className:"flex items-center space-x-4",children:E.jsx(Ly,{filters:n,onExportStart:v,onExportComplete:p,onExportError:g})})]})}),E.jsx(Ry,{onFiltersChange:c}),o?E.jsx("div",{className:"flex justify-center items-center py-12",children:E.jsx(Si,{text:"Loading dashboard statistics..."})}):u?E.jsxs("div",{className:"bg-red-50 border border-red-200 rounded-lg p-4 mb-8",children:[E.jsxs("p",{className:"text-red-600",children:["Error loading dashboard statistics: ",u]}),E.jsx("button",{onClick:l,className:"mt-2 text-red-600 hover:text-red-800 underline",children:"Try again"})]}):E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:[E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})}),title:"Total Trees",value:s((y=a==null?void 0:a.overview)==null?void 0:y.totalTrees),color:"green"}),E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Survival Rate",value:f((b=a==null?void 0:a.overview)==null?void 0:b.survivalRate),color:"blue"}),E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"})}),title:"Avg Height",value:d((x=a==null?void 0:a.height)==null?void 0:x.average),color:"yellow"}),E.jsx(Tn,{icon:E.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:E.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})}),title:"CO₂ Absorbed",value:h((P=a==null?void 0:a.co2)==null?void 0:P.totalAbsorption),color:"purple"})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6 mb-8",children:[E.jsx("div",{className:"lg:col-span-1",children:E.jsx(TD,{filters:n})}),E.jsx("div",{className:"lg:col-span-1 xl:col-span-2",children:E.jsx(CD,{filters:n})}),E.jsx("div",{className:"lg:col-span-2 xl:col-span-3",children:E.jsx(_D,{filters:n})})]}),E.jsx(qy,{})]})})]})]})};export{iI as DashboardPage}; diff --git a/frontend/dist/assets/ErrorPages-CFbRbfCl.js b/frontend/dist/assets/ErrorPages-BOUlGSHx.js similarity index 91% rename from frontend/dist/assets/ErrorPages-CFbRbfCl.js rename to frontend/dist/assets/ErrorPages-BOUlGSHx.js index e1f4bf8310..7435d3109f 100644 --- a/frontend/dist/assets/ErrorPages-CFbRbfCl.js +++ b/frontend/dist/assets/ErrorPages-BOUlGSHx.js @@ -1 +1 @@ -import{j as e,l as n,a as k,B as g,o as s}from"./index-CGkKx7Xv.js";import"./IconButton-vDjz_WRZ.js";import{B as p}from"./MapSidebar-jstr5dKK.js";import"./ExportButton-BryKwkQ4.js";import"./FormElements-BsiOcVAQ.js";import"./Table-CfKObwuM.js";import"./ChartComponents-DOzzJtP4.js";import"./TreeDetailModal-DPmuOlrX.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-Bh0nMcUg.js";const v=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"9,22 9,12 15,12 15,22"})]}),L=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"23,4 23,10 17,10"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"1,20 1,14 7,14"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.49,9A9,9,0,0,0,5.64,5.64L1,10"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3.51,15A9,9,0,0,0,18.36,18.36L23,14"})]}),w=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("circle",{cx:"11",cy:"11",r:"8",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 21l-4.35-4.35"})]}),y=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6v6"}),e.jsx("circle",{cx:"12",cy:"16",r:"1",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2})]}),f=({className:r,children:o,...t})=>e.jsx("div",{className:n("min-h-screen flex items-center justify-center p-8 bg-gradient-to-br from-blue-500 to-purple-600",r),...t,children:o}),B=({className:r,children:o,...t})=>e.jsx("div",{className:n("bg-white rounded-2xl p-12 max-w-lg w-full text-center shadow-2xl","md:p-8 md:mx-4",r),...t,children:o}),N=({className:r,children:o,...t})=>e.jsx("div",{className:n("mb-8 [&>svg]:w-30 [&>svg]:h-30 [&>svg]:opacity-70","md:[&>svg]:w-20 md:[&>svg]:h-20",r),...t,children:o}),W=({className:r,children:o,...t})=>e.jsx("h1",{className:n("text-6xl font-extrabold text-red-500 m-0 leading-none","md:text-4xl",r),...t,children:o}),E=({className:r,children:o,...t})=>e.jsx("h2",{className:n("text-2xl font-semibold text-gray-800 my-4","md:text-xl",r),...t,children:o}),P=({className:r,children:o,...t})=>e.jsx("p",{className:n("text-lg text-gray-600 leading-relaxed my-6 mb-8",r),...t,children:o}),C=()=>{const r=k();return{goBack:()=>{r(-1)},goHome:()=>{r("/")},reload:()=>{window.location.reload()}}},a=({code:r,title:o,message:t,illustration:i,showBackButton:d=!0,showHomeButton:l=!0,showReloadButton:c=!1,className:x,...u})=>{const{goBack:h,goHome:j,reload:m}=C();return e.jsx(f,{className:x,...u,children:e.jsxs(B,{children:[e.jsx(N,{children:i}),e.jsx(W,{children:r}),e.jsx(E,{children:o}),e.jsx(P,{children:t}),e.jsxs(g,{className:"flex justify-center gap-4 flex-wrap mt-8",children:[d&&e.jsxs(s,{onClick:h,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(p,{className:"w-4 h-4"}),"Go Back"]}),c&&e.jsxs(s,{onClick:m,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(L,{className:"w-4 h-4"}),"Try Again"]}),l&&e.jsxs(s,{onClick:j,variant:"secondary",className:"flex items-center gap-2",children:[e.jsx(v,{className:"w-4 h-4"}),"Go Home"]})]})]})})},b=({className:r="",...o})=>e.jsxs("div",{className:r,...o,children:[e.jsx(w,{className:"text-gray-400"}),e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",className:"absolute inset-0 text-red-500",style:{width:"100%",height:"100%"},children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 8l-8 8"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 8l8 8"})]})]}),I=({className:r="",...o})=>e.jsx("div",{className:r,...o,children:e.jsx(y,{className:"text-gray-400"})}),q=()=>e.jsx(a,{code:"404",title:"Page Not Found",message:"The page you're looking for doesn't exist. It might have been moved, deleted, or you entered the wrong URL.",illustration:e.jsx(b,{}),showBackButton:!0,showHomeButton:!0,showReloadButton:!1}),D=()=>e.jsx(a,{code:"500",title:"Internal Server Error",message:"Something went wrong on our end. We're working to fix it. Please try again in a few moments.",illustration:e.jsx(I,{}),showBackButton:!1,showHomeButton:!0,showReloadButton:!0});export{q as NotFoundPage,D as ServerErrorPage}; +import{j as e,l as n,a as k,B as g,o as s}from"./index-Cp0G27Fl.js";import"./IconButton-Cy_suQAe.js";import{B as p}from"./MapSidebar-DVta1WHd.js";import"./ExportButton-CO4K-of6.js";import"./FormElements-DFAqWcb0.js";import"./Modal-BNFLubTG.js";import"./ChartComponents-CnhCT1GQ.js";import"./TreeDetailModal-CdyalJyV.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BEEMcJj7.js";const v=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"9,22 9,12 15,12 15,22"})]}),L=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"23,4 23,10 17,10"}),e.jsx("polyline",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,points:"1,20 1,14 7,14"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.49,9A9,9,0,0,0,5.64,5.64L1,10"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3.51,15A9,9,0,0,0,18.36,18.36L23,14"})]}),w=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("circle",{cx:"11",cy:"11",r:"8",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M21 21l-4.35-4.35"})]}),y=({className:r="",...o})=>e.jsxs("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...o,children:[e.jsx("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"8",y1:"21",x2:"16",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("line",{x1:"12",y1:"17",x2:"12",y2:"21",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 6v6"}),e.jsx("circle",{cx:"12",cy:"16",r:"1",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2})]}),f=({className:r,children:o,...t})=>e.jsx("div",{className:n("min-h-screen flex items-center justify-center p-8 bg-gradient-to-br from-blue-500 to-purple-600",r),...t,children:o}),B=({className:r,children:o,...t})=>e.jsx("div",{className:n("bg-white rounded-2xl p-12 max-w-lg w-full text-center shadow-2xl","md:p-8 md:mx-4",r),...t,children:o}),N=({className:r,children:o,...t})=>e.jsx("div",{className:n("mb-8 [&>svg]:w-30 [&>svg]:h-30 [&>svg]:opacity-70","md:[&>svg]:w-20 md:[&>svg]:h-20",r),...t,children:o}),W=({className:r,children:o,...t})=>e.jsx("h1",{className:n("text-6xl font-extrabold text-red-500 m-0 leading-none","md:text-4xl",r),...t,children:o}),E=({className:r,children:o,...t})=>e.jsx("h2",{className:n("text-2xl font-semibold text-gray-800 my-4","md:text-xl",r),...t,children:o}),P=({className:r,children:o,...t})=>e.jsx("p",{className:n("text-lg text-gray-600 leading-relaxed my-6 mb-8",r),...t,children:o}),C=()=>{const r=k();return{goBack:()=>{r(-1)},goHome:()=>{r("/")},reload:()=>{window.location.reload()}}},a=({code:r,title:o,message:t,illustration:i,showBackButton:d=!0,showHomeButton:l=!0,showReloadButton:c=!1,className:x,...u})=>{const{goBack:h,goHome:j,reload:m}=C();return e.jsx(f,{className:x,...u,children:e.jsxs(B,{children:[e.jsx(N,{children:i}),e.jsx(W,{children:r}),e.jsx(E,{children:o}),e.jsx(P,{children:t}),e.jsxs(g,{className:"flex justify-center gap-4 flex-wrap mt-8",children:[d&&e.jsxs(s,{onClick:h,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(p,{className:"w-4 h-4"}),"Go Back"]}),c&&e.jsxs(s,{onClick:m,variant:"primary",className:"flex items-center gap-2",children:[e.jsx(L,{className:"w-4 h-4"}),"Try Again"]}),l&&e.jsxs(s,{onClick:j,variant:"secondary",className:"flex items-center gap-2",children:[e.jsx(v,{className:"w-4 h-4"}),"Go Home"]})]})]})})},b=({className:r="",...o})=>e.jsxs("div",{className:r,...o,children:[e.jsx(w,{className:"text-gray-400"}),e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",className:"absolute inset-0 text-red-500",style:{width:"100%",height:"100%"},children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 8l-8 8"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 8l8 8"})]})]}),I=({className:r="",...o})=>e.jsx("div",{className:r,...o,children:e.jsx(y,{className:"text-gray-400"})}),q=()=>e.jsx(a,{code:"404",title:"Page Not Found",message:"The page you're looking for doesn't exist. It might have been moved, deleted, or you entered the wrong URL.",illustration:e.jsx(b,{}),showBackButton:!0,showHomeButton:!0,showReloadButton:!1}),D=()=>e.jsx(a,{code:"500",title:"Internal Server Error",message:"Something went wrong on our end. We're working to fix it. Please try again in a few moments.",illustration:e.jsx(I,{}),showBackButton:!1,showHomeButton:!0,showReloadButton:!0});export{q as NotFoundPage,D as ServerErrorPage}; diff --git a/frontend/dist/assets/ExportButton-BryKwkQ4.js b/frontend/dist/assets/ExportButton-CO4K-of6.js similarity index 98% rename from frontend/dist/assets/ExportButton-BryKwkQ4.js rename to frontend/dist/assets/ExportButton-CO4K-of6.js index f75e4c59cf..c0f899da76 100644 --- a/frontend/dist/assets/ExportButton-BryKwkQ4.js +++ b/frontend/dist/assets/ExportButton-CO4K-of6.js @@ -1,4 +1,4 @@ -import{A as C,r as m,j as e,d as o,i as x}from"./index-CGkKx7Xv.js";const f=new C,k={exportTreesCSV:(t={},r="trees_export.csv")=>f.downloadFile("/exports/trees/csv",t,r),exportTreesXLSX:(t={},r="trees_export.xlsx")=>f.downloadFile("/exports/trees/xlsx",t,r),exportForestAnalytics:(t={},r="forest_analytics.xlsx")=>f.downloadFile("/exports/forest-analytics",t,r)},L=o.div` +import{A as C,r as m,j as e,d as o,i as x}from"./index-Cp0G27Fl.js";const f=new C,k={exportTreesCSV:(t={},r="trees_export.csv")=>f.downloadFile("/exports/trees/csv",t,r),exportTreesXLSX:(t={},r="trees_export.xlsx")=>f.downloadFile("/exports/trees/xlsx",t,r),exportForestAnalytics:(t={},r="forest_analytics.xlsx")=>f.downloadFile("/exports/forest-analytics",t,r)},L=o.div` position: relative; display: inline-block; `,X=o.button` diff --git a/frontend/dist/assets/FormElements-BsiOcVAQ.js b/frontend/dist/assets/FormElements-DFAqWcb0.js similarity index 98% rename from frontend/dist/assets/FormElements-BsiOcVAQ.js rename to frontend/dist/assets/FormElements-DFAqWcb0.js index eb172f75a4..97ef441a81 100644 --- a/frontend/dist/assets/FormElements-BsiOcVAQ.js +++ b/frontend/dist/assets/FormElements-DFAqWcb0.js @@ -1,4 +1,4 @@ -import{j as n,d as e,r as u}from"./index-CGkKx7Xv.js";const x=e.span` +import{j as n,d as e,r as u}from"./index-Cp0G27Fl.js";const x=e.span` padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem; diff --git a/frontend/dist/assets/FormField-BLwCJzgw.js b/frontend/dist/assets/FormField-BLwCJzgw.js new file mode 100644 index 0000000000..4cf2b54550 --- /dev/null +++ b/frontend/dist/assets/FormField-BLwCJzgw.js @@ -0,0 +1 @@ +import{j as e}from"./index-Cp0G27Fl.js";const d=({label:r,id:t,error:s,required:a=!1,children:m,className:l=""})=>e.jsxs("div",{className:l,children:[e.jsxs("label",{htmlFor:t,className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[r,a&&e.jsx("span",{className:"text-red-500 ml-1",children:"*"})]}),m,s&&e.jsx("p",{id:`${t}-error`,className:"mt-1 text-sm text-red-600 dark:text-red-400",children:s})]});export{d as F}; diff --git a/frontend/dist/assets/IconButton-vDjz_WRZ.js b/frontend/dist/assets/IconButton-Cy_suQAe.js similarity index 82% rename from frontend/dist/assets/IconButton-vDjz_WRZ.js rename to frontend/dist/assets/IconButton-Cy_suQAe.js index adfbae4e1f..18c1273a13 100644 --- a/frontend/dist/assets/IconButton-vDjz_WRZ.js +++ b/frontend/dist/assets/IconButton-Cy_suQAe.js @@ -1 +1 @@ -import{R as e,j as l,o as m,l as i}from"./index-CGkKx7Xv.js";const u=e.forwardRef(({className:o,children:t,"aria-label":s,size:a="md",variant:n="ghost",...r},c)=>l.jsx(m,{className:i("btn-icon",a==="sm"&&"h-8 w-8",a==="md"&&"h-10 w-10",a==="lg"&&"h-12 w-12",o),ref:c,size:"icon",variant:n,"aria-label":s,...r,children:t}));u.displayName="IconButton";export{u as I}; +import{f as e,j as l,o as m,l as i}from"./index-Cp0G27Fl.js";const u=e.forwardRef(({className:o,children:t,"aria-label":s,size:a="md",variant:n="ghost",...r},c)=>l.jsx(m,{className:i("btn-icon",a==="sm"&&"h-8 w-8",a==="md"&&"h-10 w-10",a==="lg"&&"h-12 w-12",o),ref:c,size:"icon",variant:n,"aria-label":s,...r,children:t}));u.displayName="IconButton";export{u as I}; diff --git a/frontend/dist/assets/LandingPage-BfmN78ZN.js b/frontend/dist/assets/LandingPage-BBS10Grj.js similarity index 94% rename from frontend/dist/assets/LandingPage-BfmN78ZN.js rename to frontend/dist/assets/LandingPage-BBS10Grj.js index e48081c28c..06f33899bc 100644 --- a/frontend/dist/assets/LandingPage-BfmN78ZN.js +++ b/frontend/dist/assets/LandingPage-BBS10Grj.js @@ -1 +1 @@ -import{j as e,L as a}from"./index-CGkKx7Xv.js";import"./IconButton-vDjz_WRZ.js";import"./MapSidebar-jstr5dKK.js";import"./ExportButton-BryKwkQ4.js";import"./FormElements-BsiOcVAQ.js";import"./Table-CfKObwuM.js";import"./ChartComponents-DOzzJtP4.js";import"./TreeDetailModal-DPmuOlrX.js";import{N as i}from"./Navbar-BSLKvp05.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-Bh0nMcUg.js";import"./DarkModeToggle-Cu0JyOh5.js";const n=()=>e.jsxs("section",{className:"pt-20 bg-gradient-to-br from-green-500 to-green-700 dark:from-green-600 dark:to-green-800 min-h-screen flex items-center justify-center relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 opacity-30",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`}}),e.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24",children:e.jsxs("div",{className:"text-center",children:[e.jsxs("h1",{className:"text-4xl md:text-6xl font-bold text-white mb-6",children:["Discover, Monitor & Export",e.jsx("span",{className:"block text-green-200",children:"Real-Time Tree Insights"})]}),e.jsx("p",{className:"text-xl md:text-2xl text-green-100 mb-8 max-w-3xl mx-auto",children:"Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights."}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[e.jsx(a,{to:"/register",className:"bg-white dark:bg-gray-100 text-green-600 dark:text-green-700 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 dark:hover:bg-gray-200 transition-colors",children:"Start Your Free Trial"}),e.jsx("a",{href:"#features",className:"border-2 border-white text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-white hover:text-green-600 dark:hover:bg-gray-100 dark:hover:text-green-700 transition-colors",children:"Learn More"})]})]})})]}),l=({icon:r,title:t,description:s})=>e.jsxs("div",{className:"bg-white dark:bg-gray-900 p-8 rounded-xl shadow-lg dark:shadow-gray-900/50",children:[e.jsx("div",{className:"w-12 h-12 bg-green-100 dark:bg-green-900/30 rounded-lg flex items-center justify-center mb-6",children:r}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:t}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s})]}),o=()=>{const r=[{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Real-Time Analytics",description:"Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics."},{icon:e.jsxs("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),title:"Interactive Mapping",description:"Visualize forests and individual trees with marker clustering and detailed tree information."},{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),title:"Data Export",description:"Export filtered datasets to CSV or XLSX format for reporting and analysis."}];return e.jsx("section",{id:"features",className:"py-20 bg-gray-50 dark:bg-gray-800",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"text-center mb-16",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4",children:"Powerful Features for Tree Management"}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto",children:"Everything you need to monitor, analyze, and export tree data with precision and ease."})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-8",children:r.map((t,s)=>e.jsx(l,{icon:t.icon,title:t.title,description:t.description},s))})]})})},d=()=>{const r=[{value:"10K+",label:"Trees Monitored"},{value:"95%",label:"Survival Rate"},{value:"50+",label:"Forest Projects"},{value:"24/7",label:"Real-Time Data"}];return e.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 p-8 rounded-xl",children:e.jsx("div",{className:"grid grid-cols-2 gap-4",children:r.map((t,s)=>e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-green-600 dark:text-green-400 mb-2",children:t.value}),e.jsx("div",{className:"text-gray-600 dark:text-gray-300",children:t.label})]},s))})})},c=()=>e.jsx("section",{id:"about",className:"py-20 bg-white dark:bg-gray-900",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-6",children:"Empowering Sustainable Forestry"}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-6",children:"Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects."}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-8",children:"Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs."}),e.jsx(a,{to:"/register",className:"bg-green-600 dark:bg-green-500 text-white px-6 py-3 rounded-lg text-lg font-semibold hover:bg-green-700 dark:hover:bg-green-600 transition-colors inline-block",children:"Join Nanwa Today"})]}),e.jsx(d,{})]})})}),x=()=>e.jsx("footer",{className:"bg-gray-900 text-white py-12",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"grid md:grid-cols-4 gap-8",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-bold text-green-400 mb-4",children:"Nanwa"}),e.jsx("p",{className:"text-gray-400",children:"Empowering sustainable forestry through data-driven insights and real-time monitoring."})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Product"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#features",className:"hover:text-white transition-colors",children:"Features"})}),e.jsx("li",{children:e.jsx(a,{to:"/login",className:"hover:text-white transition-colors",children:"Login"})}),e.jsx("li",{children:e.jsx(a,{to:"/register",className:"hover:text-white transition-colors",children:"Register"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Company"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#about",className:"hover:text-white transition-colors",children:"About"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Contact"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Privacy"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Support"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Help Center"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Documentation"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"API"})})]})]})]}),e.jsx("div",{className:"border-t border-gray-800 mt-8 pt-8 text-center text-gray-400",children:e.jsx("p",{children:"© 2024 Nanwa. All rights reserved."})})]})}),k=()=>e.jsxs("div",{className:"min-h-screen bg-white dark:bg-gray-900",children:[e.jsx(i,{}),e.jsx(n,{}),e.jsx(o,{}),e.jsx(c,{}),e.jsx(x,{})]});export{k as LandingPage}; +import{j as e,L as a}from"./index-Cp0G27Fl.js";import"./IconButton-Cy_suQAe.js";import"./MapSidebar-DVta1WHd.js";import"./ExportButton-CO4K-of6.js";import"./FormElements-DFAqWcb0.js";import"./Modal-BNFLubTG.js";import"./ChartComponents-CnhCT1GQ.js";import"./TreeDetailModal-CdyalJyV.js";import{N as i}from"./Navbar-N3bkUWQJ.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BEEMcJj7.js";import"./DarkModeToggle-DYOgA8sV.js";const n=()=>e.jsxs("section",{className:"pt-20 bg-gradient-to-br from-green-500 to-green-700 dark:from-green-600 dark:to-green-800 min-h-screen flex items-center justify-center relative overflow-hidden",children:[e.jsx("div",{className:"absolute inset-0 opacity-30",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.1'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`}}),e.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24",children:e.jsxs("div",{className:"text-center",children:[e.jsxs("h1",{className:"text-4xl md:text-6xl font-bold text-white mb-6",children:["Discover, Monitor & Export",e.jsx("span",{className:"block text-green-200",children:"Real-Time Tree Insights"})]}),e.jsx("p",{className:"text-xl md:text-2xl text-green-100 mb-8 max-w-3xl mx-auto",children:"Nanwa provides investors, growers, and admins with comprehensive tools to track every tree in our registry with real-time data and actionable insights."}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 justify-center",children:[e.jsx(a,{to:"/register",className:"bg-white dark:bg-gray-100 text-green-600 dark:text-green-700 px-8 py-4 rounded-lg text-lg font-semibold hover:bg-gray-100 dark:hover:bg-gray-200 transition-colors",children:"Start Your Free Trial"}),e.jsx("a",{href:"#features",className:"border-2 border-white text-white px-8 py-4 rounded-lg text-lg font-semibold hover:bg-white hover:text-green-600 dark:hover:bg-gray-100 dark:hover:text-green-700 transition-colors",children:"Learn More"})]})]})})]}),l=({icon:r,title:t,description:s})=>e.jsxs("div",{className:"bg-white dark:bg-gray-900 p-8 rounded-xl shadow-lg dark:shadow-gray-900/50",children:[e.jsx("div",{className:"w-12 h-12 bg-green-100 dark:bg-green-900/30 rounded-lg flex items-center justify-center mb-6",children:r}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-4",children:t}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:s})]}),o=()=>{const r=[{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})}),title:"Real-Time Analytics",description:"Monitor survival rates, average height, and CO₂ absorption with live-updating charts and metrics."},{icon:e.jsxs("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),title:"Interactive Mapping",description:"Visualize forests and individual trees with marker clustering and detailed tree information."},{icon:e.jsx("svg",{className:"w-6 h-6 text-green-600 dark:text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),title:"Data Export",description:"Export filtered datasets to CSV or XLSX format for reporting and analysis."}];return e.jsx("section",{id:"features",className:"py-20 bg-gray-50 dark:bg-gray-800",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"text-center mb-16",children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-4",children:"Powerful Features for Tree Management"}),e.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto",children:"Everything you need to monitor, analyze, and export tree data with precision and ease."})]}),e.jsx("div",{className:"grid md:grid-cols-3 gap-8",children:r.map((t,s)=>e.jsx(l,{icon:t.icon,title:t.title,description:t.description},s))})]})})},d=()=>{const r=[{value:"10K+",label:"Trees Monitored"},{value:"95%",label:"Survival Rate"},{value:"50+",label:"Forest Projects"},{value:"24/7",label:"Real-Time Data"}];return e.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 p-8 rounded-xl",children:e.jsx("div",{className:"grid grid-cols-2 gap-4",children:r.map((t,s)=>e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-green-600 dark:text-green-400 mb-2",children:t.value}),e.jsx("div",{className:"text-gray-600 dark:text-gray-300",children:t.label})]},s))})})},c=()=>e.jsx("section",{id:"about",className:"py-20 bg-white dark:bg-gray-900",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-12 items-center",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-3xl md:text-4xl font-bold text-gray-900 dark:text-white mb-6",children:"Empowering Sustainable Forestry"}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-6",children:"Nanwa is dedicated to providing comprehensive tree monitoring solutions that help investors, growers, and environmental analysts make data-driven decisions for sustainable forestry projects."}),e.jsx("p",{className:"text-lg text-gray-600 dark:text-gray-300 mb-8",children:"Our platform offers real-time insights, advanced analytics, and seamless data export capabilities to support your forestry management needs."}),e.jsx(a,{to:"/register",className:"bg-green-600 dark:bg-green-500 text-white px-6 py-3 rounded-lg text-lg font-semibold hover:bg-green-700 dark:hover:bg-green-600 transition-colors inline-block",children:"Join Nanwa Today"})]}),e.jsx(d,{})]})})}),x=()=>e.jsx("footer",{className:"bg-gray-900 text-white py-12",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[e.jsxs("div",{className:"grid md:grid-cols-4 gap-8",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-2xl font-bold text-green-400 mb-4",children:"Nanwa"}),e.jsx("p",{className:"text-gray-400",children:"Empowering sustainable forestry through data-driven insights and real-time monitoring."})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Product"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#features",className:"hover:text-white transition-colors",children:"Features"})}),e.jsx("li",{children:e.jsx(a,{to:"/login",className:"hover:text-white transition-colors",children:"Login"})}),e.jsx("li",{children:e.jsx(a,{to:"/register",className:"hover:text-white transition-colors",children:"Register"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Company"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#about",className:"hover:text-white transition-colors",children:"About"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Contact"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Privacy"})})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold mb-4",children:"Support"}),e.jsxs("ul",{className:"space-y-2 text-gray-400",children:[e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Help Center"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"Documentation"})}),e.jsx("li",{children:e.jsx("a",{href:"#",className:"hover:text-white transition-colors",children:"API"})})]})]})]}),e.jsx("div",{className:"border-t border-gray-800 mt-8 pt-8 text-center text-gray-400",children:e.jsx("p",{children:"© 2024 Nanwa. All rights reserved."})})]})}),k=()=>e.jsxs("div",{className:"min-h-screen bg-white dark:bg-gray-900",children:[e.jsx(i,{}),e.jsx(n,{}),e.jsx(o,{}),e.jsx(c,{}),e.jsx(x,{})]});export{k as LandingPage}; diff --git a/frontend/dist/assets/LoginPage-Ckincecw.js b/frontend/dist/assets/LoginPage-Ckincecw.js new file mode 100644 index 0000000000..5f394b188c --- /dev/null +++ b/frontend/dist/assets/LoginPage-Ckincecw.js @@ -0,0 +1 @@ +import{r as o,j as e,L as f,u as j,a as k}from"./index-Cp0G27Fl.js";import{N as w}from"./Navbar-N3bkUWQJ.js";import{F as y}from"./FormField-BLwCJzgw.js";import{P as v}from"./PasswordInput-C1THfjeW.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BEEMcJj7.js";import"./DarkModeToggle-DYOgA8sV.js";import"./IconButton-Cy_suQAe.js";const C=({connectionState:r,onCancel:t,showCancel:l=!0})=>{const[n,i]=o.useState(0),[c,u]=o.useState(0),{isConnecting:s,isColdStart:a,retryAttempt:d,totalAttempts:h,estimatedWaitTime:p,message:g}=r;return o.useEffect(()=>{if(!s){i(0),u(0);return}const x=setInterval(()=>{if(u(m=>m+1),a){const b=Math.min(c/60*100,90);i(b)}else{const b=Math.min(c/10*100,90);i(b)}},1e3);return()=>clearInterval(x)},[s,a,c]),o.useEffect(()=>{!s&&n>0&&i(100)},[s,n]),s?e.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg p-8 max-w-md w-full mx-4 shadow-2xl",children:[e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("div",{className:"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsxs("svg",{className:"w-8 h-8 text-green-600 dark:text-green-400 animate-spin",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:a?"Server Starting Up":"Connecting"})]}),e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-2",children:g}),a&&e.jsxs("div",{className:"text-sm text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsx("p",{children:"The server needs to start up from sleep mode."}),e.jsx("p",{children:"This usually takes 30-60 seconds."})]})]}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex justify-between text-sm text-gray-500 dark:text-gray-400 mb-2",children:[e.jsx("span",{children:"Progress"}),e.jsxs("span",{children:[Math.round(n),"%"]})]}),e.jsx("div",{className:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2",children:e.jsx("div",{className:"bg-green-600 h-2 rounded-full transition-all duration-1000 ease-out",style:{width:`${n}%`}})})]}),d>0&&e.jsx("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg mb-4",children:e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"text-blue-600 dark:text-blue-400",children:["Attempt ",d," of ",h]}),e.jsxs("span",{className:"text-blue-500 dark:text-blue-300",children:[c,"s elapsed"]})]})}),p>0&&e.jsxs("div",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mb-4",children:["Estimated wait time: ",p," seconds"]}),l&&t&&e.jsx("div",{className:"text-center",children:e.jsx("button",{onClick:t,className:"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 text-sm underline",children:"Cancel and try again later"})})]})}):null},N=(r,t)=>{const[l,n]=o.useState(r),[i,c]=o.useState({}),[u,s]=o.useState({}),a=o.useCallback(g=>{const{name:x,value:m}=g.target;n(b=>({...b,[x]:m})),i[x]&&c(b=>({...b,[x]:""}))},[i]),d=o.useCallback(g=>{const{name:x}=g.target;s(m=>({...m,[x]:!0}))},[]),h=o.useCallback(()=>{const g=t(l);return c(g),Object.keys(g).length===0},[l,t]),p=o.useCallback(()=>{n(r),c({}),s({})},[r]);return{values:l,errors:i,touched:u,handleChange:a,handleBlur:d,validateForm:h,resetForm:p,setErrors:c}},S=r=>{const t={};return r.email?/\S+@\S+\.\S+/.test(r.email)||(t.email="Email is invalid"):t.email="Email is required",r.password?r.password.length<6&&(t.password="Password must be at least 6 characters"):t.password="Password is required",t},A=({onSubmit:r,isSubmitting:t,errors:l})=>{const{values:n,errors:i,handleChange:c,handleBlur:u,validateForm:s}=N({email:"",password:""},S),a={...i,...l},d=h=>{h.preventDefault(),s()&&r(n)};return e.jsxs("form",{onSubmit:d,className:"space-y-6",children:[a.general&&e.jsx("div",{className:"bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 text-red-700 dark:text-red-400 px-4 py-3 rounded-lg",children:a.general}),e.jsx(y,{label:"Email address",id:"email",error:a.email,required:!0,children:e.jsx("input",{type:"email",id:"email",name:"email",value:n.email,onChange:c,onBlur:u,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${a.email?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"}`,placeholder:"Enter your email",disabled:t})}),e.jsx(y,{label:"Password",id:"password",error:a.password,required:!0,children:e.jsx(v,{id:"password",name:"password",value:n.password,onChange:c,onBlur:u,error:a.password,placeholder:"Enter your password",disabled:t})}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(E,{disabled:t}),e.jsx(F,{})]}),e.jsx(P,{isSubmitting:t}),e.jsx(T,{})]})},E=({disabled:r})=>e.jsxs("div",{className:"flex items-center",children:[e.jsx("input",{id:"remember-me",name:"remember-me",type:"checkbox",className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700",disabled:r}),e.jsx("label",{htmlFor:"remember-me",className:"ml-2 block text-sm text-gray-900 dark:text-white",children:"Remember me"})]}),F=()=>e.jsx("div",{className:"text-sm",children:e.jsx("a",{href:"#",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Forgot your password?"})}),P=({isSubmitting:r})=>e.jsx("button",{type:"submit",disabled:r,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 dark:bg-green-500 hover:bg-green-700 dark:hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:r?e.jsxs("div",{className:"flex items-center",children:[e.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Signing in..."]}):"Sign in"}),T=()=>e.jsx("div",{className:"text-center",children:e.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["Don't have an account?"," ",e.jsx(f,{to:"/register",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Sign up"})]})}),L=()=>e.jsxs("div",{className:"mt-8 p-4 bg-gray-50 dark:bg-gray-700 rounded-lg",children:[e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 mb-2",children:"Demo credentials:"}),e.jsxs("div",{className:"text-xs text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Admin:"})," admin@nanwa.com / admin123"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"User:"})," user@nanwa.com / user123"]})]})]}),M=()=>{const[r,t]=o.useState({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null}),l=o.useCallback(s=>{const{attempt:a,totalAttempts:d,delay:h,error:p,isColdStart:g}=s;t(x=>({...x,isConnecting:!0,isColdStart:g,retryAttempt:a,totalAttempts:d,estimatedWaitTime:Math.ceil(h/1e3),message:W(a,d,g),error:null}))},[]),n=o.useCallback(()=>{t({isConnecting:!0,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:10,message:"Connecting to server...",error:null})},[]),i=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"Connected successfully!",error:null})},[]),c=o.useCallback(s=>{const a=s&&typeof s=="object"?s.message||String(s):String(s||"Connection failed");t(d=>({...d,isConnecting:!1,error:a,message:"Connection failed. Please try again."}))},[]),u=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null})},[]);return{connectionState:r,handleRetry:l,startConnection:n,connectionSuccess:i,connectionFailed:c,resetConnection:u}},W=(r,t,l)=>r===1&&l?"Server is starting up, this may take up to 60 seconds...":r===2&&l?"Still starting up, please wait...":r===3&&l?"Almost ready, just a few more seconds...":r>=4&&l?"Final attempt, server should be ready soon...":`Retrying connection (${r}/${t})...`,B=()=>{const[r,t]=o.useState({}),[l,n]=o.useState(!1),{login:i}=j();k();const{connectionState:c,handleRetry:u,startConnection:s,connectionSuccess:a,connectionFailed:d,resetConnection:h}=M();return{errors:r,isSubmitting:l,connectionState:c,handleLogin:async x=>{n(!0),t({}),s();try{const m=await i(x.email,x.password,u);m.success?a():(d(new Error(m.error)),t({general:m.error}))}catch(m){d(m),t({general:"Connection failed. Please check your internet connection and try again."})}finally{n(!1)}},handleCancelConnection:()=>{h(),n(!1)}}},O=()=>{const{errors:r,isSubmitting:t,connectionState:l,handleLogin:n,handleCancelConnection:i}=B();return e.jsxs(e.Fragment,{children:[e.jsx(w,{}),e.jsx(C,{connectionState:l,onCancel:i,showCancel:!0}),e.jsx("div",{className:"min-h-screen bg-gradient-to-br from-green-50 to-green-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center p-4",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-2xl p-8 w-full max-w-md",children:[e.jsx(R,{}),e.jsx(A,{onSubmit:n,isSubmitting:t,errors:r}),e.jsx(L,{})]})})]})},R=()=>e.jsxs("div",{className:"text-center mb-8",children:[e.jsx(f,{to:"/",className:"inline-block mb-6",children:e.jsx("h1",{className:"text-3xl font-bold text-green-600 dark:text-green-400",children:"Nanwa"})}),e.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome back"}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Sign in to your account to continue"})]});export{O as LoginPage}; diff --git a/frontend/dist/assets/LoginPage-b5sbaCb6.js b/frontend/dist/assets/LoginPage-b5sbaCb6.js deleted file mode 100644 index 8251b0158c..0000000000 --- a/frontend/dist/assets/LoginPage-b5sbaCb6.js +++ /dev/null @@ -1 +0,0 @@ -import{r as o,j as e,L as f,u as j,a as k}from"./index-CGkKx7Xv.js";import{N as w}from"./Navbar-BSLKvp05.js";import{F as y,P as v}from"./PasswordInput-Bff6SLQJ.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-Bh0nMcUg.js";import"./DarkModeToggle-Cu0JyOh5.js";import"./IconButton-vDjz_WRZ.js";const C=({connectionState:r,onCancel:t,showCancel:l=!0})=>{const[n,i]=o.useState(0),[c,u]=o.useState(0),{isConnecting:s,isColdStart:a,retryAttempt:d,totalAttempts:h,estimatedWaitTime:p,message:g}=r;return o.useEffect(()=>{if(!s){i(0),u(0);return}const x=setInterval(()=>{if(u(m=>m+1),a){const b=Math.min(c/60*100,90);i(b)}else{const b=Math.min(c/10*100,90);i(b)}},1e3);return()=>clearInterval(x)},[s,a,c]),o.useEffect(()=>{!s&&n>0&&i(100)},[s,n]),s?e.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-lg p-8 max-w-md w-full mx-4 shadow-2xl",children:[e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("div",{className:"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsxs("svg",{className:"w-8 h-8 text-green-600 dark:text-green-400 animate-spin",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:a?"Server Starting Up":"Connecting"})]}),e.jsxs("div",{className:"text-center mb-6",children:[e.jsx("p",{className:"text-gray-600 dark:text-gray-300 mb-2",children:g}),a&&e.jsxs("div",{className:"text-sm text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsx("p",{children:"The server needs to start up from sleep mode."}),e.jsx("p",{children:"This usually takes 30-60 seconds."})]})]}),e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex justify-between text-sm text-gray-500 dark:text-gray-400 mb-2",children:[e.jsx("span",{children:"Progress"}),e.jsxs("span",{children:[Math.round(n),"%"]})]}),e.jsx("div",{className:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2",children:e.jsx("div",{className:"bg-green-600 h-2 rounded-full transition-all duration-1000 ease-out",style:{width:`${n}%`}})})]}),d>0&&e.jsx("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg mb-4",children:e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsxs("span",{className:"text-blue-600 dark:text-blue-400",children:["Attempt ",d," of ",h]}),e.jsxs("span",{className:"text-blue-500 dark:text-blue-300",children:[c,"s elapsed"]})]})}),p>0&&e.jsxs("div",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mb-4",children:["Estimated wait time: ",p," seconds"]}),l&&t&&e.jsx("div",{className:"text-center",children:e.jsx("button",{onClick:t,className:"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 text-sm underline",children:"Cancel and try again later"})})]})}):null},N=(r,t)=>{const[l,n]=o.useState(r),[i,c]=o.useState({}),[u,s]=o.useState({}),a=o.useCallback(g=>{const{name:x,value:m}=g.target;n(b=>({...b,[x]:m})),i[x]&&c(b=>({...b,[x]:""}))},[i]),d=o.useCallback(g=>{const{name:x}=g.target;s(m=>({...m,[x]:!0}))},[]),h=o.useCallback(()=>{const g=t(l);return c(g),Object.keys(g).length===0},[l,t]),p=o.useCallback(()=>{n(r),c({}),s({})},[r]);return{values:l,errors:i,touched:u,handleChange:a,handleBlur:d,validateForm:h,resetForm:p,setErrors:c}},S=r=>{const t={};return r.email?/\S+@\S+\.\S+/.test(r.email)||(t.email="Email is invalid"):t.email="Email is required",r.password?r.password.length<6&&(t.password="Password must be at least 6 characters"):t.password="Password is required",t},A=({onSubmit:r,isSubmitting:t,errors:l})=>{const{values:n,errors:i,handleChange:c,handleBlur:u,validateForm:s}=N({email:"",password:""},S),a={...i,...l},d=h=>{h.preventDefault(),s()&&r(n)};return e.jsxs("form",{onSubmit:d,className:"space-y-6",children:[a.general&&e.jsx("div",{className:"bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-800 text-red-700 dark:text-red-400 px-4 py-3 rounded-lg",children:a.general}),e.jsx(y,{label:"Email address",id:"email",error:a.email,required:!0,children:e.jsx("input",{type:"email",id:"email",name:"email",value:n.email,onChange:c,onBlur:u,className:`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${a.email?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"}`,placeholder:"Enter your email",disabled:t})}),e.jsx(y,{label:"Password",id:"password",error:a.password,required:!0,children:e.jsx(v,{id:"password",name:"password",value:n.password,onChange:c,onBlur:u,error:a.password,placeholder:"Enter your password",disabled:t})}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(E,{disabled:t}),e.jsx(F,{})]}),e.jsx(P,{isSubmitting:t}),e.jsx(T,{})]})},E=({disabled:r})=>e.jsxs("div",{className:"flex items-center",children:[e.jsx("input",{id:"remember-me",name:"remember-me",type:"checkbox",className:"h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700",disabled:r}),e.jsx("label",{htmlFor:"remember-me",className:"ml-2 block text-sm text-gray-900 dark:text-white",children:"Remember me"})]}),F=()=>e.jsx("div",{className:"text-sm",children:e.jsx("a",{href:"#",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Forgot your password?"})}),P=({isSubmitting:r})=>e.jsx("button",{type:"submit",disabled:r,className:"w-full flex justify-center py-2 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-green-600 dark:bg-green-500 hover:bg-green-700 dark:hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 disabled:opacity-50 disabled:cursor-not-allowed",children:r?e.jsxs("div",{className:"flex items-center",children:[e.jsxs("svg",{className:"animate-spin -ml-1 mr-3 h-5 w-5 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),"Signing in..."]}):"Sign in"}),T=()=>e.jsx("div",{className:"text-center",children:e.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["Don't have an account?"," ",e.jsx(f,{to:"/register",className:"font-medium text-green-600 dark:text-green-400 hover:text-green-500 dark:hover:text-green-300",children:"Sign up"})]})}),L=()=>e.jsxs("div",{className:"mt-8 p-4 bg-gray-50 dark:bg-gray-700 rounded-lg",children:[e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 mb-2",children:"Demo credentials:"}),e.jsxs("div",{className:"text-xs text-gray-500 dark:text-gray-400 space-y-1",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Admin:"})," admin@nanwa.com / admin123"]}),e.jsxs("p",{children:[e.jsx("strong",{children:"User:"})," user@nanwa.com / user123"]})]})]}),M=()=>{const[r,t]=o.useState({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null}),l=o.useCallback(s=>{const{attempt:a,totalAttempts:d,delay:h,error:p,isColdStart:g}=s;t(x=>({...x,isConnecting:!0,isColdStart:g,retryAttempt:a,totalAttempts:d,estimatedWaitTime:Math.ceil(h/1e3),message:W(a,d,g),error:null}))},[]),n=o.useCallback(()=>{t({isConnecting:!0,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:10,message:"Connecting to server...",error:null})},[]),i=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"Connected successfully!",error:null})},[]),c=o.useCallback(s=>{const a=s&&typeof s=="object"?s.message||String(s):String(s||"Connection failed");t(d=>({...d,isConnecting:!1,error:a,message:"Connection failed. Please try again."}))},[]),u=o.useCallback(()=>{t({isConnecting:!1,isColdStart:!1,retryAttempt:0,totalAttempts:0,estimatedWaitTime:0,message:"",error:null})},[]);return{connectionState:r,handleRetry:l,startConnection:n,connectionSuccess:i,connectionFailed:c,resetConnection:u}},W=(r,t,l)=>r===1&&l?"Server is starting up, this may take up to 60 seconds...":r===2&&l?"Still starting up, please wait...":r===3&&l?"Almost ready, just a few more seconds...":r>=4&&l?"Final attempt, server should be ready soon...":`Retrying connection (${r}/${t})...`,B=()=>{const[r,t]=o.useState({}),[l,n]=o.useState(!1),{login:i}=j();k();const{connectionState:c,handleRetry:u,startConnection:s,connectionSuccess:a,connectionFailed:d,resetConnection:h}=M();return{errors:r,isSubmitting:l,connectionState:c,handleLogin:async x=>{n(!0),t({}),s();try{const m=await i(x.email,x.password,u);m.success?a():(d(new Error(m.error)),t({general:m.error}))}catch(m){d(m),t({general:"Connection failed. Please check your internet connection and try again."})}finally{n(!1)}},handleCancelConnection:()=>{h(),n(!1)}}},V=()=>{const{errors:r,isSubmitting:t,connectionState:l,handleLogin:n,handleCancelConnection:i}=B();return e.jsxs(e.Fragment,{children:[e.jsx(w,{}),e.jsx(C,{connectionState:l,onCancel:i,showCancel:!0}),e.jsx("div",{className:"min-h-screen bg-gradient-to-br from-green-50 to-green-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center p-4",children:e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-2xl p-8 w-full max-w-md",children:[e.jsx(R,{}),e.jsx(A,{onSubmit:n,isSubmitting:t,errors:r}),e.jsx(L,{})]})})]})},R=()=>e.jsxs("div",{className:"text-center mb-8",children:[e.jsx(f,{to:"/",className:"inline-block mb-6",children:e.jsx("h1",{className:"text-3xl font-bold text-green-600 dark:text-green-400",children:"Nanwa"})}),e.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:"Welcome back"}),e.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Sign in to your account to continue"})]});export{V as LoginPage}; diff --git a/frontend/dist/assets/MapPage-25t4MxmA.css b/frontend/dist/assets/MapPage-25t4MxmA.css deleted file mode 100644 index 5b4cb38cc7..0000000000 --- a/frontend/dist/assets/MapPage-25t4MxmA.css +++ /dev/null @@ -1 +0,0 @@ -.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{transition:transform .3s ease-out,opacity .3s ease-in}.leaflet-cluster-spider-leg{transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.marker-cluster-small{background-color:#b5e28c99}.marker-cluster-small div{background-color:#6ecc3999}.marker-cluster-medium{background-color:#f1d35799}.marker-cluster-medium div{background-color:#f0c20c99}.marker-cluster-large{background-color:#fd9c7399}.marker-cluster-large div{background-color:#f1801799}.leaflet-oldie .marker-cluster-small{background-color:#b5e28c}.leaflet-oldie .marker-cluster-small div{background-color:#6ecc39}.leaflet-oldie .marker-cluster-medium{background-color:#f1d357}.leaflet-oldie .marker-cluster-medium div{background-color:#f0c20c}.leaflet-oldie .marker-cluster-large{background-color:#fd9c73}.leaflet-oldie .marker-cluster-large div{background-color:#f18017}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px Helvetica Neue,Arial,Helvetica,sans-serif}.marker-cluster span{line-height:30px}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::-moz-selection{background:transparent}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline-offset:1px}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:#ffffff80}.leaflet-container{font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;font-size:.75rem;line-height:1.5}.leaflet-bar{box-shadow:0 1px 5px #000000a6;border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover,.leaflet-bar a:focus{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px #0006;background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=)}.leaflet-container .leaflet-control-attribution{background:#fff;background:#fffc;margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover,.leaflet-control-attribution a:focus{text-decoration:underline}.leaflet-attribution-flag{display:inline!important;vertical-align:baseline!important;width:1em;height:.6669em}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;white-space:nowrap;box-sizing:border-box;background:#fffc;text-shadow:1px 1px #fff}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 24px 13px 20px;line-height:1.3;font-size:13px;font-size:1.08333em;min-height:1px}.leaflet-popup-content p{margin:1.3em 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px #0006}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover,.leaflet-container a.leaflet-popup-close-button:focus{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=.70710678,M12=.70710678,M21=-.70710678,M22=.70710678)}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px #0006}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}} diff --git a/frontend/dist/assets/MapPage-3yaWYNWa.css b/frontend/dist/assets/MapPage-3yaWYNWa.css new file mode 100644 index 0000000000..6e9af65eac --- /dev/null +++ b/frontend/dist/assets/MapPage-3yaWYNWa.css @@ -0,0 +1 @@ +.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{transition:transform .3s ease-out,opacity .3s ease-in}.leaflet-cluster-spider-leg{transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.marker-cluster-small{background-color:#b5e28c99}.marker-cluster-small div{background-color:#6ecc3999}.marker-cluster-medium{background-color:#f1d35799}.marker-cluster-medium div{background-color:#f0c20c99}.marker-cluster-large{background-color:#fd9c7399}.marker-cluster-large div{background-color:#f1801799}.leaflet-oldie .marker-cluster-small{background-color:#b5e28c}.leaflet-oldie .marker-cluster-small div{background-color:#6ecc39}.leaflet-oldie .marker-cluster-medium{background-color:#f1d357}.leaflet-oldie .marker-cluster-medium div{background-color:#f0c20c}.leaflet-oldie .marker-cluster-large{background-color:#fd9c73}.leaflet-oldie .marker-cluster-large div{background-color:#f18017}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px Helvetica Neue,Arial,Helvetica,sans-serif}.marker-cluster span{line-height:30px} diff --git a/frontend/dist/assets/MapPage-BLNQ6ZTG.js b/frontend/dist/assets/MapPage-BLNQ6ZTG.js new file mode 100644 index 0000000000..677daac38b --- /dev/null +++ b/frontend/dist/assets/MapPage-BLNQ6ZTG.js @@ -0,0 +1,110 @@ +import{r as v,d as P,j as h,e as R}from"./index-Cp0G27Fl.js";import{L as w,u as G,M as H,T as D}from"./leaflet-DEYfr1U5.js";import{u as V,D as q,a as $,G as W}from"./useSidebarState-DD0BN3bF.js";import{E as Q}from"./ExportButton-CO4K-of6.js";import{T as X}from"./TreeDetailModal-CdyalJyV.js";import{t as Y}from"./treeService-D86yjeOz.js";import"./vendor-BtP0CW_r.js";import"./DarkModeToggle-DYOgA8sV.js";import"./IconButton-Cy_suQAe.js";import"./useKeyboardNavigation-BEEMcJj7.js";import"./Modal-BNFLubTG.js";var E={exports:{}},J=E.exports,Z;function K(){return Z||(Z=1,function(_,f){(function(m,p){p(f)})(J,function(m){var p=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnEveryZoom:!1,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyShapePositions:null,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(e){L.Util.setOptions(this,e),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var t=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,t?this._withAnimation:this._noAnimation),this._markerCluster=t?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(e){if(e instanceof L.LayerGroup)return this.addLayers([e]);if(!e.getLatLng)return this._nonPointGroup.addLayer(e),this.fire("layeradd",{layer:e}),this;if(!this._map)return this._needsClustering.push(e),this.fire("layeradd",{layer:e}),this;if(this.hasLayer(e))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(e,this._maxZoom),this.fire("layeradd",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var t=e,i=this._zoom;if(e.__parent)for(;t.__parent._zoom>=i;)t=t.__parent;return this._currentShownBounds.contains(t.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(e,t):this._animationAddLayerNonAnimated(e,t)),this},removeLayer:function(e){return e instanceof L.LayerGroup?this.removeLayers([e]):e.getLatLng?this._map?e.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(e)),this._removeLayer(e,!0),this.fire("layerremove",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),e.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(e)&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,e)&&this.hasLayer(e)&&this._needsRemoving.push({layer:e,latlng:e._latlng}),this.fire("layerremove",{layer:e}),this):(this._nonPointGroup.removeLayer(e),this.fire("layerremove",{layer:e}),this)},addLayers:function(e,t){if(!L.Util.isArray(e))return this.addLayer(e);var i=this._featureGroup,n=this._nonPointGroup,s=this.options.chunkedLoading,a=this.options.chunkInterval,r=this.options.chunkProgress,l=e.length,o=0,u=!0,d;if(this._map){var C=new Date().getTime(),c=L.bind(function(){var M=new Date().getTime();for(this._map&&this._unspiderfy&&this._unspiderfy();oa)break}if(d=e[o],d instanceof L.LayerGroup){u&&(e=e.slice(),u=!1),this._extractNonGroupLayers(d,e),l=e.length;continue}if(!d.getLatLng){n.addLayer(d),t||this.fire("layeradd",{layer:d});continue}if(!this.hasLayer(d)&&(this._addLayer(d,this._maxZoom),t||this.fire("layeradd",{layer:d}),d.__parent&&d.__parent.getChildCount()===2)){var x=d.__parent.getAllChildMarkers(),S=x[0]===d?x[1]:x[0];i.removeLayer(S)}}r&&r(o,l,new Date().getTime()-C),o===l?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(c,this.options.chunkDelay)},this);c()}else for(var y=this._needsClustering;o=0;t--)e.extend(this._needsClustering[t].getLatLng());return e.extend(this._nonPointGroup.getBounds()),e},eachLayer:function(e,t){var i=this._needsClustering.slice(),n=this._needsRemoving,s,a,r;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(i),a=i.length-1;a>=0;a--){for(s=!0,r=n.length-1;r>=0;r--)if(n[r].layer===i[a]){s=!1;break}s&&e.call(t,i[a])}this._nonPointGroup.eachLayer(e,t)},getLayers:function(){var e=[];return this.eachLayer(function(t){e.push(t)}),e},getLayer:function(e){var t=null;return e=parseInt(e,10),this.eachLayer(function(i){L.stamp(i)===e&&(t=i)}),t},hasLayer:function(e){if(!e)return!1;var t,i=this._needsClustering;for(t=i.length-1;t>=0;t--)if(i[t]===e)return!0;for(i=this._needsRemoving,t=i.length-1;t>=0;t--)if(i[t].layer===e)return!1;return!!(e.__parent&&e.__parent._group===this)||this._nonPointGroup.hasLayer(e)},zoomToShowLayer:function(e,t){var i=this._map;typeof t!="function"&&(t=function(){});var n=function(){(i.hasLayer(e)||i.hasLayer(e.__parent))&&!this._inZoomAnimation&&(this._map.off("moveend",n,this),this.off("animationend",n,this),i.hasLayer(e)?t():e.__parent._icon&&(this.once("spiderfied",t,this),e.__parent.spiderfy()))};e._icon&&this._map.getBounds().contains(e.getLatLng())?t():e.__parent._zoom=0;i--)if(e[i]===t)return e.splice(i,1),!0},_removeFromGridUnclustered:function(e,t){for(var i=this._map,n=this._gridUnclustered,s=Math.floor(this._map.getMinZoom());t>=s&&n[t].removeObject(e,i.project(e.getLatLng(),t));t--);},_childMarkerDragStart:function(e){e.target.__dragStart=e.target._latlng},_childMarkerMoved:function(e){if(!this._ignoreMove&&!e.target.__dragStart){var t=e.target._popup&&e.target._popup.isOpen();this._moveChild(e.target,e.oldLatLng,e.latlng),t&&e.target.openPopup()}},_moveChild:function(e,t,i){e._latlng=t,this.removeLayer(e),e._latlng=i,this.addLayer(e)},_childMarkerDragEnd:function(e){var t=e.target.__dragStart;delete e.target.__dragStart,t&&this._moveChild(e.target,t,e.target._latlng)},_removeLayer:function(e,t,i){var n=this._gridClusters,s=this._gridUnclustered,a=this._featureGroup,r=this._map,l=Math.floor(this._map.getMinZoom());t&&this._removeFromGridUnclustered(e,this._maxZoom);var o=e.__parent,u=o._markers,d;for(this._arraySplice(u,e);o&&(o._childCount--,o._boundsNeedUpdate=!0,!(o._zoom"+t+"
",className:"marker-cluster"+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var e=this._map,t=this.options.spiderfyOnMaxZoom,i=this.options.showCoverageOnHover,n=this.options.zoomToBoundsOnClick,s=this.options.spiderfyOnEveryZoom;(t||n||s)&&this.on("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),i&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),e.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(e){var t=e.layer,i=t;if(!(e.type==="clusterkeypress"&&e.originalEvent&&e.originalEvent.keyCode!==13)){for(;i._childClusters.length===1;)i=i._childClusters[0];i._zoom===this._maxZoom&&i._childCount===t._childCount&&this.options.spiderfyOnMaxZoom?t.spiderfy():this.options.zoomToBoundsOnClick&&t.zoomToBounds(),this.options.spiderfyOnEveryZoom&&t.spiderfy(),e.originalEvent&&e.originalEvent.keyCode===13&&this._map._container.focus()}},_showCoverage:function(e){var t=this._map;this._inZoomAnimation||(this._shownPolygon&&t.removeLayer(this._shownPolygon),e.layer.getChildCount()>2&&e.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(e.layer.getConvexHull(),this.options.polygonOptions),t.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var e=this.options.spiderfyOnMaxZoom,t=this.options.showCoverageOnHover,i=this.options.zoomToBoundsOnClick,n=this.options.spiderfyOnEveryZoom,s=this._map;(e||i||n)&&this.off("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),t&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),s.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var e=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,e),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),e),this._currentShownBounds=e}},_generateInitialClusters:function(){var e=Math.ceil(this._map.getMaxZoom()),t=Math.floor(this._map.getMinZoom()),i=this.options.maxClusterRadius,n=i;typeof i!="function"&&(n=function(){return i}),this.options.disableClusteringAtZoom!==null&&(e=this.options.disableClusteringAtZoom-1),this._maxZoom=e,this._gridClusters={},this._gridUnclustered={};for(var s=e;s>=t;s--)this._gridClusters[s]=new L.DistanceGrid(n(s)),this._gridUnclustered[s]=new L.DistanceGrid(n(s));this._topClusterLevel=new this._markerCluster(this,t-1)},_addLayer:function(e,t){var i=this._gridClusters,n=this._gridUnclustered,s=Math.floor(this._map.getMinZoom()),a,r;for(this.options.singleMarkerMode&&this._overrideMarkerIcon(e),e.on(this._childMarkerEventHandlers,this);t>=s;t--){a=this._map.project(e.getLatLng(),t);var l=i[t].getNearObject(a);if(l){l._addChild(e),e.__parent=l;return}if(l=n[t].getNearObject(a),l){var o=l.__parent;o&&this._removeLayer(l,!1);var u=new this._markerCluster(this,t,l,e);i[t].addObject(u,this._map.project(u._cLatLng,t)),l.__parent=u,e.__parent=u;var d=u;for(r=t-1;r>o._zoom;r--)d=new this._markerCluster(this,r,d),i[r].addObject(d,this._map.project(l.getLatLng(),r));o._addChild(d),this._removeFromGridUnclustered(l,t);return}n[t].addObject(e,a)}this._topClusterLevel._addChild(e),e.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(e){e instanceof L.MarkerCluster&&e._iconNeedsUpdate&&e._updateIcon()})},_enqueue:function(e){this._queue.push(e),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var e=0;ee?(this._animationStart(),this._animationZoomOut(this._zoom,e)):this._moveEnd()},_getExpandedVisibleBounds:function(){if(this.options.removeOutsideVisibleBounds){if(L.Browser.mobile)return this._checkBoundsMaxLat(this._map.getBounds())}else return this._mapBoundsInfinite;return this._checkBoundsMaxLat(this._map.getBounds().pad(1))},_checkBoundsMaxLat:function(e){var t=this._maxLat;return t!==void 0&&(e.getNorth()>=t&&(e._northEast.lat=1/0),e.getSouth()<=-t&&(e._southWest.lat=-1/0)),e},_animationAddLayerNonAnimated:function(e,t){if(t===e)this._featureGroup.addLayer(e);else if(t._childCount===2){t._addToMap();var i=t.getAllChildMarkers();this._featureGroup.removeLayer(i[0]),this._featureGroup.removeLayer(i[1])}else t._updateIcon()},_extractNonGroupLayers:function(e,t){var i=e.getLayers(),n=0,s;for(t=t||[];n=0;a--)u=o[a],i.contains(u._latlng)||n.removeLayer(u)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(i,t),n.eachLayer(function(r){!(r instanceof L.MarkerCluster)&&r._icon&&r.clusterShow()}),this._topClusterLevel._recursively(i,e,t,function(r){r._recursivelyRestoreChildPositions(t)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(i,e,s,function(r){n.removeLayer(r),r.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(e,t){this._animationZoomOutSingle(this._topClusterLevel,e-1,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e,this._getExpandedVisibleBounds())},_animationAddLayer:function(e,t){var i=this,n=this._featureGroup;n.addLayer(e),t!==e&&(t._childCount>2?(t._updateIcon(),this._forceLayout(),this._animationStart(),e._setPos(this._map.latLngToLayerPoint(t.getLatLng())),e.clusterHide(),this._enqueue(function(){n.removeLayer(e),e.clusterShow(),i._animationEnd()})):(this._forceLayout(),i._animationStart(),i._animationZoomOutSingle(t,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(e,t,i){var n=this._getExpandedVisibleBounds(),s=Math.floor(this._map.getMinZoom());e._recursivelyAnimateChildrenInAndAddSelfToMap(n,s,t+1,i);var a=this;this._forceLayout(),e._recursivelyBecomeVisible(n,i),this._enqueue(function(){if(e._childCount===1){var r=e._markers[0];this._ignoreMove=!0,r.setLatLng(r.getLatLng()),this._ignoreMove=!1,r.clusterShow&&r.clusterShow()}else e._recursively(n,i,s,function(l){l._recursivelyRemoveChildrenFromMap(n,s,t+1)});a._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroup=function(e){return new L.MarkerClusterGroup(e)};var g=L.MarkerCluster=L.Marker.extend({options:L.Icon.prototype.options,initialize:function(e,t,i,n){L.Marker.prototype.initialize.call(this,i?i._cLatLng||i.getLatLng():new L.LatLng(0,0),{icon:this,pane:e.options.clusterPane}),this._group=e,this._zoom=t,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,i&&this._addChild(i),n&&this._addChild(n)},getAllChildMarkers:function(e,t){e=e||[];for(var i=this._childClusters.length-1;i>=0;i--)this._childClusters[i].getAllChildMarkers(e,t);for(var n=this._markers.length-1;n>=0;n--)t&&this._markers[n].__dragStart||e.push(this._markers[n]);return e},getChildCount:function(){return this._childCount},zoomToBounds:function(e){for(var t=this._childClusters.slice(),i=this._group._map,n=i.getBoundsZoom(this._bounds),s=this._zoom+1,a=i.getZoom(),r;t.length>0&&n>s;){s++;var l=[];for(r=0;rs?this._group._map.setView(this._latlng,s):n<=a?this._group._map.setView(this._latlng,a+1):this._group._map.fitBounds(this._bounds,e)},getBounds:function(){var e=new L.LatLngBounds;return e.extend(this._bounds),e},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(e,t){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(e),e instanceof L.MarkerCluster?(t||(this._childClusters.push(e),e.__parent=this),this._childCount+=e._childCount):(t||this._markers.push(e),this._childCount++),this.__parent&&this.__parent._addChild(e,!0)},_setClusterCenter:function(e){this._cLatLng||(this._cLatLng=e._cLatLng||e._latlng)},_resetBounds:function(){var e=this._bounds;e._southWest&&(e._southWest.lat=1/0,e._southWest.lng=1/0),e._northEast&&(e._northEast.lat=-1/0,e._northEast.lng=-1/0)},_recalculateBounds:function(){var e=this._markers,t=this._childClusters,i=0,n=0,s=this._childCount,a,r,l,o;if(s!==0){for(this._resetBounds(),a=0;a=0;a--)r=s[a],r._icon&&(r._setPos(t),r.clusterHide())},function(n){var s=n._childClusters,a,r;for(a=s.length-1;a>=0;a--)r=s[a],r._icon&&(r._setPos(t),r.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(e,t,i,n){this._recursively(e,n,t,function(s){s._recursivelyAnimateChildrenIn(e,s._group._map.latLngToLayerPoint(s.getLatLng()).round(),i),s._isSingleParent()&&i-1===n?(s.clusterShow(),s._recursivelyRemoveChildrenFromMap(e,t,i)):s.clusterHide(),s._addToMap()})},_recursivelyBecomeVisible:function(e,t){this._recursively(e,this._group._map.getMinZoom(),t,null,function(i){i.clusterShow()})},_recursivelyAddChildrenToMap:function(e,t,i){this._recursively(i,this._group._map.getMinZoom()-1,t,function(n){if(t!==n._zoom)for(var s=n._markers.length-1;s>=0;s--){var a=n._markers[s];i.contains(a._latlng)&&(e&&(a._backupLatlng=a.getLatLng(),a.setLatLng(e),a.clusterHide&&a.clusterHide()),n._group._featureGroup.addLayer(a))}},function(n){n._addToMap(e)})},_recursivelyRestoreChildPositions:function(e){for(var t=this._markers.length-1;t>=0;t--){var i=this._markers[t];i._backupLatlng&&(i.setLatLng(i._backupLatlng),delete i._backupLatlng)}if(e-1===this._zoom)for(var n=this._childClusters.length-1;n>=0;n--)this._childClusters[n]._restorePosition();else for(var s=this._childClusters.length-1;s>=0;s--)this._childClusters[s]._recursivelyRestoreChildPositions(e)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(e,t,i,n){var s,a;this._recursively(e,t-1,i-1,function(r){for(a=r._markers.length-1;a>=0;a--)s=r._markers[a],(!n||!n.contains(s._latlng))&&(r._group._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow())},function(r){for(a=r._childClusters.length-1;a>=0;a--)s=r._childClusters[a],(!n||!n.contains(s._latlng))&&(r._group._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow())})},_recursively:function(e,t,i,n,s){var a=this._childClusters,r=this._zoom,l,o;if(t<=r&&(n&&n(this),s&&r===i&&s(this)),r=0;l--)o=a[l],o._boundsNeedUpdate&&o._recalculateBounds(),e.intersects(o._bounds)&&o._recursively(e,t,i,n,s)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}});L.Marker.include({clusterHide:function(){var e=this.options.opacity;return this.setOpacity(0),this.options.opacity=e,this},clusterShow:function(){return this.setOpacity(this.options.opacity)}}),L.DistanceGrid=function(e){this._cellSize=e,this._sqCellSize=e*e,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(e,t){var i=this._getCoord(t.x),n=this._getCoord(t.y),s=this._grid,a=s[n]=s[n]||{},r=a[i]=a[i]||[],l=L.Util.stamp(e);this._objectPoint[l]=t,r.push(e)},updateObject:function(e,t){this.removeObject(e),this.addObject(e,t)},removeObject:function(e,t){var i=this._getCoord(t.x),n=this._getCoord(t.y),s=this._grid,a=s[n]=s[n]||{},r=a[i]=a[i]||[],l,o;for(delete this._objectPoint[L.Util.stamp(e)],l=0,o=r.length;l=0;a--){if(r=t[a],l=this.getDistant(r,e),l>0)s.push(r);else continue;l>i&&(i=l,n=r)}return{maxPoint:n,newPoints:s}},buildConvexHull:function(e,t){var i=[],n=this.findMostDistantPointFromBaseLine(e,t);return n.maxPoint?(i=i.concat(this.buildConvexHull([e[0],n.maxPoint],n.newPoints)),i=i.concat(this.buildConvexHull([n.maxPoint,e[1]],n.newPoints)),i):[e[0]]},getConvexHull:function(e){var t=!1,i=!1,n=!1,s=!1,a=null,r=null,l=null,o=null,u=null,d=null,C;for(C=e.length-1;C>=0;C--){var c=e[C];(t===!1||c.lat>t)&&(a=c,t=c.lat),(i===!1||c.latn)&&(l=c,n=c.lng),(s===!1||c.lng=0;n--)i=e[n].getLatLng(),t.push(i);return L.QuickHull.getConvexHull(t)}}),L.MarkerCluster.include({_2PI:Math.PI*2,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(!(this._group._spiderfied===this||this._group._inZoomAnimation)){var e=this.getAllChildMarkers(null,!0),t=this._group,i=t._map,n=i.latLngToLayerPoint(this._latlng),s;this._group._unspiderfy(),this._group._spiderfied=this,this._group.options.spiderfyShapePositions?s=this._group.options.spiderfyShapePositions(e.length,n):e.length>=this._circleSpiralSwitchover?s=this._generatePointsSpiral(e.length,n):(n.y+=10,s=this._generatePointsCircle(e.length,n)),this._animationSpiderfy(e,s)}},unspiderfy:function(e){this._group._inZoomAnimation||(this._animationUnspiderfy(e),this._group._spiderfied=null)},_generatePointsCircle:function(e,t){var i=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+e),n=i/this._2PI,s=this._2PI/e,a=[],r,l;for(n=Math.max(n,35),a.length=e,r=0;r=0;o--)o=0;a--)s=n[a],i.removeLayer(s),s._preSpiderfyLatlng&&(s.setLatLng(s._preSpiderfyLatlng),delete s._preSpiderfyLatlng),s.setZIndexOffset&&s.setZIndexOffset(0),s._spiderLeg&&(t.removeLayer(s._spiderLeg),delete s._spiderLeg);e.fire("unspiderfied",{cluster:this,markers:n}),e._ignoreMove=!1,e._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(e,t){var i=this._group,n=i._map,s=i._featureGroup,a=this._group.options.spiderLegPolylineOptions,r,l,o,u;for(i._ignoreMove=!0,r=0;r=0;C--)x=s.layerPointToLatLng(t[C]),c=e[C],c._preSpiderfyLatlng=c._latlng,c.setLatLng(x),c.clusterShow&&c.clusterShow(),o&&(y=c._spiderLeg,M=y._path,M.style.strokeDashoffset=0,y.setStyle({opacity:d}));this.setOpacity(.3),n._ignoreMove=!1,setTimeout(function(){n._animationEnd(),n.fire("spiderfied",{cluster:i,markers:e})},200)},_animationUnspiderfy:function(e){var t=this,i=this._group,n=i._map,s=i._featureGroup,a=e?n._latLngToNewLayerPoint(this._latlng,e.zoom,e.center):n.latLngToLayerPoint(this._latlng),r=this.getAllChildMarkers(null,!0),l=L.Path.SVG,o,u,d,C,c,y;for(i._ignoreMove=!0,i._animationStart(),this.setOpacity(1),u=r.length-1;u>=0;u--)o=r[u],o._preSpiderfyLatlng&&(o.closePopup(),o.setLatLng(o._preSpiderfyLatlng),delete o._preSpiderfyLatlng,y=!0,o._setPos&&(o._setPos(a),y=!1),o.clusterHide&&(o.clusterHide(),y=!1),y&&s.removeLayer(o),l&&(d=o._spiderLeg,C=d._path,c=C.getTotalLength()+.1,C.style.strokeDashoffset=c,d.setStyle({opacity:0})));i._ignoreMove=!1,setTimeout(function(){var M=0;for(u=r.length-1;u>=0;u--)o=r[u],o._spiderLeg&&M++;for(u=r.length-1;u>=0;u--)o=r[u],o._spiderLeg&&(o.clusterShow&&o.clusterShow(),o.setZIndexOffset&&o.setZIndexOffset(0),M>1&&s.removeLayer(o),n.removeLayer(o._spiderLeg),delete o._spiderLeg);i._animationEnd(),i.fire("unspiderfied",{cluster:t,markers:r})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(e){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(e))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(e){this._spiderfied&&this._spiderfied.unspiderfy(e)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(e){e._spiderLeg&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow(),e.setZIndexOffset&&e.setZIndexOffset(0),this._map.removeLayer(e._spiderLeg),delete e._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(e){return e?e instanceof L.MarkerClusterGroup?e=e._topClusterLevel.getAllChildMarkers():e instanceof L.LayerGroup?e=e._layers:e instanceof L.MarkerCluster?e=e.getAllChildMarkers():e instanceof L.Marker&&(e=[e]):e=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(e),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(e),this},_flagParentsIconsNeedUpdate:function(e){var t,i;for(t in e)for(i=e[t].__parent;i;)i._iconNeedsUpdate=!0,i=i.__parent},_refreshSingleMarkerModeMarkers:function(e){var t,i;for(t in e)i=e[t],this.hasLayer(i)&&i.setIcon(this._overrideMarkerIcon(i))}}),L.Marker.include({refreshIconOptions:function(e,t){var i=this.options.icon;return L.setOptions(i,e),this.setIcon(i),t&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),m.MarkerClusterGroup=p,m.MarkerCluster=g,Object.defineProperty(m,"__esModule",{value:!0})})}(E,E.exports)),E.exports}K();const B={healthy:"#10b981",warning:"#f59e0b",critical:"#ef4444"},z={healthy:"background: #d1fae5; color: #065f46;",warning:"background: #fef3c7; color: #92400e;",critical:"background: #fee2e2; color: #991b1b;"},T={small:{dimension:"30px",fontSize:"12px",threshold:0},medium:{dimension:"40px",fontSize:"14px",threshold:10},large:{dimension:"50px",fontSize:"16px",threshold:50}},ee={size:20,emoji:"🌳",className:"custom-tree-marker"},te={backgroundColor:"#10b981",className:"custom-cluster-icon",iconSize:[30,30]},U=(_="healthy")=>{const f=B[_]||B.healthy,{size:m,emoji:p,className:g}=ee;return w.divIcon({className:g,html:ie(f,m,p),iconSize:[m,m],iconAnchor:[m/2,m/2]})},ie=(_,f,m)=>` +
+ ${m} +
+`,ne=_=>{const f=se(_),{dimension:m,fontSize:p}=T[f],{backgroundColor:g,className:e,iconSize:t}=te;return w.divIcon({html:re(g,m,p,_),className:e,iconSize:t})},se=_=>_>T.large.threshold?"large":_>T.medium.threshold?"medium":"small",re=(_,f,m,p)=>` +
${p}
+`,F=_=>{const f=z[_.health]||z.healthy;return oe(_,f)},oe=(_,f)=>` +
+

${_.name}

+

Species: ${_.species}

+

Height: ${_.height}m

+

Health: + ${_.health} +

+
+`,ae=({trees:_,onTreeClick:f,zoom:m})=>{const p=G();return v.useEffect(()=>{if(!(!p||!_.length)){if(p.eachLayer(g=>{g instanceof w.MarkerClusterGroup&&p.removeLayer(g)}),m<12){const g=w.markerClusterGroup({chunkedLoading:!0,spiderfyOnMaxZoom:!0,showCoverageOnHover:!1,zoomToBoundsOnClick:!0,maxClusterRadius:50,iconCreateFunction:e=>{const t=e.getChildCount();return ne(t)}});_.forEach(e=>{const t=w.marker([e.lat,e.lng],{icon:U(e.health)});t.bindPopup(F(e)),t.on("click",()=>f(e)),g.addLayer(t)}),p.addLayer(g)}else _.forEach(g=>{const e=w.marker([g.lat,g.lng],{icon:U(g.health)});e.bindPopup(F(g)),e.on("click",()=>f(g)),e.addTo(p)});return()=>{p.eachLayer(g=>{g instanceof w.MarkerClusterGroup&&p.removeLayer(g)})}}},[p,_,f,m]),null},le=({onMapReady:_,onMapError:f})=>{const m=G();return v.useEffect(()=>{const p=()=>{_&&_()},g=e=>{console.error("Map error:",e),f&&f(e)};return m.whenReady(()=>{p()}),m.on("tileerror",g),()=>{m.off("tileerror",g)}},[m,_,f]),null},he=({onZoomChange:_})=>{const f=G();return v.useEffect(()=>{const m=()=>{_&&_(f.getZoom())};return f.on("zoomend",m),()=>{f.off("zoomend",m)}},[f]),null},ue=P.div` + height: 600px; + width: 100%; + border-radius: 0.75rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + border: 1px solid #e5e7eb; + position: relative; +`,de=P.div` + background: white; + padding: 1rem 1.5rem; + border-bottom: 1px solid #e5e7eb; + display: flex; + justify-content: space-between; + align-items: center; +`,ce=P.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0; +`,_e=P.div` + display: flex; + gap: 0.5rem; +`,A=P.button` + padding: 0.5rem; + background: white; + border: 1px solid #d1d5db; + border-radius: 0.375rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #f9fafb; + border-color: #9ca3af; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,fe=P.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.9); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`,pe=P.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.95); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 0.75rem; +`,me=P.div` + text-align: center; + padding: 2rem; + max-width: 300px; +`;delete w.Icon.Default.prototype._getIconUrl;w.Icon.Default.mergeOptions({iconRetinaUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png",iconUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png",shadowUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png"});const ge=({trees:_=[],onTreeSelect:f,filters:m={},loading:p=!1,error:g=null})=>{const[e,t]=v.useState(13),[i,n]=v.useState(null),[s,a]=v.useState(!0),[r,l]=v.useState(null),o=_,u=v.useCallback(x=>{n(x),f&&f(x)},[f]),d=v.useCallback(x=>{t(x)},[]),C=v.useCallback(()=>{a(!1),l(null)},[]),c=v.useCallback(x=>{a(!1),l((x==null?void 0:x.message)||"Failed to load map")},[]),y=v.useCallback(()=>{a(!0),l(null),setTimeout(()=>{a(!1)},1e3)},[]),M=v.useCallback(()=>{if(o.length===0)return;const x=o.reduce((j,O)=>j+O.lat,0),S=o.reduce((j,O)=>j+O.lng,0),b=x/o.length,I=S/o.length;console.log("Center map at:",b,I)},[o]),k=v.useCallback(()=>{if(o.length===0)return;const x=o.reduce((S,b)=>({minLat:Math.min(S.minLat,b.lat),maxLat:Math.max(S.maxLat,b.lat),minLng:Math.min(S.minLng,b.lng),maxLng:Math.max(S.maxLng,b.lng)}),{minLat:o[0].lat,maxLat:o[0].lat,minLng:o[0].lng,maxLng:o[0].lng});console.log("Fit bounds:",x)},[o]);return h.jsxs("div",{children:[h.jsxs(de,{children:[h.jsx(ce,{children:"Forest Map"}),h.jsxs(_e,{children:[h.jsx(A,{onClick:M,title:"Center Map",children:h.jsxs("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[h.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),h.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]})}),h.jsx(A,{onClick:k,title:"Fit to Bounds",children:h.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:h.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})})})]})]}),h.jsxs(ue,{children:[h.jsxs(H,{center:[59.3293,18.0686],zoom:13,style:{height:"100%",width:"100%"},children:[h.jsx(D,{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",attribution:'© OpenStreetMap contributors'}),h.jsx(le,{onMapReady:C,onMapError:c}),h.jsx(he,{onZoomChange:d}),h.jsx(ae,{trees:o,onTreeClick:u,zoom:e})]}),(s||p)&&h.jsx(fe,{children:h.jsxs("div",{className:"text-center",children:[h.jsx(R,{}),h.jsx("p",{className:"mt-2 text-sm text-gray-600",children:"Loading map..."})]})}),(r||g)&&h.jsx(pe,{children:h.jsxs(me,{children:[h.jsx("svg",{className:"w-12 h-12 text-red-500 mx-auto mb-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:h.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),h.jsx("h4",{className:"text-lg font-semibold text-gray-900 mb-2",children:"Map Error"}),h.jsx("p",{className:"text-sm text-gray-600 mb-4",children:r||g}),h.jsx("button",{onClick:y,className:"px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors text-sm",children:"Retry"})]})})]}),h.jsxs("div",{className:"mt-4 p-4 bg-white rounded-lg border border-gray-200",children:[h.jsx("h4",{className:"font-medium text-gray-900 mb-2",children:"Legend"}),h.jsxs("div",{className:"flex flex-wrap gap-4 text-sm",children:[h.jsxs("div",{className:"flex items-center",children:[h.jsx("div",{className:"w-4 h-4 bg-green-500 rounded-full mr-2"}),h.jsx("span",{children:"Healthy Trees"})]}),h.jsxs("div",{className:"flex items-center",children:[h.jsx("div",{className:"w-4 h-4 bg-yellow-500 rounded-full mr-2"}),h.jsx("span",{children:"Warning"})]}),h.jsxs("div",{className:"flex items-center",children:[h.jsx("div",{className:"w-4 h-4 bg-red-500 rounded-full mr-2"}),h.jsx("span",{children:"Critical"})]}),h.jsx("div",{className:"flex items-center text-gray-500",children:h.jsxs("span",{children:["Showing ",o.length," of ",_.length," trees"]})}),h.jsxs("div",{className:"flex items-center text-gray-500",children:[h.jsxs("span",{children:["Zoom level: ",e]}),e<12&&h.jsx("span",{className:"ml-4 text-xs",children:"(Clustering enabled)"})]})]})]})]})},Le=()=>{const[_,f]=v.useState({}),m=v.useCallback(g=>{f(g),console.log("Map filters changed:",g)},[]),p=v.useCallback(()=>{f({})},[]);return{filters:_,handleFiltersChange:m,resetFilters:p}},ve=()=>{const[_,f]=v.useState(null),[m,p]=v.useState(!1),g=v.useCallback(i=>{f(i),p(!0)},[]),e=v.useCallback(()=>{f(null),p(!1)},[]),t=v.useCallback(()=>{f(null),p(!1)},[]);return{selectedTree:_,isModalOpen:m,handleTreeSelect:g,handleCloseTreeDetail:e,clearSelection:t}},Ee=()=>{const{sidebarOpen:_,toggleSidebar:f,closeSidebar:m}=V(),{filters:p,handleFiltersChange:g}=Le(),{selectedTree:e,isModalOpen:t,handleTreeSelect:i,handleCloseTreeDetail:n}=ve(),[s,a]=v.useState([]),[r,l]=v.useState(!0),[o,u]=v.useState(null);v.useEffect(()=>{(async()=>{l(!0),u(null);try{const M={};p.selectedForests&&p.selectedForests.length>0&&(M.forestIds=p.selectedForests.join(",")),p.dateRange&&(M.startDate=p.dateRange.startDate.toISOString(),M.endDate=p.dateRange.endDate.toISOString());const k=await Y.getAll(M);let x=[];k.data&&Array.isArray(k.data.trees)?x=k.data.trees:k.data&&Array.isArray(k.data)?x=k.data:Array.isArray(k)&&(x=k);const S=x.map(b=>{var I,j,O,N;return{...b,lat:((j=(I=b.location)==null?void 0:I.coordinates)==null?void 0:j[1])||b.lat||59.3293,lng:((N=(O=b.location)==null?void 0:O.coordinates)==null?void 0:N[0])||b.lng||18.0686,name:b.treeId||b.name||`Tree ${b._id}`,health:b.health||"healthy"}});a(S)}catch(M){console.error("Failed to fetch trees:",M),u(M.message||"Failed to load trees"),a([])}finally{l(!1)}})()},[p]);const d=v.useCallback(()=>{console.log("Export started")},[]),C=v.useCallback(y=>{console.log(`Export completed: ${y}`)},[]),c=v.useCallback(y=>{console.error("Export error:",y)},[]);return h.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[h.jsx(q,{onToggleSidebar:f}),h.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[h.jsx($,{isOpen:_,onClose:m}),h.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:h.jsxs("div",{className:"max-w-7xl mx-auto",children:[h.jsx("div",{className:"mb-8",children:h.jsxs("div",{className:"flex justify-between items-center mb-4",children:[h.jsxs("div",{children:[h.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Forest Map"}),h.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Explore your forests and individual trees with interactive mapping."})]}),h.jsx("div",{className:"flex items-center space-x-4",children:h.jsx(Q,{filters:p,onExportStart:d,onExportComplete:C,onExportError:c})})]})}),h.jsx(W,{onFiltersChange:g}),h.jsx(X,{tree:e,isOpen:t,onClose:n}),r?h.jsx("div",{className:"flex justify-center items-center h-96 bg-white dark:bg-gray-800 rounded-lg shadow",children:h.jsx(R,{text:"Loading trees..."})}):h.jsx(ge,{trees:s,onTreeSelect:i,filters:p,loading:r,error:o})]})})]})]})};export{Ee as MapPage}; diff --git a/frontend/dist/assets/MapPage-DVu2-W4J.js b/frontend/dist/assets/MapPage-DVu2-W4J.js deleted file mode 100644 index ba2c1e42d9..0000000000 --- a/frontend/dist/assets/MapPage-DVu2-W4J.js +++ /dev/null @@ -1,113 +0,0 @@ -import{r as z,R as Mn,d as zt,j as S,e as In}from"./index-CGkKx7Xv.js";import{g as cs}from"./vendor-BtP0CW_r.js";import{u as ds,D as fs,a as _s,G as ms,t as ps}from"./useSidebarState-Ctkpd6zX.js";import{E as gs}from"./ExportButton-BryKwkQ4.js";import{T as vs}from"./TreeDetailModal-DPmuOlrX.js";import"./DarkModeToggle-Cu0JyOh5.js";import"./IconButton-vDjz_WRZ.js";import"./useKeyboardNavigation-Bh0nMcUg.js";import"./Table-CfKObwuM.js";function ys(x,w){const f=z.useRef(w);z.useEffect(function(){w!==f.current&&x.attributionControl!=null&&(f.current!=null&&x.attributionControl.removeAttribution(f.current),w!=null&&x.attributionControl.addAttribution(w)),f.current=w},[x,w])}const Ls=1;function xs(x){return Object.freeze({__version:Ls,map:x})}const Bn=z.createContext(null),ws=Bn.Provider;function An(){const x=z.useContext(Bn);if(x==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of ");return x}function Ps(x){function w(f,b){const{instance:P}=x(f).current;return z.useImperativeHandle(b,()=>P),null}return z.forwardRef(w)}function Cs(x,w){const f=z.useRef();z.useEffect(function(){return w!=null&&x.instance.on(w),f.current=w,function(){f.current!=null&&x.instance.off(f.current),f.current=null}},[x,w])}function Nn(x,w){const f=x.pane??w.pane;return f?{...x,pane:f}:x}var ue={exports:{}};/* @preserve - * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com - * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade - */var bs=ue.exports,Tn;function Ms(){return Tn||(Tn=1,function(x,w){(function(f,b){b(w)})(bs,function(f){var b="1.9.4";function P(t){var e,i,n,o;for(i=1,n=arguments.length;i"u"||!L||!L.Mixin)){t=H(t)?t:[t];for(var e=0;e0?Math.floor(t):Math.ceil(t)};I.prototype={clone:function(){return new I(this.x,this.y)},add:function(t){return this.clone()._add(Z(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(Z(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new I(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new I(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=_i(this.x),this.y=_i(this.y),this},distanceTo:function(t){t=Z(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=Z(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=Z(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+v(this.x)+", "+v(this.y)+")"}};function Z(t,e,i){return t instanceof I?t:H(t)?new I(t[0],t[1]):t==null?t:typeof t=="object"&&"x"in t&&"y"in t?new I(t.x,t.y):new I(t,e,i)}function q(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=rt(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>=e.x&&n.x<=i.x,u=o.y>=e.y&&n.y<=i.y;return r&&u},overlaps:function(t){t=rt(t);var e=this.min,i=this.max,n=t.min,o=t.max,r=o.x>e.x&&n.xe.y&&n.y=e.lat&&o.lat<=i.lat&&n.lng>=e.lng&&o.lng<=i.lng},intersects:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>=e.lat&&n.lat<=i.lat,u=o.lng>=e.lng&&n.lng<=i.lng;return r&&u},overlaps:function(t){t=$(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),r=o.lat>e.lat&&n.late.lng&&n.lng1,Qn=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",d,e),window.removeEventListener("testPassiveEventSupport",d,e)}catch{}return t}(),to=function(){return!!document.createElement("canvas").getContext}(),Ne=!!(document.createElementNS&&pi("svg").createSVGRect),eo=!!Ne&&function(){var t=document.createElement("div");return t.innerHTML="",(t.firstChild&&t.firstChild.namespaceURI)==="http://www.w3.org/2000/svg"}(),io=!Ne&&function(){try{var t=document.createElement("div");t.innerHTML='';var e=t.firstChild;return e.style.behavior="url(#default#VML)",e&&typeof e.adj=="object"}catch{return!1}}(),no=navigator.platform.indexOf("Mac")===0,oo=navigator.platform.indexOf("Linux")===0;function gt(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var k={ie:ce,ielt9:Hn,edge:vi,webkit:Ie,android:yi,android23:Li,androidStock:Gn,opera:Be,chrome:xi,gecko:wi,safari:Wn,phantom:Pi,opera12:Ci,win:Un,ie3d:bi,webkit3d:Ae,gecko3d:Mi,any3d:Vn,mobile:Xt,mobileWebkit:qn,mobileWebkit3d:Kn,msPointer:Ti,pointer:Si,touch:Yn,touchNative:ki,mobileOpera:Xn,mobileGecko:$n,retina:Jn,passiveEvents:Qn,canvas:to,svg:Ne,vml:io,inlineSvg:eo,mac:no,linux:oo},Ei=k.msPointer?"MSPointerDown":"pointerdown",Oi=k.msPointer?"MSPointerMove":"pointermove",zi=k.msPointer?"MSPointerUp":"pointerup",Zi=k.msPointer?"MSPointerCancel":"pointercancel",Re={touchstart:Ei,touchmove:Oi,touchend:zi,touchcancel:Zi},Ii={touchstart:lo,touchmove:de,touchend:de,touchcancel:de},Dt={},Bi=!1;function so(t,e,i){return e==="touchstart"&&uo(),Ii[e]?(i=Ii[e].bind(this,i),t.addEventListener(Re[e],i,!1),i):(console.warn("wrong event specified:",e),d)}function ro(t,e,i){if(!Re[e]){console.warn("wrong event specified:",e);return}t.removeEventListener(Re[e],i,!1)}function ao(t){Dt[t.pointerId]=t}function ho(t){Dt[t.pointerId]&&(Dt[t.pointerId]=t)}function Ai(t){delete Dt[t.pointerId]}function uo(){Bi||(document.addEventListener(Ei,ao,!0),document.addEventListener(Oi,ho,!0),document.addEventListener(zi,Ai,!0),document.addEventListener(Zi,Ai,!0),Bi=!0)}function de(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){e.touches=[];for(var i in Dt)e.touches.push(Dt[i]);e.changedTouches=[e],t(e)}}function lo(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&nt(e),de(t,e)}function co(t){var e={},i,n;for(n in t)i=t[n],e[n]=i&&i.bind?i.bind(t):i;return t=e,e.type="dblclick",e.detail=2,e.isTrusted=!1,e._simulated=!0,e}var fo=200;function _o(t,e){t.addEventListener("dblclick",e);var i=0,n;function o(r){if(r.detail!==1){n=r.detail;return}if(!(r.pointerType==="mouse"||r.sourceCapabilities&&!r.sourceCapabilities.firesTouchEvents)){var u=Hi(r);if(!(u.some(function(m){return m instanceof HTMLLabelElement&&m.attributes.for})&&!u.some(function(m){return m instanceof HTMLInputElement||m instanceof HTMLSelectElement}))){var c=Date.now();c-i<=fo?(n++,n===2&&e(co(r))):n=1,i=c}}}return t.addEventListener("click",o),{dblclick:e,simDblclick:o}}function mo(t,e){t.removeEventListener("dblclick",e.dblclick),t.removeEventListener("click",e.simDblclick)}var De=me(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),$t=me(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),Ni=$t==="webkitTransition"||$t==="OTransition"?$t+"End":"transitionend";function Ri(t){return typeof t=="string"?document.getElementById(t):t}function Jt(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];if((!i||i==="auto")&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);i=n?n[e]:null}return i==="auto"?null:i}function G(t,e,i){var n=document.createElement(t);return n.className=e||"",i&&i.appendChild(n),n}function K(t){var e=t.parentNode;e&&e.removeChild(t)}function fe(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function Ft(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function Ht(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function Fe(t,e){if(t.classList!==void 0)return t.classList.contains(e);var i=_e(t);return i.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(i)}function A(t,e){if(t.classList!==void 0)for(var i=T(e),n=0,o=i.length;n0?2*window.devicePixelRatio:1;function Gi(t){return k.edge?t.wheelDeltaY/2:t.deltaY&&t.deltaMode===0?-t.deltaY/vo:t.deltaY&&t.deltaMode===1?-t.deltaY*20:t.deltaY&&t.deltaMode===2?-t.deltaY*60:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?-t.detail*20:t.detail?t.detail/-32765*60:0}function Je(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch{return!1}return i!==t}var yo={__proto__:null,on:B,off:V,stopPropagation:At,disableScrollPropagation:$e,disableClickPropagation:ie,preventDefault:nt,stop:Nt,getPropagationPath:Hi,getMousePosition:ji,getWheelDelta:Gi,isExternalTarget:Je,addListener:B,removeListener:V},Wi=Kt.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Bt(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=it(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=this._duration*1e3;ethis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),n=this._limitCenter(i,this._zoom,$(t));return i.equals(n)||this.panTo(n,e),this._enforcingBounds=!1,this},panInside:function(t,e){e=e||{};var i=Z(e.paddingTopLeft||e.padding||[0,0]),n=Z(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),r=this.project(t),u=this.getPixelBounds(),c=rt([u.min.add(i),u.max.subtract(n)]),m=c.getSize();if(!c.contains(r)){this._enforcingBounds=!0;var y=r.subtract(c.getCenter()),M=c.extend(r).getSize().subtract(m);o.x+=y.x<0?-M.x:M.x,o.y+=y.y<0?-M.y:M.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=P({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),o=i.divideBy(2).round(),r=n.subtract(o);return!r.x&&!r.y?this:(t.animate&&t.pan?this.panBy(r):(t.pan&&this._rawPanBy(r),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i}))},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=P({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){if(this._container._leaflet_id){var e=t.code,i=t.message||(e===1?"permission denied":e===2?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})}},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e=t.coords.latitude,i=t.coords.longitude,n=new U(e,i),o=n.toBounds(t.coords.accuracy*2),r=this._locateOptions;if(r.setView){var u=this.getBoundsZoom(o);this.setView(n,r.maxZoom?Math.min(u,r.maxZoom):u)}var c={latlng:n,bounds:o,timestamp:t.timestamp};for(var m in t.coords)typeof t.coords[m]=="number"&&(c[m]=t.coords[m]);this.fire("locationfound",c)}},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch{this._container._leaflet_id=void 0,this._containerId=void 0}this._locationWatchId!==void 0&&this.stopLocate(),this._stop(),K(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(lt(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)K(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){var i="leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),n=G("div",i,e||this._mapPane);return t&&(this._panes[t]=n),n},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new at(e,i)},getMinZoom:function(){return this.options.minZoom===void 0?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===void 0?this._layersMaxZoom===void 0?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=$(t),i=Z(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),r=this.getMaxZoom(),u=t.getNorthWest(),c=t.getSouthEast(),m=this.getSize().subtract(i),y=rt(this.project(c,n),this.project(u,n)).getSize(),M=k.any3d?this.options.zoomSnap:1,E=m.x/y.x,N=m.y/y.y,ot=e?Math.max(E,N):Math.min(E,N);return n=this.getScaleZoom(ot,n),M&&(n=Math.round(n/(M/100))*(M/100),n=e?Math.ceil(n/M)*M:Math.floor(n/M)*M),Math.max(o,Math.min(r,n))},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new I(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){var i=this._getTopLeftPoint(t,e);return new q(i,i.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(t===void 0?this.getZoom():t)},getPane:function(t){return typeof t=="string"?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=e===void 0?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs;e=e===void 0?this._zoom:e;var n=i.zoom(t*i.scale(e));return isNaN(n)?1/0:n},project:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.latLngToPoint(D(t),e)},unproject:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.pointToLatLng(Z(t),e)},layerPointToLatLng:function(t){var e=Z(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(D(t))._round();return e._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(D(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds($(t))},distance:function(t,e){return this.options.crs.distance(D(t),D(e))},containerPointToLayerPoint:function(t){return Z(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return Z(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(Z(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(D(t)))},mouseEventToContainerPoint:function(t){return ji(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=Ri(t);if(e){if(e._leaflet_id)throw new Error("Map container is already initialized.")}else throw new Error("Map container not found.");B(e,"scroll",this._onScroll,this),this._containerId=l(e)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&k.any3d,A(t,"leaflet-container"+(k.touch?" leaflet-touch":"")+(k.retina?" leaflet-retina":"")+(k.ielt9?" leaflet-oldie":"")+(k.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var e=Jt(t,"position");e!=="absolute"&&e!=="relative"&&e!=="fixed"&&e!=="sticky"&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),J(this._mapPane,new I(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(A(t.markerPane,"leaflet-zoom-hide"),A(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){J(this._mapPane,new I(0,0));var n=!this._loaded;this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset");var o=this._zoom!==e;this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){e===void 0&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return lt(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){J(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[l(this._container)]=this;var e=t?V:B;e(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),k.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){lt(this._resizeRequest),this._resizeRequest=it(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i=[],n,o=e==="mouseout"||e==="mouseover",r=t.target||t.srcElement,u=!1;r;){if(n=this._targets[l(r)],n&&(e==="click"||e==="preclick")&&this._draggableMoved(n)){u=!0;break}if(n&&n.listens(e,!0)&&(o&&!Je(r,t)||(i.push(n),o))||r===this._container)break;r=r.parentNode}return!i.length&&!u&&!o&&this.listens(e,!0)&&(i=[this]),i},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e=t.target||t.srcElement;if(!(!this._loaded||e._leaflet_disable_events||t.type==="click"&&this._isClickDisabled(e))){var i=t.type;i==="mousedown"&&Ve(e),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){if(t.type==="click"){var n=P({},t);n.type="preclick",this._fireDOMEvent(n,n.type,i)}var o=this._findEventTargets(t,e);if(i){for(var r=[],u=0;u0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),n=k.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){Y(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._trunc();return(e&&e.animate)!==!0&&!this.getSize().contains(i)?!1:(this.panBy(i,e),!0)},_createAnimProxy:function(){var t=this._proxy=G("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(e){var i=De,n=this._proxy.style[i];It(this._proxy,this.project(e.center,e.zoom),this.getZoomScale(e.zoom,1)),n===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){K(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();It(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n);return i.animate!==!0&&!this.getSize().contains(o)?!1:(it(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this),!0)},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,A(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&Y(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function Lo(t,e){return new F(t,e)}var _t=wt.extend({options:{position:"topright"},initialize:function(t){C(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return A(e,"leaflet-control"),i.indexOf("bottom")!==-1?n.insertBefore(e,n.firstChild):n.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(K(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),ne=function(t){return new _t(t)};F.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},e="leaflet-",i=this._controlContainer=G("div",e+"control-container",this._container);function n(o,r){var u=e+o+" "+e+r;t[o+r]=G("div",u,i)}n("top","left"),n("top","right"),n("bottom","left"),n("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)K(this._controlCorners[t]);K(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Ui=_t.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,n){return i1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=e&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(l(t.target)),i=e.overlay?t.type==="add"?"overlayadd":"overlayremove":t.type==="add"?"baselayerchange":null;i&&this._map.fire(i,e)},_createRadioElement:function(t,e){var i='",n=document.createElement("div");return n.innerHTML=i,n.firstChild},_addItem:function(t){var e=document.createElement("label"),i=this._map.hasLayer(t.layer),n;t.overlay?(n=document.createElement("input"),n.type="checkbox",n.className="leaflet-control-layers-selector",n.defaultChecked=i):n=this._createRadioElement("leaflet-base-layers_"+l(this),i),this._layerControlInputs.push(n),n.layerId=l(t.layer),B(n,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var r=document.createElement("span");e.appendChild(r),r.appendChild(n),r.appendChild(o);var u=t.overlay?this._overlaysList:this._baseLayersList;return u.appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){if(!this._preventClick){var t=this._layerControlInputs,e,i,n=[],o=[];this._handlingClick=!0;for(var r=t.length-1;r>=0;r--)e=t[r],i=this._getLayer(e.layerId).layer,e.checked?n.push(i):e.checked||o.push(i);for(r=0;r=0;o--)e=t[o],i=this._getLayer(e.layerId).layer,e.disabled=i.options.minZoom!==void 0&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section;this._preventClick=!0,B(t,"click",nt),this.expand();var e=this;setTimeout(function(){V(t,"click",nt),e._preventClick=!1})}}),xo=function(t,e,i){return new Ui(t,e,i)},Qe=_t.extend({options:{position:"topleft",zoomInText:'',zoomInTitle:"Zoom in",zoomOutText:'',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=G("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){var r=G("a",i,n);return r.innerHTML=t,r.href="#",r.title=e,r.setAttribute("role","button"),r.setAttribute("aria-label",e),ie(r),B(r,"click",Nt),B(r,"click",o,this),B(r,"click",this._refocusOnMap,this),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";Y(this._zoomInButton,e),Y(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),(this._disabled||t._zoom===t.getMinZoom())&&(A(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),(this._disabled||t._zoom===t.getMaxZoom())&&(A(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}});F.mergeOptions({zoomControl:!0}),F.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new Qe,this.addControl(this.zoomControl))});var wo=function(t){return new Qe(t)},Vi=_t.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=G("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=G("div",e,i)),t.imperial&&(this._iScale=G("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,i=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(i)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t),i=e<1e3?e+" m":e/1e3+" km";this._updateScale(this._mScale,i,e/t)},_updateImperial:function(t){var e=t*3.2808399,i,n,o;e>5280?(i=e/5280,n=this._getRoundNum(i),this._updateScale(this._iScale,n+" mi",n/i)):(o=this._getRoundNum(e),this._updateScale(this._iScale,o+" ft",o/e))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),Po=function(t){return new Vi(t)},Co='',ti=_t.extend({options:{position:"bottomright",prefix:''+(k.inlineSvg?Co+" ":"")+"Leaflet"},initialize:function(t){C(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=G("div","leaflet-control-attribution"),ie(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(' ')}}});F.mergeOptions({attributionControl:!0}),F.addInitHook(function(){this.options.attributionControl&&new ti().addTo(this)});var bo=function(t){return new ti(t)};_t.Layers=Ui,_t.Zoom=Qe,_t.Scale=Vi,_t.Attribution=ti,ne.layers=xo,ne.zoom=wo,ne.scale=Po,ne.attribution=bo;var yt=wt.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});yt.addTo=function(t,e){return t.addHandler(e,this),this};var Mo={Events:ut},qi=k.touch?"touchstart mousedown":"mousedown",Et=Kt.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){C(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(B(this._dragStartTarget,qi,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Et._dragging===this&&this.finishDrag(!0),V(this._dragStartTarget,qi,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(this._enabled&&(this._moved=!1,!Fe(this._element,"leaflet-zoom-anim"))){if(t.touches&&t.touches.length!==1){Et._dragging===this&&this.finishDrag();return}if(!(Et._dragging||t.shiftKey||t.which!==1&&t.button!==1&&!t.touches)&&(Et._dragging=this,this._preventOutline&&Ve(this._element),Ge(),Qt(),!this._moving)){this.fire("down");var e=t.touches?t.touches[0]:t,i=Di(this._element);this._startPoint=new I(e.clientX,e.clientY),this._startPos=Bt(this._element),this._parentScale=qe(i);var n=t.type==="mousedown";B(document,n?"mousemove":"touchmove",this._onMove,this),B(document,n?"mouseup":"touchend touchcancel",this._onUp,this)}}},_onMove:function(t){if(this._enabled){if(t.touches&&t.touches.length>1){this._moved=!0;return}var e=t.touches&&t.touches.length===1?t.touches[0]:t,i=new I(e.clientX,e.clientY)._subtract(this._startPoint);!i.x&&!i.y||Math.abs(i.x)+Math.abs(i.y)r&&(u=c,r=m);r>i&&(e[u]=1,ii(t,e,i,n,u),ii(t,e,i,u,o))}function Eo(t,e){for(var i=[t[0]],n=1,o=0,r=t.length;ne&&(i.push(t[n]),o=n);return oe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function Oo(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function oe(t,e,i,n){var o=e.x,r=e.y,u=i.x-o,c=i.y-r,m=u*u+c*c,y;return m>0&&(y=((t.x-o)*u+(t.y-r)*c)/m,y>1?(o=i.x,r=i.y):y>0&&(o+=u*y,r+=c*y)),u=t.x-o,c=t.y-r,n?u*u+c*c:new I(o,r)}function dt(t){return!H(t[0])||typeof t[0][0]!="object"&&typeof t[0][0]<"u"}function tn(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),dt(t)}function en(t,e){var i,n,o,r,u,c,m,y;if(!t||t.length===0)throw new Error("latlngs not passed");dt(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);var M=D([0,0]),E=$(t),N=E.getNorthWest().distanceTo(E.getSouthWest())*E.getNorthEast().distanceTo(E.getNorthWest());N<1700&&(M=ei(t));var ot=t.length,et=[];for(i=0;in){m=(r-n)/o,y=[c.x-m*(c.x-u.x),c.y-m*(c.y-u.y)];break}var ht=e.unproject(Z(y));return D([ht.lat+M.lat,ht.lng+M.lng])}var zo={__proto__:null,simplify:Xi,pointToSegmentDistance:$i,closestPointOnSegment:So,clipSegment:Qi,_getEdgeIntersection:ve,_getBitCode:Rt,_sqClosestPointOnSegment:oe,isFlat:dt,_flat:tn,polylineCenter:en},ni={project:function(t){return new I(t.lng,t.lat)},unproject:function(t){return new U(t.y,t.x)},bounds:new q([-180,-90],[180,90])},oi={R:6378137,R_MINOR:6356752314245179e-9,bounds:new q([-2003750834279e-5,-1549657073972e-5],[2003750834279e-5,1876465623138e-5]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,o=this.R_MINOR/i,r=Math.sqrt(1-o*o),u=r*Math.sin(n),c=Math.tan(Math.PI/4-n/2)/Math.pow((1-u)/(1+u),r/2);return n=-i*Math.log(Math.max(c,1e-10)),new I(t.lng*e*i,n)},unproject:function(t){for(var e=180/Math.PI,i=this.R,n=this.R_MINOR/i,o=Math.sqrt(1-n*n),r=Math.exp(-t.y/i),u=Math.PI/2-2*Math.atan(r),c=0,m=.1,y;c<15&&Math.abs(m)>1e-7;c++)y=o*Math.sin(u),y=Math.pow((1-y)/(1+y),o/2),m=Math.PI/2-2*Math.atan(r*y)-u,u+=m;return new U(u*e,t.x*e/i)}},Zo={__proto__:null,LonLat:ni,Mercator:oi,SphericalMercator:Ee},Io=P({},kt,{code:"EPSG:3395",projection:oi,transformation:function(){var t=.5/(Math.PI*oi.R);return Yt(t,.5,-t,.5)}()}),nn=P({},kt,{code:"EPSG:4326",projection:ni,transformation:Yt(1/180,1,-1/180,.5)}),Bo=P({},Pt,{projection:ni,transformation:Yt(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,n=e.lat-t.lat;return Math.sqrt(i*i+n*n)},infinite:!0});Pt.Earth=kt,Pt.EPSG3395=Io,Pt.EPSG3857=ze,Pt.EPSG900913=Fn,Pt.EPSG4326=nn,Pt.Simple=Bo;var mt=Kt.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[l(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[l(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e=t.target;if(e.hasLayer(this)){if(this._map=e,this._zoomAnimated=e._zoomAnimated,this.getEvents){var i=this.getEvents();e.on(i,this),this.once("remove",function(){e.off(i,this)},this)}this.onAdd(e),this.fire("add"),e.fire("layeradd",{layer:this})}}});F.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var e=l(t);return this._layers[e]?this:(this._layers[e]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var e=l(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return l(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){t=t?H(t)?t:[t]:[];for(var e=0,i=t.length;ethis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),this.options.minZoom===void 0&&this._layersMinZoom&&this.getZoom()=2&&e[0]instanceof U&&e[0].equals(e[i-1])&&e.pop(),e},_setLatLngs:function(t){bt.prototype._setLatLngs.call(this,t),dt(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return dt(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,i=new I(e,e);if(t=new q(t.min.subtract(i),t.max.add(i)),this._parts=[],!(!this._pxBounds||!this._pxBounds.intersects(t))){if(this.options.noClip){this._parts=this._rings;return}for(var n=0,o=this._rings.length,r;nt.y!=o.y>t.y&&t.x<(o.x-n.x)*(t.y-n.y)/(o.y-n.y)+n.x&&(e=!e);return e||bt.prototype._containsPoint.call(this,t,!0)}});function Go(t,e){return new Wt(t,e)}var Mt=Ct.extend({initialize:function(t,e){C(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e=H(t)?t:t.features,i,n,o;if(e){for(i=0,n=e.length;i0&&o.push(o[0].slice()),o}function Ut(t,e){return t.feature?P({},t.feature,{geometry:e}):Ce(e)}function Ce(t){return t.type==="Feature"||t.type==="FeatureCollection"?t:{type:"Feature",properties:{},geometry:t}}var hi={toGeoJSON:function(t){return Ut(this,{type:"Point",coordinates:ai(this.getLatLng(),t)})}};ye.include(hi),si.include(hi),Le.include(hi),bt.include({toGeoJSON:function(t){var e=!dt(this._latlngs),i=Pe(this._latlngs,e?1:0,!1,t);return Ut(this,{type:(e?"Multi":"")+"LineString",coordinates:i})}}),Wt.include({toGeoJSON:function(t){var e=!dt(this._latlngs),i=e&&!dt(this._latlngs[0]),n=Pe(this._latlngs,i?2:e?1:0,!0,t);return e||(n=[n]),Ut(this,{type:(i?"Multi":"")+"Polygon",coordinates:n})}}),jt.include({toMultiPoint:function(t){var e=[];return this.eachLayer(function(i){e.push(i.toGeoJSON(t).geometry.coordinates)}),Ut(this,{type:"MultiPoint",coordinates:e})},toGeoJSON:function(t){var e=this.feature&&this.feature.geometry&&this.feature.geometry.type;if(e==="MultiPoint")return this.toMultiPoint(t);var i=e==="GeometryCollection",n=[];return this.eachLayer(function(o){if(o.toGeoJSON){var r=o.toGeoJSON(t);if(i)n.push(r.geometry);else{var u=Ce(r);u.type==="FeatureCollection"?n.push.apply(n,u.features):n.push(u)}}}),i?Ut(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}});function rn(t,e){return new Mt(t,e)}var Wo=rn,be=mt.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,e,i){this._url=t,this._bounds=$(e),C(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(A(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){K(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&Ft(this._image),this},bringToBack:function(){return this._map&&Ht(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=$(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=this._url.tagName==="IMG",e=this._image=t?this._url:G("img");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=d,e.onmousemove=d,e.onload=a(this.fire,this,"load"),e.onerror=a(this._overlayOnError,this,"error"),(this.options.crossOrigin||this.options.crossOrigin==="")&&(e.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t){this._url=e.src;return}e.src=this._url,e.alt=this.options.alt},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),i=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;It(this._image,i,e)},_reset:function(){var t=this._image,e=new q(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();J(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){ct(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&this.options.zIndex!==void 0&&this.options.zIndex!==null&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),Uo=function(t,e,i){return new be(t,e,i)},an=be.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t=this._url.tagName==="VIDEO",e=this._image=t?this._url:G("video");if(A(e,"leaflet-image-layer"),this._zoomAnimated&&A(e,"leaflet-zoom-animated"),this.options.className&&A(e,this.options.className),e.onselectstart=d,e.onmousemove=d,e.onloadeddata=a(this.fire,this,"load"),t){for(var i=e.getElementsByTagName("source"),n=[],o=0;o0?n:[e.src];return}H(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var r=0;ro?(e.height=o+"px",A(t,r)):Y(t,r),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),i=this._getAnchor();J(this._container,e.add(i))},_adjustPan:function(){if(this.options.autoPan){if(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning){this._autopanning=!1;return}var t=this._map,e=parseInt(Jt(this._container,"marginBottom"),10)||0,i=this._container.offsetHeight+e,n=this._containerWidth,o=new I(this._containerLeft,-i-this._containerBottom);o._add(Bt(this._container));var r=t.layerPointToContainerPoint(o),u=Z(this.options.autoPanPadding),c=Z(this.options.autoPanPaddingTopLeft||u),m=Z(this.options.autoPanPaddingBottomRight||u),y=t.getSize(),M=0,E=0;r.x+n+m.x>y.x&&(M=r.x+n-y.x+m.x),r.x-M-c.x<0&&(M=r.x-c.x),r.y+i+m.y>y.y&&(E=r.y+i-y.y+m.y),r.y-E-c.y<0&&(E=r.y-c.y),(M||E)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([M,E]))}},_getAnchor:function(){return Z(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),Ko=function(t,e){return new Me(t,e)};F.mergeOptions({closePopupOnClick:!0}),F.include({openPopup:function(t,e,i){return this._initOverlay(Me,t,e,i).openOn(this),this},closePopup:function(t){return t=arguments.length?t:this._popup,t&&t.close(),this}}),mt.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Me,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof Ct||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return this._popup?this._popup.isOpen():!1},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){if(!(!this._popup||!this._map)){Nt(t);var e=t.layer||t.target;if(this._popup._source===e&&!(e instanceof Ot)){this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng);return}this._popup._source=e,this.openPopup(t.latlng)}},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){t.originalEvent.keyCode===13&&this._openPopup(t)}});var Te=Lt.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){Lt.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){Lt.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=Lt.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip",e=t+" "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=G("div",e),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+l(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i,n=this._map,o=this._container,r=n.latLngToContainerPoint(n.getCenter()),u=n.layerPointToContainerPoint(t),c=this.options.direction,m=o.offsetWidth,y=o.offsetHeight,M=Z(this.options.offset),E=this._getAnchor();c==="top"?(e=m/2,i=y):c==="bottom"?(e=m/2,i=0):c==="center"?(e=m/2,i=y/2):c==="right"?(e=0,i=y/2):c==="left"?(e=m,i=y/2):u.xthis.options.maxZoom||in?this._retainParent(o,r,u,n):!1)},_retainChildren:function(t,e,i,n){for(var o=2*t;o<2*t+2;o++)for(var r=2*e;r<2*e+2;r++){var u=new I(o,r);u.z=i+1;var c=this._tileCoordsToKey(u),m=this._tiles[c];if(m&&m.active){m.retain=!0;continue}else m&&m.loaded&&(m.retain=!0);i+1this.options.maxZoom||this.options.minZoom!==void 0&&o1){this._setView(t,i);return}for(var E=o.min.y;E<=o.max.y;E++)for(var N=o.min.x;N<=o.max.x;N++){var ot=new I(N,E);if(ot.z=this._tileZoom,!!this._isValidTile(ot)){var et=this._tiles[this._tileCoordsToKey(ot)];et?et.current=!0:u.push(ot)}}if(u.sort(function(ht,qt){return ht.distanceTo(r)-qt.distanceTo(r)}),u.length!==0){this._loading||(this._loading=!0,this.fire("loading"));var ft=document.createDocumentFragment();for(N=0;Ni.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return $(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),o=n.add(i),r=e.unproject(n,t.z),u=e.unproject(o,t.z);return[r,u]},_tileCoordsToBounds:function(t){var e=this._tileCoordsToNwSe(t),i=new at(e[0],e[1]);return this.options.noWrap||(i=this._map.wrapLatLngBounds(i)),i},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var e=t.split(":"),i=new I(+e[0],+e[1]);return i.z=+e[2],i},_removeTile:function(t){var e=this._tiles[t];e&&(K(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){A(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=d,t.onmousemove=d,k.ielt9&&this.options.opacity<1&&ct(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&it(a(this._tileReady,this,t,null,o)),J(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);i=this._tiles[n],i&&(i.loaded=+new Date,this._map._fadeAnimated?(ct(i.el,0),lt(this._fadeFrame),this._fadeFrame=it(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(A(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),k.ielt9||!this._map._fadeAnimated?it(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new I(this._wrapX?g(t.x,this._wrapX):t.x,this._wrapY?g(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new q(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function $o(t){return new re(t)}var Vt=re.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,e=C(this,e),e.detectRetina&&k.retina&&e.maxZoom>0?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),typeof e.subdomains=="string"&&(e.subdomains=e.subdomains.split("")),this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&e===void 0&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement("img");return B(i,"load",a(this._tileOnLoad,this,e,i)),B(i,"error",a(this._tileOnError,this,e,i)),(this.options.crossOrigin||this.options.crossOrigin==="")&&(i.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),typeof this.options.referrerPolicy=="string"&&(i.referrerPolicy=this.options.referrerPolicy),i.alt="",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:k.retina?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var i=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=i),e["-y"]=i}return R(this._url,P(e,this.options))},_tileOnLoad:function(t,e){k.ielt9?setTimeout(a(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&e.getAttribute("src")!==n&&(e.src=n),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom,i=this.options.zoomReverse,n=this.options.zoomOffset;return i&&(t=e-t),t+n},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_abortLoading:function(){var t,e;for(t in this._tiles)if(this._tiles[t].coords.z!==this._tileZoom&&(e=this._tiles[t].el,e.onload=d,e.onerror=d,!e.complete)){e.src=W;var i=this._tiles[t].coords;K(e),delete this._tiles[t],this.fire("tileabort",{tile:e,coords:i})}},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute("src",W),re.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(!(!this._map||i&&i.getAttribute("src")===W))return re.prototype._tileReady.call(this,t,e,i)}});function ln(t,e){return new Vt(t,e)}var cn=Vt.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i=P({},this.defaultWmsParams);for(var n in e)n in this.options||(i[n]=e[n]);e=C(this,e);var o=e.detectRetina&&k.retina?2:1,r=this.getTileSize();i.width=r.x*o,i.height=r.y*o,this.wmsParams=i},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,Vt.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,n=rt(i.project(e[0]),i.project(e[1])),o=n.min,r=n.max,u=(this._wmsVersion>=1.3&&this._crs===nn?[o.y,o.x,r.y,r.x]:[o.x,o.y,r.x,r.y]).join(","),c=Vt.prototype.getTileUrl.call(this,t);return c+j(this.wmsParams,c,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+u},setParams:function(t,e){return P(this.wmsParams,t),e||this.redraw(),this}});function Jo(t,e){return new cn(t,e)}Vt.WMS=cn,ln.wms=Jo;var Tt=mt.extend({options:{padding:.1},initialize:function(t){C(this,t),l(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),A(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),r=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t,e));k.any3d?It(this._container,r,i):J(this._container,r)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new q(i,i.add(e.multiplyBy(1+t*2)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),dn=Tt.extend({options:{tolerance:0},getEvents:function(){var t=Tt.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Tt.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");B(t,"mousemove",this._onMouseMove,this),B(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),B(t,"mouseout",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext("2d")},_destroyContainer:function(){lt(this._redrawRequest),delete this._ctx,K(this._container),V(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){var t;this._redrawBounds=null;for(var e in this._layers)t=this._layers[e],t._update();this._redraw()}},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Tt.prototype._update.call(this);var t=this._bounds,e=this._container,i=t.getSize(),n=k.retina?2:1;J(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",k.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){Tt.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[l(t)]=t;var e=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=e),this._drawLast=e,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,n=e.prev;i?i.prev=n:this._drawLast=n,n?n.next=i:this._drawFirst=i,delete t._order,delete this._layers[l(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(typeof t.options.dashArray=="string"){var e=t.options.dashArray.split(/[, ]+/),i=[],n,o;for(o=0;o')}}catch{}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),Qo={_initContainer:function(){this._container=G("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Tt.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=ae("shape");A(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=ae("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;K(e),t.removeInteractiveTarget(e),delete this._layers[l(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e||(e=t._stroke=ae("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=H(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i||(i=t._fill=ae("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,"+65535*360)},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){Ft(t._container)},_bringToBack:function(t){Ht(t._container)}},Se=k.vml?ae:pi,he=Tt.extend({_initContainer:function(){this._container=Se("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=Se("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){K(this._container),V(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){Tt.prototype._update.call(this);var t=this._bounds,e=t.getSize(),i=this._container;(!this._svgSize||!this._svgSize.equals(e))&&(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),J(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update")}},_initPath:function(t){var e=t._path=Se("path");t.options.className&&A(e,t.options.className),t.options.interactive&&A(e,"leaflet-interactive"),this._updateStyle(t),this._layers[l(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){K(t._path),t.removeInteractiveTarget(t._path),delete this._layers[l(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,i=t.options;e&&(i.stroke?(e.setAttribute("stroke",i.color),e.setAttribute("stroke-opacity",i.opacity),e.setAttribute("stroke-width",i.weight),e.setAttribute("stroke-linecap",i.lineCap),e.setAttribute("stroke-linejoin",i.lineJoin),i.dashArray?e.setAttribute("stroke-dasharray",i.dashArray):e.removeAttribute("stroke-dasharray"),i.dashOffset?e.setAttribute("stroke-dashoffset",i.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),i.fill?(e.setAttribute("fill",i.fillColor||i.color),e.setAttribute("fill-opacity",i.fillOpacity),e.setAttribute("fill-rule",i.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,gi(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n=Math.max(Math.round(t._radiusY),1)||i,o="a"+i+","+n+" 0 1,0 ",r=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+o+i*2+",0 "+o+-i*2+",0 ";this._setPath(t,r)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){Ft(t._path)},_bringToBack:function(t){Ht(t._path)}});k.vml&&he.include(Qo);function _n(t){return k.svg||k.vml?new he(t):null}F.include({getRenderer:function(t){var e=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return e||(e=this._renderer=this._createRenderer()),this.hasLayer(e)||this.addLayer(e),e},_getPaneRenderer:function(t){if(t==="overlayPane"||t===void 0)return!1;var e=this._paneRenderers[t];return e===void 0&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e},_createRenderer:function(t){return this.options.preferCanvas&&fn(t)||_n(t)}});var mn=Wt.extend({initialize:function(t,e){Wt.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=$(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function ts(t,e){return new mn(t,e)}he.create=Se,he.pointsToPath=gi,Mt.geometryToLayer=xe,Mt.coordsToLatLng=ri,Mt.coordsToLatLngs=we,Mt.latLngToCoords=ai,Mt.latLngsToCoords=Pe,Mt.getFeature=Ut,Mt.asFeature=Ce,F.mergeOptions({boxZoom:!0});var pn=yt.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){B(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){V(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){K(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){this._resetStateTimeout!==0&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||t.which!==1&&t.button!==1)return!1;this._clearDeferredResetState(),this._resetState(),Qt(),Ge(),this._startPoint=this._map.mouseEventToContainerPoint(t),B(document,{contextmenu:Nt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=G("div","leaflet-zoom-box",this._container),A(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var e=new q(this._point,this._startPoint),i=e.getSize();J(this._box,e.min),this._box.style.width=i.x+"px",this._box.style.height=i.y+"px"},_finish:function(){this._moved&&(K(this._box),Y(this._container,"leaflet-crosshair")),te(),We(),V(document,{contextmenu:Nt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if(!(t.which!==1&&t.button!==1)&&(this._finish(),!!this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0);var e=new at(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(e).fire("boxzoomend",{boxZoomBounds:e})}},_onKeyDown:function(t){t.keyCode===27&&(this._finish(),this._clearDeferredResetState(),this._resetState())}});F.addInitHook("addHandler","boxZoom",pn),F.mergeOptions({doubleClickZoom:!0});var gn=yt.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,o=t.originalEvent.shiftKey?i-n:i+n;e.options.doubleClickZoom==="center"?e.setZoom(o):e.setZoomAround(t.containerPoint,o)}});F.addInitHook("addHandler","doubleClickZoom",gn),F.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var vn=yt.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new Et(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}A(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){Y(this._map._container,"leaflet-grab"),Y(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var e=$(this._map.options.maxBounds);this._offsetLimit=rt(this._map.latLngToContainerPoint(e.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(e.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(i),this._times.push(e),this._prunePositions(e)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){if(!(!this._viscosity||!this._offsetLimit)){var t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit;t.xe.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,r=(n+e+i)%t-e-i,u=Math.abs(o+i)0?r:-r))-e;this._delta=0,this._startTime=null,u&&(t.options.scrollWheelZoom==="center"?t.setZoom(e+u):t.setZoomAround(this._lastMousePos,e+u))}});F.addInitHook("addHandler","scrollWheelZoom",Ln);var es=600;F.mergeOptions({tapHold:k.touchNative&&k.safari&&k.mobile,tapTolerance:15});var xn=yt.extend({addHooks:function(){B(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){V(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(clearTimeout(this._holdTimeout),t.touches.length===1){var e=t.touches[0];this._startPos=this._newPos=new I(e.clientX,e.clientY),this._holdTimeout=setTimeout(a(function(){this._cancel(),this._isTapValid()&&(B(document,"touchend",nt),B(document,"touchend touchcancel",this._cancelClickPrevent),this._simulateEvent("contextmenu",e))},this),es),B(document,"touchend touchcancel contextmenu",this._cancel,this),B(document,"touchmove",this._onMove,this)}},_cancelClickPrevent:function t(){V(document,"touchend",nt),V(document,"touchend touchcancel",t)},_cancel:function(){clearTimeout(this._holdTimeout),V(document,"touchend touchcancel contextmenu",this._cancel,this),V(document,"touchmove",this._onMove,this)},_onMove:function(t){var e=t.touches[0];this._newPos=new I(e.clientX,e.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){var i=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});i._simulated=!0,e.target.dispatchEvent(i)}});F.addInitHook("addHandler","tapHold",xn),F.mergeOptions({touchZoom:k.touch,bounceAtZoomLimits:!0});var wn=yt.extend({addHooks:function(){A(this._map._container,"leaflet-touch-zoom"),B(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){Y(this._map._container,"leaflet-touch-zoom"),V(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e=this._map;if(!(!t.touches||t.touches.length!==2||e._animatingZoom||this._zooming)){var i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=e.getSize()._divideBy(2),this._startLatLng=e.containerPointToLatLng(this._centerPoint),e.options.touchZoom!=="center"&&(this._pinchStartLatLng=e.containerPointToLatLng(i.add(n)._divideBy(2))),this._startDist=i.distanceTo(n),this._startZoom=e.getZoom(),this._moved=!1,this._zooming=!0,e._stop(),B(document,"touchmove",this._onTouchMove,this),B(document,"touchend touchcancel",this._onTouchEnd,this),nt(t)}},_onTouchMove:function(t){if(!(!t.touches||t.touches.length!==2||!this._zooming)){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),o=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&o>1)&&(this._zoom=e._limitZoom(this._zoom)),e.options.touchZoom==="center"){if(this._center=this._startLatLng,o===1)return}else{var r=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(o===1&&r.x===0&&r.y===0)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),lt(this._animRequest);var u=a(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=it(u,this,!0),nt(t)}},_onTouchEnd:function(){if(!this._moved||!this._zooming){this._zooming=!1;return}this._zooming=!1,lt(this._animRequest),V(document,"touchmove",this._onTouchMove,this),V(document,"touchend touchcancel",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))}});F.addInitHook("addHandler","touchZoom",wn),F.BoxZoom=pn,F.DoubleClickZoom=gn,F.Drag=vn,F.Keyboard=yn,F.ScrollWheelZoom=Ln,F.TapHold=xn,F.TouchZoom=wn,f.Bounds=q,f.Browser=k,f.CRS=Pt,f.Canvas=dn,f.Circle=si,f.CircleMarker=Le,f.Class=wt,f.Control=_t,f.DivIcon=un,f.DivOverlay=Lt,f.DomEvent=yo,f.DomUtil=go,f.Draggable=Et,f.Evented=Kt,f.FeatureGroup=Ct,f.GeoJSON=Mt,f.GridLayer=re,f.Handler=yt,f.Icon=Gt,f.ImageOverlay=be,f.LatLng=U,f.LatLngBounds=at,f.Layer=mt,f.LayerGroup=jt,f.LineUtil=zo,f.Map=F,f.Marker=ye,f.Mixin=Mo,f.Path=Ot,f.Point=I,f.PolyUtil=To,f.Polygon=Wt,f.Polyline=bt,f.Popup=Me,f.PosAnimation=Wi,f.Projection=Zo,f.Rectangle=mn,f.Renderer=Tt,f.SVG=he,f.SVGOverlay=hn,f.TileLayer=Vt,f.Tooltip=Te,f.Transformation=Oe,f.Util=Rn,f.VideoOverlay=an,f.bind=a,f.bounds=rt,f.canvas=fn,f.circle=Ho,f.circleMarker=Fo,f.control=ne,f.divIcon=Xo,f.extend=P,f.featureGroup=No,f.geoJSON=rn,f.geoJson=Wo,f.gridLayer=$o,f.icon=Ro,f.imageOverlay=Uo,f.latLng=D,f.latLngBounds=$,f.layerGroup=Ao,f.map=Lo,f.marker=Do,f.point=Z,f.polygon=Go,f.polyline=jo,f.popup=Ko,f.rectangle=ts,f.setOptions=C,f.stamp=l,f.svg=_n,f.svgOverlay=qo,f.tileLayer=ln,f.tooltip=Yo,f.transformation=Yt,f.version=b,f.videoOverlay=Vo;var is=window.L;f.noConflict=function(){return window.L=is,this},window.L=f})}(ue,ue.exports)),ue.exports}var di=Ms();const St=cs(di);function Ts(x,w,f){return Object.freeze({instance:x,context:w,container:f})}function Ss(x,w){return w==null?function(b,P){const s=z.useRef();return s.current||(s.current=x(b,P)),s}:function(b,P){const s=z.useRef();s.current||(s.current=x(b,P));const a=z.useRef(b),{instance:h}=s.current;return z.useEffect(function(){a.current!==b&&(w(h,b,a.current),a.current=b)},[h,b,P]),s}}function ks(x,w){z.useEffect(function(){return(w.layerContainer??w.map).addLayer(x.instance),function(){var s;(s=w.layerContainer)==null||s.removeLayer(x.instance),w.map.removeLayer(x.instance)}},[w,x])}function Es(x){return function(f){const b=An(),P=x(Nn(f,b),b);return ys(b.map,f.attribution),Cs(P.current,f.eventHandlers),ks(P.current,b),P}}function Os(x,w){const f=Ss(x,w),b=Es(f);return Ps(b)}function zs(x,w,f){const{opacity:b,zIndex:P}=w;b!=null&&b!==f.opacity&&x.setOpacity(b),P!=null&&P!==f.zIndex&&x.setZIndex(P)}function fi(){return An().map}function li(){return li=Object.assign||function(x){for(var w=1;w(p==null?void 0:p.map)??null,[p]);const C=z.useCallback(O=>{if(O!==null&&p===null){const R=new di.Map(O,g);f!=null&&_!=null?R.setView(f,_):x!=null&&R.fitBounds(x,w),l!=null&&R.whenReady(l),T(xs(R))}},[]);z.useEffect(()=>()=>{p==null||p.map.remove()},[p]);const j=p?Mn.createElement(ws,{value:p},b):a??null;return Mn.createElement("div",li({},v,{ref:C}),j)}const Is=z.forwardRef(Zs),Bs=Os(function({url:w,...f},b){const P=new di.TileLayer(w,Nn(f,b));return Ts(P,b)},function(w,f,b){zs(w,f,b);const{url:P}=f;P!=null&&P!==b.url&&w.setUrl(P)});var le={exports:{}},As=le.exports,Sn;function Ns(){return Sn||(Sn=1,function(x,w){(function(f,b){b(w)})(As,function(f){var b=L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnEveryZoom:!1,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyShapePositions:null,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(s){L.Util.setOptions(this,s),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[],this._childMarkerEventHandlers={dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var a=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,a?this._withAnimation:this._noAnimation),this._markerCluster=a?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(s){if(s instanceof L.LayerGroup)return this.addLayers([s]);if(!s.getLatLng)return this._nonPointGroup.addLayer(s),this.fire("layeradd",{layer:s}),this;if(!this._map)return this._needsClustering.push(s),this.fire("layeradd",{layer:s}),this;if(this.hasLayer(s))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(s,this._maxZoom),this.fire("layeradd",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var a=s,h=this._zoom;if(s.__parent)for(;a.__parent._zoom>=h;)a=a.__parent;return this._currentShownBounds.contains(a.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(s,a):this._animationAddLayerNonAnimated(s,a)),this},removeLayer:function(s){return s instanceof L.LayerGroup?this.removeLayers([s]):s.getLatLng?this._map?s.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(s)),this._removeLayer(s,!0),this.fire("layerremove",{layer:s}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),s.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(s)&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,s)&&this.hasLayer(s)&&this._needsRemoving.push({layer:s,latlng:s._latlng}),this.fire("layerremove",{layer:s}),this):(this._nonPointGroup.removeLayer(s),this.fire("layerremove",{layer:s}),this)},addLayers:function(s,a){if(!L.Util.isArray(s))return this.addLayer(s);var h=this._featureGroup,l=this._nonPointGroup,_=this.options.chunkedLoading,g=this.options.chunkInterval,d=this.options.chunkProgress,v=s.length,p=0,T=!0,C;if(this._map){var j=new Date().getTime(),O=L.bind(function(){var H=new Date().getTime();for(this._map&&this._unspiderfy&&this._unspiderfy();pg)break}if(C=s[p],C instanceof L.LayerGroup){T&&(s=s.slice(),T=!1),this._extractNonGroupLayers(C,s),v=s.length;continue}if(!C.getLatLng){l.addLayer(C),a||this.fire("layeradd",{layer:C});continue}if(!this.hasLayer(C)&&(this._addLayer(C,this._maxZoom),a||this.fire("layeradd",{layer:C}),C.__parent&&C.__parent.getChildCount()===2)){var W=C.__parent.getAllChildMarkers(),st=W[0]===C?W[1]:W[0];h.removeLayer(st)}}d&&d(p,v,new Date().getTime()-j),p===v?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(O,this.options.chunkDelay)},this);O()}else for(var R=this._needsClustering;p=0;a--)s.extend(this._needsClustering[a].getLatLng());return s.extend(this._nonPointGroup.getBounds()),s},eachLayer:function(s,a){var h=this._needsClustering.slice(),l=this._needsRemoving,_,g,d;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(h),g=h.length-1;g>=0;g--){for(_=!0,d=l.length-1;d>=0;d--)if(l[d].layer===h[g]){_=!1;break}_&&s.call(a,h[g])}this._nonPointGroup.eachLayer(s,a)},getLayers:function(){var s=[];return this.eachLayer(function(a){s.push(a)}),s},getLayer:function(s){var a=null;return s=parseInt(s,10),this.eachLayer(function(h){L.stamp(h)===s&&(a=h)}),a},hasLayer:function(s){if(!s)return!1;var a,h=this._needsClustering;for(a=h.length-1;a>=0;a--)if(h[a]===s)return!0;for(h=this._needsRemoving,a=h.length-1;a>=0;a--)if(h[a].layer===s)return!1;return!!(s.__parent&&s.__parent._group===this)||this._nonPointGroup.hasLayer(s)},zoomToShowLayer:function(s,a){var h=this._map;typeof a!="function"&&(a=function(){});var l=function(){(h.hasLayer(s)||h.hasLayer(s.__parent))&&!this._inZoomAnimation&&(this._map.off("moveend",l,this),this.off("animationend",l,this),h.hasLayer(s)?a():s.__parent._icon&&(this.once("spiderfied",a,this),s.__parent.spiderfy()))};s._icon&&this._map.getBounds().contains(s.getLatLng())?a():s.__parent._zoom=0;h--)if(s[h]===a)return s.splice(h,1),!0},_removeFromGridUnclustered:function(s,a){for(var h=this._map,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom());a>=_&&l[a].removeObject(s,h.project(s.getLatLng(),a));a--);},_childMarkerDragStart:function(s){s.target.__dragStart=s.target._latlng},_childMarkerMoved:function(s){if(!this._ignoreMove&&!s.target.__dragStart){var a=s.target._popup&&s.target._popup.isOpen();this._moveChild(s.target,s.oldLatLng,s.latlng),a&&s.target.openPopup()}},_moveChild:function(s,a,h){s._latlng=a,this.removeLayer(s),s._latlng=h,this.addLayer(s)},_childMarkerDragEnd:function(s){var a=s.target.__dragStart;delete s.target.__dragStart,a&&this._moveChild(s.target,a,s.target._latlng)},_removeLayer:function(s,a,h){var l=this._gridClusters,_=this._gridUnclustered,g=this._featureGroup,d=this._map,v=Math.floor(this._map.getMinZoom());a&&this._removeFromGridUnclustered(s,this._maxZoom);var p=s.__parent,T=p._markers,C;for(this._arraySplice(T,s);p&&(p._childCount--,p._boundsNeedUpdate=!0,!(p._zoom"+a+"
",className:"marker-cluster"+h,iconSize:new L.Point(40,40)})},_bindEvents:function(){var s=this._map,a=this.options.spiderfyOnMaxZoom,h=this.options.showCoverageOnHover,l=this.options.zoomToBoundsOnClick,_=this.options.spiderfyOnEveryZoom;(a||l||_)&&this.on("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),h&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),s.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(s){var a=s.layer,h=a;if(!(s.type==="clusterkeypress"&&s.originalEvent&&s.originalEvent.keyCode!==13)){for(;h._childClusters.length===1;)h=h._childClusters[0];h._zoom===this._maxZoom&&h._childCount===a._childCount&&this.options.spiderfyOnMaxZoom?a.spiderfy():this.options.zoomToBoundsOnClick&&a.zoomToBounds(),this.options.spiderfyOnEveryZoom&&a.spiderfy(),s.originalEvent&&s.originalEvent.keyCode===13&&this._map._container.focus()}},_showCoverage:function(s){var a=this._map;this._inZoomAnimation||(this._shownPolygon&&a.removeLayer(this._shownPolygon),s.layer.getChildCount()>2&&s.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(s.layer.getConvexHull(),this.options.polygonOptions),a.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var s=this.options.spiderfyOnMaxZoom,a=this.options.showCoverageOnHover,h=this.options.zoomToBoundsOnClick,l=this.options.spiderfyOnEveryZoom,_=this._map;(s||h||l)&&this.off("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),a&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),_.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=Math.round(this._map._zoom),this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var s=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,s),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),s),this._currentShownBounds=s}},_generateInitialClusters:function(){var s=Math.ceil(this._map.getMaxZoom()),a=Math.floor(this._map.getMinZoom()),h=this.options.maxClusterRadius,l=h;typeof h!="function"&&(l=function(){return h}),this.options.disableClusteringAtZoom!==null&&(s=this.options.disableClusteringAtZoom-1),this._maxZoom=s,this._gridClusters={},this._gridUnclustered={};for(var _=s;_>=a;_--)this._gridClusters[_]=new L.DistanceGrid(l(_)),this._gridUnclustered[_]=new L.DistanceGrid(l(_));this._topClusterLevel=new this._markerCluster(this,a-1)},_addLayer:function(s,a){var h=this._gridClusters,l=this._gridUnclustered,_=Math.floor(this._map.getMinZoom()),g,d;for(this.options.singleMarkerMode&&this._overrideMarkerIcon(s),s.on(this._childMarkerEventHandlers,this);a>=_;a--){g=this._map.project(s.getLatLng(),a);var v=h[a].getNearObject(g);if(v){v._addChild(s),s.__parent=v;return}if(v=l[a].getNearObject(g),v){var p=v.__parent;p&&this._removeLayer(v,!1);var T=new this._markerCluster(this,a,v,s);h[a].addObject(T,this._map.project(T._cLatLng,a)),v.__parent=T,s.__parent=T;var C=T;for(d=a-1;d>p._zoom;d--)C=new this._markerCluster(this,d,C),h[d].addObject(C,this._map.project(v.getLatLng(),d));p._addChild(C),this._removeFromGridUnclustered(v,a);return}l[a].addObject(s,g)}this._topClusterLevel._addChild(s),s.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(s){s instanceof L.MarkerCluster&&s._iconNeedsUpdate&&s._updateIcon()})},_enqueue:function(s){this._queue.push(s),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var s=0;ss?(this._animationStart(),this._animationZoomOut(this._zoom,s)):this._moveEnd()},_getExpandedVisibleBounds:function(){if(this.options.removeOutsideVisibleBounds){if(L.Browser.mobile)return this._checkBoundsMaxLat(this._map.getBounds())}else return this._mapBoundsInfinite;return this._checkBoundsMaxLat(this._map.getBounds().pad(1))},_checkBoundsMaxLat:function(s){var a=this._maxLat;return a!==void 0&&(s.getNorth()>=a&&(s._northEast.lat=1/0),s.getSouth()<=-a&&(s._southWest.lat=-1/0)),s},_animationAddLayerNonAnimated:function(s,a){if(a===s)this._featureGroup.addLayer(s);else if(a._childCount===2){a._addToMap();var h=a.getAllChildMarkers();this._featureGroup.removeLayer(h[0]),this._featureGroup.removeLayer(h[1])}else a._updateIcon()},_extractNonGroupLayers:function(s,a){var h=s.getLayers(),l=0,_;for(a=a||[];l=0;g--)T=p[g],h.contains(T._latlng)||l.removeLayer(T)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(h,a),l.eachLayer(function(d){!(d instanceof L.MarkerCluster)&&d._icon&&d.clusterShow()}),this._topClusterLevel._recursively(h,s,a,function(d){d._recursivelyRestoreChildPositions(a)}),this._ignoreMove=!1,this._enqueue(function(){this._topClusterLevel._recursively(h,s,_,function(d){l.removeLayer(d),d.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(s,a){this._animationZoomOutSingle(this._topClusterLevel,s-1,a),this._topClusterLevel._recursivelyAddChildrenToMap(null,a,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),s,this._getExpandedVisibleBounds())},_animationAddLayer:function(s,a){var h=this,l=this._featureGroup;l.addLayer(s),a!==s&&(a._childCount>2?(a._updateIcon(),this._forceLayout(),this._animationStart(),s._setPos(this._map.latLngToLayerPoint(a.getLatLng())),s.clusterHide(),this._enqueue(function(){l.removeLayer(s),s.clusterShow(),h._animationEnd()})):(this._forceLayout(),h._animationStart(),h._animationZoomOutSingle(a,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(s,a,h){var l=this._getExpandedVisibleBounds(),_=Math.floor(this._map.getMinZoom());s._recursivelyAnimateChildrenInAndAddSelfToMap(l,_,a+1,h);var g=this;this._forceLayout(),s._recursivelyBecomeVisible(l,h),this._enqueue(function(){if(s._childCount===1){var d=s._markers[0];this._ignoreMove=!0,d.setLatLng(d.getLatLng()),this._ignoreMove=!1,d.clusterShow&&d.clusterShow()}else s._recursively(l,h,_,function(v){v._recursivelyRemoveChildrenFromMap(l,_,a+1)});g._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroup=function(s){return new L.MarkerClusterGroup(s)};var P=L.MarkerCluster=L.Marker.extend({options:L.Icon.prototype.options,initialize:function(s,a,h,l){L.Marker.prototype.initialize.call(this,h?h._cLatLng||h.getLatLng():new L.LatLng(0,0),{icon:this,pane:s.options.clusterPane}),this._group=s,this._zoom=a,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,h&&this._addChild(h),l&&this._addChild(l)},getAllChildMarkers:function(s,a){s=s||[];for(var h=this._childClusters.length-1;h>=0;h--)this._childClusters[h].getAllChildMarkers(s,a);for(var l=this._markers.length-1;l>=0;l--)a&&this._markers[l].__dragStart||s.push(this._markers[l]);return s},getChildCount:function(){return this._childCount},zoomToBounds:function(s){for(var a=this._childClusters.slice(),h=this._group._map,l=h.getBoundsZoom(this._bounds),_=this._zoom+1,g=h.getZoom(),d;a.length>0&&l>_;){_++;var v=[];for(d=0;d_?this._group._map.setView(this._latlng,_):l<=g?this._group._map.setView(this._latlng,g+1):this._group._map.fitBounds(this._bounds,s)},getBounds:function(){var s=new L.LatLngBounds;return s.extend(this._bounds),s},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(s,a){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(s),s instanceof L.MarkerCluster?(a||(this._childClusters.push(s),s.__parent=this),this._childCount+=s._childCount):(a||this._markers.push(s),this._childCount++),this.__parent&&this.__parent._addChild(s,!0)},_setClusterCenter:function(s){this._cLatLng||(this._cLatLng=s._cLatLng||s._latlng)},_resetBounds:function(){var s=this._bounds;s._southWest&&(s._southWest.lat=1/0,s._southWest.lng=1/0),s._northEast&&(s._northEast.lat=-1/0,s._northEast.lng=-1/0)},_recalculateBounds:function(){var s=this._markers,a=this._childClusters,h=0,l=0,_=this._childCount,g,d,v,p;if(_!==0){for(this._resetBounds(),g=0;g=0;g--)d=_[g],d._icon&&(d._setPos(a),d.clusterHide())},function(l){var _=l._childClusters,g,d;for(g=_.length-1;g>=0;g--)d=_[g],d._icon&&(d._setPos(a),d.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(s,a,h,l){this._recursively(s,l,a,function(_){_._recursivelyAnimateChildrenIn(s,_._group._map.latLngToLayerPoint(_.getLatLng()).round(),h),_._isSingleParent()&&h-1===l?(_.clusterShow(),_._recursivelyRemoveChildrenFromMap(s,a,h)):_.clusterHide(),_._addToMap()})},_recursivelyBecomeVisible:function(s,a){this._recursively(s,this._group._map.getMinZoom(),a,null,function(h){h.clusterShow()})},_recursivelyAddChildrenToMap:function(s,a,h){this._recursively(h,this._group._map.getMinZoom()-1,a,function(l){if(a!==l._zoom)for(var _=l._markers.length-1;_>=0;_--){var g=l._markers[_];h.contains(g._latlng)&&(s&&(g._backupLatlng=g.getLatLng(),g.setLatLng(s),g.clusterHide&&g.clusterHide()),l._group._featureGroup.addLayer(g))}},function(l){l._addToMap(s)})},_recursivelyRestoreChildPositions:function(s){for(var a=this._markers.length-1;a>=0;a--){var h=this._markers[a];h._backupLatlng&&(h.setLatLng(h._backupLatlng),delete h._backupLatlng)}if(s-1===this._zoom)for(var l=this._childClusters.length-1;l>=0;l--)this._childClusters[l]._restorePosition();else for(var _=this._childClusters.length-1;_>=0;_--)this._childClusters[_]._recursivelyRestoreChildPositions(s)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(s,a,h,l){var _,g;this._recursively(s,a-1,h-1,function(d){for(g=d._markers.length-1;g>=0;g--)_=d._markers[g],(!l||!l.contains(_._latlng))&&(d._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())},function(d){for(g=d._childClusters.length-1;g>=0;g--)_=d._childClusters[g],(!l||!l.contains(_._latlng))&&(d._group._featureGroup.removeLayer(_),_.clusterShow&&_.clusterShow())})},_recursively:function(s,a,h,l,_){var g=this._childClusters,d=this._zoom,v,p;if(a<=d&&(l&&l(this),_&&d===h&&_(this)),d=0;v--)p=g[v],p._boundsNeedUpdate&&p._recalculateBounds(),s.intersects(p._bounds)&&p._recursively(s,a,h,l,_)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}});L.Marker.include({clusterHide:function(){var s=this.options.opacity;return this.setOpacity(0),this.options.opacity=s,this},clusterShow:function(){return this.setOpacity(this.options.opacity)}}),L.DistanceGrid=function(s){this._cellSize=s,this._sqCellSize=s*s,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},d=g[h]=g[h]||[],v=L.Util.stamp(s);this._objectPoint[v]=a,d.push(s)},updateObject:function(s,a){this.removeObject(s),this.addObject(s,a)},removeObject:function(s,a){var h=this._getCoord(a.x),l=this._getCoord(a.y),_=this._grid,g=_[l]=_[l]||{},d=g[h]=g[h]||[],v,p;for(delete this._objectPoint[L.Util.stamp(s)],v=0,p=d.length;v=0;g--){if(d=a[g],v=this.getDistant(d,s),v>0)_.push(d);else continue;v>h&&(h=v,l=d)}return{maxPoint:l,newPoints:_}},buildConvexHull:function(s,a){var h=[],l=this.findMostDistantPointFromBaseLine(s,a);return l.maxPoint?(h=h.concat(this.buildConvexHull([s[0],l.maxPoint],l.newPoints)),h=h.concat(this.buildConvexHull([l.maxPoint,s[1]],l.newPoints)),h):[s[0]]},getConvexHull:function(s){var a=!1,h=!1,l=!1,_=!1,g=null,d=null,v=null,p=null,T=null,C=null,j;for(j=s.length-1;j>=0;j--){var O=s[j];(a===!1||O.lat>a)&&(g=O,a=O.lat),(h===!1||O.latl)&&(v=O,l=O.lng),(_===!1||O.lng<_)&&(p=O,_=O.lng)}h!==a?(C=d,T=g):(C=p,T=v);var R=[].concat(this.buildConvexHull([C,T],s),this.buildConvexHull([T,C],s));return R}}}(),L.MarkerCluster.include({getConvexHull:function(){var s=this.getAllChildMarkers(),a=[],h,l;for(l=s.length-1;l>=0;l--)h=s[l].getLatLng(),a.push(h);return L.QuickHull.getConvexHull(a)}}),L.MarkerCluster.include({_2PI:Math.PI*2,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(!(this._group._spiderfied===this||this._group._inZoomAnimation)){var s=this.getAllChildMarkers(null,!0),a=this._group,h=a._map,l=h.latLngToLayerPoint(this._latlng),_;this._group._unspiderfy(),this._group._spiderfied=this,this._group.options.spiderfyShapePositions?_=this._group.options.spiderfyShapePositions(s.length,l):s.length>=this._circleSpiralSwitchover?_=this._generatePointsSpiral(s.length,l):(l.y+=10,_=this._generatePointsCircle(s.length,l)),this._animationSpiderfy(s,_)}},unspiderfy:function(s){this._group._inZoomAnimation||(this._animationUnspiderfy(s),this._group._spiderfied=null)},_generatePointsCircle:function(s,a){var h=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+s),l=h/this._2PI,_=this._2PI/s,g=[],d,v;for(l=Math.max(l,35),g.length=s,d=0;d=0;p--)p=0;g--)_=l[g],h.removeLayer(_),_._preSpiderfyLatlng&&(_.setLatLng(_._preSpiderfyLatlng),delete _._preSpiderfyLatlng),_.setZIndexOffset&&_.setZIndexOffset(0),_._spiderLeg&&(a.removeLayer(_._spiderLeg),delete _._spiderLeg);s.fire("unspiderfied",{cluster:this,markers:l}),s._ignoreMove=!1,s._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(s,a){var h=this._group,l=h._map,_=h._featureGroup,g=this._group.options.spiderLegPolylineOptions,d,v,p,T;for(h._ignoreMove=!0,d=0;d=0;j--)W=_.layerPointToLatLng(a[j]),O=s[j],O._preSpiderfyLatlng=O._latlng,O.setLatLng(W),O.clusterShow&&O.clusterShow(),p&&(R=O._spiderLeg,H=R._path,H.style.strokeDashoffset=0,R.setStyle({opacity:C}));this.setOpacity(.3),l._ignoreMove=!1,setTimeout(function(){l._animationEnd(),l.fire("spiderfied",{cluster:h,markers:s})},200)},_animationUnspiderfy:function(s){var a=this,h=this._group,l=h._map,_=h._featureGroup,g=s?l._latLngToNewLayerPoint(this._latlng,s.zoom,s.center):l.latLngToLayerPoint(this._latlng),d=this.getAllChildMarkers(null,!0),v=L.Path.SVG,p,T,C,j,O,R;for(h._ignoreMove=!0,h._animationStart(),this.setOpacity(1),T=d.length-1;T>=0;T--)p=d[T],p._preSpiderfyLatlng&&(p.closePopup(),p.setLatLng(p._preSpiderfyLatlng),delete p._preSpiderfyLatlng,R=!0,p._setPos&&(p._setPos(g),R=!1),p.clusterHide&&(p.clusterHide(),R=!1),R&&_.removeLayer(p),v&&(C=p._spiderLeg,j=C._path,O=j.getTotalLength()+.1,j.style.strokeDashoffset=O,C.setStyle({opacity:0})));h._ignoreMove=!1,setTimeout(function(){var H=0;for(T=d.length-1;T>=0;T--)p=d[T],p._spiderLeg&&H++;for(T=d.length-1;T>=0;T--)p=d[T],p._spiderLeg&&(p.clusterShow&&p.clusterShow(),p.setZIndexOffset&&p.setZIndexOffset(0),H>1&&_.removeLayer(p),l.removeLayer(p._spiderLeg),delete p._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:d})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(s){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(s))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(s){this._spiderfied&&this._spiderfied.unspiderfy(s)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(s){s._spiderLeg&&(this._featureGroup.removeLayer(s),s.clusterShow&&s.clusterShow(),s.setZIndexOffset&&s.setZIndexOffset(0),this._map.removeLayer(s._spiderLeg),delete s._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(s){return s?s instanceof L.MarkerClusterGroup?s=s._topClusterLevel.getAllChildMarkers():s instanceof L.LayerGroup?s=s._layers:s instanceof L.MarkerCluster?s=s.getAllChildMarkers():s instanceof L.Marker&&(s=[s]):s=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(s),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(s),this},_flagParentsIconsNeedUpdate:function(s){var a,h;for(a in s)for(h=s[a].__parent;h;)h._iconNeedsUpdate=!0,h=h.__parent},_refreshSingleMarkerModeMarkers:function(s){var a,h;for(a in s)h=s[a],this.hasLayer(h)&&h.setIcon(this._overrideMarkerIcon(h))}}),L.Marker.include({refreshIconOptions:function(s,a){var h=this.options.icon;return L.setOptions(h,s),this.setIcon(h),a&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),f.MarkerClusterGroup=b,f.MarkerCluster=P,Object.defineProperty(f,"__esModule",{value:!0})})}(le,le.exports)),le.exports}Ns();const kn={healthy:"#10b981",warning:"#f59e0b",critical:"#ef4444"},En={healthy:"background: #d1fae5; color: #065f46;",warning:"background: #fef3c7; color: #92400e;",critical:"background: #fee2e2; color: #991b1b;"},ci={small:{dimension:"30px",fontSize:"12px",threshold:0},medium:{dimension:"40px",fontSize:"14px",threshold:10},large:{dimension:"50px",fontSize:"16px",threshold:50}},Rs={size:20,emoji:"🌳",className:"custom-tree-marker"},Ds={backgroundColor:"#10b981",className:"custom-cluster-icon",iconSize:[30,30]},On=(x="healthy")=>{const w=kn[x]||kn.healthy,{size:f,emoji:b,className:P}=Rs;return St.divIcon({className:P,html:Fs(w,f,b),iconSize:[f,f],iconAnchor:[f/2,f/2]})},Fs=(x,w,f)=>` -
- ${f} -
-`,Hs=x=>{const w=js(x),{dimension:f,fontSize:b}=ci[w],{backgroundColor:P,className:s,iconSize:a}=Ds;return St.divIcon({html:Gs(P,f,b,x),className:s,iconSize:a})},js=x=>x>ci.large.threshold?"large":x>ci.medium.threshold?"medium":"small",Gs=(x,w,f,b)=>` -
${b}
-`,zn=x=>{const w=En[x.health]||En.healthy;return Ws(x,w)},Ws=(x,w)=>` -
-

${x.name}

-

Species: ${x.species}

-

Height: ${x.height}m

-

Health: - ${x.health} -

-
-`,Us=({trees:x,onTreeClick:w,zoom:f})=>{const b=fi();return z.useEffect(()=>{if(!(!b||!x.length)){if(b.eachLayer(P=>{P instanceof St.MarkerClusterGroup&&b.removeLayer(P)}),f<12){const P=St.markerClusterGroup({chunkedLoading:!0,spiderfyOnMaxZoom:!0,showCoverageOnHover:!1,zoomToBoundsOnClick:!0,maxClusterRadius:50,iconCreateFunction:s=>{const a=s.getChildCount();return Hs(a)}});x.forEach(s=>{const a=St.marker([s.lat,s.lng],{icon:On(s.health)});a.bindPopup(zn(s)),a.on("click",()=>w(s)),P.addLayer(a)}),b.addLayer(P)}else x.forEach(P=>{const s=St.marker([P.lat,P.lng],{icon:On(P.health)});s.bindPopup(zn(P)),s.on("click",()=>w(P)),s.addTo(b)});return()=>{b.eachLayer(P=>{P instanceof St.MarkerClusterGroup&&b.removeLayer(P)})}}},[b,x,w,f]),null},Vs=({onMapReady:x,onMapError:w})=>{const f=fi();return z.useEffect(()=>{const b=()=>{x&&x()},P=s=>{console.error("Map error:",s),w&&w(s)};return f.whenReady(()=>{b()}),f.on("tileerror",P),()=>{f.off("tileerror",P)}},[f,x,w]),null},qs=({onZoomChange:x})=>{const w=fi();return z.useEffect(()=>{const f=()=>{x&&x(w.getZoom())};return w.on("zoomend",f),()=>{w.off("zoomend",f)}},[w]),null},Ks=zt.div` - height: 600px; - width: 100%; - border-radius: 0.75rem; - overflow: hidden; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - border: 1px solid #e5e7eb; - position: relative; -`,Ys=zt.div` - background: white; - padding: 1rem 1.5rem; - border-bottom: 1px solid #e5e7eb; - display: flex; - justify-content: space-between; - align-items: center; -`,Xs=zt.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0; -`,$s=zt.div` - display: flex; - gap: 0.5rem; -`,Zn=zt.button` - padding: 0.5rem; - background: white; - border: 1px solid #d1d5db; - border-radius: 0.375rem; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background: #f9fafb; - border-color: #9ca3af; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`,Js=zt.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.9); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - border-radius: 0.75rem; -`,Qs=zt.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(255, 255, 255, 0.95); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - border-radius: 0.75rem; -`,tr=zt.div` - text-align: center; - padding: 2rem; - max-width: 300px; -`;delete St.Icon.Default.prototype._getIconUrl;St.Icon.Default.mergeOptions({iconRetinaUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png",iconUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png",shadowUrl:"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png"});const er=({trees:x=[],onTreeSelect:w,filters:f={},loading:b=!1,error:P=null})=>{const[s,a]=z.useState(13),[h,l]=z.useState(null),[_,g]=z.useState(!0),[d,v]=z.useState(null),p=x,T=z.useCallback(W=>{l(W),w&&w(W)},[w]),C=z.useCallback(W=>{a(W)},[]),j=z.useCallback(()=>{g(!1),v(null)},[]),O=z.useCallback(W=>{g(!1),v((W==null?void 0:W.message)||"Failed to load map")},[]),R=z.useCallback(()=>{g(!0),v(null),setTimeout(()=>{g(!1)},1e3)},[]),H=z.useCallback(()=>{if(p.length===0)return;const W=p.reduce((pt,xt)=>pt+xt.lat,0),st=p.reduce((pt,xt)=>pt+xt.lng,0),tt=W/p.length,Zt=st/p.length;console.log("Center map at:",tt,Zt)},[p]),X=z.useCallback(()=>{if(p.length===0)return;const W=p.reduce((st,tt)=>({minLat:Math.min(st.minLat,tt.lat),maxLat:Math.max(st.maxLat,tt.lat),minLng:Math.min(st.minLng,tt.lng),maxLng:Math.max(st.maxLng,tt.lng)}),{minLat:p[0].lat,maxLat:p[0].lat,minLng:p[0].lng,maxLng:p[0].lng});console.log("Fit bounds:",W)},[p]);return S.jsxs("div",{children:[S.jsxs(Ys,{children:[S.jsx(Xs,{children:"Forest Map"}),S.jsxs($s,{children:[S.jsx(Zn,{onClick:H,title:"Center Map",children:S.jsxs("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]})}),S.jsx(Zn,{onClick:X,title:"Fit to Bounds",children:S.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"})})})]})]}),S.jsxs(Ks,{children:[S.jsxs(Is,{center:[59.3293,18.0686],zoom:13,style:{height:"100%",width:"100%"},children:[S.jsx(Bs,{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",attribution:'© OpenStreetMap contributors'}),S.jsx(Vs,{onMapReady:j,onMapError:O}),S.jsx(qs,{onZoomChange:C}),S.jsx(Us,{trees:p,onTreeClick:T,zoom:s})]}),(_||b)&&S.jsx(Js,{children:S.jsxs("div",{className:"text-center",children:[S.jsx(In,{}),S.jsx("p",{className:"mt-2 text-sm text-gray-600",children:"Loading map..."})]})}),(d||P)&&S.jsx(Qs,{children:S.jsxs(tr,{children:[S.jsx("svg",{className:"w-12 h-12 text-red-500 mx-auto mb-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:S.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),S.jsx("h4",{className:"text-lg font-semibold text-gray-900 mb-2",children:"Map Error"}),S.jsx("p",{className:"text-sm text-gray-600 mb-4",children:d||P}),S.jsx("button",{onClick:R,className:"px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors text-sm",children:"Retry"})]})})]}),S.jsxs("div",{className:"mt-4 p-4 bg-white rounded-lg border border-gray-200",children:[S.jsx("h4",{className:"font-medium text-gray-900 mb-2",children:"Legend"}),S.jsxs("div",{className:"flex flex-wrap gap-4 text-sm",children:[S.jsxs("div",{className:"flex items-center",children:[S.jsx("div",{className:"w-4 h-4 bg-green-500 rounded-full mr-2"}),S.jsx("span",{children:"Healthy Trees"})]}),S.jsxs("div",{className:"flex items-center",children:[S.jsx("div",{className:"w-4 h-4 bg-yellow-500 rounded-full mr-2"}),S.jsx("span",{children:"Warning"})]}),S.jsxs("div",{className:"flex items-center",children:[S.jsx("div",{className:"w-4 h-4 bg-red-500 rounded-full mr-2"}),S.jsx("span",{children:"Critical"})]}),S.jsx("div",{className:"flex items-center text-gray-500",children:S.jsxs("span",{children:["Showing ",p.length," of ",x.length," trees"]})}),S.jsxs("div",{className:"flex items-center text-gray-500",children:[S.jsxs("span",{children:["Zoom level: ",s]}),s<12&&S.jsx("span",{className:"ml-4 text-xs",children:"(Clustering enabled)"})]})]})]})]})},ir=()=>{const[x,w]=z.useState({}),f=z.useCallback(P=>{w(P),console.log("Map filters changed:",P)},[]),b=z.useCallback(()=>{w({})},[]);return{filters:x,handleFiltersChange:f,resetFilters:b}},nr=()=>{const[x,w]=z.useState(null),[f,b]=z.useState(!1),P=z.useCallback(h=>{w(h),b(!0)},[]),s=z.useCallback(()=>{w(null),b(!1)},[]),a=z.useCallback(()=>{w(null),b(!1)},[]);return{selectedTree:x,isModalOpen:f,handleTreeSelect:P,handleCloseTreeDetail:s,clearSelection:a}},fr=()=>{const{sidebarOpen:x,toggleSidebar:w,closeSidebar:f}=ds(),{filters:b,handleFiltersChange:P}=ir(),{selectedTree:s,isModalOpen:a,handleTreeSelect:h,handleCloseTreeDetail:l}=nr(),[_,g]=z.useState([]),[d,v]=z.useState(!0),[p,T]=z.useState(null);z.useEffect(()=>{(async()=>{v(!0),T(null);try{const H={};b.selectedForests&&b.selectedForests.length>0&&(H.forestIds=b.selectedForests.join(",")),b.dateRange&&(H.startDate=b.dateRange.startDate.toISOString(),H.endDate=b.dateRange.endDate.toISOString());const X=await ps.getAll(H);let W=[];X.data&&Array.isArray(X.data.trees)?W=X.data.trees:X.data&&Array.isArray(X.data)?W=X.data:Array.isArray(X)&&(W=X);const st=W.map(tt=>{var Zt,pt,xt,it;return{...tt,lat:((pt=(Zt=tt.location)==null?void 0:Zt.coordinates)==null?void 0:pt[1])||tt.lat||59.3293,lng:((it=(xt=tt.location)==null?void 0:xt.coordinates)==null?void 0:it[0])||tt.lng||18.0686,name:tt.treeId||tt.name||`Tree ${tt._id}`,health:tt.health||"healthy"}});g(st)}catch(H){console.error("Failed to fetch trees:",H),T(H.message||"Failed to load trees"),g([])}finally{v(!1)}})()},[b]);const C=z.useCallback(()=>{console.log("Export started")},[]),j=z.useCallback(R=>{console.log(`Export completed: ${R}`)},[]),O=z.useCallback(R=>{console.error("Export error:",R)},[]);return S.jsxs("div",{className:"min-h-screen bg-gray-50 dark:bg-gray-900 flex flex-col",children:[S.jsx(fs,{onToggleSidebar:w}),S.jsxs("div",{className:"flex flex-1 lg:flex-row",children:[S.jsx(_s,{isOpen:x,onClose:f}),S.jsx("main",{className:"flex-1 p-4 md:p-6 lg:p-8",children:S.jsxs("div",{className:"max-w-7xl mx-auto",children:[S.jsx("div",{className:"mb-8",children:S.jsxs("div",{className:"flex justify-between items-center mb-4",children:[S.jsxs("div",{children:[S.jsx("h2",{className:"text-3xl font-bold text-gray-900 dark:text-white mb-2",children:"Forest Map"}),S.jsx("p",{className:"text-gray-600 dark:text-gray-300",children:"Explore your forests and individual trees with interactive mapping."})]}),S.jsx("div",{className:"flex items-center space-x-4",children:S.jsx(gs,{filters:b,onExportStart:C,onExportComplete:j,onExportError:O})})]})}),S.jsx(ms,{onFiltersChange:P}),S.jsx(vs,{tree:s,isOpen:a,onClose:l}),d?S.jsx("div",{className:"flex justify-center items-center h-96 bg-white dark:bg-gray-800 rounded-lg shadow",children:S.jsx(In,{text:"Loading trees..."})}):S.jsx(er,{trees:_,onTreeSelect:h,filters:b,loading:d,error:p})]})})]})]})};export{fr as MapPage}; diff --git a/frontend/dist/assets/MapSidebar-jstr5dKK.js b/frontend/dist/assets/MapSidebar-DVta1WHd.js similarity index 98% rename from frontend/dist/assets/MapSidebar-jstr5dKK.js rename to frontend/dist/assets/MapSidebar-DVta1WHd.js index defd99d9ac..7ce0a17e10 100644 --- a/frontend/dist/assets/MapSidebar-jstr5dKK.js +++ b/frontend/dist/assets/MapSidebar-DVta1WHd.js @@ -1,4 +1,4 @@ -import{R as w,j as e,o as v,d as r,L as C,p as L}from"./index-CGkKx7Xv.js";import{H as k}from"./TreeDetailModal-DPmuOlrX.js";const I=w.forwardRef(({loading:o,loadingText:n="Loading...",children:i,...m},g)=>e.jsx(v,{ref:g,loading:o,...m,children:o?n:i}));I.displayName="LoadingButton";const T=({className:o="",...n})=>e.jsx("svg",{className:o,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...n,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 12H5M12 19l-7-7 7-7"})}),y=r.header` +import{f as w,j as e,o as v,d as r,L as C,p as L}from"./index-Cp0G27Fl.js";import{H as k}from"./TreeDetailModal-CdyalJyV.js";const I=w.forwardRef(({loading:o,loadingText:n="Loading...",children:i,...m},g)=>e.jsx(v,{ref:g,loading:o,...m,children:o?n:i}));I.displayName="LoadingButton";const T=({className:o="",...n})=>e.jsx("svg",{className:o,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...n,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 12H5M12 19l-7-7 7-7"})}),y=r.header` background: white; border-bottom: 1px solid #e5e7eb; padding: 1rem 0; diff --git a/frontend/dist/assets/Modal-BNFLubTG.js b/frontend/dist/assets/Modal-BNFLubTG.js new file mode 100644 index 0000000000..6fdb8dc1b6 --- /dev/null +++ b/frontend/dist/assets/Modal-BNFLubTG.js @@ -0,0 +1,123 @@ +import{d as e,j as a}from"./index-Cp0G27Fl.js";const r=()=>{const o=document.documentElement.classList.contains("dark");return{containerBg:o?"#1f2937":"#ffffff",containerBorder:o?"#374151":"#e5e7eb",containerShadow:o?"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)":"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",headerBg:o?"#374151":"#f9fafb",headerBorder:o?"#4b5563":"#e5e7eb",headerText:o?"#f9fafb":"#111827",cellText:o?"#e5e7eb":"#111827",cellBorder:o?"#4b5563":"#f3f4f6",cellHover:o?"#374151":"#f9fafb",cellHeaderText:o?"#d1d5db":"#374151",cellHeaderHover:o?"#4b5563":"#f3f4f6",mutedText:o?"#9ca3af":"#6b7280",sortIcon:o?"#6b7280":"#9ca3af"}},u=e.div` + background: ${()=>r().containerBg}; + border-radius: 0.75rem; + box-shadow: ${()=>r().containerShadow}; + border: 1px solid ${()=>r().containerBorder}; + overflow: hidden; + transition: background-color 0.2s ease, border-color 0.2s ease; +`,k=e.div` + background: ${()=>r().headerBg}; + padding: 1.5rem; + border-bottom: 1px solid ${()=>r().headerBorder}; + display: flex; + justify-content: space-between; + align-items: center; + transition: background-color 0.2s ease, border-color 0.2s ease; +`,v=e.h3` + font-size: 1.125rem; + font-weight: 600; + color: ${()=>r().headerText}; + margin: 0; + transition: color 0.2s ease; +`,T=e.table` + width: 100%; + border-collapse: collapse; +`,w=e.thead` + background: ${()=>r().headerBg}; + border-bottom: 1px solid ${()=>r().headerBorder}; + transition: background-color 0.2s ease, border-color 0.2s ease; +`,j=e.tr` + border-bottom: 1px solid ${()=>r().cellBorder}; + transition: background-color 0.2s ease, border-color 0.2s ease; + + &:hover { + background: ${()=>r().cellHover}; + } + + &:last-child { + border-bottom: none; + } +`,B=e.th` + padding: 0.75rem 1rem; + text-align: left; + font-size: 0.875rem; + font-weight: 600; + color: ${()=>r().cellHeaderText}; + cursor: pointer; + user-select: none; + transition: background-color 0.2s ease, color 0.2s ease; + + &:hover { + background: ${()=>r().cellHeaderHover}; + } +`,$=e.td` + padding: 0.75rem 1rem; + font-size: 0.875rem; + color: ${()=>r().cellText}; + vertical-align: top; + transition: color 0.2s ease; +`,y=e.div` + text-align: center; + padding: 3rem; + color: ${()=>r().mutedText}; + transition: color 0.2s ease; +`,H=e.span` + margin-left: 0.5rem; + font-size: 0.75rem; + color: ${()=>r().sortIcon}; + transition: color 0.2s ease; +`,c=e.div` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + padding: 1rem; +`,b=e.div` + background: white; + border-radius: 0.75rem; + max-width: 800px; + width: 100%; + max-height: 90vh; + overflow-y: auto; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + position: relative; +`,f=e.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 1.5rem; + border-bottom: 1px solid #e5e7eb; + background: #f9fafb; + border-radius: 0.75rem 0.75rem 0 0; +`,g=e.h2` + font-size: 1.5rem; + font-weight: 700; + color: #111827; + margin: 0; +`,x=e.button` + padding: 0.5rem; + background: transparent; + border: none; + border-radius: 0.375rem; + cursor: pointer; + color: #6b7280; + transition: all 0.2s; + + &:hover { + background: #f3f4f6; + color: #111827; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,m=e.div` + padding: 1.5rem; +`,p=()=>a.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),C=({isOpen:o,onClose:t,title:s,children:d,containerRef:l})=>{const i=n=>{n.target===n.currentTarget&&t()};return o?a.jsx(c,{onClick:i,children:a.jsxs(b,{ref:l,role:"dialog","aria-modal":"true","aria-labelledby":"modal-title",children:[a.jsxs(f,{children:[a.jsx(g,{id:"modal-title",children:s}),a.jsx(x,{onClick:t,"aria-label":"Close modal",children:a.jsx(p,{})})]}),a.jsx(m,{children:d})]})}):null};export{y as E,C as M,H as S,T,w as a,j as b,B as c,$ as d,u as e,k as f,v as g}; diff --git a/frontend/dist/assets/Navbar-BSLKvp05.js b/frontend/dist/assets/Navbar-N3bkUWQJ.js similarity index 90% rename from frontend/dist/assets/Navbar-BSLKvp05.js rename to frontend/dist/assets/Navbar-N3bkUWQJ.js index fc0b52cc5e..2f3fc47dc3 100644 --- a/frontend/dist/assets/Navbar-BSLKvp05.js +++ b/frontend/dist/assets/Navbar-N3bkUWQJ.js @@ -1 +1 @@ -import{j as e,L as o,r as n}from"./index-CGkKx7Xv.js";import{u as g}from"./useKeyboardNavigation-Bh0nMcUg.js";import{D as l}from"./DarkModeToggle-Cu0JyOh5.js";import{I as m}from"./IconButton-vDjz_WRZ.js";const h=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})}),f=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),p=({className:r=""})=>e.jsx(o,{to:"/",className:`text-2xl font-extrabold text-green-600 dark:text-green-400 tracking-tight ${r}`,children:"Nanwa"}),c=()=>{const r="text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 transition-colors px-4 py-2 text-base font-medium";return e.jsxs(e.Fragment,{children:[e.jsx("a",{href:"#features",className:r,children:"Features"}),e.jsx("a",{href:"#about",className:r,children:"About"}),e.jsx(o,{to:"/login",className:r,children:"Login"}),e.jsx(o,{to:"/register",className:"ml-2 bg-green-600 dark:bg-green-500 text-white px-4 py-2 rounded-lg hover:bg-green-700 dark:hover:bg-green-600 transition-colors text-base font-medium",children:"Get Started"})]})},j=({isOpen:r})=>r?e.jsx("div",{className:"md:hidden border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-4 pb-4 space-y-1",children:e.jsx(c,{})}):null,N=()=>{const[r,t]=n.useState(!1),a=n.useRef(null),{containerRef:x,focusFirst:i}=g({onEscape:()=>t(!1),trapFocus:r,autoFocus:!1}),d=()=>{t(!r)};n.useEffect(()=>{setTimeout(r?()=>{i()}:()=>{var s;(s=a.current)==null||s.focus()},100)},[r,i]);const u=s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d())};return e.jsxs("nav",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm border-b border-gray-200 dark:border-gray-700",children:[e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center h-16",children:[e.jsx(p,{}),e.jsxs("div",{className:"hidden md:flex items-center gap-4",children:[e.jsx(c,{}),e.jsx(l,{size:"sm"})]}),e.jsxs("div",{className:"md:hidden flex items-center gap-2",children:[e.jsx(l,{size:"sm"}),e.jsx(m,{ref:a,"aria-label":"Toggle menu",className:"text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400",onClick:d,onKeyDown:u,children:r?e.jsx(f,{className:"h-6 w-6"}):e.jsx(h,{className:"h-6 w-6"})})]})]})}),e.jsx("div",{ref:x,children:e.jsx(j,{isOpen:r})})]})};export{N}; +import{j as e,L as o,r as n}from"./index-Cp0G27Fl.js";import{u as g}from"./useKeyboardNavigation-BEEMcJj7.js";import{D as l}from"./DarkModeToggle-DYOgA8sV.js";import{I as m}from"./IconButton-Cy_suQAe.js";const h=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})}),f=({className:r="",...t})=>e.jsx("svg",{className:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","aria-hidden":"true",...t,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),p=({className:r=""})=>e.jsx(o,{to:"/",className:`text-2xl font-extrabold text-green-600 dark:text-green-400 tracking-tight ${r}`,children:"Nanwa"}),c=()=>{const r="text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 transition-colors px-4 py-2 text-base font-medium";return e.jsxs(e.Fragment,{children:[e.jsx("a",{href:"#features",className:r,children:"Features"}),e.jsx("a",{href:"#about",className:r,children:"About"}),e.jsx(o,{to:"/login",className:r,children:"Login"}),e.jsx(o,{to:"/register",className:"ml-2 bg-green-600 dark:bg-green-500 text-white px-4 py-2 rounded-lg hover:bg-green-700 dark:hover:bg-green-600 transition-colors text-base font-medium",children:"Get Started"})]})},j=({isOpen:r})=>r?e.jsx("div",{className:"md:hidden border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-4 pb-4 space-y-1",children:e.jsx(c,{})}):null,N=()=>{const[r,t]=n.useState(!1),a=n.useRef(null),{containerRef:x,focusFirst:i}=g({onEscape:()=>t(!1),trapFocus:r,autoFocus:!1}),d=()=>{t(!r)};n.useEffect(()=>{setTimeout(r?()=>{i()}:()=>{var s;(s=a.current)==null||s.focus()},100)},[r,i]);const u=s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),d())};return e.jsxs("nav",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm border-b border-gray-200 dark:border-gray-700",children:[e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:e.jsxs("div",{className:"flex justify-between items-center h-16",children:[e.jsx(p,{}),e.jsxs("div",{className:"hidden md:flex items-center gap-4",children:[e.jsx(c,{}),e.jsx(l,{size:"sm"})]}),e.jsxs("div",{className:"md:hidden flex items-center gap-2",children:[e.jsx(l,{size:"sm"}),e.jsx(m,{ref:a,"aria-label":"Toggle menu",className:"text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400",onClick:d,onKeyDown:u,children:r?e.jsx(f,{className:"h-6 w-6"}):e.jsx(h,{className:"h-6 w-6"})})]})]})}),e.jsx("div",{ref:x,children:e.jsx(j,{isOpen:r})})]})};export{N}; diff --git a/frontend/dist/assets/PasswordInput-Bff6SLQJ.js b/frontend/dist/assets/PasswordInput-Bff6SLQJ.js deleted file mode 100644 index 9b0c07f501..0000000000 --- a/frontend/dist/assets/PasswordInput-Bff6SLQJ.js +++ /dev/null @@ -1 +0,0 @@ -import{j as e,r as u}from"./index-CGkKx7Xv.js";const j=({label:r,id:s,error:t,required:a=!1,children:n,className:d=""})=>e.jsxs("div",{className:d,children:[e.jsxs("label",{htmlFor:s,className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[r,a&&e.jsx("span",{className:"text-red-500 ml-1",children:"*"})]}),n,t&&e.jsx("p",{id:`${s}-error`,className:"mt-1 text-sm text-red-600 dark:text-red-400",children:t})]}),y=({id:r,name:s,value:t,onChange:a,onBlur:n,className:d="",placeholder:c="",disabled:i=!1,error:l="",...x})=>{const[o,p]=u.useState(!1),h=()=>{p(!o)};return e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:o?"text":"password",id:r,name:s,value:t,onChange:a,onBlur:n,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${l?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"} ${d}`,placeholder:c,disabled:i,"aria-describedby":l?`${r}-error`:void 0,...x}),e.jsx("button",{type:"button",onClick:h,className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:i,"aria-label":o?"Hide password":"Show password",children:o?e.jsx(g,{className:"h-5 w-5 text-gray-400"}):e.jsx(m,{className:"h-5 w-5 text-gray-400"})})]})},m=({className:r})=>e.jsxs("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]}),g=({className:r})=>e.jsx("svg",{className:r,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})});export{j as F,y as P}; diff --git a/frontend/dist/assets/PasswordInput-C1THfjeW.js b/frontend/dist/assets/PasswordInput-C1THfjeW.js new file mode 100644 index 0000000000..1f8cb510ef --- /dev/null +++ b/frontend/dist/assets/PasswordInput-C1THfjeW.js @@ -0,0 +1 @@ +import{r as h,j as r}from"./index-Cp0G27Fl.js";const y=({id:e,name:a,value:n,onChange:d,onBlur:i,className:c="",placeholder:l="",disabled:o=!1,error:t="",...p})=>{const[s,u]=h.useState(!1),x=()=>{u(!s)};return r.jsxs("div",{className:"relative",children:[r.jsx("input",{type:s?"text":"password",id:e,name:a,value:n,onChange:d,onBlur:i,className:`w-full px-3 py-2 pr-10 border rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 ${t?"border-red-300 dark:border-red-600":"border-gray-300 dark:border-gray-600"} ${c}`,placeholder:l,disabled:o,"aria-describedby":t?`${e}-error`:void 0,...p}),r.jsx("button",{type:"button",onClick:x,className:"absolute inset-y-0 right-0 pr-3 flex items-center",disabled:o,"aria-label":s?"Hide password":"Show password",children:s?r.jsx(k,{className:"h-5 w-5 text-gray-400"}):r.jsx(g,{className:"h-5 w-5 text-gray-400"})})]})},g=({className:e})=>r.jsxs("svg",{className:e,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}),r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"})]}),k=({className:e})=>r.jsx("svg",{className:e,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"})});export{y as P}; diff --git a/frontend/dist/assets/RegisterPage-Cf4V_AZ4.js b/frontend/dist/assets/RegisterPage-Cf-sXby2.js similarity index 95% rename from frontend/dist/assets/RegisterPage-Cf4V_AZ4.js rename to frontend/dist/assets/RegisterPage-Cf-sXby2.js index 58da583572..9665336810 100644 --- a/frontend/dist/assets/RegisterPage-Cf4V_AZ4.js +++ b/frontend/dist/assets/RegisterPage-Cf-sXby2.js @@ -1,4 +1,4 @@ -import{j as r,d as c,r as l,u as b,L as x}from"./index-CGkKx7Xv.js";import{F as u,P as h}from"./PasswordInput-Bff6SLQJ.js";import"./vendor-BtP0CW_r.js";const j=c.div` +import{j as r,d as c,r as l,u as b,L as x}from"./index-Cp0G27Fl.js";import{F as u}from"./FormField-BLwCJzgw.js";import{P as h}from"./PasswordInput-C1THfjeW.js";import"./vendor-BtP0CW_r.js";const j=c.div` width: 100%; height: 4px; background-color: #e5e7eb; @@ -24,4 +24,4 @@ import{j as r,d as c,r as l,u as b,L as x}from"./index-CGkKx7Xv.js";import{F as padding: 2rem; width: 100%; max-width: 450px; -`,M=()=>r.jsx(E,{children:r.jsxs(R,{children:[r.jsx(q,{}),r.jsx(k,{})]})}),q=()=>r.jsxs("div",{className:"text-center mb-8",children:[r.jsx(x,{to:"/",className:"inline-block mb-6",children:r.jsx("h1",{className:"text-3xl font-bold text-green-600",children:"Nanwa"})}),r.jsx("h2",{className:"text-2xl font-bold text-gray-900 mb-2",children:"Create your account"}),r.jsx("p",{className:"text-gray-600",children:"Join Nanwa to start monitoring your trees"})]});export{M as RegisterPage}; +`,T=()=>r.jsx(E,{children:r.jsxs(R,{children:[r.jsx(q,{}),r.jsx(k,{})]})}),q=()=>r.jsxs("div",{className:"text-center mb-8",children:[r.jsx(x,{to:"/",className:"inline-block mb-6",children:r.jsx("h1",{className:"text-3xl font-bold text-green-600",children:"Nanwa"})}),r.jsx("h2",{className:"text-2xl font-bold text-gray-900 mb-2",children:"Create your account"}),r.jsx("p",{className:"text-gray-600",children:"Join Nanwa to start monitoring your trees"})]});export{T as RegisterPage}; diff --git a/frontend/dist/assets/Table-CfKObwuM.js b/frontend/dist/assets/Table-CfKObwuM.js deleted file mode 100644 index 85bb5cd523..0000000000 --- a/frontend/dist/assets/Table-CfKObwuM.js +++ /dev/null @@ -1,69 +0,0 @@ -import{d as r}from"./index-CGkKx7Xv.js";const e=()=>{const o=document.documentElement.classList.contains("dark");return{containerBg:o?"#1f2937":"#ffffff",containerBorder:o?"#374151":"#e5e7eb",containerShadow:o?"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)":"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",headerBg:o?"#374151":"#f9fafb",headerBorder:o?"#4b5563":"#e5e7eb",headerText:o?"#f9fafb":"#111827",cellText:o?"#e5e7eb":"#111827",cellBorder:o?"#4b5563":"#f3f4f6",cellHover:o?"#374151":"#f9fafb",cellHeaderText:o?"#d1d5db":"#374151",cellHeaderHover:o?"#4b5563":"#f3f4f6",mutedText:o?"#9ca3af":"#6b7280",sortIcon:o?"#6b7280":"#9ca3af"}},t=r.div` - background: ${()=>e().containerBg}; - border-radius: 0.75rem; - box-shadow: ${()=>e().containerShadow}; - border: 1px solid ${()=>e().containerBorder}; - overflow: hidden; - transition: background-color 0.2s ease, border-color 0.2s ease; -`,n=r.div` - background: ${()=>e().headerBg}; - padding: 1.5rem; - border-bottom: 1px solid ${()=>e().headerBorder}; - display: flex; - justify-content: space-between; - align-items: center; - transition: background-color 0.2s ease, border-color 0.2s ease; -`,s=r.h3` - font-size: 1.125rem; - font-weight: 600; - color: ${()=>e().headerText}; - margin: 0; - transition: color 0.2s ease; -`,d=r.table` - width: 100%; - border-collapse: collapse; -`,c=r.thead` - background: ${()=>e().headerBg}; - border-bottom: 1px solid ${()=>e().headerBorder}; - transition: background-color 0.2s ease, border-color 0.2s ease; -`,l=r.tr` - border-bottom: 1px solid ${()=>e().cellBorder}; - transition: background-color 0.2s ease, border-color 0.2s ease; - - &:hover { - background: ${()=>e().cellHover}; - } - - &:last-child { - border-bottom: none; - } -`,i=r.th` - padding: 0.75rem 1rem; - text-align: left; - font-size: 0.875rem; - font-weight: 600; - color: ${()=>e().cellHeaderText}; - cursor: pointer; - user-select: none; - transition: background-color 0.2s ease, color 0.2s ease; - - &:hover { - background: ${()=>e().cellHeaderHover}; - } -`,b=r.td` - padding: 0.75rem 1rem; - font-size: 0.875rem; - color: ${()=>e().cellText}; - vertical-align: top; - transition: color 0.2s ease; -`,f=r.div` - text-align: center; - padding: 3rem; - color: ${()=>e().mutedText}; - transition: color 0.2s ease; -`,g=r.span` - margin-left: 0.5rem; - font-size: 0.75rem; - color: ${()=>e().sortIcon}; - transition: color 0.2s ease; -`;export{f as E,g as S,d as T,c as a,l as b,i as c,b as d,t as e,n as f,s as g}; diff --git a/frontend/dist/assets/TreeDetailModal-CdyalJyV.js b/frontend/dist/assets/TreeDetailModal-CdyalJyV.js new file mode 100644 index 0000000000..3349228fdd --- /dev/null +++ b/frontend/dist/assets/TreeDetailModal-CdyalJyV.js @@ -0,0 +1,126 @@ +import{r as c,j as e,d as a,p as b,L as f}from"./index-Cp0G27Fl.js";import{u as j}from"./useKeyboardNavigation-BEEMcJj7.js";import{b as h,c as i,d as s,T as p,M as w}from"./Modal-BNFLubTG.js";const k=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],v=(t,r)=>{const[o,l]=c.useState([]);return c.useEffect(()=>{t&&r&&l(k)},[t,r]),o},y=t=>c.useCallback(()=>{t&&(navigator.share?navigator.share({title:`Tree Details - ${t.name}`,text:`Check out this tree: ${t.name} (${t.species})`,url:window.location.href}):(navigator.clipboard.writeText(window.location.href),alert("Tree URL copied to clipboard!")))},[t]),T=a.div` + background: #f9fafb; + border-radius: 0.75rem; + padding: 1.5rem; + border: 1px solid #e5e7eb; +`,I=a.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`,L=a.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.5rem 0; + border-bottom: 1px solid #e5e7eb; + + &:last-child { + border-bottom: none; + } +`,C=a.span` + color: #6b7280; + font-size: 0.875rem; +`,H=a.span` + font-weight: 500; + color: #111827; + font-size: 0.875rem; +`,m=({title:t,children:r})=>e.jsxs(T,{children:[e.jsx(I,{children:t}),r]}),n=({label:t,children:r})=>e.jsxs(L,{children:[e.jsxs(C,{children:[t,":"]}),e.jsx(H,{children:r})]}),S=a.span` + padding: 0.25rem 0.75rem; + border-radius: 9999px; + font-size: 0.75rem; + font-weight: 500; + + ${t=>{switch(t.health){case"healthy":return"background: #d1fae5; color: #065f46;";case"warning":return"background: #fef3c7; color: #92400e;";case"critical":return"background: #fee2e2; color: #991b1b;";default:return"background: #f3f4f6; color: #374151;"}}} +`,x=({health:t,children:r})=>e.jsx(S,{health:t,children:r||t}),M=({tree:t})=>e.jsxs(m,{title:"Basic Information",children:[e.jsx(n,{label:"Tree ID",children:t.name}),e.jsx(n,{label:"Species",children:t.species}),e.jsxs(n,{label:"Current Height",children:[t.height,"m"]}),e.jsx(n,{label:"Health Status",children:e.jsx(x,{health:t.health,children:t.health})}),e.jsx(n,{label:"Planted Date",children:"March 15, 2023"})]}),B=({tree:t})=>e.jsxs(m,{title:"Location & Contract",children:[e.jsx(n,{label:"Latitude",children:t.lat.toFixed(6)}),e.jsx(n,{label:"Longitude",children:t.lng.toFixed(6)}),e.jsxs(n,{label:"Forest",children:["Forest ",t.id<=4?"A":"B"]}),e.jsx(n,{label:"Contract Status",children:e.jsx("span",{className:"px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs",children:"Active"})}),e.jsx(n,{label:"Last Inspection",children:"Jan 15, 2024"})]}),z=a.div` + margin-bottom: 2rem; +`,D=a.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`,F=a(p)` + background: white; + border-radius: 0.5rem; + overflow: hidden; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +`,N=a.thead` + background: #f3f4f6; +`,P=({measurementHistory:t})=>e.jsxs(z,{children:[e.jsx(D,{children:"Measurement History (Last 10 Entries)"}),e.jsxs(F,{children:[e.jsx(N,{children:e.jsxs(h,{children:[e.jsx(i,{children:"Date"}),e.jsx(i,{children:"Height (m)"}),e.jsx(i,{children:"Diameter (cm)"}),e.jsx(i,{children:"Health"})]})}),e.jsx("tbody",{children:t.slice(0,10).map((r,o)=>e.jsxs(h,{children:[e.jsx(s,{children:b(r.date)}),e.jsx(s,{children:r.height}),e.jsx(s,{children:r.diameter}),e.jsx(s,{children:e.jsx(x,{health:r.health,children:r.health})})]},o))})]})]}),$=a.div` + display: grid; + grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + gap: 1rem; + margin-top: 1rem; +`,E=a.div` + background: #f9fafb; + border-radius: 0.5rem; + padding: 1rem; + text-align: center; + border: 1px solid #e5e7eb; +`,G=a.div` + width: 100%; + height: 100px; + background: #e5e7eb; + border-radius: 0.5rem; + display: flex; + align-items: center; + justify-content: center; + color: #6b7280; + font-size: 0.875rem; + margin-bottom: 0.5rem; +`,R=()=>e.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"})}),d=({caption:t})=>e.jsxs(E,{children:[e.jsx(G,{children:e.jsx(R,{})}),e.jsx("div",{className:"text-xs text-gray-600",children:t})]}),V=()=>e.jsxs($,{children:[e.jsx(d,{caption:"Latest Photo"}),e.jsx(d,{caption:"Growth Progress"}),e.jsx(d,{caption:"Planting Day"})]}),A=a.button` + padding: 0.75rem 1.5rem; + background: #10b981; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: #059669; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + } +`,W=a(f)` + padding: 0.75rem 1.5rem; + background: #3b82f6; + color: white; + border: none; + border-radius: 0.5rem; + font-weight: 500; + text-decoration: none; + display: inline-flex; + align-items: center; + gap: 0.5rem; + transition: all 0.2s; + + &:hover { + background: #2563eb; + } + + &:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); + } +`,J=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"})}),K=()=>e.jsx("svg",{className:"w-4 h-4 mr-2 inline",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z"})}),U=({tree:t,onShare:r})=>e.jsxs("div",{className:"flex justify-end space-x-3",children:[e.jsxs(W,{to:`/tree/${t.id}`,children:[e.jsx(J,{}),"View Full Page"]}),e.jsxs(A,{onClick:r,children:[e.jsx(K,{}),"Share Tree"]})]}),q=a.div` + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + margin-bottom: 2rem; + + @media (min-width: 768px) { + grid-template-columns: 1fr 1fr; + } +`,Q=a.div` + margin-bottom: 2rem; +`,X=a.h3` + font-size: 1.125rem; + font-weight: 600; + color: #111827; + margin: 0 0 1rem 0; +`,O=({tree:t,isOpen:r,onClose:o})=>{const{containerRef:l}=j({onEscape:o,trapFocus:!0,autoFocus:!0}),g=v(t,r),u=y(t);return t?e.jsxs(w,{isOpen:r,onClose:o,title:t.name,containerRef:l,children:[e.jsxs(q,{children:[e.jsx(M,{tree:t}),e.jsx(B,{tree:t})]}),e.jsx(P,{measurementHistory:g}),e.jsxs(Q,{children:[e.jsx(X,{children:"Tree Images"}),e.jsx(V,{})]}),e.jsx(U,{tree:t,onShare:u})]}):null};export{x as H,O as T,y as u}; diff --git a/frontend/dist/assets/TreeDetailModal-DPmuOlrX.js b/frontend/dist/assets/TreeDetailModal-DPmuOlrX.js deleted file mode 100644 index 77f7f5bf08..0000000000 --- a/frontend/dist/assets/TreeDetailModal-DPmuOlrX.js +++ /dev/null @@ -1,180 +0,0 @@ -import{r as m,j as e,d as t,p as f,L as j}from"./index-CGkKx7Xv.js";import{u as p}from"./useKeyboardNavigation-Bh0nMcUg.js";import{b as g,c as s,d as l,T as w}from"./Table-CfKObwuM.js";const k=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],v=(r,n)=>{const[a,i]=m.useState([]);return m.useEffect(()=>{r&&n&&i(k)},[r,n]),a},y=r=>m.useCallback(()=>{r&&(navigator.share?navigator.share({title:`Tree Details - ${r.name}`,text:`Check out this tree: ${r.name} (${r.species})`,url:window.location.href}):(navigator.clipboard.writeText(window.location.href),alert("Tree URL copied to clipboard!")))},[r]),T=t.div` - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.5); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - padding: 1rem; -`,C=t.div` - background: white; - border-radius: 0.75rem; - max-width: 800px; - width: 100%; - max-height: 90vh; - overflow-y: auto; - box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); - position: relative; -`,I=t.div` - display: flex; - justify-content: space-between; - align-items: center; - padding: 1.5rem; - border-bottom: 1px solid #e5e7eb; - background: #f9fafb; - border-radius: 0.75rem 0.75rem 0 0; -`,L=t.h2` - font-size: 1.5rem; - font-weight: 700; - color: #111827; - margin: 0; -`,M=t.button` - padding: 0.5rem; - background: transparent; - border: none; - border-radius: 0.375rem; - cursor: pointer; - color: #6b7280; - transition: all 0.2s; - - &:hover { - background: #f3f4f6; - color: #111827; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`,H=t.div` - padding: 1.5rem; -`,S=()=>e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})}),B=({isOpen:r,onClose:n,title:a,children:i,containerRef:d})=>{const c=x=>{x.target===x.currentTarget&&n()};return r?e.jsx(T,{onClick:c,children:e.jsxs(C,{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":"modal-title",children:[e.jsxs(I,{children:[e.jsx(L,{id:"modal-title",children:a}),e.jsx(M,{onClick:n,"aria-label":"Close modal",children:e.jsx(S,{})})]}),e.jsx(H,{children:i})]})}):null},z=t.div` - background: #f9fafb; - border-radius: 0.75rem; - padding: 1.5rem; - border: 1px solid #e5e7eb; -`,D=t.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0 0 1rem 0; -`,N=t.div` - display: flex; - justify-content: space-between; - align-items: center; - padding: 0.5rem 0; - border-bottom: 1px solid #e5e7eb; - - &:last-child { - border-bottom: none; - } -`,F=t.span` - color: #6b7280; - font-size: 0.875rem; -`,P=t.span` - font-weight: 500; - color: #111827; - font-size: 0.875rem; -`,u=({title:r,children:n})=>e.jsxs(z,{children:[e.jsx(D,{children:r}),n]}),o=({label:r,children:n})=>e.jsxs(N,{children:[e.jsxs(F,{children:[r,":"]}),e.jsx(P,{children:n})]}),$=t.span` - padding: 0.25rem 0.75rem; - border-radius: 9999px; - font-size: 0.75rem; - font-weight: 500; - - ${r=>{switch(r.health){case"healthy":return"background: #d1fae5; color: #065f46;";case"warning":return"background: #fef3c7; color: #92400e;";case"critical":return"background: #fee2e2; color: #991b1b;";default:return"background: #f3f4f6; color: #374151;"}}} -`,b=({health:r,children:n})=>e.jsx($,{health:r,children:n||r}),E=({tree:r})=>e.jsxs(u,{title:"Basic Information",children:[e.jsx(o,{label:"Tree ID",children:r.name}),e.jsx(o,{label:"Species",children:r.species}),e.jsxs(o,{label:"Current Height",children:[r.height,"m"]}),e.jsx(o,{label:"Health Status",children:e.jsx(b,{health:r.health,children:r.health})}),e.jsx(o,{label:"Planted Date",children:"March 15, 2023"})]}),G=({tree:r})=>e.jsxs(u,{title:"Location & Contract",children:[e.jsx(o,{label:"Latitude",children:r.lat.toFixed(6)}),e.jsx(o,{label:"Longitude",children:r.lng.toFixed(6)}),e.jsxs(o,{label:"Forest",children:["Forest ",r.id<=4?"A":"B"]}),e.jsx(o,{label:"Contract Status",children:e.jsx("span",{className:"px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs",children:"Active"})}),e.jsx(o,{label:"Last Inspection",children:"Jan 15, 2024"})]}),R=t.div` - margin-bottom: 2rem; -`,V=t.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0 0 1rem 0; -`,W=t(w)` - background: white; - border-radius: 0.5rem; - overflow: hidden; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); -`,A=t.thead` - background: #f3f4f6; -`,J=({measurementHistory:r})=>e.jsxs(R,{children:[e.jsx(V,{children:"Measurement History (Last 10 Entries)"}),e.jsxs(W,{children:[e.jsx(A,{children:e.jsxs(g,{children:[e.jsx(s,{children:"Date"}),e.jsx(s,{children:"Height (m)"}),e.jsx(s,{children:"Diameter (cm)"}),e.jsx(s,{children:"Health"})]})}),e.jsx("tbody",{children:r.slice(0,10).map((n,a)=>e.jsxs(g,{children:[e.jsx(l,{children:f(n.date)}),e.jsx(l,{children:n.height}),e.jsx(l,{children:n.diameter}),e.jsx(l,{children:e.jsx(b,{health:n.health,children:n.health})})]},a))})]})]}),K=t.div` - display: grid; - grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); - gap: 1rem; - margin-top: 1rem; -`,U=t.div` - background: #f9fafb; - border-radius: 0.5rem; - padding: 1rem; - text-align: center; - border: 1px solid #e5e7eb; -`,q=t.div` - width: 100%; - height: 100px; - background: #e5e7eb; - border-radius: 0.5rem; - display: flex; - align-items: center; - justify-content: center; - color: #6b7280; - font-size: 0.875rem; - margin-bottom: 0.5rem; -`,O=()=>e.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"})}),h=({caption:r})=>e.jsxs(U,{children:[e.jsx(q,{children:e.jsx(O,{})}),e.jsx("div",{className:"text-xs text-gray-600",children:r})]}),Q=()=>e.jsxs(K,{children:[e.jsx(h,{caption:"Latest Photo"}),e.jsx(h,{caption:"Growth Progress"}),e.jsx(h,{caption:"Planting Day"})]}),X=t.button` - padding: 0.75rem 1.5rem; - background: #10b981; - color: white; - border: none; - border-radius: 0.5rem; - font-weight: 500; - cursor: pointer; - transition: all 0.2s; - - &:hover { - background: #059669; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); - } -`,Y=t(j)` - padding: 0.75rem 1.5rem; - background: #3b82f6; - color: white; - border: none; - border-radius: 0.5rem; - font-weight: 500; - text-decoration: none; - display: inline-flex; - align-items: center; - gap: 0.5rem; - transition: all 0.2s; - - &:hover { - background: #2563eb; - } - - &:focus { - outline: none; - box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); - } -`,Z=()=>e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"})}),_=()=>e.jsx("svg",{className:"w-4 h-4 mr-2 inline",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z"})}),ee=({tree:r,onShare:n})=>e.jsxs("div",{className:"flex justify-end space-x-3",children:[e.jsxs(Y,{to:`/tree/${r.id}`,children:[e.jsx(Z,{}),"View Full Page"]}),e.jsxs(X,{onClick:n,children:[e.jsx(_,{}),"Share Tree"]})]}),re=t.div` - display: grid; - grid-template-columns: 1fr; - gap: 1.5rem; - margin-bottom: 2rem; - - @media (min-width: 768px) { - grid-template-columns: 1fr 1fr; - } -`,te=t.div` - margin-bottom: 2rem; -`,ne=t.h3` - font-size: 1.125rem; - font-weight: 600; - color: #111827; - margin: 0 0 1rem 0; -`,se=({tree:r,isOpen:n,onClose:a})=>{const{containerRef:i}=p({onEscape:a,trapFocus:!0,autoFocus:!0}),d=v(r,n),c=y(r);return r?e.jsxs(B,{isOpen:n,onClose:a,title:r.name,containerRef:i,children:[e.jsxs(re,{children:[e.jsx(E,{tree:r}),e.jsx(G,{tree:r})]}),e.jsx(J,{measurementHistory:d}),e.jsxs(te,{children:[e.jsx(ne,{children:"Tree Images"}),e.jsx(Q,{})]}),e.jsx(ee,{tree:r,onShare:c})]}):null};export{b as H,se as T,y as u}; diff --git a/frontend/dist/assets/TreeDetailPage-BIoNlDES.js b/frontend/dist/assets/TreeDetailPage-B6nEFtyV.js similarity index 89% rename from frontend/dist/assets/TreeDetailPage-BIoNlDES.js rename to frontend/dist/assets/TreeDetailPage-B6nEFtyV.js index 5251a8505a..26e9ea4383 100644 --- a/frontend/dist/assets/TreeDetailPage-BIoNlDES.js +++ b/frontend/dist/assets/TreeDetailPage-B6nEFtyV.js @@ -1,4 +1,4 @@ -import{r as n,a as f,m as j,u as P,j as e,e as S,d as v}from"./index-CGkKx7Xv.js";import"./IconButton-vDjz_WRZ.js";import{P as g,T as x,M as T,a as y,b as N,c as b,C as A,d as D,e as M,f as k,g as w}from"./MapSidebar-jstr5dKK.js";import"./ExportButton-BryKwkQ4.js";import"./FormElements-BsiOcVAQ.js";import"./Table-CfKObwuM.js";import"./ChartComponents-DOzzJtP4.js";import{u as C}from"./TreeDetailModal-DPmuOlrX.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-Bh0nMcUg.js";const p=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],E=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],I=s=>{const[r,t]=n.useState(null),[a,h]=n.useState([]),[i,c]=n.useState(!0),[u,l]=n.useState(null);return n.useEffect(()=>{s&&(async()=>{try{c(!0),l(null),await new Promise(d=>setTimeout(d,500));const o=p.find(d=>d.id===parseInt(s));if(!o){l("Tree not found");return}t(o),h(E)}catch{l("Failed to load tree data")}finally{c(!1)}})()},[s]),{tree:r,measurements:a,loading:i,error:u,trees:p}},B=(s,r)=>{const t=f(),a=n.useMemo(()=>r.findIndex(l=>l.id===parseInt(s)),[r,s]),h=a>0,i=a{h&&t(`/tree/${r[a-1].id}`)},[t,r,a,h]),u=n.useCallback(()=>{i&&t(`/tree/${r[a+1].id}`)},[t,r,a,i]);return{hasPrevious:h,hasNext:i,handlePreviousTree:c,handleNextTree:u,currentIndex:a}},H=v.div` +import{r as n,a as f,m as j,u as P,j as e,e as S,d as v}from"./index-Cp0G27Fl.js";import"./IconButton-Cy_suQAe.js";import{P as g,T as x,M as T,a as y,b as N,c as b,C as A,d as D,e as M,f as k,g as w}from"./MapSidebar-DVta1WHd.js";import"./ExportButton-CO4K-of6.js";import"./FormElements-DFAqWcb0.js";import"./Modal-BNFLubTG.js";import"./ChartComponents-CnhCT1GQ.js";import{u as C}from"./TreeDetailModal-CdyalJyV.js";import"./vendor-BtP0CW_r.js";import"./useKeyboardNavigation-BEEMcJj7.js";const p=[{id:1,name:"Tree A-001",species:"Pine",height:2.4,health:"healthy",lat:59.3293,lng:18.0686},{id:2,name:"Tree A-002",species:"Oak",height:2.1,health:"healthy",lat:59.33,lng:18.069},{id:3,name:"Tree A-003",species:"Birch",height:1.8,health:"warning",lat:59.3285,lng:18.0675},{id:4,name:"Tree A-004",species:"Spruce",height:1.5,health:"critical",lat:59.331,lng:18.07},{id:5,name:"Tree A-005",species:"Pine",height:2.7,health:"healthy",lat:59.3275,lng:18.066},{id:6,name:"Tree A-006",species:"Oak",height:2.3,health:"healthy",lat:59.332,lng:18.071},{id:7,name:"Tree A-007",species:"Birch",height:1.9,health:"warning",lat:59.3265,lng:18.065},{id:8,name:"Tree A-008",species:"Spruce",height:2.5,health:"healthy",lat:59.333,lng:18.072}],E=[{date:"2024-01-15",height:2.4,diameter:8.2,health:"healthy"},{date:"2024-02-15",height:2.3,diameter:8.1,health:"healthy"},{date:"2024-03-15",height:2.2,diameter:8,health:"healthy"},{date:"2024-04-15",height:2.1,diameter:7.9,health:"warning"},{date:"2024-05-15",height:2,diameter:7.8,health:"warning"},{date:"2024-06-15",height:1.9,diameter:7.7,health:"warning"},{date:"2024-07-15",height:1.8,diameter:7.6,health:"critical"},{date:"2024-08-15",height:1.7,diameter:7.5,health:"critical"},{date:"2024-09-15",height:1.6,diameter:7.4,health:"critical"},{date:"2024-10-15",height:1.5,diameter:7.3,health:"critical"}],I=s=>{const[r,t]=n.useState(null),[a,h]=n.useState([]),[i,c]=n.useState(!0),[u,l]=n.useState(null);return n.useEffect(()=>{s&&(async()=>{try{c(!0),l(null),await new Promise(d=>setTimeout(d,500));const o=p.find(d=>d.id===parseInt(s));if(!o){l("Tree not found");return}t(o),h(E)}catch{l("Failed to load tree data")}finally{c(!1)}})()},[s]),{tree:r,measurements:a,loading:i,error:u,trees:p}},B=(s,r)=>{const t=f(),a=n.useMemo(()=>r.findIndex(l=>l.id===parseInt(s)),[r,s]),h=a>0,i=a{h&&t(`/tree/${r[a-1].id}`)},[t,r,a,h]),u=n.useCallback(()=>{i&&t(`/tree/${r[a+1].id}`)},[t,r,a,i]);return{hasPrevious:h,hasNext:i,handlePreviousTree:c,handleNextTree:u,currentIndex:a}},H=v.div` background: #fee2e2; color: #991b1b; padding: 1rem; diff --git a/frontend/dist/assets/index-3rMZFSc5.css b/frontend/dist/assets/index-3rMZFSc5.css deleted file mode 100644 index 8d4d624711..0000000000 --- a/frontend/dist/assets/index-3rMZFSc5.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}.dark{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}body{font-feature-settings:"rlig" 1,"calt" 1;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}body:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}*{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.\!container{width:100%!important}.container{width:100%}@media (min-width: 320px){.\!container{max-width:320px!important}.container{max-width:320px}}@media (min-width: 640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width: 768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width: 1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width: 1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width: 1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn:disabled{pointer-events:none;opacity:.5}.btn-primary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-secondary:disabled{pointer-events:none;opacity:.5}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(77 124 15 / var(--tw-bg-opacity, 1))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-outline:disabled{pointer-events:none;opacity:.5}.btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.btn-outline:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.btn-outline:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.btn-outline:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-72{height:18rem}.h-8{height:2rem}.h-96{height:24rem}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-700{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-20{padding-top:5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.skip-link{position:absolute;left:0;top:0;z-index:50;--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));padding:.5rem 1rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.skip-link:focus{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-offset-2:focus{outline-offset:2px}.focus\:outline-blue-500:focus{outline-color:#3b82f6}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-red-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-gray-100:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-green-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:from-gray-900:is(.dark *){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-600:is(.dark *){--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-green-800:is(.dark *){--tw-gradient-to: #166534 var(--tw-gradient-to-position)}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-green-700:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-gray-900\/50:is(.dark *){--tw-shadow-color: rgb(17 24 39 / .5);--tw-shadow: var(--tw-shadow-colored)}.dark\:hover\:bg-gray-100:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-200:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/20:hover:is(.dark *){background-color:#14532d33}.dark\:hover\:bg-green-900\/30:hover:is(.dark *){background-color:#14532d4d}.dark\:hover\:bg-red-900\/30:hover:is(.dark *){background-color:#7f1d1d4d}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-700:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 768px){.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:sticky{position:sticky}.lg\:z-10{z-index:10}.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:hidden{display:none}.lg\:w-64{width:16rem}.lg\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:p-8{padding:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>svg\]\:opacity-70>svg{opacity:.7}@media (min-width: 768px){.md\:\[\&\>svg\]\:h-20>svg{height:5rem}.md\:\[\&\>svg\]\:w-20>svg{width:5rem}} diff --git a/frontend/dist/assets/index-CGkKx7Xv.js b/frontend/dist/assets/index-Cp0G27Fl.js similarity index 95% rename from frontend/dist/assets/index-CGkKx7Xv.js rename to frontend/dist/assets/index-Cp0G27Fl.js index 10f19bb355..6b53dec741 100644 --- a/frontend/dist/assets/index-CGkKx7Xv.js +++ b/frontend/dist/assets/index-Cp0G27Fl.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-BfmN78ZN.js","assets/IconButton-vDjz_WRZ.js","assets/MapSidebar-jstr5dKK.js","assets/TreeDetailModal-DPmuOlrX.js","assets/useKeyboardNavigation-Bh0nMcUg.js","assets/Table-CfKObwuM.js","assets/ExportButton-BryKwkQ4.js","assets/FormElements-BsiOcVAQ.js","assets/ChartComponents-DOzzJtP4.js","assets/Navbar-BSLKvp05.js","assets/DarkModeToggle-Cu0JyOh5.js","assets/vendor-BtP0CW_r.js","assets/LoginPage-b5sbaCb6.js","assets/PasswordInput-Bff6SLQJ.js","assets/RegisterPage-Cf4V_AZ4.js","assets/DashboardPage-DOe_EIif.js","assets/useSidebarState-Ctkpd6zX.js","assets/useSidebarState-DdjxYr1F.css","assets/MapPage-DVu2-W4J.js","assets/MapPage-25t4MxmA.css","assets/TreeDetailPage-BIoNlDES.js","assets/AdminPage-BfI5jmjy.js","assets/ErrorPages-CFbRbfCl.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-BBS10Grj.js","assets/IconButton-Cy_suQAe.js","assets/MapSidebar-DVta1WHd.js","assets/TreeDetailModal-CdyalJyV.js","assets/useKeyboardNavigation-BEEMcJj7.js","assets/Modal-BNFLubTG.js","assets/ExportButton-CO4K-of6.js","assets/FormElements-DFAqWcb0.js","assets/ChartComponents-CnhCT1GQ.js","assets/Navbar-N3bkUWQJ.js","assets/DarkModeToggle-DYOgA8sV.js","assets/vendor-BtP0CW_r.js","assets/LoginPage-Ckincecw.js","assets/FormField-BLwCJzgw.js","assets/PasswordInput-C1THfjeW.js","assets/RegisterPage-Cf-sXby2.js","assets/DashboardPage-DjVP0e2L.js","assets/useSidebarState-DD0BN3bF.js","assets/useSidebarState-DdjxYr1F.css","assets/treeService-D86yjeOz.js","assets/MapPage-BLNQ6ZTG.js","assets/leaflet-DEYfr1U5.js","assets/leaflet-Dgihpmma.css","assets/MapPage-3yaWYNWa.css","assets/TreeDetailPage-B6nEFtyV.js","assets/AdminPage-CnbyUOAU.js","assets/ErrorPages-BOUlGSHx.js"])))=>i.map(i=>d[i]); var fn=Object.defineProperty;var hn=(e,t,r)=>t in e?fn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var Oe=(e,t,r)=>hn(e,typeof t!="symbol"?t+"":t,r);import{r as hr,g as Rt,a as pr}from"./vendor-BtP0CW_r.js";function pn(e,t){for(var r=0;rn[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const a of o)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(o){const a={};return o.integrity&&(a.integrity=o.integrity),o.referrerPolicy&&(a.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?a.credentials="include":o.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(o){if(o.ep)return;o.ep=!0;const a=r(o);fetch(o.href,a)}})();var at={exports:{}},xe={};/** * @license React * react-jsx-runtime.production.min.js @@ -186,4 +186,4 @@ var fn=Object.defineProperty;var hn=(e,t,r)=>t in e?fn(e,t,{enumerable:!0,config border-radius: 0 0 8px 8px; width: ${({$progress:e})=>e}%; transition: width 0.1s linear; -`,us=({toast:e,onRemove:t})=>{const[r,n]=f.useState(!1),o=ts(e.duration),a=()=>{n(!0),setTimeout(()=>t(e.id),300)};return p.jsx(as,{$isExiting:r,children:p.jsxs(ss,{$type:e.type,role:"alert","aria-live":"polite","aria-atomic":"true",children:[p.jsx(es,{type:e.type}),p.jsxs(is,{children:[p.jsx("h4",{children:e.title||Ja(e.type)}),p.jsx("p",{children:e.message})]}),p.jsx(cs,{onClick:a,"aria-label":"Close notification",type:"button",children:p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}),e.duration>0&&p.jsx(ls,{$type:e.type,$progress:o})]})})},ds=()=>{const{toasts:e,removeToast:t}=qa();return p.jsx(os,{"aria-live":"polite","aria-label":"Notifications",children:e.map(r=>p.jsx(us,{toast:r,onRemove:t},r.id))})};function rn(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;tp.jsx("div",{className:ne("bg-white rounded-lg p-8 max-w-2xl w-full shadow-lg text-center",e),...r,children:t}),ps=({className:e,children:t,...r})=>p.jsx("h1",{className:ne("text-red-600 text-3xl mb-4 font-semibold",e),...r,children:t}),ms=({className:e,children:t,...r})=>p.jsx("p",{className:ne("text-gray-600 text-lg leading-relaxed mb-8",e),...r,children:t}),gs=({className:e,error:t,errorInfo:r,...n})=>p.jsxs("details",{className:ne("mb-8 text-left",e),...n,children:[p.jsx("summary",{className:"cursor-pointer text-blue-600 font-medium mb-2 hover:text-blue-800",children:"Show technical details"}),p.jsxs("pre",{className:"bg-gray-50 p-4 rounded overflow-x-auto text-sm text-gray-700 whitespace-pre-wrap break-words",children:[t==null?void 0:t.toString(),r==null?void 0:r.componentStack]})]}),vs={primary:"btn-primary",secondary:"btn-secondary",outline:"btn-outline",ghost:"btn-ghost",link:"btn-link",destructive:"btn-destructive",success:"btn-success"},ys={sm:"h-8 px-3 text-xs",md:"h-10 px-4 py-2",lg:"h-12 px-8",xl:"h-14 px-10 text-lg",icon:"h-10 w-10"},Fe=N.forwardRef(({className:e,variant:t="primary",size:r="md",disabled:n=!1,loading:o=!1,children:a,...s},c)=>p.jsxs("button",{className:ne("btn",vs[t],ys[r],n&&"btn-disabled",o&&"btn-loading",e),ref:c,disabled:n||o,...s,children:[o&&p.jsx("span",{className:"btn-spinner","aria-hidden":"true",children:p.jsxs("svg",{className:"animate-spin h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[p.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),p.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),a]}));Fe.displayName="Button";const nn=N.forwardRef(({className:e,orientation:t="horizontal",size:r="md",variant:n="outline",children:o,...a},s)=>{const c=N.Children.map(o,i=>N.isValidElement(i)?N.cloneElement(i,{size:i.props.size||r,variant:i.props.variant||n}):i);return p.jsx("div",{className:ne("btn-group",t==="horizontal"&&"btn-group-horizontal",t==="vertical"&&"btn-group-vertical",e),ref:s,...a,children:c})});nn.displayName="ButtonGroup";const xs=({onRetry:e,onReload:t,onReportError:r})=>p.jsxs(nn,{className:"flex gap-4 justify-center flex-wrap",children:[p.jsx(Fe,{onClick:e,variant:"primary",children:"Try Again"}),p.jsx(Fe,{onClick:t,variant:"secondary",children:"Refresh Page"}),p.jsx(Fe,{onClick:r,variant:"secondary",children:"Report Error"})]}),tt=e=>{if(!e)return null;const t=new Date(e);return isNaN(t.getTime())?null:t},qs=e=>{const t=tt(e);return t?t.toLocaleString():"Invalid date"},Gs=e=>{const t=tt(e);return t?t.toLocaleDateString():"Invalid date"},Vs=e=>{const t=tt(e);return t?t.toISOString().split("T")[0]:""},ws=e=>{const t=tt(e);return t?t.toISOString():null},bs=({children:e,className:t,...r})=>p.jsx("div",{className:ne("min-h-screen flex items-center justify-center p-8 bg-gray-50",t),role:"alert","aria-live":"assertive",...r,children:e});class Ss extends N.Component{constructor(r){super(r);Oe(this,"handleRetry",()=>{this.setState({hasError:!1,error:null,errorInfo:null})});Oe(this,"handleReload",()=>{window.location.reload()});Oe(this,"handleReportError",()=>{this.errorReporting.reportError(this.state.error,this.state.errorInfo)});this.state={hasError:!1,error:null,errorInfo:null},this.errorReporting={reportError:(n,o)=>{const a={error:n==null?void 0:n.toString(),stack:n==null?void 0:n.stack,componentStack:o==null?void 0:o.componentStack,userAgent:navigator.userAgent,timestamp:ws(new Date),url:window.location.href};navigator.clipboard.writeText(JSON.stringify(a,null,2)).then(()=>{alert("Error details copied to clipboard. Please send this to support.")}).catch(()=>{alert("Failed to copy error details. Please try again.")})},logError:(n,o)=>{console.error("Error caught by boundary:",n,o)}}}static getDerivedStateFromError(r){return{hasError:!0}}componentDidCatch(r,n){this.setState({error:r,errorInfo:n}),this.errorReporting.logError(r,n)}render(){return this.state.hasError?p.jsx(bs,{children:p.jsxs(hs,{children:[p.jsx(ps,{children:"Oops! Something went wrong"}),p.jsx(ms,{children:"We're sorry, but something unexpected happened. You can try refreshing the page or contact support if the problem persists."}),this.state.error&&p.jsx(gs,{error:this.state.error,errorInfo:this.state.errorInfo}),p.jsx(xs,{onRetry:this.handleRetry,onReload:this.handleReload,onReportError:this.handleReportError})]})}):this.props.children}}const Es=({children:e})=>e,Rs=f.lazy(()=>K(()=>import("./LandingPage-BfmN78ZN.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(e=>({default:e.LandingPage}))),Cs=f.lazy(()=>K(()=>import("./LoginPage-b5sbaCb6.js"),__vite__mapDeps([12,9,4,10,1,13,11])).then(e=>({default:e.LoginPage}))),Ps=f.lazy(()=>K(()=>import("./RegisterPage-Cf4V_AZ4.js"),__vite__mapDeps([14,13,11])).then(e=>({default:e.RegisterPage}))),js=f.lazy(()=>K(()=>import("./DashboardPage-DOe_EIif.js"),__vite__mapDeps([15,8,11,16,10,1,17,6])).then(e=>({default:e.DashboardPage}))),_s=f.lazy(()=>K(()=>import("./MapPage-DVu2-W4J.js"),__vite__mapDeps([18,11,16,10,1,17,6,3,4,5,19])).then(e=>({default:e.MapPage}))),Ts=f.lazy(()=>K(()=>import("./TreeDetailPage-BIoNlDES.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,11])).then(e=>({default:e.TreeDetailPage}))),Is=f.lazy(()=>K(()=>import("./AdminPage-BfI5jmjy.js"),__vite__mapDeps([21,5,7,11])).then(e=>({default:e.AdminPage}))),As=f.lazy(()=>K(()=>import("./ErrorPages-CFbRbfCl.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,11])).then(e=>({default:e.NotFoundPage}))),Os=()=>p.jsx(Ss,{children:p.jsx(Ro,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:p.jsx(Ga,{children:p.jsx(Wa,{children:p.jsx(Lo,{children:p.jsxs(Es,{children:[p.jsx(f.Suspense,{fallback:p.jsx(Qr,{fullscreen:!0,text:"Loading page..."}),children:p.jsxs(go,{children:[p.jsx(B,{path:"/",element:p.jsx(Rs,{})}),p.jsx(B,{path:"/login",element:p.jsx(Cs,{})}),p.jsx(B,{path:"/register",element:p.jsx(Ps,{})}),p.jsx(B,{path:"/dashboard",element:p.jsx($e,{children:p.jsx(js,{})})}),p.jsx(B,{path:"/map",element:p.jsx($e,{children:p.jsx(_s,{})})}),p.jsx(B,{path:"/tree/:id",element:p.jsx($e,{children:p.jsx(Ts,{})})}),p.jsx(B,{path:"/admin",element:p.jsx($e,{children:p.jsx(Is,{})})}),p.jsx(B,{path:"*",element:p.jsx(As,{})})]})}),p.jsx(ds,{})]})})})})})}),ks=(e="root")=>{const t=document.getElementById(e);if(!t)throw new Error(`Root element with id '${e}' not found in the document`);return t},Ns=e=>wn.createRoot(e),Ls=e=>{e.render(p.jsx(N.StrictMode,{children:p.jsx(Os,{})}))},$s=()=>{try{const e=ks(),t=Ns(e);Ls(t)}catch(e){throw console.error("Failed to initialize application:",e),e}};$s();export{ko as A,nn as B,Us as L,po as N,N as R,Ye as a,En as b,fs as c,$ as d,Qr as e,vn as f,Ms as g,Fs as h,Vs as i,p as j,Ws as k,ne as l,Bs as m,qs as n,Fe as o,Gs as p,f as r,No as u}; +`,us=({toast:e,onRemove:t})=>{const[r,n]=f.useState(!1),o=ts(e.duration),a=()=>{n(!0),setTimeout(()=>t(e.id),300)};return p.jsx(as,{$isExiting:r,children:p.jsxs(ss,{$type:e.type,role:"alert","aria-live":"polite","aria-atomic":"true",children:[p.jsx(es,{type:e.type}),p.jsxs(is,{children:[p.jsx("h4",{children:e.title||Ja(e.type)}),p.jsx("p",{children:e.message})]}),p.jsx(cs,{onClick:a,"aria-label":"Close notification",type:"button",children:p.jsx("svg",{viewBox:"0 0 20 20",children:p.jsx("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}),e.duration>0&&p.jsx(ls,{$type:e.type,$progress:o})]})})},ds=()=>{const{toasts:e,removeToast:t}=qa();return p.jsx(os,{"aria-live":"polite","aria-label":"Notifications",children:e.map(r=>p.jsx(us,{toast:r,onRemove:t},r.id))})};function rn(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;tp.jsx("div",{className:ne("bg-white rounded-lg p-8 max-w-2xl w-full shadow-lg text-center",e),...r,children:t}),ps=({className:e,children:t,...r})=>p.jsx("h1",{className:ne("text-red-600 text-3xl mb-4 font-semibold",e),...r,children:t}),ms=({className:e,children:t,...r})=>p.jsx("p",{className:ne("text-gray-600 text-lg leading-relaxed mb-8",e),...r,children:t}),gs=({className:e,error:t,errorInfo:r,...n})=>p.jsxs("details",{className:ne("mb-8 text-left",e),...n,children:[p.jsx("summary",{className:"cursor-pointer text-blue-600 font-medium mb-2 hover:text-blue-800",children:"Show technical details"}),p.jsxs("pre",{className:"bg-gray-50 p-4 rounded overflow-x-auto text-sm text-gray-700 whitespace-pre-wrap break-words",children:[t==null?void 0:t.toString(),r==null?void 0:r.componentStack]})]}),vs={primary:"btn-primary",secondary:"btn-secondary",outline:"btn-outline",ghost:"btn-ghost",link:"btn-link",destructive:"btn-destructive",success:"btn-success"},ys={sm:"h-8 px-3 text-xs",md:"h-10 px-4 py-2",lg:"h-12 px-8",xl:"h-14 px-10 text-lg",icon:"h-10 w-10"},Fe=N.forwardRef(({className:e,variant:t="primary",size:r="md",disabled:n=!1,loading:o=!1,children:a,...s},c)=>p.jsxs("button",{className:ne("btn",vs[t],ys[r],n&&"btn-disabled",o&&"btn-loading",e),ref:c,disabled:n||o,...s,children:[o&&p.jsx("span",{className:"btn-spinner","aria-hidden":"true",children:p.jsxs("svg",{className:"animate-spin h-4 w-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[p.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),p.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}),a]}));Fe.displayName="Button";const nn=N.forwardRef(({className:e,orientation:t="horizontal",size:r="md",variant:n="outline",children:o,...a},s)=>{const c=N.Children.map(o,i=>N.isValidElement(i)?N.cloneElement(i,{size:i.props.size||r,variant:i.props.variant||n}):i);return p.jsx("div",{className:ne("btn-group",t==="horizontal"&&"btn-group-horizontal",t==="vertical"&&"btn-group-vertical",e),ref:s,...a,children:c})});nn.displayName="ButtonGroup";const xs=({onRetry:e,onReload:t,onReportError:r})=>p.jsxs(nn,{className:"flex gap-4 justify-center flex-wrap",children:[p.jsx(Fe,{onClick:e,variant:"primary",children:"Try Again"}),p.jsx(Fe,{onClick:t,variant:"secondary",children:"Refresh Page"}),p.jsx(Fe,{onClick:r,variant:"secondary",children:"Report Error"})]}),tt=e=>{if(!e)return null;const t=new Date(e);return isNaN(t.getTime())?null:t},qs=e=>{const t=tt(e);return t?t.toLocaleString():"Invalid date"},Gs=e=>{const t=tt(e);return t?t.toLocaleDateString():"Invalid date"},Vs=e=>{const t=tt(e);return t?t.toISOString().split("T")[0]:""},ws=e=>{const t=tt(e);return t?t.toISOString():null},bs=({children:e,className:t,...r})=>p.jsx("div",{className:ne("min-h-screen flex items-center justify-center p-8 bg-gray-50",t),role:"alert","aria-live":"assertive",...r,children:e});class Ss extends N.Component{constructor(r){super(r);Oe(this,"handleRetry",()=>{this.setState({hasError:!1,error:null,errorInfo:null})});Oe(this,"handleReload",()=>{window.location.reload()});Oe(this,"handleReportError",()=>{this.errorReporting.reportError(this.state.error,this.state.errorInfo)});this.state={hasError:!1,error:null,errorInfo:null},this.errorReporting={reportError:(n,o)=>{const a={error:n==null?void 0:n.toString(),stack:n==null?void 0:n.stack,componentStack:o==null?void 0:o.componentStack,userAgent:navigator.userAgent,timestamp:ws(new Date),url:window.location.href};navigator.clipboard.writeText(JSON.stringify(a,null,2)).then(()=>{alert("Error details copied to clipboard. Please send this to support.")}).catch(()=>{alert("Failed to copy error details. Please try again.")})},logError:(n,o)=>{console.error("Error caught by boundary:",n,o)}}}static getDerivedStateFromError(r){return{hasError:!0}}componentDidCatch(r,n){this.setState({error:r,errorInfo:n}),this.errorReporting.logError(r,n)}render(){return this.state.hasError?p.jsx(bs,{children:p.jsxs(hs,{children:[p.jsx(ps,{children:"Oops! Something went wrong"}),p.jsx(ms,{children:"We're sorry, but something unexpected happened. You can try refreshing the page or contact support if the problem persists."}),this.state.error&&p.jsx(gs,{error:this.state.error,errorInfo:this.state.errorInfo}),p.jsx(xs,{onRetry:this.handleRetry,onReload:this.handleReload,onReportError:this.handleReportError})]})}):this.props.children}}const Es=({children:e})=>e,Rs=f.lazy(()=>K(()=>import("./LandingPage-BBS10Grj.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(e=>({default:e.LandingPage}))),Cs=f.lazy(()=>K(()=>import("./LoginPage-Ckincecw.js"),__vite__mapDeps([12,9,4,10,1,13,14,11])).then(e=>({default:e.LoginPage}))),Ps=f.lazy(()=>K(()=>import("./RegisterPage-Cf-sXby2.js"),__vite__mapDeps([15,13,14,11])).then(e=>({default:e.RegisterPage}))),js=f.lazy(()=>K(()=>import("./DashboardPage-DjVP0e2L.js"),__vite__mapDeps([16,8,11,17,10,1,18,6,19])).then(e=>({default:e.DashboardPage}))),_s=f.lazy(()=>K(()=>import("./MapPage-BLNQ6ZTG.js"),__vite__mapDeps([20,21,11,22,17,10,1,18,6,3,4,5,19,23])).then(e=>({default:e.MapPage}))),Ts=f.lazy(()=>K(()=>import("./TreeDetailPage-B6nEFtyV.js"),__vite__mapDeps([24,1,2,3,4,5,6,7,8,11])).then(e=>({default:e.TreeDetailPage}))),Is=f.lazy(()=>K(()=>import("./AdminPage-CnbyUOAU.js"),__vite__mapDeps([25,5,7,19,13,21,11,22])).then(e=>({default:e.AdminPage}))),As=f.lazy(()=>K(()=>import("./ErrorPages-BOUlGSHx.js"),__vite__mapDeps([26,1,2,3,4,5,6,7,8,11])).then(e=>({default:e.NotFoundPage}))),Os=()=>p.jsx(Ss,{children:p.jsx(Ro,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:p.jsx(Ga,{children:p.jsx(Wa,{children:p.jsx(Lo,{children:p.jsxs(Es,{children:[p.jsx(f.Suspense,{fallback:p.jsx(Qr,{fullscreen:!0,text:"Loading page..."}),children:p.jsxs(go,{children:[p.jsx(B,{path:"/",element:p.jsx(Rs,{})}),p.jsx(B,{path:"/login",element:p.jsx(Cs,{})}),p.jsx(B,{path:"/register",element:p.jsx(Ps,{})}),p.jsx(B,{path:"/dashboard",element:p.jsx($e,{children:p.jsx(js,{})})}),p.jsx(B,{path:"/map",element:p.jsx($e,{children:p.jsx(_s,{})})}),p.jsx(B,{path:"/tree/:id",element:p.jsx($e,{children:p.jsx(Ts,{})})}),p.jsx(B,{path:"/admin",element:p.jsx($e,{children:p.jsx(Is,{})})}),p.jsx(B,{path:"*",element:p.jsx(As,{})})]})}),p.jsx(ds,{})]})})})})})}),ks=(e="root")=>{const t=document.getElementById(e);if(!t)throw new Error(`Root element with id '${e}' not found in the document`);return t},Ns=e=>wn.createRoot(e),Ls=e=>{e.render(p.jsx(N.StrictMode,{children:p.jsx(Os,{})}))},$s=()=>{try{const e=ks(),t=Ns(e);Ls(t)}catch(e){throw console.error("Failed to initialize application:",e),e}};$s();export{ko as A,nn as B,Us as L,po as N,vn as R,Ye as a,En as b,fs as c,$ as d,Qr as e,N as f,Ms as g,Fs as h,Vs as i,p as j,Ws as k,ne as l,Bs as m,qs as n,Fe as o,Gs as p,f as r,No as u}; diff --git a/frontend/dist/assets/index-fKubZ8c-.css b/frontend/dist/assets/index-fKubZ8c-.css new file mode 100644 index 0000000000..98ce50c976 --- /dev/null +++ b/frontend/dist/assets/index-fKubZ8c-.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}.dark{--color-primary: 14 165 233;--color-secondary: 132 204 22;--color-success: 34 197 94;--color-warning: 245 158 11;--color-error: 239 68 68}body{font-feature-settings:"rlig" 1,"calt" 1;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}body:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}*{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.\!container{width:100%!important}.container{width:100%}@media (min-width: 320px){.\!container{max-width:320px!important}.container{max-width:320px}}@media (min-width: 640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width: 768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width: 1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width: 1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width: 1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn:disabled{pointer-events:none;opacity:.5}.btn-primary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.btn-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-secondary:disabled{pointer-events:none;opacity:.5}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(77 124 15 / var(--tw-bg-opacity, 1))}.btn-outline{display:inline-flex;align-items:center;justify-content:center;border-radius:.375rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-outline:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-outline:disabled{pointer-events:none;opacity:.5}.btn-outline{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.btn-outline:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.btn-outline:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.btn-outline:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.form-input{display:flex;height:2.5rem;width:100%;border-radius:.375rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem}.form-input::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.form-input::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.form-input:focus-visible{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(14 165 233 / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 2px}.form-input:disabled{cursor:not-allowed;opacity:.5}.form-input:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.form-input:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.form-input:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:0}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-mb-px{margin-bottom:-1px}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-72{height:18rem}.h-8{height:2rem}.h-96{height:24rem}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/80{background-color:#fffc}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-700{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-4{padding-bottom:1rem}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pt-20{padding-top:5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-100{--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.text-green-200{--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.skip-link{position:absolute;left:0;top:0;z-index:50;--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));padding:.5rem 1rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.skip-link:focus{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-gray-300:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-green-700:hover{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-offset-2:focus{outline-offset:2px}.focus\:outline-blue-500:focus{outline-color:#3b82f6}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark\:divide-gray-700:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(55 65 81 / var(--tw-divide-opacity, 1))}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-green-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.dark\:border-red-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-gray-100:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-green-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:from-gray-900:is(.dark *){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-600:is(.dark *){--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-green-800:is(.dark *){--tw-gradient-to: #166534 var(--tw-gradient-to-position)}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-green-200:is(.dark *){--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-green-700:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-gray-900\/50:is(.dark *){--tw-shadow-color: rgb(17 24 39 / .5);--tw-shadow: var(--tw-shadow-colored)}.dark\:hover\:bg-gray-100:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-200:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-900:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/20:hover:is(.dark *){background-color:#14532d33}.dark\:hover\:bg-green-900\/30:hover:is(.dark *){background-color:#14532d4d}.dark\:hover\:bg-red-900\/30:hover:is(.dark *){background-color:#7f1d1d4d}.dark\:hover\:text-blue-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-700:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:flex-row{flex-direction:row}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width: 768px){.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-6xl{font-size:3.75rem;line-height:1}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:sticky{position:sticky}.lg\:z-10{z-index:10}.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:hidden{display:none}.lg\:w-64{width:16rem}.lg\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:p-8{padding:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>svg\]\:opacity-70>svg{opacity:.7}@media (min-width: 768px){.md\:\[\&\>svg\]\:h-20>svg{height:5rem}.md\:\[\&\>svg\]\:w-20>svg{width:5rem}} diff --git a/frontend/dist/assets/leaflet-DEYfr1U5.js b/frontend/dist/assets/leaflet-DEYfr1U5.js new file mode 100644 index 0000000000..c0f6822033 --- /dev/null +++ b/frontend/dist/assets/leaflet-DEYfr1U5.js @@ -0,0 +1,4 @@ +import{r as A,f as ni}from"./index-Cp0G27Fl.js";import{g as es}from"./vendor-BtP0CW_r.js";function is(d,_){const u=A.useRef(_);A.useEffect(function(){_!==u.current&&d.attributionControl!=null&&(u.current!=null&&d.attributionControl.removeAttribution(u.current),_!=null&&d.attributionControl.addAttribution(_)),u.current=_},[d,_])}const ns=1;function os(d){return Object.freeze({__version:ns,map:d})}function gs(d,_){return Object.freeze({...d,..._})}const Pn=A.createContext(null),Ln=Pn.Provider;function Tn(){const d=A.useContext(Pn);if(d==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of ");return d}function ss(d){function _(u,v){const{instance:m,context:R}=d(u).current;return A.useImperativeHandle(v,()=>m),u.children==null?null:ni.createElement(Ln,{value:R},u.children)}return A.forwardRef(_)}function rs(d){function _(u,v){const{instance:m}=d(u).current;return A.useImperativeHandle(v,()=>m),null}return A.forwardRef(_)}function as(d,_){const u=A.useRef();A.useEffect(function(){return _!=null&&d.instance.on(_),u.current=_,function(){u.current!=null&&d.instance.off(u.current),u.current=null}},[d,_])}function bn(d,_){const u=d.pane??_.pane;return u?{...d,pane:u}:d}var Jt={exports:{}};/* @preserve + * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com + * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */var hs=Jt.exports,xn;function us(){return xn||(xn=1,function(d,_){(function(u,v){v(_)})(hs,function(u){var v="1.9.4";function m(t){var e,i,n,o;for(i=1,n=arguments.length;i"u"||!L||!L.Mixin)){t=et(t)?t:[t];for(var e=0;e0?Math.floor(t):Math.ceil(t)};y.prototype={clone:function(){return new y(this.x,this.y)},add:function(t){return this.clone()._add(g(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(g(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new y(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new y(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=ui(this.x),this.y=ui(this.y),this},distanceTo:function(t){t=g(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=g(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=g(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+X(this.x)+", "+X(this.y)+")"}};function g(t,e,i){return t instanceof y?t:et(t)?new y(t[0],t[1]):t==null?t:typeof t=="object"&&"x"in t&&"y"in t?new y(t.x,t.y):new y(t,e,i)}function Z(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=q(t);var e=this.min,i=this.max,n=t.min,o=t.max,s=o.x>=e.x&&n.x<=i.x,r=o.y>=e.y&&n.y<=i.y;return s&&r},overlaps:function(t){t=q(t);var e=this.min,i=this.max,n=t.min,o=t.max,s=o.x>e.x&&n.xe.y&&n.y=e.lat&&o.lat<=i.lat&&n.lng>=e.lng&&o.lng<=i.lng},intersects:function(t){t=N(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=e.lat&&n.lat<=i.lat,r=o.lng>=e.lng&&n.lng<=i.lng;return s&&r},overlaps:function(t){t=N(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>e.lat&&n.late.lng&&n.lng1,Un=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",O,e),window.removeEventListener("testPassiveEventSupport",O,e)}catch{}return t}(),Gn=function(){return!!document.createElement("canvas").getContext}(),Ee=!!(document.createElementNS&&ci("svg").createSVGRect),Vn=!!Ee&&function(){var t=document.createElement("div");return t.innerHTML="",(t.firstChild&&t.firstChild.namespaceURI)==="http://www.w3.org/2000/svg"}(),qn=!Ee&&function(){try{var t=document.createElement("div");t.innerHTML='';var e=t.firstChild;return e.style.behavior="url(#default#VML)",e&&typeof e.adj=="object"}catch{return!1}}(),jn=navigator.platform.indexOf("Mac")===0,Kn=navigator.platform.indexOf("Linux")===0;function ot(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var f={ie:ee,ielt9:kn,edge:di,webkit:Ce,android:_i,android23:mi,androidStock:Zn,opera:Se,chrome:pi,gecko:vi,safari:In,phantom:gi,opera12:yi,win:An,ie3d:wi,webkit3d:ze,gecko3d:xi,any3d:Bn,mobile:Nt,mobileWebkit:Rn,mobileWebkit3d:Nn,msPointer:Pi,pointer:Li,touch:Dn,touchNative:Ti,mobileOpera:Hn,mobileGecko:Fn,retina:Wn,passiveEvents:Un,canvas:Gn,svg:Ee,vml:qn,inlineSvg:Vn,mac:jn,linux:Kn},bi=f.msPointer?"MSPointerDown":"pointerdown",Mi=f.msPointer?"MSPointerMove":"pointermove",Ci=f.msPointer?"MSPointerUp":"pointerup",Si=f.msPointer?"MSPointerCancel":"pointercancel",ke={touchstart:bi,touchmove:Mi,touchend:Ci,touchcancel:Si},zi={touchstart:to,touchmove:ie,touchend:ie,touchcancel:ie},Mt={},Ei=!1;function Yn(t,e,i){return e==="touchstart"&&Qn(),zi[e]?(i=zi[e].bind(this,i),t.addEventListener(ke[e],i,!1),i):(console.warn("wrong event specified:",e),O)}function Xn(t,e,i){if(!ke[e]){console.warn("wrong event specified:",e);return}t.removeEventListener(ke[e],i,!1)}function Jn(t){Mt[t.pointerId]=t}function $n(t){Mt[t.pointerId]&&(Mt[t.pointerId]=t)}function ki(t){delete Mt[t.pointerId]}function Qn(){Ei||(document.addEventListener(bi,Jn,!0),document.addEventListener(Mi,$n,!0),document.addEventListener(Ci,ki,!0),document.addEventListener(Si,ki,!0),Ei=!0)}function ie(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){e.touches=[];for(var i in Mt)e.touches.push(Mt[i]);e.changedTouches=[e],t(e)}}function to(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&W(e),ie(t,e)}function eo(t){var e={},i,n;for(n in t)i=t[n],e[n]=i&&i.bind?i.bind(t):i;return t=e,e.type="dblclick",e.detail=2,e.isTrusted=!1,e._simulated=!0,e}var io=200;function no(t,e){t.addEventListener("dblclick",e);var i=0,n;function o(s){if(s.detail!==1){n=s.detail;return}if(!(s.pointerType==="mouse"||s.sourceCapabilities&&!s.sourceCapabilities.firesTouchEvents)){var r=Bi(s);if(!(r.some(function(h){return h instanceof HTMLLabelElement&&h.attributes.for})&&!r.some(function(h){return h instanceof HTMLInputElement||h instanceof HTMLSelectElement}))){var a=Date.now();a-i<=io?(n++,n===2&&e(eo(s))):n=1,i=a}}}return t.addEventListener("click",o),{dblclick:e,simDblclick:o}}function oo(t,e){t.removeEventListener("dblclick",e.dblclick),t.removeEventListener("click",e.simDblclick)}var Oe=se(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),Dt=se(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),Oi=Dt==="webkitTransition"||Dt==="OTransition"?Dt+"End":"transitionend";function Zi(t){return typeof t=="string"?document.getElementById(t):t}function Ht(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];if((!i||i==="auto")&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);i=n?n[e]:null}return i==="auto"?null:i}function C(t,e,i){var n=document.createElement(t);return n.className=e||"",i&&i.appendChild(n),n}function I(t){var e=t.parentNode;e&&e.removeChild(t)}function ne(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function Ct(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function St(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function Ze(t,e){if(t.classList!==void 0)return t.classList.contains(e);var i=oe(t);return i.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(i)}function x(t,e){if(t.classList!==void 0)for(var i=ht(e),n=0,o=i.length;n0?2*window.devicePixelRatio:1;function Ni(t){return f.edge?t.wheelDeltaY/2:t.deltaY&&t.deltaMode===0?-t.deltaY/ao:t.deltaY&&t.deltaMode===1?-t.deltaY*20:t.deltaY&&t.deltaMode===2?-t.deltaY*60:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?-t.detail*20:t.detail?t.detail/-32765*60:0}function Ve(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch{return!1}return i!==t}var ho={__proto__:null,on:w,off:k,stopPropagation:Lt,disableScrollPropagation:Ge,disableClickPropagation:Gt,preventDefault:W,stop:Tt,getPropagationPath:Bi,getMousePosition:Ri,getWheelDelta:Ni,isExternalTarget:Ve,addListener:w,removeListener:k},Di=Bt.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pt(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=V(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=this._duration*1e3;ethis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),n=this._limitCenter(i,this._zoom,N(t));return i.equals(n)||this.panTo(n,e),this._enforcingBounds=!1,this},panInside:function(t,e){e=e||{};var i=g(e.paddingTopLeft||e.padding||[0,0]),n=g(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),s=this.project(t),r=this.getPixelBounds(),a=q([r.min.add(i),r.max.subtract(n)]),h=a.getSize();if(!a.contains(s)){this._enforcingBounds=!0;var l=s.subtract(a.getCenter()),c=a.extend(s).getSize().subtract(h);o.x+=l.x<0?-c.x:c.x,o.y+=l.y<0?-c.y:c.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=m({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),o=i.divideBy(2).round(),s=n.subtract(o);return!s.x&&!s.y?this:(t.animate&&t.pan?this.panBy(s):(t.pan&&this._rawPanBy(s),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(S(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i}))},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=m({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=S(this._handleGeolocationResponse,this),i=S(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){if(this._container._leaflet_id){var e=t.code,i=t.message||(e===1?"permission denied":e===2?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})}},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e=t.coords.latitude,i=t.coords.longitude,n=new z(e,i),o=n.toBounds(t.coords.accuracy*2),s=this._locateOptions;if(s.setView){var r=this.getBoundsZoom(o);this.setView(n,s.maxZoom?Math.min(r,s.maxZoom):r)}var a={latlng:n,bounds:o,timestamp:t.timestamp};for(var h in t.coords)typeof t.coords[h]=="number"&&(a[h]=t.coords[h]);this.fire("locationfound",a)}},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch{this._container._leaflet_id=void 0,this._containerId=void 0}this._locationWatchId!==void 0&&this.stopLocate(),this._stop(),I(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(J(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload");var t;for(t in this._layers)this._layers[t].remove();for(t in this._panes)I(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){var i="leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),n=C("div",i,e||this._mapPane);return t&&(this._panes[t]=n),n},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new j(e,i)},getMinZoom:function(){return this.options.minZoom===void 0?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===void 0?this._layersMaxZoom===void 0?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=N(t),i=g(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),a=t.getSouthEast(),h=this.getSize().subtract(i),l=q(this.project(a,n),this.project(r,n)).getSize(),c=f.any3d?this.options.zoomSnap:1,p=h.x/l.x,P=h.y/l.y,G=e?Math.max(p,P):Math.min(p,P);return n=this.getScaleZoom(G,n),c&&(n=Math.round(n/(c/100))*(c/100),n=e?Math.ceil(n/c)*c:Math.floor(n/c)*c),Math.max(o,Math.min(s,n))},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new y(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){var i=this._getTopLeftPoint(t,e);return new Z(i,i.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(t===void 0?this.getZoom():t)},getPane:function(t){return typeof t=="string"?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=e===void 0?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs;e=e===void 0?this._zoom:e;var n=i.zoom(t*i.scale(e));return isNaN(n)?1/0:n},project:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.latLngToPoint(b(t),e)},unproject:function(t,e){return e=e===void 0?this._zoom:e,this.options.crs.pointToLatLng(g(t),e)},layerPointToLatLng:function(t){var e=g(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(b(t))._round();return e._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(b(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(N(t))},distance:function(t,e){return this.options.crs.distance(b(t),b(e))},containerPointToLayerPoint:function(t){return g(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return g(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(g(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(b(t)))},mouseEventToContainerPoint:function(t){return Ri(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=Zi(t);if(e){if(e._leaflet_id)throw new Error("Map container is already initialized.")}else throw new Error("Map container not found.");w(e,"scroll",this._onScroll,this),this._containerId=T(e)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&f.any3d,x(t,"leaflet-container"+(f.touch?" leaflet-touch":"")+(f.retina?" leaflet-retina":"")+(f.ielt9?" leaflet-oldie":"")+(f.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var e=Ht(t,"position");e!=="absolute"&&e!=="relative"&&e!=="fixed"&&e!=="sticky"&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),D(this._mapPane,new y(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(x(t.markerPane,"leaflet-zoom-hide"),x(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){D(this._mapPane,new y(0,0));var n=!this._loaded;this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset");var o=this._zoom!==e;this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){e===void 0&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return J(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){D(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[T(this._container)]=this;var e=t?k:w;e(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),f.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){J(this._resizeRequest),this._resizeRequest=V(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i=[],n,o=e==="mouseout"||e==="mouseover",s=t.target||t.srcElement,r=!1;s;){if(n=this._targets[T(s)],n&&(e==="click"||e==="preclick")&&this._draggableMoved(n)){r=!0;break}if(n&&n.listens(e,!0)&&(o&&!Ve(s,t)||(i.push(n),o))||s===this._container)break;s=s.parentNode}return!i.length&&!r&&!o&&this.listens(e,!0)&&(i=[this]),i},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e=t.target||t.srcElement;if(!(!this._loaded||e._leaflet_disable_events||t.type==="click"&&this._isClickDisabled(e))){var i=t.type;i==="mousedown"&&De(e),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){if(t.type==="click"){var n=m({},t);n.type="preclick",this._fireDOMEvent(n,n.type,i)}var o=this._findEventTargets(t,e);if(i){for(var s=[],r=0;r0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),n=f.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){B(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._trunc();return(e&&e.animate)!==!0&&!this.getSize().contains(i)?!1:(this.panBy(i,e),!0)},_createAnimProxy:function(){var t=this._proxy=C("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(e){var i=Oe,n=this._proxy.style[i];xt(this._proxy,this.project(e.center,e.zoom),this.getZoomScale(e.zoom,1)),n===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){I(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();xt(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n);return i.animate!==!0&&!this.getSize().contains(o)?!1:(V(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this),!0)},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,x(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(S(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&B(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function uo(t,e){return new M(t,e)}var it=ut.extend({options:{position:"topright"},initialize:function(t){E(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return x(e,"leaflet-control"),i.indexOf("bottom")!==-1?n.insertBefore(e,n.firstChild):n.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(I(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),Vt=function(t){return new it(t)};M.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},e="leaflet-",i=this._controlContainer=C("div",e+"control-container",this._container);function n(o,s){var r=e+o+" "+e+s;t[o+s]=C("div",r,i)}n("top","left"),n("top","right"),n("bottom","left"),n("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)I(this._controlCorners[t]);I(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Hi=it.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,n){return i1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=e&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(T(t.target)),i=e.overlay?t.type==="add"?"overlayadd":"overlayremove":t.type==="add"?"baselayerchange":null;i&&this._map.fire(i,e)},_createRadioElement:function(t,e){var i='",n=document.createElement("div");return n.innerHTML=i,n.firstChild},_addItem:function(t){var e=document.createElement("label"),i=this._map.hasLayer(t.layer),n;t.overlay?(n=document.createElement("input"),n.type="checkbox",n.className="leaflet-control-layers-selector",n.defaultChecked=i):n=this._createRadioElement("leaflet-base-layers_"+T(this),i),this._layerControlInputs.push(n),n.layerId=T(t.layer),w(n,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var s=document.createElement("span");e.appendChild(s),s.appendChild(n),s.appendChild(o);var r=t.overlay?this._overlaysList:this._baseLayersList;return r.appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){if(!this._preventClick){var t=this._layerControlInputs,e,i,n=[],o=[];this._handlingClick=!0;for(var s=t.length-1;s>=0;s--)e=t[s],i=this._getLayer(e.layerId).layer,e.checked?n.push(i):e.checked||o.push(i);for(s=0;s=0;o--)e=t[o],i=this._getLayer(e.layerId).layer,e.disabled=i.options.minZoom!==void 0&&ni.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section;this._preventClick=!0,w(t,"click",W),this.expand();var e=this;setTimeout(function(){k(t,"click",W),e._preventClick=!1})}}),lo=function(t,e,i){return new Hi(t,e,i)},qe=it.extend({options:{position:"topleft",zoomInText:'',zoomInTitle:"Zoom in",zoomOutText:'',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=C("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){var s=C("a",i,n);return s.innerHTML=t,s.href="#",s.title=e,s.setAttribute("role","button"),s.setAttribute("aria-label",e),Gt(s),w(s,"click",Tt),w(s,"click",o,this),w(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";B(this._zoomInButton,e),B(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),(this._disabled||t._zoom===t.getMinZoom())&&(x(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),(this._disabled||t._zoom===t.getMaxZoom())&&(x(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}});M.mergeOptions({zoomControl:!0}),M.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new qe,this.addControl(this.zoomControl))});var co=function(t){return new qe(t)},Fi=it.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=C("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=C("div",e,i)),t.imperial&&(this._iScale=C("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,i=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(i)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t),i=e<1e3?e+" m":e/1e3+" km";this._updateScale(this._mScale,i,e/t)},_updateImperial:function(t){var e=t*3.2808399,i,n,o;e>5280?(i=e/5280,n=this._getRoundNum(i),this._updateScale(this._iScale,n+" mi",n/i)):(o=this._getRoundNum(e),this._updateScale(this._iScale,o+" ft",o/e))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),fo=function(t){return new Fi(t)},_o='',je=it.extend({options:{position:"bottomright",prefix:''+(f.inlineSvg?_o+" ":"")+"Leaflet"},initialize:function(t){E(this,t),this._attributions={}},onAdd:function(t){t.attributionControl=this,this._container=C("div","leaflet-control-attribution"),Gt(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(' ')}}});M.mergeOptions({attributionControl:!0}),M.addInitHook(function(){this.options.attributionControl&&new je().addTo(this)});var mo=function(t){return new je(t)};it.Layers=Hi,it.Zoom=qe,it.Scale=Fi,it.Attribution=je,Vt.layers=lo,Vt.zoom=co,Vt.scale=fo,Vt.attribution=mo;var rt=ut.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled?this:(this._enabled=!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});rt.addTo=function(t,e){return t.addHandler(e,this),this};var po={Events:Y},Wi=f.touch?"touchstart mousedown":"mousedown",pt=Bt.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){E(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(w(this._dragStartTarget,Wi,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(pt._dragging===this&&this.finishDrag(!0),k(this._dragStartTarget,Wi,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(this._enabled&&(this._moved=!1,!Ze(this._element,"leaflet-zoom-anim"))){if(t.touches&&t.touches.length!==1){pt._dragging===this&&this.finishDrag();return}if(!(pt._dragging||t.shiftKey||t.which!==1&&t.button!==1&&!t.touches)&&(pt._dragging=this,this._preventOutline&&De(this._element),Be(),Ft(),!this._moving)){this.fire("down");var e=t.touches?t.touches[0]:t,i=Ii(this._element);this._startPoint=new y(e.clientX,e.clientY),this._startPos=Pt(this._element),this._parentScale=He(i);var n=t.type==="mousedown";w(document,n?"mousemove":"touchmove",this._onMove,this),w(document,n?"mouseup":"touchend touchcancel",this._onUp,this)}}},_onMove:function(t){if(this._enabled){if(t.touches&&t.touches.length>1){this._moved=!0;return}var e=t.touches&&t.touches.length===1?t.touches[0]:t,i=new y(e.clientX,e.clientY)._subtract(this._startPoint);!i.x&&!i.y||Math.abs(i.x)+Math.abs(i.y)s&&(r=a,s=h);s>i&&(e[r]=1,Ye(t,e,i,n,r),Ye(t,e,i,r,o))}function wo(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;ne&&(i.push(t[n]),o=n);return oe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function xo(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n}function qt(t,e,i,n){var o=e.x,s=e.y,r=i.x-o,a=i.y-s,h=r*r+a*a,l;return h>0&&(l=((t.x-o)*r+(t.y-s)*a)/h,l>1?(o=i.x,s=i.y):l>0&&(o+=r*l,s+=a*l)),r=t.x-o,a=t.y-s,n?r*r+a*a:new y(o,s)}function Q(t){return!et(t[0])||typeof t[0][0]!="object"&&typeof t[0][0]<"u"}function Yi(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),Q(t)}function Xi(t,e){var i,n,o,s,r,a,h,l;if(!t||t.length===0)throw new Error("latlngs not passed");Q(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);var c=b([0,0]),p=N(t),P=p.getNorthWest().distanceTo(p.getSouthWest())*p.getNorthEast().distanceTo(p.getNorthWest());P<1700&&(c=Ke(t));var G=t.length,F=[];for(i=0;in){h=(s-n)/o,l=[a.x-h*(a.x-r.x),a.y-h*(a.y-r.y)];break}var K=e.unproject(g(l));return b([K.lat+c.lat,K.lng+c.lng])}var Po={__proto__:null,simplify:Vi,pointToSegmentDistance:qi,closestPointOnSegment:go,clipSegment:Ki,_getEdgeIntersection:he,_getBitCode:bt,_sqClosestPointOnSegment:qt,isFlat:Q,_flat:Yi,polylineCenter:Xi},Xe={project:function(t){return new y(t.lng,t.lat)},unproject:function(t){return new z(t.y,t.x)},bounds:new Z([-180,-90],[180,90])},Je={R:6378137,R_MINOR:6356752314245179e-9,bounds:new Z([-2003750834279e-5,-1549657073972e-5],[2003750834279e-5,1876465623138e-5]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,o=this.R_MINOR/i,s=Math.sqrt(1-o*o),r=s*Math.sin(n),a=Math.tan(Math.PI/4-n/2)/Math.pow((1-r)/(1+r),s/2);return n=-i*Math.log(Math.max(a,1e-10)),new y(t.lng*e*i,n)},unproject:function(t){for(var e=180/Math.PI,i=this.R,n=this.R_MINOR/i,o=Math.sqrt(1-n*n),s=Math.exp(-t.y/i),r=Math.PI/2-2*Math.atan(s),a=0,h=.1,l;a<15&&Math.abs(h)>1e-7;a++)l=o*Math.sin(r),l=Math.pow((1-l)/(1+l),o/2),h=Math.PI/2-2*Math.atan(s*l)-r,r+=h;return new z(r*e,t.x*e/i)}},Lo={__proto__:null,LonLat:Xe,Mercator:Je,SphericalMercator:Le},To=m({},mt,{code:"EPSG:3395",projection:Je,transformation:function(){var t=.5/(Math.PI*Je.R);return Rt(t,.5,-t,.5)}()}),Ji=m({},mt,{code:"EPSG:4326",projection:Xe,transformation:Rt(1/180,1,-1/180,.5)}),bo=m({},lt,{projection:Xe,transformation:Rt(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,n=e.lat-t.lat;return Math.sqrt(i*i+n*n)},infinite:!0});lt.Earth=mt,lt.EPSG3395=To,lt.EPSG3857=be,lt.EPSG900913=En,lt.EPSG4326=Ji,lt.Simple=bo;var nt=Bt.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[T(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[T(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e=t.target;if(e.hasLayer(this)){if(this._map=e,this._zoomAnimated=e._zoomAnimated,this.getEvents){var i=this.getEvents();e.on(i,this),this.once("remove",function(){e.off(i,this)},this)}this.onAdd(e),this.fire("add"),e.fire("layeradd",{layer:this})}}});M.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var e=T(t);return this._layers[e]?this:(this._layers[e]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var e=T(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return T(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){t=t?et(t)?t:[t]:[];for(var e=0,i=t.length;ethis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),this.options.minZoom===void 0&&this._layersMinZoom&&this.getZoom()=2&&e[0]instanceof z&&e[0].equals(e[i-1])&&e.pop(),e},_setLatLngs:function(t){ft.prototype._setLatLngs.call(this,t),Q(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return Q(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,i=new y(e,e);if(t=new Z(t.min.subtract(i),t.max.add(i)),this._parts=[],!(!this._pxBounds||!this._pxBounds.intersects(t))){if(this.options.noClip){this._parts=this._rings;return}for(var n=0,o=this._rings.length,s;nt.y!=o.y>t.y&&t.x<(o.x-n.x)*(t.y-n.y)/(o.y-n.y)+n.x&&(e=!e);return e||ft.prototype._containsPoint.call(this,t,!0)}});function Zo(t,e){return new kt(t,e)}var dt=ct.extend({initialize:function(t,e){E(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e=et(t)?t:t.features,i,n,o;if(e){for(i=0,n=e.length;i0&&o.push(o[0].slice()),o}function Ot(t,e){return t.feature?m({},t.feature,{geometry:e}):_e(e)}function _e(t){return t.type==="Feature"||t.type==="FeatureCollection"?t:{type:"Feature",properties:{},geometry:t}}var ei={toGeoJSON:function(t){return Ot(this,{type:"Point",coordinates:ti(this.getLatLng(),t)})}};ue.include(ei),$e.include(ei),le.include(ei),ft.include({toGeoJSON:function(t){var e=!Q(this._latlngs),i=de(this._latlngs,e?1:0,!1,t);return Ot(this,{type:(e?"Multi":"")+"LineString",coordinates:i})}}),kt.include({toGeoJSON:function(t){var e=!Q(this._latlngs),i=e&&!Q(this._latlngs[0]),n=de(this._latlngs,i?2:e?1:0,!0,t);return e||(n=[n]),Ot(this,{type:(i?"Multi":"")+"Polygon",coordinates:n})}}),zt.include({toMultiPoint:function(t){var e=[];return this.eachLayer(function(i){e.push(i.toGeoJSON(t).geometry.coordinates)}),Ot(this,{type:"MultiPoint",coordinates:e})},toGeoJSON:function(t){var e=this.feature&&this.feature.geometry&&this.feature.geometry.type;if(e==="MultiPoint")return this.toMultiPoint(t);var i=e==="GeometryCollection",n=[];return this.eachLayer(function(o){if(o.toGeoJSON){var s=o.toGeoJSON(t);if(i)n.push(s.geometry);else{var r=_e(s);r.type==="FeatureCollection"?n.push.apply(n,r.features):n.push(r)}}}),i?Ot(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}});function tn(t,e){return new dt(t,e)}var Io=tn,me=nt.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,e,i){this._url=t,this._bounds=N(e),E(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(x(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){I(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&Ct(this._image),this},bringToBack:function(){return this._map&&St(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=N(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=this._url.tagName==="IMG",e=this._image=t?this._url:C("img");if(x(e,"leaflet-image-layer"),this._zoomAnimated&&x(e,"leaflet-zoom-animated"),this.options.className&&x(e,this.options.className),e.onselectstart=O,e.onmousemove=O,e.onload=S(this.fire,this,"load"),e.onerror=S(this._overlayOnError,this,"error"),(this.options.crossOrigin||this.options.crossOrigin==="")&&(e.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t){this._url=e.src;return}e.src=this._url,e.alt=this.options.alt},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),i=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;xt(this._image,i,e)},_reset:function(){var t=this._image,e=new Z(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();D(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){$(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&this.options.zIndex!==void 0&&this.options.zIndex!==null&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),Ao=function(t,e,i){return new me(t,e,i)},en=me.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t=this._url.tagName==="VIDEO",e=this._image=t?this._url:C("video");if(x(e,"leaflet-image-layer"),this._zoomAnimated&&x(e,"leaflet-zoom-animated"),this.options.className&&x(e,this.options.className),e.onselectstart=O,e.onmousemove=O,e.onloadeddata=S(this.fire,this,"load"),t){for(var i=e.getElementsByTagName("source"),n=[],o=0;o0?n:[e.src];return}et(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var s=0;so?(e.height=o+"px",x(t,s)):B(t,s),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),i=this._getAnchor();D(this._container,e.add(i))},_adjustPan:function(){if(this.options.autoPan){if(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning){this._autopanning=!1;return}var t=this._map,e=parseInt(Ht(this._container,"marginBottom"),10)||0,i=this._container.offsetHeight+e,n=this._containerWidth,o=new y(this._containerLeft,-i-this._containerBottom);o._add(Pt(this._container));var s=t.layerPointToContainerPoint(o),r=g(this.options.autoPanPadding),a=g(this.options.autoPanPaddingTopLeft||r),h=g(this.options.autoPanPaddingBottomRight||r),l=t.getSize(),c=0,p=0;s.x+n+h.x>l.x&&(c=s.x+n-l.x+h.x),s.x-c-a.x<0&&(c=s.x-a.x),s.y+i+h.y>l.y&&(p=s.y+i-l.y+h.y),s.y-p-a.y<0&&(p=s.y-a.y),(c||p)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([c,p]))}},_getAnchor:function(){return g(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),No=function(t,e){return new pe(t,e)};M.mergeOptions({closePopupOnClick:!0}),M.include({openPopup:function(t,e,i){return this._initOverlay(pe,t,e,i).openOn(this),this},closePopup:function(t){return t=arguments.length?t:this._popup,t&&t.close(),this}}),nt.include({bindPopup:function(t,e){return this._popup=this._initOverlay(pe,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof ct||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return this._popup?this._popup.isOpen():!1},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){if(!(!this._popup||!this._map)){Tt(t);var e=t.layer||t.target;if(this._popup._source===e&&!(e instanceof vt)){this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng);return}this._popup._source=e,this.openPopup(t.latlng)}},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){t.originalEvent.keyCode===13&&this._openPopup(t)}});var ve=at.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){at.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){at.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=at.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip",e=t+" "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=C("div",e),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+T(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i,n=this._map,o=this._container,s=n.latLngToContainerPoint(n.getCenter()),r=n.layerPointToContainerPoint(t),a=this.options.direction,h=o.offsetWidth,l=o.offsetHeight,c=g(this.options.offset),p=this._getAnchor();a==="top"?(e=h/2,i=l):a==="bottom"?(e=h/2,i=0):a==="center"?(e=h/2,i=l/2):a==="right"?(e=0,i=l/2):a==="left"?(e=h,i=l/2):r.xthis.options.maxZoom||in?this._retainParent(o,s,r,n):!1)},_retainChildren:function(t,e,i,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*e;s<2*e+2;s++){var r=new y(o,s);r.z=i+1;var a=this._tileCoordsToKey(r),h=this._tiles[a];if(h&&h.active){h.retain=!0;continue}else h&&h.loaded&&(h.retain=!0);i+1this.options.maxZoom||this.options.minZoom!==void 0&&o1){this._setView(t,i);return}for(var p=o.min.y;p<=o.max.y;p++)for(var P=o.min.x;P<=o.max.x;P++){var G=new y(P,p);if(G.z=this._tileZoom,!!this._isValidTile(G)){var F=this._tiles[this._tileCoordsToKey(G)];F?F.current=!0:r.push(G)}}if(r.sort(function(K,It){return K.distanceTo(s)-It.distanceTo(s)}),r.length!==0){this._loading||(this._loading=!0,this.fire("loading"));var tt=document.createDocumentFragment();for(P=0;Pi.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return N(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),o=n.add(i),s=e.unproject(n,t.z),r=e.unproject(o,t.z);return[s,r]},_tileCoordsToBounds:function(t){var e=this._tileCoordsToNwSe(t),i=new j(e[0],e[1]);return this.options.noWrap||(i=this._map.wrapLatLngBounds(i)),i},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var e=t.split(":"),i=new y(+e[0],+e[1]);return i.z=+e[2],i},_removeTile:function(t){var e=this._tiles[t];e&&(I(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){x(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=O,t.onmousemove=O,f.ielt9&&this.options.opacity<1&&$(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),S(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&V(S(this._tileReady,this,t,null,o)),D(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);i=this._tiles[n],i&&(i.loaded=+new Date,this._map._fadeAnimated?($(i.el,0),J(this._fadeFrame),this._fadeFrame=V(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(x(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),f.ielt9||!this._map._fadeAnimated?V(this._pruneTiles,this):setTimeout(S(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new y(this._wrapX?yt(t.x,this._wrapX):t.x,this._wrapY?yt(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new Z(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function Fo(t){return new Kt(t)}var Zt=Kt.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,e=E(this,e),e.detectRetina&&f.retina&&e.maxZoom>0?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),typeof e.subdomains=="string"&&(e.subdomains=e.subdomains.split("")),this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&e===void 0&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement("img");return w(i,"load",S(this._tileOnLoad,this,e,i)),w(i,"error",S(this._tileOnError,this,e,i)),(this.options.crossOrigin||this.options.crossOrigin==="")&&(i.crossOrigin=this.options.crossOrigin===!0?"":this.options.crossOrigin),typeof this.options.referrerPolicy=="string"&&(i.referrerPolicy=this.options.referrerPolicy),i.alt="",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:f.retina?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var i=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=i),e["-y"]=i}return wt(this._url,m(e,this.options))},_tileOnLoad:function(t,e){f.ielt9?setTimeout(S(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&e.getAttribute("src")!==n&&(e.src=n),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom,i=this.options.zoomReverse,n=this.options.zoomOffset;return i&&(t=e-t),t+n},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_abortLoading:function(){var t,e;for(t in this._tiles)if(this._tiles[t].coords.z!==this._tileZoom&&(e=this._tiles[t].el,e.onload=O,e.onerror=O,!e.complete)){e.src=te;var i=this._tiles[t].coords;I(e),delete this._tiles[t],this.fire("tileabort",{tile:e,coords:i})}},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute("src",te),Kt.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(!(!this._map||i&&i.getAttribute("src")===te))return Kt.prototype._tileReady.call(this,t,e,i)}});function sn(t,e){return new Zt(t,e)}var rn=Zt.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i=m({},this.defaultWmsParams);for(var n in e)n in this.options||(i[n]=e[n]);e=E(this,e);var o=e.detectRetina&&f.retina?2:1,s=this.getTileSize();i.width=s.x*o,i.height=s.y*o,this.wmsParams=i},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,Zt.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,n=q(i.project(e[0]),i.project(e[1])),o=n.min,s=n.max,r=(this._wmsVersion>=1.3&&this._crs===Ji?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),a=Zt.prototype.getTileUrl.call(this,t);return a+$t(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+r},setParams:function(t,e){return m(this.wmsParams,t),e||this.redraw(),this}});function Wo(t,e){return new rn(t,e)}Zt.WMS=rn,sn.wms=Wo;var _t=nt.extend({options:{padding:.1},initialize:function(t){E(this,t),T(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),x(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),s=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t,e));f.any3d?xt(this._container,s,i):D(this._container,s)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new Z(i,i.add(e.multiplyBy(1+t*2)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),an=_t.extend({options:{tolerance:0},getEvents:function(){var t=_t.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){_t.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");w(t,"mousemove",this._onMouseMove,this),w(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),w(t,"mouseout",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext("2d")},_destroyContainer:function(){J(this._redrawRequest),delete this._ctx,I(this._container),k(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){var t;this._redrawBounds=null;for(var e in this._layers)t=this._layers[e],t._update();this._redraw()}},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){_t.prototype._update.call(this);var t=this._bounds,e=this._container,i=t.getSize(),n=f.retina?2:1;D(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",f.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){_t.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[T(t)]=t;var e=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=e),this._drawLast=e,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,n=e.prev;i?i.prev=n:this._drawLast=n,n?n.next=i:this._drawFirst=i,delete t._order,delete this._layers[T(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(typeof t.options.dashArray=="string"){var e=t.options.dashArray.split(/[, ]+/),i=[],n,o;for(o=0;o')}}catch{}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),Uo={_initContainer:function(){this._container=C("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(_t.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=Yt("shape");x(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=Yt("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[T(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;I(e),t.removeInteractiveTarget(e),delete this._layers[T(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e||(e=t._stroke=Yt("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=et(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i||(i=t._fill=Yt("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,"+65535*360)},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){Ct(t._container)},_bringToBack:function(t){St(t._container)}},ge=f.vml?Yt:ci,Xt=_t.extend({_initContainer:function(){this._container=ge("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=ge("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){I(this._container),k(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){if(!(this._map._animatingZoom&&this._bounds)){_t.prototype._update.call(this);var t=this._bounds,e=t.getSize(),i=this._container;(!this._svgSize||!this._svgSize.equals(e))&&(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),D(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update")}},_initPath:function(t){var e=t._path=ge("path");t.options.className&&x(e,t.options.className),t.options.interactive&&x(e,"leaflet-interactive"),this._updateStyle(t),this._layers[T(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){I(t._path),t.removeInteractiveTarget(t._path),delete this._layers[T(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,i=t.options;e&&(i.stroke?(e.setAttribute("stroke",i.color),e.setAttribute("stroke-opacity",i.opacity),e.setAttribute("stroke-width",i.weight),e.setAttribute("stroke-linecap",i.lineCap),e.setAttribute("stroke-linejoin",i.lineJoin),i.dashArray?e.setAttribute("stroke-dasharray",i.dashArray):e.removeAttribute("stroke-dasharray"),i.dashOffset?e.setAttribute("stroke-dashoffset",i.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),i.fill?(e.setAttribute("fill",i.fillColor||i.color),e.setAttribute("fill-opacity",i.fillOpacity),e.setAttribute("fill-rule",i.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,fi(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n=Math.max(Math.round(t._radiusY),1)||i,o="a"+i+","+n+" 0 1,0 ",s=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+o+i*2+",0 "+o+-i*2+",0 ";this._setPath(t,s)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){Ct(t._path)},_bringToBack:function(t){St(t._path)}});f.vml&&Xt.include(Uo);function un(t){return f.svg||f.vml?new Xt(t):null}M.include({getRenderer:function(t){var e=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return e||(e=this._renderer=this._createRenderer()),this.hasLayer(e)||this.addLayer(e),e},_getPaneRenderer:function(t){if(t==="overlayPane"||t===void 0)return!1;var e=this._paneRenderers[t];return e===void 0&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e},_createRenderer:function(t){return this.options.preferCanvas&&hn(t)||un(t)}});var ln=kt.extend({initialize:function(t,e){kt.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=N(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function Go(t,e){return new ln(t,e)}Xt.create=ge,Xt.pointsToPath=fi,dt.geometryToLayer=ce,dt.coordsToLatLng=Qe,dt.coordsToLatLngs=fe,dt.latLngToCoords=ti,dt.latLngsToCoords=de,dt.getFeature=Ot,dt.asFeature=_e,M.mergeOptions({boxZoom:!0});var cn=rt.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){w(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){k(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){I(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){this._resetStateTimeout!==0&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||t.which!==1&&t.button!==1)return!1;this._clearDeferredResetState(),this._resetState(),Ft(),Be(),this._startPoint=this._map.mouseEventToContainerPoint(t),w(document,{contextmenu:Tt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=C("div","leaflet-zoom-box",this._container),x(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var e=new Z(this._point,this._startPoint),i=e.getSize();D(this._box,e.min),this._box.style.width=i.x+"px",this._box.style.height=i.y+"px"},_finish:function(){this._moved&&(I(this._box),B(this._container,"leaflet-crosshair")),Wt(),Re(),k(document,{contextmenu:Tt,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if(!(t.which!==1&&t.button!==1)&&(this._finish(),!!this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(S(this._resetState,this),0);var e=new j(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(e).fire("boxzoomend",{boxZoomBounds:e})}},_onKeyDown:function(t){t.keyCode===27&&(this._finish(),this._clearDeferredResetState(),this._resetState())}});M.addInitHook("addHandler","boxZoom",cn),M.mergeOptions({doubleClickZoom:!0});var fn=rt.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,o=t.originalEvent.shiftKey?i-n:i+n;e.options.doubleClickZoom==="center"?e.setZoom(o):e.setZoomAround(t.containerPoint,o)}});M.addInitHook("addHandler","doubleClickZoom",fn),M.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var dn=rt.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new pt(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}x(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){B(this._map._container,"leaflet-grab"),B(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var e=N(this._map.options.maxBounds);this._offsetLimit=q(this._map.latLngToContainerPoint(e.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(e.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(i),this._times.push(e),this._prunePositions(e)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){if(!(!this._viscosity||!this._offsetLimit)){var t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit;t.xe.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,r=Math.abs(o+i)0?s:-s))-e;this._delta=0,this._startTime=null,r&&(t.options.scrollWheelZoom==="center"?t.setZoom(e+r):t.setZoomAround(this._lastMousePos,e+r))}});M.addInitHook("addHandler","scrollWheelZoom",mn);var Vo=600;M.mergeOptions({tapHold:f.touchNative&&f.safari&&f.mobile,tapTolerance:15});var pn=rt.extend({addHooks:function(){w(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){k(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(clearTimeout(this._holdTimeout),t.touches.length===1){var e=t.touches[0];this._startPos=this._newPos=new y(e.clientX,e.clientY),this._holdTimeout=setTimeout(S(function(){this._cancel(),this._isTapValid()&&(w(document,"touchend",W),w(document,"touchend touchcancel",this._cancelClickPrevent),this._simulateEvent("contextmenu",e))},this),Vo),w(document,"touchend touchcancel contextmenu",this._cancel,this),w(document,"touchmove",this._onMove,this)}},_cancelClickPrevent:function t(){k(document,"touchend",W),k(document,"touchend touchcancel",t)},_cancel:function(){clearTimeout(this._holdTimeout),k(document,"touchend touchcancel contextmenu",this._cancel,this),k(document,"touchmove",this._onMove,this)},_onMove:function(t){var e=t.touches[0];this._newPos=new y(e.clientX,e.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){var i=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});i._simulated=!0,e.target.dispatchEvent(i)}});M.addInitHook("addHandler","tapHold",pn),M.mergeOptions({touchZoom:f.touch,bounceAtZoomLimits:!0});var vn=rt.extend({addHooks:function(){x(this._map._container,"leaflet-touch-zoom"),w(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){B(this._map._container,"leaflet-touch-zoom"),k(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e=this._map;if(!(!t.touches||t.touches.length!==2||e._animatingZoom||this._zooming)){var i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=e.getSize()._divideBy(2),this._startLatLng=e.containerPointToLatLng(this._centerPoint),e.options.touchZoom!=="center"&&(this._pinchStartLatLng=e.containerPointToLatLng(i.add(n)._divideBy(2))),this._startDist=i.distanceTo(n),this._startZoom=e.getZoom(),this._moved=!1,this._zooming=!0,e._stop(),w(document,"touchmove",this._onTouchMove,this),w(document,"touchend touchcancel",this._onTouchEnd,this),W(t)}},_onTouchMove:function(t){if(!(!t.touches||t.touches.length!==2||!this._zooming)){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),o=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&o>1)&&(this._zoom=e._limitZoom(this._zoom)),e.options.touchZoom==="center"){if(this._center=this._startLatLng,o===1)return}else{var s=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(o===1&&s.x===0&&s.y===0)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(s),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),J(this._animRequest);var r=S(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=V(r,this,!0),W(t)}},_onTouchEnd:function(){if(!this._moved||!this._zooming){this._zooming=!1;return}this._zooming=!1,J(this._animRequest),k(document,"touchmove",this._onTouchMove,this),k(document,"touchend touchcancel",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))}});M.addInitHook("addHandler","touchZoom",vn),M.BoxZoom=cn,M.DoubleClickZoom=fn,M.Drag=dn,M.Keyboard=_n,M.ScrollWheelZoom=mn,M.TapHold=pn,M.TouchZoom=vn,u.Bounds=Z,u.Browser=f,u.CRS=lt,u.Canvas=an,u.Circle=$e,u.CircleMarker=le,u.Class=ut,u.Control=it,u.DivIcon=on,u.DivOverlay=at,u.DomEvent=ho,u.DomUtil=ro,u.Draggable=pt,u.Evented=Bt,u.FeatureGroup=ct,u.GeoJSON=dt,u.GridLayer=Kt,u.Handler=rt,u.Icon=Et,u.ImageOverlay=me,u.LatLng=z,u.LatLngBounds=j,u.Layer=nt,u.LayerGroup=zt,u.LineUtil=Po,u.Map=M,u.Marker=ue,u.Mixin=po,u.Path=vt,u.Point=y,u.PolyUtil=vo,u.Polygon=kt,u.Polyline=ft,u.Popup=pe,u.PosAnimation=Di,u.Projection=Lo,u.Rectangle=ln,u.Renderer=_t,u.SVG=Xt,u.SVGOverlay=nn,u.TileLayer=Zt,u.Tooltip=ve,u.Transformation=Te,u.Util=Sn,u.VideoOverlay=en,u.bind=S,u.bounds=q,u.canvas=hn,u.circle=ko,u.circleMarker=Eo,u.control=Vt,u.divIcon=Ho,u.extend=m,u.featureGroup=Co,u.geoJSON=tn,u.geoJson=Io,u.gridLayer=Fo,u.icon=So,u.imageOverlay=Ao,u.latLng=b,u.latLngBounds=N,u.layerGroup=Mo,u.map=uo,u.marker=zo,u.point=g,u.polygon=Zo,u.polyline=Oo,u.popup=No,u.rectangle=Go,u.setOptions=E,u.stamp=T,u.svg=un,u.svgOverlay=Ro,u.tileLayer=sn,u.tooltip=Do,u.transformation=Rt,u.version=v,u.videoOverlay=Bo;var qo=window.L;u.noConflict=function(){return window.L=qo,this},window.L=u})}(Jt,Jt.exports)),Jt.exports}var si=us();const ys=es(si);function ls(d,_,u){return Object.freeze({instance:d,context:_,container:u})}function Mn(d,_){return _==null?function(v,m){const R=A.useRef();return R.current||(R.current=d(v,m)),R}:function(v,m){const R=A.useRef();R.current||(R.current=d(v,m));const S=A.useRef(v),{instance:gt}=R.current;return A.useEffect(function(){S.current!==v&&(_(gt,v,S.current),S.current=v)},[gt,v,m]),R}}function cs(d,_){A.useEffect(function(){return(_.layerContainer??_.map).addLayer(d.instance),function(){var R;(R=_.layerContainer)==null||R.removeLayer(d.instance),_.map.removeLayer(d.instance)}},[_,d])}function Cn(d){return function(u){const v=Tn(),m=d(bn(u,v),v);return is(v.map,u.attribution),as(m.current,u.eventHandlers),cs(m.current,v),m}}function ws(d,_){const u=Mn(d,_),v=Cn(u);return ss(v)}function fs(d,_){const u=Mn(d,_),v=Cn(u);return rs(v)}function ds(d,_,u){const{opacity:v,zIndex:m}=_;v!=null&&v!==u.opacity&&d.setOpacity(v),m!=null&&m!==u.zIndex&&d.setZIndex(m)}function _s(){return Tn().map}function xs(d){const _=_s();return A.useEffect(function(){return _.on(d),function(){_.off(d)}},[_,d]),_}function oi(){return oi=Object.assign||function(d){for(var _=1;_(U==null?void 0:U.map)??null,[U]);const E=A.useCallback(Qt=>{if(Qt!==null&&U===null){const wt=new si.Map(Qt,yt);u!=null&&At!=null?wt.setView(u,At):d!=null&&wt.fitBounds(d,_),T!=null&&wt.whenReady(T),ht(os(wt))}},[]);A.useEffect(()=>()=>{U==null||U.map.remove()},[U]);const $t=U?ni.createElement(Ln,{value:U},v):S??null;return ni.createElement("div",oi({},X,{ref:E}),$t)}const Ps=A.forwardRef(ms),Ls=fs(function({url:_,...u},v){const m=new si.TileLayer(_,bn(u,v));return ls(m,v)},function(_,u,v){ds(_,u,v);const{url:m}=u;m!=null&&m!==v.url&&_.setUrl(m)});export{ys as L,Ps as M,Ls as T,ls as a,xs as b,ws as c,gs as e,si as l,_s as u}; diff --git a/frontend/dist/assets/leaflet-Dgihpmma.css b/frontend/dist/assets/leaflet-Dgihpmma.css new file mode 100644 index 0000000000..62b00a01bb --- /dev/null +++ b/frontend/dist/assets/leaflet-Dgihpmma.css @@ -0,0 +1 @@ +.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::-moz-selection{background:transparent}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none!important;max-height:none!important;width:auto;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline-offset:1px}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:#ffffff80}.leaflet-container{font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;font-size:.75rem;line-height:1.5}.leaflet-bar{box-shadow:0 1px 5px #000000a6;border-radius:4px}.leaflet-bar a{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover,.leaflet-bar a:focus{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px #0006;background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=)}.leaflet-container .leaflet-control-attribution{background:#fff;background:#fffc;margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover,.leaflet-control-attribution a:focus{text-decoration:underline}.leaflet-attribution-flag{display:inline!important;vertical-align:baseline!important;width:1em;height:.6669em}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;white-space:nowrap;box-sizing:border-box;background:#fffc;text-shadow:1px 1px #fff}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 24px 13px 20px;line-height:1.3;font-size:13px;font-size:1.08333em;min-height:1px}.leaflet-popup-content p{margin:1.3em 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px #0006}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover,.leaflet-container a.leaflet-popup-close-button:focus{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=.70710678,M12=.70710678,M21=-.70710678,M22=.70710678)}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px #0006}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}} diff --git a/frontend/dist/assets/treeService-D86yjeOz.js b/frontend/dist/assets/treeService-D86yjeOz.js new file mode 100644 index 0000000000..c1a4521caf --- /dev/null +++ b/frontend/dist/assets/treeService-D86yjeOz.js @@ -0,0 +1 @@ +import{A as r}from"./index-Cp0G27Fl.js";const t=new r,m={getAll:(e={})=>t.get("/trees",e),getById:e=>t.get(`/trees/${e}`),getMeasurements:e=>t.get(`/trees/${e}/measurements`),getByForest:e=>t.get(`/trees/forest/${e}`),create:e=>t.post("/trees",e),update:(e,s)=>t.put(`/trees/${e}`,s),delete:e=>t.delete(`/trees/${e}`),addMeasurement:(e,s)=>t.post(`/trees/${e}/measurements`,s),markDead:e=>t.patch(`/trees/${e}/mark-dead`)};export{m as t}; diff --git a/frontend/dist/assets/useKeyboardNavigation-Bh0nMcUg.js b/frontend/dist/assets/useKeyboardNavigation-BEEMcJj7.js similarity index 97% rename from frontend/dist/assets/useKeyboardNavigation-Bh0nMcUg.js rename to frontend/dist/assets/useKeyboardNavigation-BEEMcJj7.js index d82210109b..57793813b4 100644 --- a/frontend/dist/assets/useKeyboardNavigation-Bh0nMcUg.js +++ b/frontend/dist/assets/useKeyboardNavigation-BEEMcJj7.js @@ -1 +1 @@ -import{r as s}from"./index-CGkKx7Xv.js";const T=(A={})=>{const{onEscape:f,onEnter:d,onSpace:b,onArrowUp:m,onArrowDown:p,onArrowLeft:k,onArrowRight:E,onTab:w,trapFocus:h=!1,autoFocus:g=!1,disabled:D=!1}=A,l=s.useRef(null),a=s.useRef([]),x=s.useCallback(()=>{if(!l.current)return[];const e=["button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","a[href]:not([disabled])",'[tabindex]:not([tabindex="-1"]):not([disabled])',"summary:not([disabled])"];return Array.from(l.current.querySelectorAll(e.join(","))).filter(t=>{const r=window.getComputedStyle(t);return r.display!=="none"&&r.visibility!=="hidden"})},[]),n=s.useCallback(()=>{a.current=x()},[x]),u=s.useCallback(e=>{if(D)return;const{key:t,shiftKey:r,ctrlKey:c,altKey:o,metaKey:i}=e;if(!((c||o||i)&&t!=="Tab"))switch(t){case"Escape":f&&(e.preventDefault(),f(e));break;case"Enter":d&&(e.preventDefault(),d(e));break;case" ":b&&(e.preventDefault(),b(e));break;case"ArrowUp":m&&(e.preventDefault(),m(e));break;case"ArrowDown":p&&(e.preventDefault(),p(e));break;case"ArrowLeft":k&&(e.preventDefault(),k(e));break;case"ArrowRight":E&&(e.preventDefault(),E(e));break;case"Tab":h&&a.current.length>0&&(e.preventDefault(),C(r)),w&&w(e);break}},[D,f,d,b,m,p,k,E,w,h]),C=s.useCallback(e=>{var i;n();const t=a.current;if(t.length===0)return;const r=document.activeElement,c=t.indexOf(r);let o;e?o=c<=0?t.length-1:c-1:o=c>=t.length-1?0:c+1,(i=t[o])==null||i.focus()},[n]),y=s.useCallback(()=>{var t;n(),(t=a.current[0])==null||t.focus()},[n]),v=s.useCallback(()=>{var t;n();const e=a.current;(t=e[e.length-1])==null||t.focus()},[n]),I=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r>=e.length-1?0:r+1;(o=e[c])==null||o.focus()},[n]),K=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r<=0?e.length-1:r-1;(o=e[c])==null||o.focus()},[n]);return s.useEffect(()=>{const e=l.current;if(e){if(e.addEventListener("keydown",u),g){const t=setTimeout(()=>{y()},100);return()=>{clearTimeout(t),e.removeEventListener("keydown",u)}}return()=>{e.removeEventListener("keydown",u)}}},[u,g,y]),s.useEffect(()=>{n()},[n]),{containerRef:l,focusFirst:y,focusLast:v,focusNext:I,focusPrevious:K,updateFocusableElements:n,getFocusableElements:x}};export{T as u}; +import{r as s}from"./index-Cp0G27Fl.js";const T=(A={})=>{const{onEscape:f,onEnter:d,onSpace:b,onArrowUp:m,onArrowDown:p,onArrowLeft:k,onArrowRight:E,onTab:w,trapFocus:h=!1,autoFocus:g=!1,disabled:D=!1}=A,l=s.useRef(null),a=s.useRef([]),x=s.useCallback(()=>{if(!l.current)return[];const e=["button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","a[href]:not([disabled])",'[tabindex]:not([tabindex="-1"]):not([disabled])',"summary:not([disabled])"];return Array.from(l.current.querySelectorAll(e.join(","))).filter(t=>{const r=window.getComputedStyle(t);return r.display!=="none"&&r.visibility!=="hidden"})},[]),n=s.useCallback(()=>{a.current=x()},[x]),u=s.useCallback(e=>{if(D)return;const{key:t,shiftKey:r,ctrlKey:c,altKey:o,metaKey:i}=e;if(!((c||o||i)&&t!=="Tab"))switch(t){case"Escape":f&&(e.preventDefault(),f(e));break;case"Enter":d&&(e.preventDefault(),d(e));break;case" ":b&&(e.preventDefault(),b(e));break;case"ArrowUp":m&&(e.preventDefault(),m(e));break;case"ArrowDown":p&&(e.preventDefault(),p(e));break;case"ArrowLeft":k&&(e.preventDefault(),k(e));break;case"ArrowRight":E&&(e.preventDefault(),E(e));break;case"Tab":h&&a.current.length>0&&(e.preventDefault(),C(r)),w&&w(e);break}},[D,f,d,b,m,p,k,E,w,h]),C=s.useCallback(e=>{var i;n();const t=a.current;if(t.length===0)return;const r=document.activeElement,c=t.indexOf(r);let o;e?o=c<=0?t.length-1:c-1:o=c>=t.length-1?0:c+1,(i=t[o])==null||i.focus()},[n]),y=s.useCallback(()=>{var t;n(),(t=a.current[0])==null||t.focus()},[n]),v=s.useCallback(()=>{var t;n();const e=a.current;(t=e[e.length-1])==null||t.focus()},[n]),I=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r>=e.length-1?0:r+1;(o=e[c])==null||o.focus()},[n]),K=s.useCallback(()=>{var o;n();const e=a.current,t=document.activeElement,r=e.indexOf(t),c=r<=0?e.length-1:r-1;(o=e[c])==null||o.focus()},[n]);return s.useEffect(()=>{const e=l.current;if(e){if(e.addEventListener("keydown",u),g){const t=setTimeout(()=>{y()},100);return()=>{clearTimeout(t),e.removeEventListener("keydown",u)}}return()=>{e.removeEventListener("keydown",u)}}},[u,g,y]),s.useEffect(()=>{n()},[n]),{containerRef:l,focusFirst:y,focusLast:v,focusNext:I,focusPrevious:K,updateFocusableElements:n,getFocusableElements:x}};export{T as u}; diff --git a/frontend/dist/assets/useSidebarState-Ctkpd6zX.js b/frontend/dist/assets/useSidebarState-DD0BN3bF.js similarity index 66% rename from frontend/dist/assets/useSidebarState-Ctkpd6zX.js rename to frontend/dist/assets/useSidebarState-DD0BN3bF.js index 21e755a3b9..bb1636d679 100644 --- a/frontend/dist/assets/useSidebarState-Ctkpd6zX.js +++ b/frontend/dist/assets/useSidebarState-DD0BN3bF.js @@ -1,41 +1,41 @@ -var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[a]=t;var C=(n,a,t)=>aa(n,typeof a!="symbol"?a+"":a,t);import{A as oa,u as yn,j as b,r as w,f as Dn,b as sa,R as m,c as re,g as ia,d as H,h as ca,i as Tr}from"./index-CGkKx7Xv.js";import{D as la}from"./DarkModeToggle-Cu0JyOh5.js";const xe=new oa,Fl={getAll:(n={})=>xe.get("/trees",n),getById:n=>xe.get(`/trees/${n}`),getMeasurements:n=>xe.get(`/trees/${n}/measurements`),getByForest:n=>xe.get(`/trees/forest/${n}`),create:n=>xe.post("/trees",n),update:(n,a)=>xe.put(`/trees/${n}`,a),delete:n=>xe.delete(`/trees/${n}`),addMeasurement:(n,a)=>xe.post(`/trees/${n}/measurements`,a),markDead:n=>xe.patch(`/trees/${n}/mark-dead`)},Il=({onToggleSidebar:n})=>{const{user:a,logout:t,isAdmin:e}=yn(),r=async()=>{await t()};return b.jsx("header",{className:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4 sticky top-0 z-50",children:b.jsxs("div",{className:"flex items-center justify-between",children:[b.jsxs("div",{className:"flex items-center gap-4",children:[b.jsx("button",{onClick:n,"aria-label":"Toggle menu",className:"lg:hidden flex items-center justify-center w-10 h-10 bg-none border-none cursor-pointer rounded-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-500 focus:outline-offset-2",children:b.jsx("svg",{className:"w-6 h-6 text-gray-700 dark:text-gray-300",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",children:b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})}),b.jsx("h1",{className:"text-2xl font-bold text-green-600 dark:text-green-400 m-0",children:"Nanwa Dashboard"})]}),b.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[b.jsxs("span",{className:"text-gray-700 dark:text-gray-300",children:["Welcome, ",b.jsx("strong",{children:(a==null?void 0:a.firstName)||(a==null?void 0:a.name)}),e()&&b.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 text-xs rounded-full font-bold",children:"Admin"})]}),b.jsx(la,{size:"sm"}),b.jsxs("button",{onClick:r,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-red-600 dark:hover:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/30 rounded-lg transition-colors",title:"Logout",children:[b.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),"Logout"]})]})]})})},Al=({isOpen:n,onClose:a})=>{const{isAdmin:t}=yn();return b.jsxs(b.Fragment,{children:[b.jsx("div",{className:`lg:hidden fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${n?"opacity-100 visible":"opacity-0 invisible"}`,onClick:a}),b.jsx("aside",{className:` +var ra=Object.defineProperty;var na=(n,a,t)=>a in n?ra(n,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[a]=t;var C=(n,a,t)=>na(n,typeof a!="symbol"?a+"":a,t);import{u as wn,j as D,r as w,R as yn,b as aa,f as m,c as re,g as oa,d as H,h as sa,i as Pr}from"./index-Cp0G27Fl.js";import{D as ia}from"./DarkModeToggle-DYOgA8sV.js";const Yl=({onToggleSidebar:n})=>{const{user:a,logout:t,isAdmin:e}=wn(),r=async()=>{await t()};return D.jsx("header",{className:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-4 sticky top-0 z-50",children:D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsxs("div",{className:"flex items-center gap-4",children:[D.jsx("button",{onClick:n,"aria-label":"Toggle menu",className:"lg:hidden flex items-center justify-center w-10 h-10 bg-none border-none cursor-pointer rounded-lg transition-colors hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-500 focus:outline-offset-2",children:D.jsx("svg",{className:"w-6 h-6 text-gray-700 dark:text-gray-300",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})}),D.jsx("h1",{className:"text-2xl font-bold text-green-600 dark:text-green-400 m-0",children:"Nanwa Dashboard"})]}),D.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[D.jsxs("span",{className:"text-gray-700 dark:text-gray-300",children:["Welcome, ",D.jsx("strong",{children:(a==null?void 0:a.firstName)||(a==null?void 0:a.name)}),e()&&D.jsx("span",{className:"ml-2 px-2 py-1 bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 text-xs rounded-full font-bold",children:"Admin"})]}),D.jsx(ia,{size:"sm"}),D.jsxs("button",{onClick:r,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-red-600 dark:hover:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/30 rounded-lg transition-colors",title:"Logout",children:[D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),"Logout"]})]})]})})},Ll=({isOpen:n,onClose:a})=>{const{isAdmin:t}=wn();return D.jsxs(D.Fragment,{children:[D.jsx("div",{className:`lg:hidden fixed inset-0 bg-black/50 z-40 transition-opacity duration-300 ${n?"opacity-100 visible":"opacity-0 invisible"}`,onClick:a}),D.jsx("aside",{className:` bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 w-full lg:w-64 fixed lg:sticky top-0 h-screen overflow-y-auto z-50 lg:z-10 transform transition-transform duration-300 ease-in-out ${n?"translate-x-0":"-translate-x-full lg:translate-x-0"} - `,children:b.jsx("div",{className:"p-6",children:b.jsxs("nav",{className:"space-y-2",children:[b.jsxs("a",{href:"#dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30 rounded-lg",children:[b.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),b.jsxs("a",{href:"/map",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[b.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),b.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[b.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),t()&&b.jsxs("a",{href:"/admin",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[b.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:b.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})})]})},ua=(n,a,t)=>{const[e,r]=w.useState(a||new Date(new Date().getFullYear(),0,1)),[o,s]=w.useState(t||new Date),i=w.useRef(n),c=w.useRef(!1);return w.useEffect(()=>{i.current=n},[n]),w.useEffect(()=>{if(!c.current){c.current=!0;return}const f=setTimeout(()=>{i.current&&e&&o&&i.current({startDate:e,endDate:o})},1e3);return()=>clearTimeout(f)},[e,o]),{startDate:e,endDate:o,handleStartDateChange:f=>{r(f),f&&o&&f>o&&s(f)},handleEndDateChange:f=>{s(f),f&&e&&f{const f=new Date(new Date().getFullYear(),0,1),p=new Date;r(f),s(p),i.current&&i.current({startDate:f,endDate:p})}}},bn=6048e5,da=864e5,qt=6e4,Kt=36e5,fa=1e3,Or=Symbol.for("constructDateFrom");function $(n,a){return typeof n=="function"?n(a):n&&typeof n=="object"&&Or in n?n[Or](a):n instanceof Date?new n.constructor(a):new Date(a)}function P(n,a){return $(a||n,n)}function pe(n,a,t){const e=P(n,t==null?void 0:t.in);return isNaN(a)?$((t==null?void 0:t.in)||n,NaN):(a&&e.setDate(e.getDate()+a),e)}function he(n,a,t){const e=P(n,t==null?void 0:t.in);if(isNaN(a))return $(n,NaN);if(!a)return e;const r=e.getDate(),o=$(n,e.getTime());o.setMonth(e.getMonth()+a+1,0);const s=o.getDate();return r>=s?o:(e.setFullYear(o.getFullYear(),o.getMonth(),r),e)}function kn(n,a,t){return $(n,+P(n)+a)}function pa(n,a,t){return kn(n,a*Kt)}let ha={};function Ke(){return ha}function Pe(n,a){var i,c,l,u;const t=Ke(),e=(a==null?void 0:a.weekStartsOn)??((c=(i=a==null?void 0:a.locale)==null?void 0:i.options)==null?void 0:c.weekStartsOn)??t.weekStartsOn??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.weekStartsOn)??0,r=P(n,a==null?void 0:a.in),o=r.getDay(),s=(o=o.getTime()?e+1:t.getTime()>=i.getTime()?e:e-1}function Nt(n){const a=P(n),t=new Date(Date.UTC(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds()));return t.setUTCFullYear(a.getFullYear()),+n-+t}function Te(n,...a){const t=$.bind(null,a.find(e=>typeof e=="object"));return a.map(t)}function Qe(n,a){const t=P(n,a==null?void 0:a.in);return t.setHours(0,0,0,0),t}function Ze(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a),o=Qe(e),s=Qe(r),i=+o-Nt(o),c=+s-Nt(s);return Math.round((i-c)/da)}function ma(n,a){const t=xn(n,a),e=$(n,0);return e.setFullYear(t,0,4),e.setHours(0,0,0,0),Xe(e)}function lr(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setTime(e.getTime()+a*qt),e}function gr(n,a,t){return he(n,a*3,t)}function ga(n,a,t){return kn(n,a*1e3)}function Rt(n,a,t){return pe(n,a*7,t)}function _e(n,a,t){return he(n,a*12,t)}function Nr(n,a){let t,e=a==null?void 0:a.in;return n.forEach(r=>{!e&&typeof r=="object"&&(e=$.bind(null,r));const o=P(r,e);(!t||t{!e&&typeof r=="object"&&(e=$.bind(null,r));const o=P(r,e);(!t||t>o||isNaN(+o))&&(t=o)}),$(e,t||NaN)}function va(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return+Qe(e)==+Qe(r)}function Me(n){return n instanceof Date||typeof n=="object"&&Object.prototype.toString.call(n)==="[object Date]"}function Yt(n){return!(!Me(n)&&typeof n!="number"||isNaN(+P(n)))}function Lt(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),s=e.getMonth()-r.getMonth();return o*12+s}function He(n,a){const t=P(n,a==null?void 0:a.in);return Math.trunc(t.getMonth()/3)+1}function Ft(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),s=He(e)-He(r);return o*4+s}function It(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return e.getFullYear()-r.getFullYear()}function wa(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a),o=Yr(e,r),s=Math.abs(Ze(e,r));e.setDate(e.getDate()-o*s);const i=+(Yr(e,r)===-o),c=o*(s-i);return c===0?0:c}function Yr(n,a){const t=n.getFullYear()-a.getFullYear()||n.getMonth()-a.getMonth()||n.getDate()-a.getDate()||n.getHours()-a.getHours()||n.getMinutes()-a.getMinutes()||n.getSeconds()-a.getSeconds()||n.getMilliseconds()-a.getMilliseconds();return t<0?-1:t>0?1:t}function _n(n,a){const t=P(n,a==null?void 0:a.in);return t.setHours(23,59,59,999),t}function Mn(n,a){const t=P(n,a==null?void 0:a.in),e=t.getMonth();return t.setFullYear(t.getFullYear(),e+1,0),t.setHours(23,59,59,999),t}function ur(n,a){const t=P(n,a==null?void 0:a.in),e=t.getMonth(),r=e-e%3;return t.setMonth(r,1),t.setHours(0,0,0,0),t}function Cn(n,a){const t=P(n,a==null?void 0:a.in);return t.setDate(1),t.setHours(0,0,0,0),t}function Sn(n,a){const t=P(n,a==null?void 0:a.in),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function $t(n,a){const t=P(n,a==null?void 0:a.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function ya(n,a){var i,c;const t=Ke(),e=t.weekStartsOn??((c=(i=t.locale)==null?void 0:i.options)==null?void 0:c.weekStartsOn)??0,r=P(n,a==null?void 0:a.in),o=r.getDay(),s=(o{let e;const r=Da[n];return typeof r=="string"?e=r:a===1?e=r.one:e=r.other.replace("{{count}}",a.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+e:e+" ago":e};function er(n){return(a={})=>{const t=a.width?String(a.width):n.defaultWidth;return n.formats[t]||n.formats[n.defaultWidth]}}const ka={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},xa={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},_a={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ma={date:er({formats:ka,defaultWidth:"full"}),time:er({formats:xa,defaultWidth:"full"}),dateTime:er({formats:_a,defaultWidth:"full"})},Ca={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Sa=(n,a,t,e)=>Ca[n];function ot(n){return(a,t)=>{const e=t!=null&&t.context?String(t.context):"standalone";let r;if(e==="formatting"&&n.formattingValues){const s=n.defaultFormattingWidth||n.defaultWidth,i=t!=null&&t.width?String(t.width):s;r=n.formattingValues[i]||n.formattingValues[s]}else{const s=n.defaultWidth,i=t!=null&&t.width?String(t.width):n.defaultWidth;r=n.values[i]||n.values[s]}const o=n.argumentCallback?n.argumentCallback(a):a;return r[o]}}const Ea={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Pa={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Ta={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Oa={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Na={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Ra={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Ya=(n,a)=>{const t=Number(n),e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},La={ordinalNumber:Ya,era:ot({values:Ea,defaultWidth:"wide"}),quarter:ot({values:Pa,defaultWidth:"wide",argumentCallback:n=>n-1}),month:ot({values:Ta,defaultWidth:"wide"}),day:ot({values:Oa,defaultWidth:"wide"}),dayPeriod:ot({values:Na,defaultWidth:"wide",formattingValues:Ra,defaultFormattingWidth:"wide"})};function st(n){return(a,t={})=>{const e=t.width,r=e&&n.matchPatterns[e]||n.matchPatterns[n.defaultMatchWidth],o=a.match(r);if(!o)return null;const s=o[0],i=e&&n.parsePatterns[e]||n.parsePatterns[n.defaultParseWidth],c=Array.isArray(i)?Ia(i,d=>d.test(s)):Fa(i,d=>d.test(s));let l;l=n.valueCallback?n.valueCallback(c):c,l=t.valueCallback?t.valueCallback(l):l;const u=a.slice(s.length);return{value:l,rest:u}}}function Fa(n,a){for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&a(n[t]))return t}function Ia(n,a){for(let t=0;t{const e=a.match(n.matchPattern);if(!e)return null;const r=e[0],o=a.match(n.parsePattern);if(!o)return null;let s=n.valueCallback?n.valueCallback(o[0]):o[0];s=t.valueCallback?t.valueCallback(s):s;const i=a.slice(r.length);return{value:s,rest:i}}}const Wa=/^(\d+)(th|st|nd|rd)?/i,Ha=/\d+/i,ja={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Ba={any:[/^b/i,/^(a|c)/i]},Qa={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Va={any:[/1/i,/2/i,/3/i,/4/i]},qa={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Ka={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},$a={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Ua={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},za={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Ga={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Xa={ordinalNumber:Aa({matchPattern:Wa,parsePattern:Ha,valueCallback:n=>parseInt(n,10)}),era:st({matchPatterns:ja,defaultMatchWidth:"wide",parsePatterns:Ba,defaultParseWidth:"any"}),quarter:st({matchPatterns:Qa,defaultMatchWidth:"wide",parsePatterns:Va,defaultParseWidth:"any",valueCallback:n=>n+1}),month:st({matchPatterns:qa,defaultMatchWidth:"wide",parsePatterns:Ka,defaultParseWidth:"any"}),day:st({matchPatterns:$a,defaultMatchWidth:"wide",parsePatterns:Ua,defaultParseWidth:"any"}),dayPeriod:st({matchPatterns:za,defaultMatchWidth:"any",parsePatterns:Ga,defaultParseWidth:"any"})},En={code:"en-US",formatDistance:ba,formatLong:Ma,formatRelative:Sa,localize:La,match:Xa,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Za(n,a){const t=P(n,a==null?void 0:a.in);return Ze(t,$t(t))+1}function vr(n,a){const t=P(n,a==null?void 0:a.in),e=+Xe(t)-+ma(t);return Math.round(e/bn)+1}function wr(n,a){var u,d,f,p;const t=P(n,a==null?void 0:a.in),e=t.getFullYear(),r=Ke(),o=(a==null?void 0:a.firstWeekContainsDate)??((d=(u=a==null?void 0:a.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??r.firstWeekContainsDate??((p=(f=r.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,s=$((a==null?void 0:a.in)||n,0);s.setFullYear(e+1,0,o),s.setHours(0,0,0,0);const i=Pe(s,a),c=$((a==null?void 0:a.in)||n,0);c.setFullYear(e,0,o),c.setHours(0,0,0,0);const l=Pe(c,a);return+t>=+i?e+1:+t>=+l?e:e-1}function Ja(n,a){var i,c,l,u;const t=Ke(),e=(a==null?void 0:a.firstWeekContainsDate)??((c=(i=a==null?void 0:a.locale)==null?void 0:i.options)==null?void 0:c.firstWeekContainsDate)??t.firstWeekContainsDate??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.firstWeekContainsDate)??1,r=wr(n,a),o=$((a==null?void 0:a.in)||n,0);return o.setFullYear(r,0,e),o.setHours(0,0,0,0),Pe(o,a)}function Pn(n,a){const t=P(n,a==null?void 0:a.in),e=+Pe(t,a)-+Ja(t,a);return Math.round(e/bn)+1}function K(n,a){const t=n<0?"-":"",e=Math.abs(n).toString().padStart(a,"0");return t+e}const Oe={y(n,a){const t=n.getFullYear(),e=t>0?t:1-t;return K(a==="yy"?e%100:e,a.length)},M(n,a){const t=n.getMonth();return a==="M"?String(t+1):K(t+1,2)},d(n,a){return K(n.getDate(),a.length)},a(n,a){const t=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(n,a){return K(n.getHours()%12||12,a.length)},H(n,a){return K(n.getHours(),a.length)},m(n,a){return K(n.getMinutes(),a.length)},s(n,a){return K(n.getSeconds(),a.length)},S(n,a){const t=a.length,e=n.getMilliseconds(),r=Math.trunc(e*Math.pow(10,t-3));return K(r,a.length)}},$e={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Lr={G:function(n,a,t){const e=n.getFullYear()>0?1:0;switch(a){case"G":case"GG":case"GGG":return t.era(e,{width:"abbreviated"});case"GGGGG":return t.era(e,{width:"narrow"});case"GGGG":default:return t.era(e,{width:"wide"})}},y:function(n,a,t){if(a==="yo"){const e=n.getFullYear(),r=e>0?e:1-e;return t.ordinalNumber(r,{unit:"year"})}return Oe.y(n,a)},Y:function(n,a,t,e){const r=wr(n,e),o=r>0?r:1-r;if(a==="YY"){const s=o%100;return K(s,2)}return a==="Yo"?t.ordinalNumber(o,{unit:"year"}):K(o,a.length)},R:function(n,a){const t=xn(n);return K(t,a.length)},u:function(n,a){const t=n.getFullYear();return K(t,a.length)},Q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"Q":return String(e);case"QQ":return K(e,2);case"Qo":return t.ordinalNumber(e,{unit:"quarter"});case"QQQ":return t.quarter(e,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(e,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(e,{width:"wide",context:"formatting"})}},q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"q":return String(e);case"qq":return K(e,2);case"qo":return t.ordinalNumber(e,{unit:"quarter"});case"qqq":return t.quarter(e,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(e,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(e,{width:"wide",context:"standalone"})}},M:function(n,a,t){const e=n.getMonth();switch(a){case"M":case"MM":return Oe.M(n,a);case"Mo":return t.ordinalNumber(e+1,{unit:"month"});case"MMM":return t.month(e,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(e,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(e,{width:"wide",context:"formatting"})}},L:function(n,a,t){const e=n.getMonth();switch(a){case"L":return String(e+1);case"LL":return K(e+1,2);case"Lo":return t.ordinalNumber(e+1,{unit:"month"});case"LLL":return t.month(e,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(e,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(e,{width:"wide",context:"standalone"})}},w:function(n,a,t,e){const r=Pn(n,e);return a==="wo"?t.ordinalNumber(r,{unit:"week"}):K(r,a.length)},I:function(n,a,t){const e=vr(n);return a==="Io"?t.ordinalNumber(e,{unit:"week"}):K(e,a.length)},d:function(n,a,t){return a==="do"?t.ordinalNumber(n.getDate(),{unit:"date"}):Oe.d(n,a)},D:function(n,a,t){const e=Za(n);return a==="Do"?t.ordinalNumber(e,{unit:"dayOfYear"}):K(e,a.length)},E:function(n,a,t){const e=n.getDay();switch(a){case"E":case"EE":case"EEE":return t.day(e,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(e,{width:"short",context:"formatting"});case"EEEE":default:return t.day(e,{width:"wide",context:"formatting"})}},e:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"e":return String(o);case"ee":return K(o,2);case"eo":return t.ordinalNumber(o,{unit:"day"});case"eee":return t.day(r,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(r,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(r,{width:"short",context:"formatting"});case"eeee":default:return t.day(r,{width:"wide",context:"formatting"})}},c:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"c":return String(o);case"cc":return K(o,a.length);case"co":return t.ordinalNumber(o,{unit:"day"});case"ccc":return t.day(r,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(r,{width:"narrow",context:"standalone"});case"cccccc":return t.day(r,{width:"short",context:"standalone"});case"cccc":default:return t.day(r,{width:"wide",context:"standalone"})}},i:function(n,a,t){const e=n.getDay(),r=e===0?7:e;switch(a){case"i":return String(r);case"ii":return K(r,a.length);case"io":return t.ordinalNumber(r,{unit:"day"});case"iii":return t.day(e,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(e,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(e,{width:"short",context:"formatting"});case"iiii":default:return t.day(e,{width:"wide",context:"formatting"})}},a:function(n,a,t){const r=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(n,a,t){const e=n.getHours();let r;switch(e===12?r=$e.noon:e===0?r=$e.midnight:r=e/12>=1?"pm":"am",a){case"b":case"bb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(n,a,t){const e=n.getHours();let r;switch(e>=17?r=$e.evening:e>=12?r=$e.afternoon:e>=4?r=$e.morning:r=$e.night,a){case"B":case"BB":case"BBB":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(n,a,t){if(a==="ho"){let e=n.getHours()%12;return e===0&&(e=12),t.ordinalNumber(e,{unit:"hour"})}return Oe.h(n,a)},H:function(n,a,t){return a==="Ho"?t.ordinalNumber(n.getHours(),{unit:"hour"}):Oe.H(n,a)},K:function(n,a,t){const e=n.getHours()%12;return a==="Ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},k:function(n,a,t){let e=n.getHours();return e===0&&(e=24),a==="ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},m:function(n,a,t){return a==="mo"?t.ordinalNumber(n.getMinutes(),{unit:"minute"}):Oe.m(n,a)},s:function(n,a,t){return a==="so"?t.ordinalNumber(n.getSeconds(),{unit:"second"}):Oe.s(n,a)},S:function(n,a){return Oe.S(n,a)},X:function(n,a,t){const e=n.getTimezoneOffset();if(e===0)return"Z";switch(a){case"X":return Ir(e);case"XXXX":case"XX":return Ie(e);case"XXXXX":case"XXX":default:return Ie(e,":")}},x:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"x":return Ir(e);case"xxxx":case"xx":return Ie(e);case"xxxxx":case"xxx":default:return Ie(e,":")}},O:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"O":case"OO":case"OOO":return"GMT"+Fr(e,":");case"OOOO":default:return"GMT"+Ie(e,":")}},z:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"z":case"zz":case"zzz":return"GMT"+Fr(e,":");case"zzzz":default:return"GMT"+Ie(e,":")}},t:function(n,a,t){const e=Math.trunc(+n/1e3);return K(e,a.length)},T:function(n,a,t){return K(+n,a.length)}};function Fr(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=Math.trunc(e/60),o=e%60;return o===0?t+String(r):t+String(r)+a+K(o,2)}function Ir(n,a){return n%60===0?(n>0?"-":"+")+K(Math.abs(n)/60,2):Ie(n,a)}function Ie(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=K(Math.trunc(e/60),2),o=K(e%60,2);return t+r+a+o}const Ar=(n,a)=>{switch(n){case"P":return a.date({width:"short"});case"PP":return a.date({width:"medium"});case"PPP":return a.date({width:"long"});case"PPPP":default:return a.date({width:"full"})}},Tn=(n,a)=>{switch(n){case"p":return a.time({width:"short"});case"pp":return a.time({width:"medium"});case"ppp":return a.time({width:"long"});case"pppp":default:return a.time({width:"full"})}},eo=(n,a)=>{const t=n.match(/(P+)(p+)?/)||[],e=t[1],r=t[2];if(!r)return Ar(n,a);let o;switch(e){case"P":o=a.dateTime({width:"short"});break;case"PP":o=a.dateTime({width:"medium"});break;case"PPP":o=a.dateTime({width:"long"});break;case"PPPP":default:o=a.dateTime({width:"full"});break}return o.replace("{{date}}",Ar(e,a)).replace("{{time}}",Tn(r,a))},dr={p:Tn,P:eo},to=/^D+$/,ro=/^Y+$/,no=["D","DD","YY","YYYY"];function ao(n){return to.test(n)}function oo(n){return ro.test(n)}function so(n,a,t){const e=io(n,a,t);if(console.warn(e),no.includes(n))throw new RangeError(e)}function io(n,a,t){const e=n[0]==="Y"?"years":"days of the month";return`Use \`${n.toLowerCase()}\` instead of \`${n}\` (in \`${a}\`) for formatting ${e} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const co=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,lo=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,uo=/^'([^]*?)'?$/,fo=/''/g,po=/[a-zA-Z]/;function Wr(n,a,t){var u,d,f,p,h,v,g,D;const e=Ke(),r=(t==null?void 0:t.locale)??e.locale??En,o=(t==null?void 0:t.firstWeekContainsDate)??((d=(u=t==null?void 0:t.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??e.firstWeekContainsDate??((p=(f=e.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,s=(t==null?void 0:t.weekStartsOn)??((v=(h=t==null?void 0:t.locale)==null?void 0:h.options)==null?void 0:v.weekStartsOn)??e.weekStartsOn??((D=(g=e.locale)==null?void 0:g.options)==null?void 0:D.weekStartsOn)??0,i=P(n,t==null?void 0:t.in);if(!Yt(i))throw new RangeError("Invalid time value");let c=a.match(lo).map(_=>{const y=_[0];if(y==="p"||y==="P"){const k=dr[y];return k(_,r.formatLong)}return _}).join("").match(co).map(_=>{if(_==="''")return{isToken:!1,value:"'"};const y=_[0];if(y==="'")return{isToken:!1,value:ho(_)};if(Lr[y])return{isToken:!0,value:_};if(y.match(po))throw new RangeError("Format string contains an unescaped latin alphabet character `"+y+"`");return{isToken:!1,value:_}});r.localize.preprocessor&&(c=r.localize.preprocessor(i,c));const l={firstWeekContainsDate:o,weekStartsOn:s,locale:r};return c.map(_=>{if(!_.isToken)return _.value;const y=_.value;(!(t!=null&&t.useAdditionalWeekYearTokens)&&oo(y)||!(t!=null&&t.useAdditionalDayOfYearTokens)&&ao(y))&&so(y,a,String(n));const k=Lr[y[0]];return k(i,y,r.localize,l)}).join("")}function ho(n){const a=n.match(uo);return a?a[1].replace(fo,"'"):n}function Hr(n,a){return P(n,a==null?void 0:a.in).getDate()}function mo(n,a){return P(n,a==null?void 0:a.in).getDay()}function go(n,a){const t=P(n,a==null?void 0:a.in),e=t.getFullYear(),r=t.getMonth(),o=$(t,0);return o.setFullYear(e,r+1,0),o.setHours(0,0,0,0),o.getDate()}function vo(){return Object.assign({},Ke())}function Ce(n,a){return P(n,a==null?void 0:a.in).getHours()}function wo(n,a){const t=P(n,a==null?void 0:a.in).getDay();return t===0?7:t}function Se(n,a){return P(n,a==null?void 0:a.in).getMinutes()}function ne(n,a){return P(n,a==null?void 0:a.in).getMonth()}function Re(n){return P(n).getSeconds()}function fr(n){return+P(n)}function L(n,a){return P(n,a==null?void 0:a.in).getFullYear()}function Le(n,a){return+P(n)>+P(a)}function Ve(n,a){return+P(n)<+P(a)}function yo(n,a){return+P(n)==+P(a)}function Do(n,a){const t=bo(a)?new a(0):$(a,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t.setHours(n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()),t}function bo(n){var a;return typeof n=="function"&&((a=n.prototype)==null?void 0:a.constructor)===n}const ko=10;class On{constructor(){C(this,"subPriority",0)}validate(a,t){return!0}}class xo extends On{constructor(a,t,e,r,o){super(),this.value=a,this.validateValue=t,this.setValue=e,this.priority=r,o&&(this.subPriority=o)}validate(a,t){return this.validateValue(a,this.value,t)}set(a,t,e){return this.setValue(a,t,this.value,e)}}class _o extends On{constructor(t,e){super();C(this,"priority",ko);C(this,"subPriority",-1);this.context=t||(r=>$(e,r))}set(t,e){return e.timestampIsSet?t:$(t,Do(t,this.context))}}class j{run(a,t,e,r){const o=this.parse(a,t,e,r);return o?{setter:new xo(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(a,t,e){return!0}}class Mo extends j{constructor(){super(...arguments);C(this,"priority",140);C(this,"incompatibleTokens",["R","u","t","T"])}parse(t,e,r){switch(e){case"G":case"GG":case"GGG":return r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"});case"GGGGG":return r.era(t,{width:"narrow"});case"GGGG":default:return r.era(t,{width:"wide"})||r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"})}}set(t,e,r){return e.era=r,t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}const Z={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},ve={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function J(n,a){return n&&{value:a(n.value),rest:n.rest}}function G(n,a){const t=a.match(n);return t?{value:parseInt(t[0],10),rest:a.slice(t[0].length)}:null}function we(n,a){const t=a.match(n);if(!t)return null;if(t[0]==="Z")return{value:0,rest:a.slice(1)};const e=t[1]==="+"?1:-1,r=t[2]?parseInt(t[2],10):0,o=t[3]?parseInt(t[3],10):0,s=t[5]?parseInt(t[5],10):0;return{value:e*(r*Kt+o*qt+s*fa),rest:a.slice(t[0].length)}}function Nn(n){return G(Z.anyDigitsSigned,n)}function X(n,a){switch(n){case 1:return G(Z.singleDigit,a);case 2:return G(Z.twoDigits,a);case 3:return G(Z.threeDigits,a);case 4:return G(Z.fourDigits,a);default:return G(new RegExp("^\\d{1,"+n+"}"),a)}}function At(n,a){switch(n){case 1:return G(Z.singleDigitSigned,a);case 2:return G(Z.twoDigitsSigned,a);case 3:return G(Z.threeDigitsSigned,a);case 4:return G(Z.fourDigitsSigned,a);default:return G(new RegExp("^-?\\d{1,"+n+"}"),a)}}function yr(n){switch(n){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function Rn(n,a){const t=a>0,e=t?a:1-a;let r;if(e<=50)r=n||100;else{const o=e+50,s=Math.trunc(o/100)*100,i=n>=o%100;r=n+s-(i?100:0)}return t?r:1-r}function Yn(n){return n%400===0||n%4===0&&n%100!==0}class Co extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(t,e,r){const o=s=>({year:s,isTwoDigitYear:e==="yy"});switch(e){case"y":return J(X(4,t),o);case"yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r){const o=t.getFullYear();if(r.isTwoDigitYear){const i=Rn(r.year,o);return t.setFullYear(i,0,1),t.setHours(0,0,0,0),t}const s=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(s,0,1),t.setHours(0,0,0,0),t}}class So extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(t,e,r){const o=s=>({year:s,isTwoDigitYear:e==="YY"});switch(e){case"Y":return J(X(4,t),o);case"Yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r,o){const s=wr(t,o);if(r.isTwoDigitYear){const c=Rn(r.year,s);return t.setFullYear(c,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Pe(t,o)}const i=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(i,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Pe(t,o)}}class Eo extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(t,e){return At(e==="R"?4:e.length,t)}set(t,e,r){const o=$(t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),Xe(o)}}class Po extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(t,e){return At(e==="u"?4:e.length,t)}set(t,e,r){return t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}class To extends j{constructor(){super(...arguments);C(this,"priority",120);C(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"Q":case"QQ":return X(e.length,t);case"Qo":return r.ordinalNumber(t,{unit:"quarter"});case"QQQ":return r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQ":default:return r.quarter(t,{width:"wide",context:"formatting"})||r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class Oo extends j{constructor(){super(...arguments);C(this,"priority",120);C(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"q":case"qq":return X(e.length,t);case"qo":return r.ordinalNumber(t,{unit:"quarter"});case"qqq":return r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(t,{width:"narrow",context:"standalone"});case"qqqq":default:return r.quarter(t,{width:"wide",context:"standalone"})||r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class No extends j{constructor(){super(...arguments);C(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]);C(this,"priority",110)}parse(t,e,r){const o=s=>s-1;switch(e){case"M":return J(G(Z.month,t),o);case"MM":return J(X(2,t),o);case"Mo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"MMM":return r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(t,{width:"narrow",context:"formatting"});case"MMMM":default:return r.month(t,{width:"wide",context:"formatting"})||r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}class Ro extends j{constructor(){super(...arguments);C(this,"priority",110);C(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(t,e,r){const o=s=>s-1;switch(e){case"L":return J(G(Z.month,t),o);case"LL":return J(X(2,t),o);case"Lo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"LLL":return r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(t,{width:"narrow",context:"standalone"});case"LLLL":default:return r.month(t,{width:"wide",context:"standalone"})||r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}function Yo(n,a,t){const e=P(n,t==null?void 0:t.in),r=Pn(e,t)-a;return e.setDate(e.getDate()-r*7),P(e,t==null?void 0:t.in)}class Lo extends j{constructor(){super(...arguments);C(this,"priority",100);C(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(t,e,r){switch(e){case"w":return G(Z.week,t);case"wo":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r,o){return Pe(Yo(t,r,o),o)}}function Fo(n,a,t){const e=P(n,t==null?void 0:t.in),r=vr(e,t)-a;return e.setDate(e.getDate()-r*7),e}class Io extends j{constructor(){super(...arguments);C(this,"priority",100);C(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(t,e,r){switch(e){case"I":return G(Z.week,t);case"Io":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r){return Xe(Fo(t,r))}}const Ao=[31,28,31,30,31,30,31,31,30,31,30,31],Wo=[31,29,31,30,31,30,31,31,30,31,30,31];class Ho extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"subPriority",1);C(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"d":return G(Z.date,t);case"do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear(),o=Yn(r),s=t.getMonth();return o?e>=1&&e<=Wo[s]:e>=1&&e<=Ao[s]}set(t,e,r){return t.setDate(r),t.setHours(0,0,0,0),t}}class jo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"subpriority",1);C(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(t,e,r){switch(e){case"D":case"DD":return G(Z.dayOfYear,t);case"Do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear();return Yn(r)?e>=1&&e<=366:e>=1&&e<=365}set(t,e,r){return t.setMonth(0,r),t.setHours(0,0,0,0),t}}function Dr(n,a,t){var d,f,p,h;const e=Ke(),r=(t==null?void 0:t.weekStartsOn)??((f=(d=t==null?void 0:t.locale)==null?void 0:d.options)==null?void 0:f.weekStartsOn)??e.weekStartsOn??((h=(p=e.locale)==null?void 0:p.options)==null?void 0:h.weekStartsOn)??0,o=P(n,t==null?void 0:t.in),s=o.getDay(),c=(a%7+7)%7,l=7-r,u=a<0||a>6?a-(s+l)%7:(c+l)%7-(s+l)%7;return pe(o,u,t)}class Bo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"E":case"EE":case"EEE":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEE":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Qo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(t,e,r,o){const s=i=>{const c=Math.floor((i-1)/7)*7;return(i+o.weekStartsOn+6)%7+c};switch(e){case"e":case"ee":return J(X(e.length,t),s);case"eo":return J(r.ordinalNumber(t,{unit:"day"}),s);case"eee":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeeee":return r.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeee":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}class Vo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(t,e,r,o){const s=i=>{const c=Math.floor((i-1)/7)*7;return(i+o.weekStartsOn+6)%7+c};switch(e){case"c":case"cc":return J(X(e.length,t),s);case"co":return J(r.ordinalNumber(t,{unit:"day"}),s);case"ccc":return r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"ccccc":return r.day(t,{width:"narrow",context:"standalone"});case"cccccc":return r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"cccc":default:return r.day(t,{width:"wide",context:"standalone"})||r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=Dr(t,r,o),t.setHours(0,0,0,0),t}}function qo(n,a,t){const e=P(n,t==null?void 0:t.in),r=wo(e,t),o=a-r;return pe(e,o,t)}class Ko extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(t,e,r){const o=s=>s===0?7:s;switch(e){case"i":case"ii":return X(e.length,t);case"io":return r.ordinalNumber(t,{unit:"day"});case"iii":return J(r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiii":return J(r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiiii":return J(r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiii":default:return J(r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o)}}validate(t,e){return e>=1&&e<=7}set(t,e,r){return t=qo(t,r),t.setHours(0,0,0,0),t}}class $o extends j{constructor(){super(...arguments);C(this,"priority",80);C(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(t,e,r){switch(e){case"a":case"aa":case"aaa":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaaa":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaa":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(yr(r),0,0,0),t}}class Uo extends j{constructor(){super(...arguments);C(this,"priority",80);C(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(t,e,r){switch(e){case"b":case"bb":case"bbb":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbbb":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbb":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(yr(r),0,0,0),t}}class zo extends j{constructor(){super(...arguments);C(this,"priority",80);C(this,"incompatibleTokens",["a","b","t","T"])}parse(t,e,r){switch(e){case"B":case"BB":case"BBB":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBBB":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBB":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(yr(r),0,0,0),t}}class Go extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["H","K","k","t","T"])}parse(t,e,r){switch(e){case"h":return G(Z.hour12h,t);case"ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=12}set(t,e,r){const o=t.getHours()>=12;return o&&r<12?t.setHours(r+12,0,0,0):!o&&r===12?t.setHours(0,0,0,0):t.setHours(r,0,0,0),t}}class Xo extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(t,e,r){switch(e){case"H":return G(Z.hour23h,t);case"Ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=23}set(t,e,r){return t.setHours(r,0,0,0),t}}class Zo extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["h","H","k","t","T"])}parse(t,e,r){switch(e){case"K":return G(Z.hour11h,t);case"Ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.getHours()>=12&&r<12?t.setHours(r+12,0,0,0):t.setHours(r,0,0,0),t}}class Jo extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(t,e,r){switch(e){case"k":return G(Z.hour24h,t);case"ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=24}set(t,e,r){const o=r<=24?r%24:r;return t.setHours(o,0,0,0),t}}class es extends j{constructor(){super(...arguments);C(this,"priority",60);C(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"m":return G(Z.minute,t);case"mo":return r.ordinalNumber(t,{unit:"minute"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setMinutes(r,0,0),t}}class ts extends j{constructor(){super(...arguments);C(this,"priority",50);C(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"s":return G(Z.second,t);case"so":return r.ordinalNumber(t,{unit:"second"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setSeconds(r,0),t}}class rs extends j{constructor(){super(...arguments);C(this,"priority",30);C(this,"incompatibleTokens",["t","T"])}parse(t,e){const r=o=>Math.trunc(o*Math.pow(10,-e.length+3));return J(X(e.length,t),r)}set(t,e,r){return t.setMilliseconds(r),t}}class ns extends j{constructor(){super(...arguments);C(this,"priority",10);C(this,"incompatibleTokens",["t","T","x"])}parse(t,e){switch(e){case"X":return we(ve.basicOptionalMinutes,t);case"XX":return we(ve.basic,t);case"XXXX":return we(ve.basicOptionalSeconds,t);case"XXXXX":return we(ve.extendedOptionalSeconds,t);case"XXX":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:$(t,t.getTime()-Nt(t)-r)}}class as extends j{constructor(){super(...arguments);C(this,"priority",10);C(this,"incompatibleTokens",["t","T","X"])}parse(t,e){switch(e){case"x":return we(ve.basicOptionalMinutes,t);case"xx":return we(ve.basic,t);case"xxxx":return we(ve.basicOptionalSeconds,t);case"xxxxx":return we(ve.extendedOptionalSeconds,t);case"xxx":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:$(t,t.getTime()-Nt(t)-r)}}class os extends j{constructor(){super(...arguments);C(this,"priority",40);C(this,"incompatibleTokens","*")}parse(t){return Nn(t)}set(t,e,r){return[$(t,r*1e3),{timestampIsSet:!0}]}}class ss extends j{constructor(){super(...arguments);C(this,"priority",20);C(this,"incompatibleTokens","*")}parse(t){return Nn(t)}set(t,e,r){return[$(t,r),{timestampIsSet:!0}]}}const is={G:new Mo,y:new Co,Y:new So,R:new Eo,u:new Po,Q:new To,q:new Oo,M:new No,L:new Ro,w:new Lo,I:new Io,d:new Ho,D:new jo,E:new Bo,e:new Qo,c:new Vo,i:new Ko,a:new $o,b:new Uo,B:new zo,h:new Go,H:new Xo,K:new Zo,k:new Jo,m:new es,s:new ts,S:new rs,X:new ns,x:new as,t:new os,T:new ss},cs=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,ls=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,us=/^'([^]*?)'?$/,ds=/''/g,fs=/\S/,ps=/[a-zA-Z]/;function hs(n,a,t,e){var g,D,_,y,k,T,O,S;const r=()=>$((e==null?void 0:e.in)||t,NaN),o=vo(),s=(e==null?void 0:e.locale)??o.locale??En,i=(e==null?void 0:e.firstWeekContainsDate)??((D=(g=e==null?void 0:e.locale)==null?void 0:g.options)==null?void 0:D.firstWeekContainsDate)??o.firstWeekContainsDate??((y=(_=o.locale)==null?void 0:_.options)==null?void 0:y.firstWeekContainsDate)??1,c=(e==null?void 0:e.weekStartsOn)??((T=(k=e==null?void 0:e.locale)==null?void 0:k.options)==null?void 0:T.weekStartsOn)??o.weekStartsOn??((S=(O=o.locale)==null?void 0:O.options)==null?void 0:S.weekStartsOn)??0;if(!a)return n?r():P(t,e==null?void 0:e.in);const l={firstWeekContainsDate:i,weekStartsOn:c,locale:s},u=[new _o(e==null?void 0:e.in,t)],d=a.match(ls).map(x=>{const E=x[0];if(E in dr){const R=dr[E];return R(x,s.formatLong)}return x}).join("").match(cs),f=[];for(let x of d){const E=x[0],R=is[E];if(R){const{incompatibleTokens:B}=R;if(Array.isArray(B)){const U=f.find(Q=>B.includes(Q.token)||Q.token===E);if(U)throw new RangeError(`The format string mustn't contain \`${U.fullToken}\` and \`${x}\` at the same time`)}else if(R.incompatibleTokens==="*"&&f.length>0)throw new RangeError(`The format string mustn't contain \`${x}\` and any other token at the same time`);f.push({token:E,fullToken:x});const I=R.run(n,x,s.match,l);if(!I)return r();u.push(I.setter),n=I.rest}else{if(E.match(ps))throw new RangeError("Format string contains an unescaped latin alphabet character `"+E+"`");if(x==="''"?x="'":E==="'"&&(x=ms(x)),n.indexOf(x)===0)n=n.slice(x.length);else return r()}}if(n.length>0&&fs.test(n))return r();const p=u.map(x=>x.priority).sort((x,E)=>E-x).filter((x,E,R)=>R.indexOf(x)===E).map(x=>u.filter(E=>E.priority===x).sort((E,R)=>R.subPriority-E.subPriority)).map(x=>x[0]);let h=P(t,e==null?void 0:e.in);if(isNaN(+h))return r();const v={};for(const x of p){if(!x.validate(h,l))return r();const E=x.set(h,v,l);Array.isArray(E)?(h=E[0],Object.assign(v,E[1])):h=E}return h}function ms(n){return n.match(us)[1].replace(ds,"'")}function gs(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()&&e.getMonth()===r.getMonth()}function vs(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return+ur(e)==+ur(r)}function ws(n,a,t){const[e,r]=Te(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()}function dt(n,a,t){const e=+P(n,t==null?void 0:t.in),[r,o]=[+P(a.start,t==null?void 0:t.in),+P(a.end,t==null?void 0:t.in)].sort((s,i)=>s-i);return e>=r&&e<=o}function ys(n,a,t){return pe(n,-1,t)}function Ds(n,a){const t=()=>$(a==null?void 0:a.in,NaN),r=_s(n);let o;if(r.date){const l=Ms(r.date,2);o=Cs(l.restDateString,l.year)}if(!o||isNaN(+o))return t();const s=+o;let i=0,c;if(r.time&&(i=Ss(r.time),isNaN(i)))return t();if(r.timezone){if(c=Es(r.timezone),isNaN(c))return t()}else{const l=new Date(s+i),u=P(0,a==null?void 0:a.in);return u.setFullYear(l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate()),u.setHours(l.getUTCHours(),l.getUTCMinutes(),l.getUTCSeconds(),l.getUTCMilliseconds()),u}return P(s+i+c,a==null?void 0:a.in)}const wt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},bs=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,ks=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,xs=/^([+-])(\d{2})(?::?(\d{2}))?$/;function _s(n){const a={},t=n.split(wt.dateTimeDelimiter);let e;if(t.length>2)return a;if(/:/.test(t[0])?e=t[0]:(a.date=t[0],e=t[1],wt.timeZoneDelimiter.test(a.date)&&(a.date=n.split(wt.timeZoneDelimiter)[0],e=n.substr(a.date.length,n.length))),e){const r=wt.timezone.exec(e);r?(a.time=e.replace(r[1],""),a.timezone=r[1]):a.time=e}return a}function Ms(n,a){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+a)+"})|(\\d{2}|[+-]\\d{"+(2+a)+"})$)"),e=n.match(t);if(!e)return{year:NaN,restDateString:""};const r=e[1]?parseInt(e[1]):null,o=e[2]?parseInt(e[2]):null;return{year:o===null?r:o*100,restDateString:n.slice((e[1]||e[2]).length)}}function Cs(n,a){if(a===null)return new Date(NaN);const t=n.match(bs);if(!t)return new Date(NaN);const e=!!t[4],r=it(t[1]),o=it(t[2])-1,s=it(t[3]),i=it(t[4]),c=it(t[5])-1;if(e)return Rs(a,i,c)?Ps(a,i,c):new Date(NaN);{const l=new Date(0);return!Os(a,o,s)||!Ns(a,r)?new Date(NaN):(l.setUTCFullYear(a,o,Math.max(r,s)),l)}}function it(n){return n?parseInt(n):1}function Ss(n){const a=n.match(ks);if(!a)return NaN;const t=tr(a[1]),e=tr(a[2]),r=tr(a[3]);return Ys(t,e,r)?t*Kt+e*qt+r*1e3:NaN}function tr(n){return n&&parseFloat(n.replace(",","."))||0}function Es(n){if(n==="Z")return 0;const a=n.match(xs);if(!a)return 0;const t=a[1]==="+"?-1:1,e=parseInt(a[2]),r=a[3]&&parseInt(a[3])||0;return Ls(e,r)?t*(e*Kt+r*qt):NaN}function Ps(n,a,t){const e=new Date(0);e.setUTCFullYear(n,0,4);const r=e.getUTCDay()||7,o=(a-1)*7+t+1-r;return e.setUTCDate(e.getUTCDate()+o),e}const Ts=[31,null,31,30,31,30,31,31,30,31,30,31];function Ln(n){return n%400===0||n%4===0&&n%100!==0}function Os(n,a,t){return a>=0&&a<=11&&t>=1&&t<=(Ts[a]||(Ln(n)?29:28))}function Ns(n,a){return a>=1&&a<=(Ln(n)?366:365)}function Rs(n,a,t){return a>=1&&a<=53&&t>=0&&t<=6}function Ys(n,a,t){return n===24?a===0&&t===0:t>=0&&t<60&&a>=0&&a<60&&n>=0&&n<25}function Ls(n,a){return a>=0&&a<=59}function ce(n,a,t){const e=P(n,t==null?void 0:t.in),r=e.getFullYear(),o=e.getDate(),s=$(n,0);s.setFullYear(r,a,15),s.setHours(0,0,0,0);const i=go(s);return e.setMonth(a,Math.min(o,i)),e}function Mt(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setHours(a),e}function Ct(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setMinutes(a),e}function Ue(n,a,t){const e=P(n,t==null?void 0:t.in),r=Math.trunc(e.getMonth()/3)+1,o=a-r;return ce(e,e.getMonth()+o*3)}function St(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setSeconds(a),e}function me(n,a,t){const e=P(n,t==null?void 0:t.in);return isNaN(+e)?$(n,NaN):(e.setFullYear(a),e)}function je(n,a,t){return he(n,-a,t)}function Fn(n,a,t){return gr(n,-1,t)}function jr(n,a,t){return Rt(n,-1,t)}function Je(n,a,t){return _e(n,-a,t)}function Ut(){return typeof window<"u"}function at(n){return In(n)?(n.nodeName||"").toLowerCase():"#document"}function se(n){var a;return(n==null||(a=n.ownerDocument)==null?void 0:a.defaultView)||window}function ke(n){var a;return(a=(In(n)?n.ownerDocument:n.document)||window.document)==null?void 0:a.documentElement}function In(n){return Ut()?n instanceof Node||n instanceof se(n).Node:!1}function oe(n){return Ut()?n instanceof Element||n instanceof se(n).Element:!1}function be(n){return Ut()?n instanceof HTMLElement||n instanceof se(n).HTMLElement:!1}function Br(n){return!Ut()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof se(n).ShadowRoot}const Fs=new Set(["inline","contents"]);function ht(n){const{overflow:a,overflowX:t,overflowY:e,display:r}=ue(n);return/auto|scroll|overlay|hidden|clip/.test(a+e+t)&&!Fs.has(r)}const Is=new Set(["table","td","th"]);function As(n){return Is.has(at(n))}const Ws=[":popover-open",":modal"];function zt(n){return Ws.some(a=>{try{return n.matches(a)}catch{return!1}})}const Hs=["transform","translate","scale","rotate","perspective"],js=["transform","translate","scale","rotate","perspective","filter"],Bs=["paint","layout","strict","content"];function br(n){const a=kr(),t=oe(n)?ue(n):n;return Hs.some(e=>t[e]?t[e]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!a&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!a&&(t.filter?t.filter!=="none":!1)||js.some(e=>(t.willChange||"").includes(e))||Bs.some(e=>(t.contain||"").includes(e))}function Qs(n){let a=Fe(n);for(;be(a)&&!et(a);){if(br(a))return a;if(zt(a))return null;a=Fe(a)}return null}function kr(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Vs=new Set(["html","body","#document"]);function et(n){return Vs.has(at(n))}function ue(n){return se(n).getComputedStyle(n)}function Gt(n){return oe(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function Fe(n){if(at(n)==="html")return n;const a=n.assignedSlot||n.parentNode||Br(n)&&n.host||ke(n);return Br(a)?a.host:a}function An(n){const a=Fe(n);return et(a)?n.ownerDocument?n.ownerDocument.body:n.body:be(a)&&ht(a)?a:An(a)}function ft(n,a,t){var e;a===void 0&&(a=[]),t===void 0&&(t=!0);const r=An(n),o=r===((e=n.ownerDocument)==null?void 0:e.body),s=se(r);if(o){const i=pr(s);return a.concat(s,s.visualViewport||[],ht(r)?r:[],i&&t?ft(i):[])}return a.concat(r,ft(r,[],t))}function pr(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}const tt=Math.min,Be=Math.max,Wt=Math.round,yt=Math.floor,De=n=>({x:n,y:n}),qs={left:"right",right:"left",bottom:"top",top:"bottom"},Ks={start:"end",end:"start"};function $s(n,a,t){return Be(n,tt(a,t))}function Xt(n,a){return typeof n=="function"?n(a):n}function rt(n){return n.split("-")[0]}function mt(n){return n.split("-")[1]}function Us(n){return n==="x"?"y":"x"}function xr(n){return n==="y"?"height":"width"}const zs=new Set(["top","bottom"]);function Ae(n){return zs.has(rt(n))?"y":"x"}function _r(n){return Us(Ae(n))}function Gs(n,a,t){t===void 0&&(t=!1);const e=mt(n),r=_r(n),o=xr(r);let s=r==="x"?e===(t?"end":"start")?"right":"left":e==="start"?"bottom":"top";return a.reference[o]>a.floating[o]&&(s=Ht(s)),[s,Ht(s)]}function Xs(n){const a=Ht(n);return[hr(n),a,hr(a)]}function hr(n){return n.replace(/start|end/g,a=>Ks[a])}const Qr=["left","right"],Vr=["right","left"],Zs=["top","bottom"],Js=["bottom","top"];function ei(n,a,t){switch(n){case"top":case"bottom":return t?a?Vr:Qr:a?Qr:Vr;case"left":case"right":return a?Zs:Js;default:return[]}}function ti(n,a,t,e){const r=mt(n);let o=ei(rt(n),t==="start",e);return r&&(o=o.map(s=>s+"-"+r),a&&(o=o.concat(o.map(hr)))),o}function Ht(n){return n.replace(/left|right|bottom|top/g,a=>qs[a])}function ri(n){return{top:0,right:0,bottom:0,left:0,...n}}function Wn(n){return typeof n!="number"?ri(n):{top:n,right:n,bottom:n,left:n}}function jt(n){const{x:a,y:t,width:e,height:r}=n;return{width:e,height:r,top:t,left:a,right:a+e,bottom:t+r,x:a,y:t}}var ni=typeof document<"u",ai=function(){},Bt=ni?w.useLayoutEffect:ai;const oi={...Dn},si=oi.useInsertionEffect,ii=si||(n=>n());function ci(n){const a=w.useRef(()=>{});return ii(()=>{a.current=n}),w.useCallback(function(){for(var t=arguments.length,e=new Array(t),r=0;r{const{placement:e="bottom",strategy:r="absolute",middleware:o=[],platform:s}=t,i=o.filter(Boolean),c=await(s.isRTL==null?void 0:s.isRTL(a));let l=await s.getElementRects({reference:n,floating:a,strategy:r}),{x:u,y:d}=qr(l,e,c),f=e,p={},h=0;for(let v=0;v({name:"arrow",options:n,async fn(a){const{x:t,y:e,placement:r,rects:o,platform:s,elements:i,middlewareData:c}=a,{element:l,padding:u=0}=Xt(n,a)||{};if(l==null)return{};const d=Wn(u),f={x:t,y:e},p=_r(r),h=xr(p),v=await s.getDimensions(l),g=p==="y",D=g?"top":"left",_=g?"bottom":"right",y=g?"clientHeight":"clientWidth",k=o.reference[h]+o.reference[p]-f[p]-o.floating[h],T=f[p]-o.reference[p],O=await(s.getOffsetParent==null?void 0:s.getOffsetParent(l));let S=O?O[y]:0;(!S||!await(s.isElement==null?void 0:s.isElement(O)))&&(S=i.floating[y]||o.floating[h]);const x=k/2-T/2,E=S/2-v[h]/2-1,R=tt(d[D],E),B=tt(d[_],E),I=R,U=S-v[h]-B,Q=S/2-v[h]/2+x,q=$s(I,Q,U),N=!c.arrow&&mt(r)!=null&&Q!==q&&o.reference[h]/2-(QQ<=0)){var B,I;const Q=(((B=o.flip)==null?void 0:B.index)||0)+1,q=S[Q];if(q&&(!(d==="alignment"?_!==Ae(q):!1)||R.every(Y=>Y.overflows[0]>0&&Ae(Y.placement)===_)))return{data:{index:Q,overflows:R},reset:{placement:q}};let N=(I=R.filter(F=>F.overflows[0]<=0).sort((F,Y)=>F.overflows[1]-Y.overflows[1])[0])==null?void 0:I.placement;if(!N)switch(p){case"bestFit":{var U;const F=(U=R.filter(Y=>{if(O){const ee=Ae(Y.placement);return ee===_||ee==="y"}return!0}).map(Y=>[Y.placement,Y.overflows.filter(ee=>ee>0).reduce((ee,de)=>ee+de,0)]).sort((Y,ee)=>Y[1]-ee[1])[0])==null?void 0:U[0];F&&(N=F);break}case"initialPlacement":N=i;break}if(r!==N)return{reset:{placement:N}}}return{}}}},pi=new Set(["left","top"]);async function hi(n,a){const{placement:t,platform:e,elements:r}=n,o=await(e.isRTL==null?void 0:e.isRTL(r.floating)),s=rt(t),i=mt(t),c=Ae(t)==="y",l=pi.has(s)?-1:1,u=o&&c?-1:1,d=Xt(a,n);let{mainAxis:f,crossAxis:p,alignmentAxis:h}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return i&&typeof h=="number"&&(p=i==="end"?h*-1:h),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}const mi=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(a){var t,e;const{x:r,y:o,placement:s,middlewareData:i}=a,c=await hi(a,n);return s===((t=i.offset)==null?void 0:t.placement)&&(e=i.arrow)!=null&&e.alignmentOffset?{}:{x:r+c.x,y:o+c.y,data:{...c,placement:s}}}}};function Hn(n){const a=ue(n);let t=parseFloat(a.width)||0,e=parseFloat(a.height)||0;const r=be(n),o=r?n.offsetWidth:t,s=r?n.offsetHeight:e,i=Wt(t)!==o||Wt(e)!==s;return i&&(t=o,e=s),{width:t,height:e,$:i}}function Mr(n){return oe(n)?n:n.contextElement}function ze(n){const a=Mr(n);if(!be(a))return De(1);const t=a.getBoundingClientRect(),{width:e,height:r,$:o}=Hn(a);let s=(o?Wt(t.width):t.width)/e,i=(o?Wt(t.height):t.height)/r;return(!s||!Number.isFinite(s))&&(s=1),(!i||!Number.isFinite(i))&&(i=1),{x:s,y:i}}const gi=De(0);function jn(n){const a=se(n);return!kr()||!a.visualViewport?gi:{x:a.visualViewport.offsetLeft,y:a.visualViewport.offsetTop}}function vi(n,a,t){return a===void 0&&(a=!1),!t||a&&t!==se(n)?!1:a}function qe(n,a,t,e){a===void 0&&(a=!1),t===void 0&&(t=!1);const r=n.getBoundingClientRect(),o=Mr(n);let s=De(1);a&&(e?oe(e)&&(s=ze(e)):s=ze(n));const i=vi(o,t,e)?jn(o):De(0);let c=(r.left+i.x)/s.x,l=(r.top+i.y)/s.y,u=r.width/s.x,d=r.height/s.y;if(o){const f=se(o),p=e&&oe(e)?se(e):e;let h=f,v=pr(h);for(;v&&e&&p!==h;){const g=ze(v),D=v.getBoundingClientRect(),_=ue(v),y=D.left+(v.clientLeft+parseFloat(_.paddingLeft))*g.x,k=D.top+(v.clientTop+parseFloat(_.paddingTop))*g.y;c*=g.x,l*=g.y,u*=g.x,d*=g.y,c+=y,l+=k,h=se(v),v=pr(h)}}return jt({width:u,height:d,x:c,y:l})}function Cr(n,a){const t=Gt(n).scrollLeft;return a?a.left+t:qe(ke(n)).left+t}function Bn(n,a,t){t===void 0&&(t=!1);const e=n.getBoundingClientRect(),r=e.left+a.scrollLeft-(t?0:Cr(n,e)),o=e.top+a.scrollTop;return{x:r,y:o}}function wi(n){let{elements:a,rect:t,offsetParent:e,strategy:r}=n;const o=r==="fixed",s=ke(e),i=a?zt(a.floating):!1;if(e===s||i&&o)return t;let c={scrollLeft:0,scrollTop:0},l=De(1);const u=De(0),d=be(e);if((d||!d&&!o)&&((at(e)!=="body"||ht(s))&&(c=Gt(e)),be(e))){const p=qe(e);l=ze(e),u.x=p.x+e.clientLeft,u.y=p.y+e.clientTop}const f=s&&!d&&!o?Bn(s,c,!0):De(0);return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:t.y*l.y-c.scrollTop*l.y+u.y+f.y}}function yi(n){return Array.from(n.getClientRects())}function Di(n){const a=ke(n),t=Gt(n),e=n.ownerDocument.body,r=Be(a.scrollWidth,a.clientWidth,e.scrollWidth,e.clientWidth),o=Be(a.scrollHeight,a.clientHeight,e.scrollHeight,e.clientHeight);let s=-t.scrollLeft+Cr(n);const i=-t.scrollTop;return ue(e).direction==="rtl"&&(s+=Be(a.clientWidth,e.clientWidth)-r),{width:r,height:o,x:s,y:i}}function bi(n,a){const t=se(n),e=ke(n),r=t.visualViewport;let o=e.clientWidth,s=e.clientHeight,i=0,c=0;if(r){o=r.width,s=r.height;const l=kr();(!l||l&&a==="fixed")&&(i=r.offsetLeft,c=r.offsetTop)}return{width:o,height:s,x:i,y:c}}const ki=new Set(["absolute","fixed"]);function xi(n,a){const t=qe(n,!0,a==="fixed"),e=t.top+n.clientTop,r=t.left+n.clientLeft,o=be(n)?ze(n):De(1),s=n.clientWidth*o.x,i=n.clientHeight*o.y,c=r*o.x,l=e*o.y;return{width:s,height:i,x:c,y:l}}function Kr(n,a,t){let e;if(a==="viewport")e=bi(n,t);else if(a==="document")e=Di(ke(n));else if(oe(a))e=xi(a,t);else{const r=jn(n);e={x:a.x-r.x,y:a.y-r.y,width:a.width,height:a.height}}return jt(e)}function Qn(n,a){const t=Fe(n);return t===a||!oe(t)||et(t)?!1:ue(t).position==="fixed"||Qn(t,a)}function _i(n,a){const t=a.get(n);if(t)return t;let e=ft(n,[],!1).filter(i=>oe(i)&&at(i)!=="body"),r=null;const o=ue(n).position==="fixed";let s=o?Fe(n):n;for(;oe(s)&&!et(s);){const i=ue(s),c=br(s);!c&&i.position==="fixed"&&(r=null),(o?!c&&!r:!c&&i.position==="static"&&!!r&&ki.has(r.position)||ht(s)&&!c&&Qn(n,s))?e=e.filter(u=>u!==s):r=i,s=Fe(s)}return a.set(n,e),e}function Mi(n){let{element:a,boundary:t,rootBoundary:e,strategy:r}=n;const s=[...t==="clippingAncestors"?zt(a)?[]:_i(a,this._c):[].concat(t),e],i=s[0],c=s.reduce((l,u)=>{const d=Kr(a,u,r);return l.top=Be(d.top,l.top),l.right=tt(d.right,l.right),l.bottom=tt(d.bottom,l.bottom),l.left=Be(d.left,l.left),l},Kr(a,i,r));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function Ci(n){const{width:a,height:t}=Hn(n);return{width:a,height:t}}function Si(n,a,t){const e=be(a),r=ke(a),o=t==="fixed",s=qe(n,!0,o,a);let i={scrollLeft:0,scrollTop:0};const c=De(0);function l(){c.x=Cr(r)}if(e||!e&&!o)if((at(a)!=="body"||ht(r))&&(i=Gt(a)),e){const p=qe(a,!0,o,a);c.x=p.x+a.clientLeft,c.y=p.y+a.clientTop}else r&&l();o&&!e&&r&&l();const u=r&&!e&&!o?Bn(r,i):De(0),d=s.left+i.scrollLeft-c.x-u.x,f=s.top+i.scrollTop-c.y-u.y;return{x:d,y:f,width:s.width,height:s.height}}function rr(n){return ue(n).position==="static"}function $r(n,a){if(!be(n)||ue(n).position==="fixed")return null;if(a)return a(n);let t=n.offsetParent;return ke(n)===t&&(t=t.ownerDocument.body),t}function Vn(n,a){const t=se(n);if(zt(n))return t;if(!be(n)){let r=Fe(n);for(;r&&!et(r);){if(oe(r)&&!rr(r))return r;r=Fe(r)}return t}let e=$r(n,a);for(;e&&As(e)&&rr(e);)e=$r(e,a);return e&&et(e)&&rr(e)&&!br(e)?t:e||Qs(n)||t}const Ei=async function(n){const a=this.getOffsetParent||Vn,t=this.getDimensions,e=await t(n.floating);return{reference:Si(n.reference,await a(n.floating),n.strategy),floating:{x:0,y:0,width:e.width,height:e.height}}};function Pi(n){return ue(n).direction==="rtl"}const Ti={convertOffsetParentRelativeRectToViewportRelativeRect:wi,getDocumentElement:ke,getClippingRect:Mi,getOffsetParent:Vn,getElementRects:Ei,getClientRects:yi,getDimensions:Ci,getScale:ze,isElement:oe,isRTL:Pi};function qn(n,a){return n.x===a.x&&n.y===a.y&&n.width===a.width&&n.height===a.height}function Oi(n,a){let t=null,e;const r=ke(n);function o(){var i;clearTimeout(e),(i=t)==null||i.disconnect(),t=null}function s(i,c){i===void 0&&(i=!1),c===void 0&&(c=1),o();const l=n.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(i||a(),!f||!p)return;const h=yt(d),v=yt(r.clientWidth-(u+f)),g=yt(r.clientHeight-(d+p)),D=yt(u),y={rootMargin:-h+"px "+-v+"px "+-g+"px "+-D+"px",threshold:Be(0,tt(1,c))||1};let k=!0;function T(O){const S=O[0].intersectionRatio;if(S!==c){if(!k)return s();S?s(!1,S):e=setTimeout(()=>{s(!1,1e-7)},1e3)}S===1&&!qn(l,n.getBoundingClientRect())&&s(),k=!1}try{t=new IntersectionObserver(T,{...y,root:r.ownerDocument})}catch{t=new IntersectionObserver(T,y)}t.observe(n)}return s(!0),o}function Ni(n,a,t,e){e===void 0&&(e={});const{ancestorScroll:r=!0,ancestorResize:o=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:i=typeof IntersectionObserver=="function",animationFrame:c=!1}=e,l=Mr(n),u=r||o?[...l?ft(l):[],...ft(a)]:[];u.forEach(D=>{r&&D.addEventListener("scroll",t,{passive:!0}),o&&D.addEventListener("resize",t)});const d=l&&i?Oi(l,t):null;let f=-1,p=null;s&&(p=new ResizeObserver(D=>{let[_]=D;_&&_.target===l&&p&&(p.unobserve(a),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var y;(y=p)==null||y.observe(a)})),t()}),l&&!c&&p.observe(l),p.observe(a));let h,v=c?qe(n):null;c&&g();function g(){const D=qe(n);v&&!qn(v,D)&&t(),v=D,h=requestAnimationFrame(g)}return t(),()=>{var D;u.forEach(_=>{r&&_.removeEventListener("scroll",t),o&&_.removeEventListener("resize",t)}),d==null||d(),(D=p)==null||D.disconnect(),p=null,c&&cancelAnimationFrame(h)}}const Ri=mi,Yi=fi,Ur=di,Li=(n,a,t)=>{const e=new Map,r={platform:Ti,...t},o={...r.platform,_c:e};return li(n,a,{...r,platform:o})};var Fi=typeof document<"u",Ii=function(){},Et=Fi?w.useLayoutEffect:Ii;function Qt(n,a){if(n===a)return!0;if(typeof n!=typeof a)return!1;if(typeof n=="function"&&n.toString()===a.toString())return!0;let t,e,r;if(n&&a&&typeof n=="object"){if(Array.isArray(n)){if(t=n.length,t!==a.length)return!1;for(e=t;e--!==0;)if(!Qt(n[e],a[e]))return!1;return!0}if(r=Object.keys(n),t=r.length,t!==Object.keys(a).length)return!1;for(e=t;e--!==0;)if(!{}.hasOwnProperty.call(a,r[e]))return!1;for(e=t;e--!==0;){const o=r[e];if(!(o==="_owner"&&n.$$typeof)&&!Qt(n[o],a[o]))return!1}return!0}return n!==n&&a!==a}function Kn(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function zr(n,a){const t=Kn(n);return Math.round(a*t)/t}function nr(n){const a=w.useRef(n);return Et(()=>{a.current=n}),a}function Ai(n){n===void 0&&(n={});const{placement:a="bottom",strategy:t="absolute",middleware:e=[],platform:r,elements:{reference:o,floating:s}={},transform:i=!0,whileElementsMounted:c,open:l}=n,[u,d]=w.useState({x:0,y:0,strategy:t,placement:a,middlewareData:{},isPositioned:!1}),[f,p]=w.useState(e);Qt(f,e)||p(e);const[h,v]=w.useState(null),[g,D]=w.useState(null),_=w.useCallback(Y=>{Y!==O.current&&(O.current=Y,v(Y))},[]),y=w.useCallback(Y=>{Y!==S.current&&(S.current=Y,D(Y))},[]),k=o||h,T=s||g,O=w.useRef(null),S=w.useRef(null),x=w.useRef(u),E=c!=null,R=nr(c),B=nr(r),I=nr(l),U=w.useCallback(()=>{if(!O.current||!S.current)return;const Y={placement:a,strategy:t,middleware:f};B.current&&(Y.platform=B.current),Li(O.current,S.current,Y).then(ee=>{const de={...ee,isPositioned:I.current!==!1};Q.current&&!Qt(x.current,de)&&(x.current=de,sa.flushSync(()=>{d(de)}))})},[f,a,t,B,I]);Et(()=>{l===!1&&x.current.isPositioned&&(x.current.isPositioned=!1,d(Y=>({...Y,isPositioned:!1})))},[l]);const Q=w.useRef(!1);Et(()=>(Q.current=!0,()=>{Q.current=!1}),[]),Et(()=>{if(k&&(O.current=k),T&&(S.current=T),k&&T){if(R.current)return R.current(k,T,U);U()}},[k,T,U,R,E]);const q=w.useMemo(()=>({reference:O,floating:S,setReference:_,setFloating:y}),[_,y]),N=w.useMemo(()=>({reference:k,floating:T}),[k,T]),F=w.useMemo(()=>{const Y={position:t,left:0,top:0};if(!N.floating)return Y;const ee=zr(N.floating,u.x),de=zr(N.floating,u.y);return i?{...Y,transform:"translate("+ee+"px, "+de+"px)",...Kn(N.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:ee,top:de}},[t,i,N.floating,u.x,u.y]);return w.useMemo(()=>({...u,update:U,refs:q,elements:N,floatingStyles:F}),[u,U,q,N,F])}const Wi=n=>{function a(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:n,fn(t){const{element:e,padding:r}=typeof n=="function"?n(t):n;return e&&a(e)?e.current!=null?Ur({element:e.current,padding:r}).fn(t):{}:e?Ur({element:e,padding:r}).fn(t):{}}}},Hi=(n,a)=>({...Ri(n),options:[n,a]}),ji=(n,a)=>({...Yi(n),options:[n,a]}),Bi=(n,a)=>({...Wi(n),options:[n,a]}),Qi={...Dn};let Gr=!1,Vi=0;const Xr=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Vi++;function qi(){const[n,a]=w.useState(()=>Gr?Xr():void 0);return Bt(()=>{n==null&&a(Xr())},[]),w.useEffect(()=>{Gr=!0},[]),n}const Ki=Qi.useId,$n=Ki||qi,$i=w.forwardRef(function(a,t){const{context:{placement:e,elements:{floating:r},middlewareData:{arrow:o,shift:s}},width:i=14,height:c=7,tipRadius:l=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h,...v}={},...g}=a,D=$n(),[_,y]=w.useState(!1);if(Bt(()=>{if(!r)return;ue(r).direction==="rtl"&&y(!0)},[r]),!r)return null;const[k,T]=e.split("-"),O=k==="top"||k==="bottom";let S=d;(O&&s!=null&&s.x||!O&&s!=null&&s.y)&&(S=null);const x=u*2,E=x/2,R=i/2*(l/-8+1),B=c/2*l/4,I=!!p,U=S&&T==="end"?"bottom":"top";let Q=S&&T==="end"?"right":"left";S&&_&&(Q=T==="end"?"left":"right");const q=(o==null?void 0:o.x)!=null?S||o.x:"",N=(o==null?void 0:o.y)!=null?S||o.y:"",F=p||"M0,0"+(" H"+i)+(" L"+(i-R)+","+(c-B))+(" Q"+i/2+","+c+" "+R+","+(c-B))+" Z",Y={top:I?"rotate(180deg)":"",left:I?"rotate(90deg)":"rotate(-90deg)",bottom:I?"":"rotate(180deg)",right:I?"rotate(-90deg)":"rotate(90deg)"}[k];return b.jsxs("svg",{...g,"aria-hidden":!0,ref:t,width:I?i:i+x,height:i,viewBox:"0 0 "+i+" "+(c>i?c:i),style:{position:"absolute",pointerEvents:"none",[Q]:q,[U]:N,[k]:O||I?"100%":"calc(100% - "+x/2+"px)",transform:[Y,h].filter(ee=>!!ee).join(" "),...v},children:[x>0&&b.jsx("path",{clipPath:"url(#"+D+")",fill:"none",stroke:f,strokeWidth:x+(p?0:1),d:F}),b.jsx("path",{stroke:x&&!p?g.fill:"none",d:F}),b.jsx("clipPath",{id:D,children:b.jsx("rect",{x:-E,y:E*(I?-1:1),width:i+x,height:i})})]})});function Ui(){const n=new Map;return{emit(a,t){var e;(e=n.get(a))==null||e.forEach(r=>r(t))},on(a,t){n.has(a)||n.set(a,new Set),n.get(a).add(t)},off(a,t){var e;(e=n.get(a))==null||e.delete(t)}}}const zi=w.createContext(null),Gi=w.createContext(null),Xi=()=>{var n;return((n=w.useContext(zi))==null?void 0:n.id)||null},Zi=()=>w.useContext(Gi);function Ji(n){const{open:a=!1,onOpenChange:t,elements:e}=n,r=$n(),o=w.useRef({}),[s]=w.useState(()=>Ui()),i=Xi()!=null,[c,l]=w.useState(e.reference),u=ci((p,h,v)=>{o.current.openEvent=p?h:void 0,s.emit("openchange",{open:p,event:h,reason:v,nested:i}),t==null||t(p,h,v)}),d=w.useMemo(()=>({setPositionReference:l}),[]),f=w.useMemo(()=>({reference:c||e.reference||null,floating:e.floating||null,domReference:e.reference}),[c,e.reference,e.floating]);return w.useMemo(()=>({dataRef:o,open:a,onOpenChange:u,elements:f,events:s,floatingId:r,refs:d}),[a,u,f,s,r,d])}function ec(n){n===void 0&&(n={});const{nodeId:a}=n,t=Ji({...n,elements:{reference:null,floating:null,...n.elements}}),e=n.rootContext||t,r=e.elements,[o,s]=w.useState(null),[i,c]=w.useState(null),u=(r==null?void 0:r.domReference)||o,d=w.useRef(null),f=Zi();Bt(()=>{u&&(d.current=u)},[u]);const p=Ai({...n,elements:{...r,...i&&{reference:i}}}),h=w.useCallback(y=>{const k=oe(y)?{getBoundingClientRect:()=>y.getBoundingClientRect(),getClientRects:()=>y.getClientRects(),contextElement:y}:y;c(k),p.refs.setReference(k)},[p.refs]),v=w.useCallback(y=>{(oe(y)||y===null)&&(d.current=y,s(y)),(oe(p.refs.reference.current)||p.refs.reference.current===null||y!==null&&!oe(y))&&p.refs.setReference(y)},[p.refs]),g=w.useMemo(()=>({...p.refs,setReference:v,setPositionReference:h,domReference:d}),[p.refs,v,h]),D=w.useMemo(()=>({...p.elements,domReference:u}),[p.elements,u]),_=w.useMemo(()=>({...p,...e,refs:g,elements:D,nodeId:a}),[p,g,D,a,e]);return Bt(()=>{e.dataRef.current.floatingContext=_;const y=f==null?void 0:f.nodesRef.current.find(k=>k.id===a);y&&(y.context=_)}),w.useMemo(()=>({...p,context:_,refs:g,elements:D}),[p,g,D,_])}/*! + `,children:D.jsx("div",{className:"p-6",children:D.jsxs("nav",{className:"space-y-2",children:[D.jsxs("a",{href:"#dashboard",className:"flex items-center px-3 py-2 text-sm font-medium text-green-600 dark:text-green-400 bg-green-50 dark:bg-green-900/30 rounded-lg",children:[D.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2H5a2 2 0 00-2-2z"}),D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 5a2 2 0 012-2h4a2 2 0 012 2v6H8V5z"})]}),"Dashboard"]}),D.jsxs("a",{href:"/map",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[D.jsxs("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})]}),"Map View"]}),D.jsxs("a",{href:"#export",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[D.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Data Export"]}),t()&&D.jsxs("a",{href:"/admin",className:"flex items-center px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-green-600 dark:hover:text-green-400 hover:bg-green-50 dark:hover:bg-green-900/30 rounded-lg transition-colors",children:[D.jsx("svg",{className:"mr-3 h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),"Audit Log"]})]})})})]})},ca=(n,a,t)=>{const[e,r]=w.useState(a||new Date(new Date().getFullYear(),0,1)),[o,s]=w.useState(t||new Date),i=w.useRef(n),c=w.useRef(!1);return w.useEffect(()=>{i.current=n},[n]),w.useEffect(()=>{if(!c.current){c.current=!0;return}const f=setTimeout(()=>{i.current&&e&&o&&i.current({startDate:e,endDate:o})},1e3);return()=>clearTimeout(f)},[e,o]),{startDate:e,endDate:o,handleStartDateChange:f=>{r(f),f&&o&&f>o&&s(f)},handleEndDateChange:f=>{s(f),f&&e&&f{const f=new Date(new Date().getFullYear(),0,1),p=new Date;r(f),s(p),i.current&&i.current({startDate:f,endDate:p})}}},bn=6048e5,la=864e5,Vt=6e4,qt=36e5,ua=1e3,Tr=Symbol.for("constructDateFrom");function U(n,a){return typeof n=="function"?n(a):n&&typeof n=="object"&&Tr in n?n[Tr](a):n instanceof Date?new n.constructor(a):new Date(a)}function P(n,a){return U(a||n,n)}function pe(n,a,t){const e=P(n,t==null?void 0:t.in);return isNaN(a)?U((t==null?void 0:t.in)||n,NaN):(a&&e.setDate(e.getDate()+a),e)}function he(n,a,t){const e=P(n,t==null?void 0:t.in);if(isNaN(a))return U(n,NaN);if(!a)return e;const r=e.getDate(),o=U(n,e.getTime());o.setMonth(e.getMonth()+a+1,0);const s=o.getDate();return r>=s?o:(e.setFullYear(o.getFullYear(),o.getMonth(),r),e)}function Dn(n,a,t){return U(n,+P(n)+a)}function da(n,a,t){return Dn(n,a*qt)}let fa={};function qe(){return fa}function Ee(n,a){var i,c,l,u;const t=qe(),e=(a==null?void 0:a.weekStartsOn)??((c=(i=a==null?void 0:a.locale)==null?void 0:i.options)==null?void 0:c.weekStartsOn)??t.weekStartsOn??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.weekStartsOn)??0,r=P(n,a==null?void 0:a.in),o=r.getDay(),s=(o=o.getTime()?e+1:t.getTime()>=i.getTime()?e:e-1}function Ot(n){const a=P(n),t=new Date(Date.UTC(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds(),a.getMilliseconds()));return t.setUTCFullYear(a.getFullYear()),+n-+t}function Pe(n,...a){const t=U.bind(null,a.find(e=>typeof e=="object"));return a.map(t)}function Be(n,a){const t=P(n,a==null?void 0:a.in);return t.setHours(0,0,0,0),t}function Xe(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Be(e),s=Be(r),i=+o-Ot(o),c=+s-Ot(s);return Math.round((i-c)/la)}function pa(n,a){const t=kn(n,a),e=U(n,0);return e.setFullYear(t,0,4),e.setHours(0,0,0,0),Ge(e)}function cr(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setTime(e.getTime()+a*Vt),e}function mr(n,a,t){return he(n,a*3,t)}function ha(n,a,t){return Dn(n,a*1e3)}function Nt(n,a,t){return pe(n,a*7,t)}function xe(n,a,t){return he(n,a*12,t)}function Or(n,a){let t,e=a==null?void 0:a.in;return n.forEach(r=>{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=P(r,e);(!t||t{!e&&typeof r=="object"&&(e=U.bind(null,r));const o=P(r,e);(!t||t>o||isNaN(+o))&&(t=o)}),U(e,t||NaN)}function ma(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+Be(e)==+Be(r)}function _e(n){return n instanceof Date||typeof n=="object"&&Object.prototype.toString.call(n)==="[object Date]"}function Rt(n){return!(!_e(n)&&typeof n!="number"||isNaN(+P(n)))}function Yt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),s=e.getMonth()-r.getMonth();return o*12+s}function We(n,a){const t=P(n,a==null?void 0:a.in);return Math.trunc(t.getMonth()/3)+1}function Lt(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=e.getFullYear()-r.getFullYear(),s=We(e)-We(r);return o*4+s}function Ft(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()-r.getFullYear()}function ga(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a),o=Rr(e,r),s=Math.abs(Xe(e,r));e.setDate(e.getDate()-o*s);const i=+(Rr(e,r)===-o),c=o*(s-i);return c===0?0:c}function Rr(n,a){const t=n.getFullYear()-a.getFullYear()||n.getMonth()-a.getMonth()||n.getDate()-a.getDate()||n.getHours()-a.getHours()||n.getMinutes()-a.getMinutes()||n.getSeconds()-a.getSeconds()||n.getMilliseconds()-a.getMilliseconds();return t<0?-1:t>0?1:t}function xn(n,a){const t=P(n,a==null?void 0:a.in);return t.setHours(23,59,59,999),t}function _n(n,a){const t=P(n,a==null?void 0:a.in),e=t.getMonth();return t.setFullYear(t.getFullYear(),e+1,0),t.setHours(23,59,59,999),t}function lr(n,a){const t=P(n,a==null?void 0:a.in),e=t.getMonth(),r=e-e%3;return t.setMonth(r,1),t.setHours(0,0,0,0),t}function Mn(n,a){const t=P(n,a==null?void 0:a.in);return t.setDate(1),t.setHours(0,0,0,0),t}function Cn(n,a){const t=P(n,a==null?void 0:a.in),e=t.getFullYear();return t.setFullYear(e+1,0,0),t.setHours(23,59,59,999),t}function Kt(n,a){const t=P(n,a==null?void 0:a.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}function va(n,a){var i,c;const t=qe(),e=t.weekStartsOn??((c=(i=t.locale)==null?void 0:i.options)==null?void 0:c.weekStartsOn)??0,r=P(n,a==null?void 0:a.in),o=r.getDay(),s=(o{let e;const r=wa[n];return typeof r=="string"?e=r:a===1?e=r.one:e=r.other.replace("{{count}}",a.toString()),t!=null&&t.addSuffix?t.comparison&&t.comparison>0?"in "+e:e+" ago":e};function Jt(n){return(a={})=>{const t=a.width?String(a.width):n.defaultWidth;return n.formats[t]||n.formats[n.defaultWidth]}}const ba={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Da={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},ka={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},xa={date:Jt({formats:ba,defaultWidth:"full"}),time:Jt({formats:Da,defaultWidth:"full"}),dateTime:Jt({formats:ka,defaultWidth:"full"})},_a={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Ma=(n,a,t,e)=>_a[n];function at(n){return(a,t)=>{const e=t!=null&&t.context?String(t.context):"standalone";let r;if(e==="formatting"&&n.formattingValues){const s=n.defaultFormattingWidth||n.defaultWidth,i=t!=null&&t.width?String(t.width):s;r=n.formattingValues[i]||n.formattingValues[s]}else{const s=n.defaultWidth,i=t!=null&&t.width?String(t.width):n.defaultWidth;r=n.values[i]||n.values[s]}const o=n.argumentCallback?n.argumentCallback(a):a;return r[o]}}const Ca={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Sa={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Ea={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Pa={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Ta={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Oa={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Na=(n,a)=>{const t=Number(n),e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},Ra={ordinalNumber:Na,era:at({values:Ca,defaultWidth:"wide"}),quarter:at({values:Sa,defaultWidth:"wide",argumentCallback:n=>n-1}),month:at({values:Ea,defaultWidth:"wide"}),day:at({values:Pa,defaultWidth:"wide"}),dayPeriod:at({values:Ta,defaultWidth:"wide",formattingValues:Oa,defaultFormattingWidth:"wide"})};function ot(n){return(a,t={})=>{const e=t.width,r=e&&n.matchPatterns[e]||n.matchPatterns[n.defaultMatchWidth],o=a.match(r);if(!o)return null;const s=o[0],i=e&&n.parsePatterns[e]||n.parsePatterns[n.defaultParseWidth],c=Array.isArray(i)?La(i,d=>d.test(s)):Ya(i,d=>d.test(s));let l;l=n.valueCallback?n.valueCallback(c):c,l=t.valueCallback?t.valueCallback(l):l;const u=a.slice(s.length);return{value:l,rest:u}}}function Ya(n,a){for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&a(n[t]))return t}function La(n,a){for(let t=0;t{const e=a.match(n.matchPattern);if(!e)return null;const r=e[0],o=a.match(n.parsePattern);if(!o)return null;let s=n.valueCallback?n.valueCallback(o[0]):o[0];s=t.valueCallback?t.valueCallback(s):s;const i=a.slice(r.length);return{value:s,rest:i}}}const Ia=/^(\d+)(th|st|nd|rd)?/i,Aa=/\d+/i,Wa={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Ha={any:[/^b/i,/^(a|c)/i]},ja={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Ba={any:[/1/i,/2/i,/3/i,/4/i]},Qa={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Va={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},qa={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Ka={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},Ua={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},$a={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},za={ordinalNumber:Fa({matchPattern:Ia,parsePattern:Aa,valueCallback:n=>parseInt(n,10)}),era:ot({matchPatterns:Wa,defaultMatchWidth:"wide",parsePatterns:Ha,defaultParseWidth:"any"}),quarter:ot({matchPatterns:ja,defaultMatchWidth:"wide",parsePatterns:Ba,defaultParseWidth:"any",valueCallback:n=>n+1}),month:ot({matchPatterns:Qa,defaultMatchWidth:"wide",parsePatterns:Va,defaultParseWidth:"any"}),day:ot({matchPatterns:qa,defaultMatchWidth:"wide",parsePatterns:Ka,defaultParseWidth:"any"}),dayPeriod:ot({matchPatterns:Ua,defaultMatchWidth:"any",parsePatterns:$a,defaultParseWidth:"any"})},Sn={code:"en-US",formatDistance:ya,formatLong:xa,formatRelative:Ma,localize:Ra,match:za,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Ga(n,a){const t=P(n,a==null?void 0:a.in);return Xe(t,Kt(t))+1}function gr(n,a){const t=P(n,a==null?void 0:a.in),e=+Ge(t)-+pa(t);return Math.round(e/bn)+1}function vr(n,a){var u,d,f,p;const t=P(n,a==null?void 0:a.in),e=t.getFullYear(),r=qe(),o=(a==null?void 0:a.firstWeekContainsDate)??((d=(u=a==null?void 0:a.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??r.firstWeekContainsDate??((p=(f=r.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,s=U((a==null?void 0:a.in)||n,0);s.setFullYear(e+1,0,o),s.setHours(0,0,0,0);const i=Ee(s,a),c=U((a==null?void 0:a.in)||n,0);c.setFullYear(e,0,o),c.setHours(0,0,0,0);const l=Ee(c,a);return+t>=+i?e+1:+t>=+l?e:e-1}function Xa(n,a){var i,c,l,u;const t=qe(),e=(a==null?void 0:a.firstWeekContainsDate)??((c=(i=a==null?void 0:a.locale)==null?void 0:i.options)==null?void 0:c.firstWeekContainsDate)??t.firstWeekContainsDate??((u=(l=t.locale)==null?void 0:l.options)==null?void 0:u.firstWeekContainsDate)??1,r=vr(n,a),o=U((a==null?void 0:a.in)||n,0);return o.setFullYear(r,0,e),o.setHours(0,0,0,0),Ee(o,a)}function En(n,a){const t=P(n,a==null?void 0:a.in),e=+Ee(t,a)-+Xa(t,a);return Math.round(e/bn)+1}function K(n,a){const t=n<0?"-":"",e=Math.abs(n).toString().padStart(a,"0");return t+e}const Te={y(n,a){const t=n.getFullYear(),e=t>0?t:1-t;return K(a==="yy"?e%100:e,a.length)},M(n,a){const t=n.getMonth();return a==="M"?String(t+1):K(t+1,2)},d(n,a){return K(n.getDate(),a.length)},a(n,a){const t=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];case"aaaa":default:return t==="am"?"a.m.":"p.m."}},h(n,a){return K(n.getHours()%12||12,a.length)},H(n,a){return K(n.getHours(),a.length)},m(n,a){return K(n.getMinutes(),a.length)},s(n,a){return K(n.getSeconds(),a.length)},S(n,a){const t=a.length,e=n.getMilliseconds(),r=Math.trunc(e*Math.pow(10,t-3));return K(r,a.length)}},Ke={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},Yr={G:function(n,a,t){const e=n.getFullYear()>0?1:0;switch(a){case"G":case"GG":case"GGG":return t.era(e,{width:"abbreviated"});case"GGGGG":return t.era(e,{width:"narrow"});case"GGGG":default:return t.era(e,{width:"wide"})}},y:function(n,a,t){if(a==="yo"){const e=n.getFullYear(),r=e>0?e:1-e;return t.ordinalNumber(r,{unit:"year"})}return Te.y(n,a)},Y:function(n,a,t,e){const r=vr(n,e),o=r>0?r:1-r;if(a==="YY"){const s=o%100;return K(s,2)}return a==="Yo"?t.ordinalNumber(o,{unit:"year"}):K(o,a.length)},R:function(n,a){const t=kn(n);return K(t,a.length)},u:function(n,a){const t=n.getFullYear();return K(t,a.length)},Q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"Q":return String(e);case"QQ":return K(e,2);case"Qo":return t.ordinalNumber(e,{unit:"quarter"});case"QQQ":return t.quarter(e,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(e,{width:"narrow",context:"formatting"});case"QQQQ":default:return t.quarter(e,{width:"wide",context:"formatting"})}},q:function(n,a,t){const e=Math.ceil((n.getMonth()+1)/3);switch(a){case"q":return String(e);case"qq":return K(e,2);case"qo":return t.ordinalNumber(e,{unit:"quarter"});case"qqq":return t.quarter(e,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(e,{width:"narrow",context:"standalone"});case"qqqq":default:return t.quarter(e,{width:"wide",context:"standalone"})}},M:function(n,a,t){const e=n.getMonth();switch(a){case"M":case"MM":return Te.M(n,a);case"Mo":return t.ordinalNumber(e+1,{unit:"month"});case"MMM":return t.month(e,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(e,{width:"narrow",context:"formatting"});case"MMMM":default:return t.month(e,{width:"wide",context:"formatting"})}},L:function(n,a,t){const e=n.getMonth();switch(a){case"L":return String(e+1);case"LL":return K(e+1,2);case"Lo":return t.ordinalNumber(e+1,{unit:"month"});case"LLL":return t.month(e,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(e,{width:"narrow",context:"standalone"});case"LLLL":default:return t.month(e,{width:"wide",context:"standalone"})}},w:function(n,a,t,e){const r=En(n,e);return a==="wo"?t.ordinalNumber(r,{unit:"week"}):K(r,a.length)},I:function(n,a,t){const e=gr(n);return a==="Io"?t.ordinalNumber(e,{unit:"week"}):K(e,a.length)},d:function(n,a,t){return a==="do"?t.ordinalNumber(n.getDate(),{unit:"date"}):Te.d(n,a)},D:function(n,a,t){const e=Ga(n);return a==="Do"?t.ordinalNumber(e,{unit:"dayOfYear"}):K(e,a.length)},E:function(n,a,t){const e=n.getDay();switch(a){case"E":case"EE":case"EEE":return t.day(e,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(e,{width:"short",context:"formatting"});case"EEEE":default:return t.day(e,{width:"wide",context:"formatting"})}},e:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"e":return String(o);case"ee":return K(o,2);case"eo":return t.ordinalNumber(o,{unit:"day"});case"eee":return t.day(r,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(r,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(r,{width:"short",context:"formatting"});case"eeee":default:return t.day(r,{width:"wide",context:"formatting"})}},c:function(n,a,t,e){const r=n.getDay(),o=(r-e.weekStartsOn+8)%7||7;switch(a){case"c":return String(o);case"cc":return K(o,a.length);case"co":return t.ordinalNumber(o,{unit:"day"});case"ccc":return t.day(r,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(r,{width:"narrow",context:"standalone"});case"cccccc":return t.day(r,{width:"short",context:"standalone"});case"cccc":default:return t.day(r,{width:"wide",context:"standalone"})}},i:function(n,a,t){const e=n.getDay(),r=e===0?7:e;switch(a){case"i":return String(r);case"ii":return K(r,a.length);case"io":return t.ordinalNumber(r,{unit:"day"});case"iii":return t.day(e,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(e,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(e,{width:"short",context:"formatting"});case"iiii":default:return t.day(e,{width:"wide",context:"formatting"})}},a:function(n,a,t){const r=n.getHours()/12>=1?"pm":"am";switch(a){case"a":case"aa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"aaaa":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(n,a,t){const e=n.getHours();let r;switch(e===12?r=Ke.noon:e===0?r=Ke.midnight:r=e/12>=1?"pm":"am",a){case"b":case"bb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"bbbb":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(n,a,t){const e=n.getHours();let r;switch(e>=17?r=Ke.evening:e>=12?r=Ke.afternoon:e>=4?r=Ke.morning:r=Ke.night,a){case"B":case"BB":case"BBB":return t.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(r,{width:"narrow",context:"formatting"});case"BBBB":default:return t.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(n,a,t){if(a==="ho"){let e=n.getHours()%12;return e===0&&(e=12),t.ordinalNumber(e,{unit:"hour"})}return Te.h(n,a)},H:function(n,a,t){return a==="Ho"?t.ordinalNumber(n.getHours(),{unit:"hour"}):Te.H(n,a)},K:function(n,a,t){const e=n.getHours()%12;return a==="Ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},k:function(n,a,t){let e=n.getHours();return e===0&&(e=24),a==="ko"?t.ordinalNumber(e,{unit:"hour"}):K(e,a.length)},m:function(n,a,t){return a==="mo"?t.ordinalNumber(n.getMinutes(),{unit:"minute"}):Te.m(n,a)},s:function(n,a,t){return a==="so"?t.ordinalNumber(n.getSeconds(),{unit:"second"}):Te.s(n,a)},S:function(n,a){return Te.S(n,a)},X:function(n,a,t){const e=n.getTimezoneOffset();if(e===0)return"Z";switch(a){case"X":return Fr(e);case"XXXX":case"XX":return Fe(e);case"XXXXX":case"XXX":default:return Fe(e,":")}},x:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"x":return Fr(e);case"xxxx":case"xx":return Fe(e);case"xxxxx":case"xxx":default:return Fe(e,":")}},O:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"O":case"OO":case"OOO":return"GMT"+Lr(e,":");case"OOOO":default:return"GMT"+Fe(e,":")}},z:function(n,a,t){const e=n.getTimezoneOffset();switch(a){case"z":case"zz":case"zzz":return"GMT"+Lr(e,":");case"zzzz":default:return"GMT"+Fe(e,":")}},t:function(n,a,t){const e=Math.trunc(+n/1e3);return K(e,a.length)},T:function(n,a,t){return K(+n,a.length)}};function Lr(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=Math.trunc(e/60),o=e%60;return o===0?t+String(r):t+String(r)+a+K(o,2)}function Fr(n,a){return n%60===0?(n>0?"-":"+")+K(Math.abs(n)/60,2):Fe(n,a)}function Fe(n,a=""){const t=n>0?"-":"+",e=Math.abs(n),r=K(Math.trunc(e/60),2),o=K(e%60,2);return t+r+a+o}const Ir=(n,a)=>{switch(n){case"P":return a.date({width:"short"});case"PP":return a.date({width:"medium"});case"PPP":return a.date({width:"long"});case"PPPP":default:return a.date({width:"full"})}},Pn=(n,a)=>{switch(n){case"p":return a.time({width:"short"});case"pp":return a.time({width:"medium"});case"ppp":return a.time({width:"long"});case"pppp":default:return a.time({width:"full"})}},Za=(n,a)=>{const t=n.match(/(P+)(p+)?/)||[],e=t[1],r=t[2];if(!r)return Ir(n,a);let o;switch(e){case"P":o=a.dateTime({width:"short"});break;case"PP":o=a.dateTime({width:"medium"});break;case"PPP":o=a.dateTime({width:"long"});break;case"PPPP":default:o=a.dateTime({width:"full"});break}return o.replace("{{date}}",Ir(e,a)).replace("{{time}}",Pn(r,a))},ur={p:Pn,P:Za},Ja=/^D+$/,eo=/^Y+$/,to=["D","DD","YY","YYYY"];function ro(n){return Ja.test(n)}function no(n){return eo.test(n)}function ao(n,a,t){const e=oo(n,a,t);if(console.warn(e),to.includes(n))throw new RangeError(e)}function oo(n,a,t){const e=n[0]==="Y"?"years":"days of the month";return`Use \`${n.toLowerCase()}\` instead of \`${n}\` (in \`${a}\`) for formatting ${e} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const so=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,io=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,co=/^'([^]*?)'?$/,lo=/''/g,uo=/[a-zA-Z]/;function Ar(n,a,t){var u,d,f,p,h,v,g,b;const e=qe(),r=(t==null?void 0:t.locale)??e.locale??Sn,o=(t==null?void 0:t.firstWeekContainsDate)??((d=(u=t==null?void 0:t.locale)==null?void 0:u.options)==null?void 0:d.firstWeekContainsDate)??e.firstWeekContainsDate??((p=(f=e.locale)==null?void 0:f.options)==null?void 0:p.firstWeekContainsDate)??1,s=(t==null?void 0:t.weekStartsOn)??((v=(h=t==null?void 0:t.locale)==null?void 0:h.options)==null?void 0:v.weekStartsOn)??e.weekStartsOn??((b=(g=e.locale)==null?void 0:g.options)==null?void 0:b.weekStartsOn)??0,i=P(n,t==null?void 0:t.in);if(!Rt(i))throw new RangeError("Invalid time value");let c=a.match(io).map(_=>{const y=_[0];if(y==="p"||y==="P"){const k=ur[y];return k(_,r.formatLong)}return _}).join("").match(so).map(_=>{if(_==="''")return{isToken:!1,value:"'"};const y=_[0];if(y==="'")return{isToken:!1,value:fo(_)};if(Yr[y])return{isToken:!0,value:_};if(y.match(uo))throw new RangeError("Format string contains an unescaped latin alphabet character `"+y+"`");return{isToken:!1,value:_}});r.localize.preprocessor&&(c=r.localize.preprocessor(i,c));const l={firstWeekContainsDate:o,weekStartsOn:s,locale:r};return c.map(_=>{if(!_.isToken)return _.value;const y=_.value;(!(t!=null&&t.useAdditionalWeekYearTokens)&&no(y)||!(t!=null&&t.useAdditionalDayOfYearTokens)&&ro(y))&&ao(y,a,String(n));const k=Yr[y[0]];return k(i,y,r.localize,l)}).join("")}function fo(n){const a=n.match(co);return a?a[1].replace(lo,"'"):n}function Wr(n,a){return P(n,a==null?void 0:a.in).getDate()}function po(n,a){return P(n,a==null?void 0:a.in).getDay()}function ho(n,a){const t=P(n,a==null?void 0:a.in),e=t.getFullYear(),r=t.getMonth(),o=U(t,0);return o.setFullYear(e,r+1,0),o.setHours(0,0,0,0),o.getDate()}function mo(){return Object.assign({},qe())}function Me(n,a){return P(n,a==null?void 0:a.in).getHours()}function go(n,a){const t=P(n,a==null?void 0:a.in).getDay();return t===0?7:t}function Ce(n,a){return P(n,a==null?void 0:a.in).getMinutes()}function ne(n,a){return P(n,a==null?void 0:a.in).getMonth()}function Ne(n){return P(n).getSeconds()}function dr(n){return+P(n)}function L(n,a){return P(n,a==null?void 0:a.in).getFullYear()}function Ye(n,a){return+P(n)>+P(a)}function Qe(n,a){return+P(n)<+P(a)}function vo(n,a){return+P(n)==+P(a)}function wo(n,a){const t=yo(a)?new a(0):U(a,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t.setHours(n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()),t}function yo(n){var a;return typeof n=="function"&&((a=n.prototype)==null?void 0:a.constructor)===n}const bo=10;class Tn{constructor(){C(this,"subPriority",0)}validate(a,t){return!0}}class Do extends Tn{constructor(a,t,e,r,o){super(),this.value=a,this.validateValue=t,this.setValue=e,this.priority=r,o&&(this.subPriority=o)}validate(a,t){return this.validateValue(a,this.value,t)}set(a,t,e){return this.setValue(a,t,this.value,e)}}class ko extends Tn{constructor(t,e){super();C(this,"priority",bo);C(this,"subPriority",-1);this.context=t||(r=>U(e,r))}set(t,e){return e.timestampIsSet?t:U(t,wo(t,this.context))}}class j{run(a,t,e,r){const o=this.parse(a,t,e,r);return o?{setter:new Do(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(a,t,e){return!0}}class xo extends j{constructor(){super(...arguments);C(this,"priority",140);C(this,"incompatibleTokens",["R","u","t","T"])}parse(t,e,r){switch(e){case"G":case"GG":case"GGG":return r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"});case"GGGGG":return r.era(t,{width:"narrow"});case"GGGG":default:return r.era(t,{width:"wide"})||r.era(t,{width:"abbreviated"})||r.era(t,{width:"narrow"})}}set(t,e,r){return e.era=r,t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}const Z={month:/^(1[0-2]|0?\d)/,date:/^(3[0-1]|[0-2]?\d)/,dayOfYear:/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,week:/^(5[0-3]|[0-4]?\d)/,hour23h:/^(2[0-3]|[0-1]?\d)/,hour24h:/^(2[0-4]|[0-1]?\d)/,hour11h:/^(1[0-1]|0?\d)/,hour12h:/^(1[0-2]|0?\d)/,minute:/^[0-5]?\d/,second:/^[0-5]?\d/,singleDigit:/^\d/,twoDigits:/^\d{1,2}/,threeDigits:/^\d{1,3}/,fourDigits:/^\d{1,4}/,anyDigitsSigned:/^-?\d+/,singleDigitSigned:/^-?\d/,twoDigitsSigned:/^-?\d{1,2}/,threeDigitsSigned:/^-?\d{1,3}/,fourDigitsSigned:/^-?\d{1,4}/},ve={basicOptionalMinutes:/^([+-])(\d{2})(\d{2})?|Z/,basic:/^([+-])(\d{2})(\d{2})|Z/,basicOptionalSeconds:/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,extended:/^([+-])(\d{2}):(\d{2})|Z/,extendedOptionalSeconds:/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/};function J(n,a){return n&&{value:a(n.value),rest:n.rest}}function G(n,a){const t=a.match(n);return t?{value:parseInt(t[0],10),rest:a.slice(t[0].length)}:null}function we(n,a){const t=a.match(n);if(!t)return null;if(t[0]==="Z")return{value:0,rest:a.slice(1)};const e=t[1]==="+"?1:-1,r=t[2]?parseInt(t[2],10):0,o=t[3]?parseInt(t[3],10):0,s=t[5]?parseInt(t[5],10):0;return{value:e*(r*qt+o*Vt+s*ua),rest:a.slice(t[0].length)}}function On(n){return G(Z.anyDigitsSigned,n)}function X(n,a){switch(n){case 1:return G(Z.singleDigit,a);case 2:return G(Z.twoDigits,a);case 3:return G(Z.threeDigits,a);case 4:return G(Z.fourDigits,a);default:return G(new RegExp("^\\d{1,"+n+"}"),a)}}function It(n,a){switch(n){case 1:return G(Z.singleDigitSigned,a);case 2:return G(Z.twoDigitsSigned,a);case 3:return G(Z.threeDigitsSigned,a);case 4:return G(Z.fourDigitsSigned,a);default:return G(new RegExp("^-?\\d{1,"+n+"}"),a)}}function wr(n){switch(n){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;case"am":case"midnight":case"night":default:return 0}}function Nn(n,a){const t=a>0,e=t?a:1-a;let r;if(e<=50)r=n||100;else{const o=e+50,s=Math.trunc(o/100)*100,i=n>=o%100;r=n+s-(i?100:0)}return t?r:1-r}function Rn(n){return n%400===0||n%4===0&&n%100!==0}class _o extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(t,e,r){const o=s=>({year:s,isTwoDigitYear:e==="yy"});switch(e){case"y":return J(X(4,t),o);case"yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r){const o=t.getFullYear();if(r.isTwoDigitYear){const i=Nn(r.year,o);return t.setFullYear(i,0,1),t.setHours(0,0,0,0),t}const s=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(s,0,1),t.setHours(0,0,0,0),t}}class Mo extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(t,e,r){const o=s=>({year:s,isTwoDigitYear:e==="YY"});switch(e){case"Y":return J(X(4,t),o);case"Yo":return J(r.ordinalNumber(t,{unit:"year"}),o);default:return J(X(e.length,t),o)}}validate(t,e){return e.isTwoDigitYear||e.year>0}set(t,e,r,o){const s=vr(t,o);if(r.isTwoDigitYear){const c=Nn(r.year,s);return t.setFullYear(c,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}const i=!("era"in e)||e.era===1?r.year:1-r.year;return t.setFullYear(i,0,o.firstWeekContainsDate),t.setHours(0,0,0,0),Ee(t,o)}}class Co extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(t,e){return It(e==="R"?4:e.length,t)}set(t,e,r){const o=U(t,0);return o.setFullYear(r,0,4),o.setHours(0,0,0,0),Ge(o)}}class So extends j{constructor(){super(...arguments);C(this,"priority",130);C(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(t,e){return It(e==="u"?4:e.length,t)}set(t,e,r){return t.setFullYear(r,0,1),t.setHours(0,0,0,0),t}}class Eo extends j{constructor(){super(...arguments);C(this,"priority",120);C(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"Q":case"QQ":return X(e.length,t);case"Qo":return r.ordinalNumber(t,{unit:"quarter"});case"QQQ":return r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(t,{width:"narrow",context:"formatting"});case"QQQQ":default:return r.quarter(t,{width:"wide",context:"formatting"})||r.quarter(t,{width:"abbreviated",context:"formatting"})||r.quarter(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class Po extends j{constructor(){super(...arguments);C(this,"priority",120);C(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"q":case"qq":return X(e.length,t);case"qo":return r.ordinalNumber(t,{unit:"quarter"});case"qqq":return r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(t,{width:"narrow",context:"standalone"});case"qqqq":default:return r.quarter(t,{width:"wide",context:"standalone"})||r.quarter(t,{width:"abbreviated",context:"standalone"})||r.quarter(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=1&&e<=4}set(t,e,r){return t.setMonth((r-1)*3,1),t.setHours(0,0,0,0),t}}class To extends j{constructor(){super(...arguments);C(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]);C(this,"priority",110)}parse(t,e,r){const o=s=>s-1;switch(e){case"M":return J(G(Z.month,t),o);case"MM":return J(X(2,t),o);case"Mo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"MMM":return r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(t,{width:"narrow",context:"formatting"});case"MMMM":default:return r.month(t,{width:"wide",context:"formatting"})||r.month(t,{width:"abbreviated",context:"formatting"})||r.month(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}class Oo extends j{constructor(){super(...arguments);C(this,"priority",110);C(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(t,e,r){const o=s=>s-1;switch(e){case"L":return J(G(Z.month,t),o);case"LL":return J(X(2,t),o);case"Lo":return J(r.ordinalNumber(t,{unit:"month"}),o);case"LLL":return r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(t,{width:"narrow",context:"standalone"});case"LLLL":default:return r.month(t,{width:"wide",context:"standalone"})||r.month(t,{width:"abbreviated",context:"standalone"})||r.month(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.setMonth(r,1),t.setHours(0,0,0,0),t}}function No(n,a,t){const e=P(n,t==null?void 0:t.in),r=En(e,t)-a;return e.setDate(e.getDate()-r*7),P(e,t==null?void 0:t.in)}class Ro extends j{constructor(){super(...arguments);C(this,"priority",100);C(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(t,e,r){switch(e){case"w":return G(Z.week,t);case"wo":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r,o){return Ee(No(t,r,o),o)}}function Yo(n,a,t){const e=P(n,t==null?void 0:t.in),r=gr(e,t)-a;return e.setDate(e.getDate()-r*7),e}class Lo extends j{constructor(){super(...arguments);C(this,"priority",100);C(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(t,e,r){switch(e){case"I":return G(Z.week,t);case"Io":return r.ordinalNumber(t,{unit:"week"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=53}set(t,e,r){return Ge(Yo(t,r))}}const Fo=[31,28,31,30,31,30,31,31,30,31,30,31],Io=[31,29,31,30,31,30,31,31,30,31,30,31];class Ao extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"subPriority",1);C(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"d":return G(Z.date,t);case"do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear(),o=Rn(r),s=t.getMonth();return o?e>=1&&e<=Io[s]:e>=1&&e<=Fo[s]}set(t,e,r){return t.setDate(r),t.setHours(0,0,0,0),t}}class Wo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"subpriority",1);C(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(t,e,r){switch(e){case"D":case"DD":return G(Z.dayOfYear,t);case"Do":return r.ordinalNumber(t,{unit:"date"});default:return X(e.length,t)}}validate(t,e){const r=t.getFullYear();return Rn(r)?e>=1&&e<=366:e>=1&&e<=365}set(t,e,r){return t.setMonth(0,r),t.setHours(0,0,0,0),t}}function yr(n,a,t){var d,f,p,h;const e=qe(),r=(t==null?void 0:t.weekStartsOn)??((f=(d=t==null?void 0:t.locale)==null?void 0:d.options)==null?void 0:f.weekStartsOn)??e.weekStartsOn??((h=(p=e.locale)==null?void 0:p.options)==null?void 0:h.weekStartsOn)??0,o=P(n,t==null?void 0:t.in),s=o.getDay(),c=(a%7+7)%7,l=7-r,u=a<0||a>6?a-(s+l)%7:(c+l)%7-(s+l)%7;return pe(o,u,t)}class Ho extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(t,e,r){switch(e){case"E":case"EE":case"EEE":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(t,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"EEEE":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=yr(t,r,o),t.setHours(0,0,0,0),t}}class jo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(t,e,r,o){const s=i=>{const c=Math.floor((i-1)/7)*7;return(i+o.weekStartsOn+6)%7+c};switch(e){case"e":case"ee":return J(X(e.length,t),s);case"eo":return J(r.ordinalNumber(t,{unit:"day"}),s);case"eee":return r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeeee":return r.day(t,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"});case"eeee":default:return r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=yr(t,r,o),t.setHours(0,0,0,0),t}}class Bo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(t,e,r,o){const s=i=>{const c=Math.floor((i-1)/7)*7;return(i+o.weekStartsOn+6)%7+c};switch(e){case"c":case"cc":return J(X(e.length,t),s);case"co":return J(r.ordinalNumber(t,{unit:"day"}),s);case"ccc":return r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"ccccc":return r.day(t,{width:"narrow",context:"standalone"});case"cccccc":return r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"});case"cccc":default:return r.day(t,{width:"wide",context:"standalone"})||r.day(t,{width:"abbreviated",context:"standalone"})||r.day(t,{width:"short",context:"standalone"})||r.day(t,{width:"narrow",context:"standalone"})}}validate(t,e){return e>=0&&e<=6}set(t,e,r,o){return t=yr(t,r,o),t.setHours(0,0,0,0),t}}function Qo(n,a,t){const e=P(n,t==null?void 0:t.in),r=go(e,t),o=a-r;return pe(e,o,t)}class Vo extends j{constructor(){super(...arguments);C(this,"priority",90);C(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(t,e,r){const o=s=>s===0?7:s;switch(e){case"i":case"ii":return X(e.length,t);case"io":return r.ordinalNumber(t,{unit:"day"});case"iii":return J(r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiii":return J(r.day(t,{width:"narrow",context:"formatting"}),o);case"iiiiii":return J(r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o);case"iiii":default:return J(r.day(t,{width:"wide",context:"formatting"})||r.day(t,{width:"abbreviated",context:"formatting"})||r.day(t,{width:"short",context:"formatting"})||r.day(t,{width:"narrow",context:"formatting"}),o)}}validate(t,e){return e>=1&&e<=7}set(t,e,r){return t=Qo(t,r),t.setHours(0,0,0,0),t}}class qo extends j{constructor(){super(...arguments);C(this,"priority",80);C(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(t,e,r){switch(e){case"a":case"aa":case"aaa":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaaa":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"aaaa":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Ko extends j{constructor(){super(...arguments);C(this,"priority",80);C(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(t,e,r){switch(e){case"b":case"bb":case"bbb":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbbb":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"bbbb":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class Uo extends j{constructor(){super(...arguments);C(this,"priority",80);C(this,"incompatibleTokens",["a","b","t","T"])}parse(t,e,r){switch(e){case"B":case"BB":case"BBB":return r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBBB":return r.dayPeriod(t,{width:"narrow",context:"formatting"});case"BBBB":default:return r.dayPeriod(t,{width:"wide",context:"formatting"})||r.dayPeriod(t,{width:"abbreviated",context:"formatting"})||r.dayPeriod(t,{width:"narrow",context:"formatting"})}}set(t,e,r){return t.setHours(wr(r),0,0,0),t}}class $o extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["H","K","k","t","T"])}parse(t,e,r){switch(e){case"h":return G(Z.hour12h,t);case"ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=12}set(t,e,r){const o=t.getHours()>=12;return o&&r<12?t.setHours(r+12,0,0,0):!o&&r===12?t.setHours(0,0,0,0):t.setHours(r,0,0,0),t}}class zo extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(t,e,r){switch(e){case"H":return G(Z.hour23h,t);case"Ho":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=23}set(t,e,r){return t.setHours(r,0,0,0),t}}class Go extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["h","H","k","t","T"])}parse(t,e,r){switch(e){case"K":return G(Z.hour11h,t);case"Ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=11}set(t,e,r){return t.getHours()>=12&&r<12?t.setHours(r+12,0,0,0):t.setHours(r,0,0,0),t}}class Xo extends j{constructor(){super(...arguments);C(this,"priority",70);C(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(t,e,r){switch(e){case"k":return G(Z.hour24h,t);case"ko":return r.ordinalNumber(t,{unit:"hour"});default:return X(e.length,t)}}validate(t,e){return e>=1&&e<=24}set(t,e,r){const o=r<=24?r%24:r;return t.setHours(o,0,0,0),t}}class Zo extends j{constructor(){super(...arguments);C(this,"priority",60);C(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"m":return G(Z.minute,t);case"mo":return r.ordinalNumber(t,{unit:"minute"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setMinutes(r,0,0),t}}class Jo extends j{constructor(){super(...arguments);C(this,"priority",50);C(this,"incompatibleTokens",["t","T"])}parse(t,e,r){switch(e){case"s":return G(Z.second,t);case"so":return r.ordinalNumber(t,{unit:"second"});default:return X(e.length,t)}}validate(t,e){return e>=0&&e<=59}set(t,e,r){return t.setSeconds(r,0),t}}class es extends j{constructor(){super(...arguments);C(this,"priority",30);C(this,"incompatibleTokens",["t","T"])}parse(t,e){const r=o=>Math.trunc(o*Math.pow(10,-e.length+3));return J(X(e.length,t),r)}set(t,e,r){return t.setMilliseconds(r),t}}class ts extends j{constructor(){super(...arguments);C(this,"priority",10);C(this,"incompatibleTokens",["t","T","x"])}parse(t,e){switch(e){case"X":return we(ve.basicOptionalMinutes,t);case"XX":return we(ve.basic,t);case"XXXX":return we(ve.basicOptionalSeconds,t);case"XXXXX":return we(ve.extendedOptionalSeconds,t);case"XXX":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class rs extends j{constructor(){super(...arguments);C(this,"priority",10);C(this,"incompatibleTokens",["t","T","X"])}parse(t,e){switch(e){case"x":return we(ve.basicOptionalMinutes,t);case"xx":return we(ve.basic,t);case"xxxx":return we(ve.basicOptionalSeconds,t);case"xxxxx":return we(ve.extendedOptionalSeconds,t);case"xxx":default:return we(ve.extended,t)}}set(t,e,r){return e.timestampIsSet?t:U(t,t.getTime()-Ot(t)-r)}}class ns extends j{constructor(){super(...arguments);C(this,"priority",40);C(this,"incompatibleTokens","*")}parse(t){return On(t)}set(t,e,r){return[U(t,r*1e3),{timestampIsSet:!0}]}}class as extends j{constructor(){super(...arguments);C(this,"priority",20);C(this,"incompatibleTokens","*")}parse(t){return On(t)}set(t,e,r){return[U(t,r),{timestampIsSet:!0}]}}const os={G:new xo,y:new _o,Y:new Mo,R:new Co,u:new So,Q:new Eo,q:new Po,M:new To,L:new Oo,w:new Ro,I:new Lo,d:new Ao,D:new Wo,E:new Ho,e:new jo,c:new Bo,i:new Vo,a:new qo,b:new Ko,B:new Uo,h:new $o,H:new zo,K:new Go,k:new Xo,m:new Zo,s:new Jo,S:new es,X:new ts,x:new rs,t:new ns,T:new as},ss=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,is=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,cs=/^'([^]*?)'?$/,ls=/''/g,us=/\S/,ds=/[a-zA-Z]/;function fs(n,a,t,e){var g,b,_,y,k,T,O,S;const r=()=>U((e==null?void 0:e.in)||t,NaN),o=mo(),s=(e==null?void 0:e.locale)??o.locale??Sn,i=(e==null?void 0:e.firstWeekContainsDate)??((b=(g=e==null?void 0:e.locale)==null?void 0:g.options)==null?void 0:b.firstWeekContainsDate)??o.firstWeekContainsDate??((y=(_=o.locale)==null?void 0:_.options)==null?void 0:y.firstWeekContainsDate)??1,c=(e==null?void 0:e.weekStartsOn)??((T=(k=e==null?void 0:e.locale)==null?void 0:k.options)==null?void 0:T.weekStartsOn)??o.weekStartsOn??((S=(O=o.locale)==null?void 0:O.options)==null?void 0:S.weekStartsOn)??0;if(!a)return n?r():P(t,e==null?void 0:e.in);const l={firstWeekContainsDate:i,weekStartsOn:c,locale:s},u=[new ko(e==null?void 0:e.in,t)],d=a.match(is).map(x=>{const E=x[0];if(E in ur){const R=ur[E];return R(x,s.formatLong)}return x}).join("").match(ss),f=[];for(let x of d){const E=x[0],R=os[E];if(R){const{incompatibleTokens:B}=R;if(Array.isArray(B)){const $=f.find(Q=>B.includes(Q.token)||Q.token===E);if($)throw new RangeError(`The format string mustn't contain \`${$.fullToken}\` and \`${x}\` at the same time`)}else if(R.incompatibleTokens==="*"&&f.length>0)throw new RangeError(`The format string mustn't contain \`${x}\` and any other token at the same time`);f.push({token:E,fullToken:x});const I=R.run(n,x,s.match,l);if(!I)return r();u.push(I.setter),n=I.rest}else{if(E.match(ds))throw new RangeError("Format string contains an unescaped latin alphabet character `"+E+"`");if(x==="''"?x="'":E==="'"&&(x=ps(x)),n.indexOf(x)===0)n=n.slice(x.length);else return r()}}if(n.length>0&&us.test(n))return r();const p=u.map(x=>x.priority).sort((x,E)=>E-x).filter((x,E,R)=>R.indexOf(x)===E).map(x=>u.filter(E=>E.priority===x).sort((E,R)=>R.subPriority-E.subPriority)).map(x=>x[0]);let h=P(t,e==null?void 0:e.in);if(isNaN(+h))return r();const v={};for(const x of p){if(!x.validate(h,l))return r();const E=x.set(h,v,l);Array.isArray(E)?(h=E[0],Object.assign(v,E[1])):h=E}return h}function ps(n){return n.match(cs)[1].replace(ls,"'")}function hs(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()&&e.getMonth()===r.getMonth()}function ms(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return+lr(e)==+lr(r)}function gs(n,a,t){const[e,r]=Pe(t==null?void 0:t.in,n,a);return e.getFullYear()===r.getFullYear()}function ut(n,a,t){const e=+P(n,t==null?void 0:t.in),[r,o]=[+P(a.start,t==null?void 0:t.in),+P(a.end,t==null?void 0:t.in)].sort((s,i)=>s-i);return e>=r&&e<=o}function vs(n,a,t){return pe(n,-1,t)}function ws(n,a){const t=()=>U(a==null?void 0:a.in,NaN),r=ks(n);let o;if(r.date){const l=xs(r.date,2);o=_s(l.restDateString,l.year)}if(!o||isNaN(+o))return t();const s=+o;let i=0,c;if(r.time&&(i=Ms(r.time),isNaN(i)))return t();if(r.timezone){if(c=Cs(r.timezone),isNaN(c))return t()}else{const l=new Date(s+i),u=P(0,a==null?void 0:a.in);return u.setFullYear(l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate()),u.setHours(l.getUTCHours(),l.getUTCMinutes(),l.getUTCSeconds(),l.getUTCMilliseconds()),u}return P(s+i+c,a==null?void 0:a.in)}const vt={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},ys=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,bs=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Ds=/^([+-])(\d{2})(?::?(\d{2}))?$/;function ks(n){const a={},t=n.split(vt.dateTimeDelimiter);let e;if(t.length>2)return a;if(/:/.test(t[0])?e=t[0]:(a.date=t[0],e=t[1],vt.timeZoneDelimiter.test(a.date)&&(a.date=n.split(vt.timeZoneDelimiter)[0],e=n.substr(a.date.length,n.length))),e){const r=vt.timezone.exec(e);r?(a.time=e.replace(r[1],""),a.timezone=r[1]):a.time=e}return a}function xs(n,a){const t=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+a)+"})|(\\d{2}|[+-]\\d{"+(2+a)+"})$)"),e=n.match(t);if(!e)return{year:NaN,restDateString:""};const r=e[1]?parseInt(e[1]):null,o=e[2]?parseInt(e[2]):null;return{year:o===null?r:o*100,restDateString:n.slice((e[1]||e[2]).length)}}function _s(n,a){if(a===null)return new Date(NaN);const t=n.match(ys);if(!t)return new Date(NaN);const e=!!t[4],r=st(t[1]),o=st(t[2])-1,s=st(t[3]),i=st(t[4]),c=st(t[5])-1;if(e)return Os(a,i,c)?Ss(a,i,c):new Date(NaN);{const l=new Date(0);return!Ps(a,o,s)||!Ts(a,r)?new Date(NaN):(l.setUTCFullYear(a,o,Math.max(r,s)),l)}}function st(n){return n?parseInt(n):1}function Ms(n){const a=n.match(bs);if(!a)return NaN;const t=er(a[1]),e=er(a[2]),r=er(a[3]);return Ns(t,e,r)?t*qt+e*Vt+r*1e3:NaN}function er(n){return n&&parseFloat(n.replace(",","."))||0}function Cs(n){if(n==="Z")return 0;const a=n.match(Ds);if(!a)return 0;const t=a[1]==="+"?-1:1,e=parseInt(a[2]),r=a[3]&&parseInt(a[3])||0;return Rs(e,r)?t*(e*qt+r*Vt):NaN}function Ss(n,a,t){const e=new Date(0);e.setUTCFullYear(n,0,4);const r=e.getUTCDay()||7,o=(a-1)*7+t+1-r;return e.setUTCDate(e.getUTCDate()+o),e}const Es=[31,null,31,30,31,30,31,31,30,31,30,31];function Yn(n){return n%400===0||n%4===0&&n%100!==0}function Ps(n,a,t){return a>=0&&a<=11&&t>=1&&t<=(Es[a]||(Yn(n)?29:28))}function Ts(n,a){return a>=1&&a<=(Yn(n)?366:365)}function Os(n,a,t){return a>=1&&a<=53&&t>=0&&t<=6}function Ns(n,a,t){return n===24?a===0&&t===0:t>=0&&t<60&&a>=0&&a<60&&n>=0&&n<25}function Rs(n,a){return a>=0&&a<=59}function ce(n,a,t){const e=P(n,t==null?void 0:t.in),r=e.getFullYear(),o=e.getDate(),s=U(n,0);s.setFullYear(r,a,15),s.setHours(0,0,0,0);const i=ho(s);return e.setMonth(a,Math.min(o,i)),e}function _t(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setHours(a),e}function Mt(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setMinutes(a),e}function Ue(n,a,t){const e=P(n,t==null?void 0:t.in),r=Math.trunc(e.getMonth()/3)+1,o=a-r;return ce(e,e.getMonth()+o*3)}function Ct(n,a,t){const e=P(n,t==null?void 0:t.in);return e.setSeconds(a),e}function me(n,a,t){const e=P(n,t==null?void 0:t.in);return isNaN(+e)?U(n,NaN):(e.setFullYear(a),e)}function He(n,a,t){return he(n,-a,t)}function Ln(n,a,t){return mr(n,-1,t)}function Hr(n,a,t){return Nt(n,-1,t)}function Ze(n,a,t){return xe(n,-a,t)}function Ut(){return typeof window<"u"}function nt(n){return Fn(n)?(n.nodeName||"").toLowerCase():"#document"}function se(n){var a;return(n==null||(a=n.ownerDocument)==null?void 0:a.defaultView)||window}function ke(n){var a;return(a=(Fn(n)?n.ownerDocument:n.document)||window.document)==null?void 0:a.documentElement}function Fn(n){return Ut()?n instanceof Node||n instanceof se(n).Node:!1}function oe(n){return Ut()?n instanceof Element||n instanceof se(n).Element:!1}function De(n){return Ut()?n instanceof HTMLElement||n instanceof se(n).HTMLElement:!1}function jr(n){return!Ut()||typeof ShadowRoot>"u"?!1:n instanceof ShadowRoot||n instanceof se(n).ShadowRoot}const Ys=new Set(["inline","contents"]);function pt(n){const{overflow:a,overflowX:t,overflowY:e,display:r}=ue(n);return/auto|scroll|overlay|hidden|clip/.test(a+e+t)&&!Ys.has(r)}const Ls=new Set(["table","td","th"]);function Fs(n){return Ls.has(nt(n))}const Is=[":popover-open",":modal"];function $t(n){return Is.some(a=>{try{return n.matches(a)}catch{return!1}})}const As=["transform","translate","scale","rotate","perspective"],Ws=["transform","translate","scale","rotate","perspective","filter"],Hs=["paint","layout","strict","content"];function br(n){const a=Dr(),t=oe(n)?ue(n):n;return As.some(e=>t[e]?t[e]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!a&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!a&&(t.filter?t.filter!=="none":!1)||Ws.some(e=>(t.willChange||"").includes(e))||Hs.some(e=>(t.contain||"").includes(e))}function js(n){let a=Le(n);for(;De(a)&&!Je(a);){if(br(a))return a;if($t(a))return null;a=Le(a)}return null}function Dr(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const Bs=new Set(["html","body","#document"]);function Je(n){return Bs.has(nt(n))}function ue(n){return se(n).getComputedStyle(n)}function zt(n){return oe(n)?{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}:{scrollLeft:n.scrollX,scrollTop:n.scrollY}}function Le(n){if(nt(n)==="html")return n;const a=n.assignedSlot||n.parentNode||jr(n)&&n.host||ke(n);return jr(a)?a.host:a}function In(n){const a=Le(n);return Je(a)?n.ownerDocument?n.ownerDocument.body:n.body:De(a)&&pt(a)?a:In(a)}function dt(n,a,t){var e;a===void 0&&(a=[]),t===void 0&&(t=!0);const r=In(n),o=r===((e=n.ownerDocument)==null?void 0:e.body),s=se(r);if(o){const i=fr(s);return a.concat(s,s.visualViewport||[],pt(r)?r:[],i&&t?dt(i):[])}return a.concat(r,dt(r,[],t))}function fr(n){return n.parent&&Object.getPrototypeOf(n.parent)?n.frameElement:null}const et=Math.min,je=Math.max,At=Math.round,wt=Math.floor,be=n=>({x:n,y:n}),Qs={left:"right",right:"left",bottom:"top",top:"bottom"},Vs={start:"end",end:"start"};function qs(n,a,t){return je(n,et(a,t))}function Gt(n,a){return typeof n=="function"?n(a):n}function tt(n){return n.split("-")[0]}function ht(n){return n.split("-")[1]}function Ks(n){return n==="x"?"y":"x"}function kr(n){return n==="y"?"height":"width"}const Us=new Set(["top","bottom"]);function Ie(n){return Us.has(tt(n))?"y":"x"}function xr(n){return Ks(Ie(n))}function $s(n,a,t){t===void 0&&(t=!1);const e=ht(n),r=xr(n),o=kr(r);let s=r==="x"?e===(t?"end":"start")?"right":"left":e==="start"?"bottom":"top";return a.reference[o]>a.floating[o]&&(s=Wt(s)),[s,Wt(s)]}function zs(n){const a=Wt(n);return[pr(n),a,pr(a)]}function pr(n){return n.replace(/start|end/g,a=>Vs[a])}const Br=["left","right"],Qr=["right","left"],Gs=["top","bottom"],Xs=["bottom","top"];function Zs(n,a,t){switch(n){case"top":case"bottom":return t?a?Qr:Br:a?Br:Qr;case"left":case"right":return a?Gs:Xs;default:return[]}}function Js(n,a,t,e){const r=ht(n);let o=Zs(tt(n),t==="start",e);return r&&(o=o.map(s=>s+"-"+r),a&&(o=o.concat(o.map(pr)))),o}function Wt(n){return n.replace(/left|right|bottom|top/g,a=>Qs[a])}function ei(n){return{top:0,right:0,bottom:0,left:0,...n}}function An(n){return typeof n!="number"?ei(n):{top:n,right:n,bottom:n,left:n}}function Ht(n){const{x:a,y:t,width:e,height:r}=n;return{width:e,height:r,top:t,left:a,right:a+e,bottom:t+r,x:a,y:t}}var ti=typeof document<"u",ri=function(){},jt=ti?w.useLayoutEffect:ri;const ni={...yn},ai=ni.useInsertionEffect,oi=ai||(n=>n());function si(n){const a=w.useRef(()=>{});return oi(()=>{a.current=n}),w.useCallback(function(){for(var t=arguments.length,e=new Array(t),r=0;r{const{placement:e="bottom",strategy:r="absolute",middleware:o=[],platform:s}=t,i=o.filter(Boolean),c=await(s.isRTL==null?void 0:s.isRTL(a));let l=await s.getElementRects({reference:n,floating:a,strategy:r}),{x:u,y:d}=Vr(l,e,c),f=e,p={},h=0;for(let v=0;v({name:"arrow",options:n,async fn(a){const{x:t,y:e,placement:r,rects:o,platform:s,elements:i,middlewareData:c}=a,{element:l,padding:u=0}=Gt(n,a)||{};if(l==null)return{};const d=An(u),f={x:t,y:e},p=xr(r),h=kr(p),v=await s.getDimensions(l),g=p==="y",b=g?"top":"left",_=g?"bottom":"right",y=g?"clientHeight":"clientWidth",k=o.reference[h]+o.reference[p]-f[p]-o.floating[h],T=f[p]-o.reference[p],O=await(s.getOffsetParent==null?void 0:s.getOffsetParent(l));let S=O?O[y]:0;(!S||!await(s.isElement==null?void 0:s.isElement(O)))&&(S=i.floating[y]||o.floating[h]);const x=k/2-T/2,E=S/2-v[h]/2-1,R=et(d[b],E),B=et(d[_],E),I=R,$=S-v[h]-B,Q=S/2-v[h]/2+x,q=qs(I,Q,$),N=!c.arrow&&ht(r)!=null&&Q!==q&&o.reference[h]/2-(QQ<=0)){var B,I;const Q=(((B=o.flip)==null?void 0:B.index)||0)+1,q=S[Q];if(q&&(!(d==="alignment"?_!==Ie(q):!1)||R.every(Y=>Y.overflows[0]>0&&Ie(Y.placement)===_)))return{data:{index:Q,overflows:R},reset:{placement:q}};let N=(I=R.filter(F=>F.overflows[0]<=0).sort((F,Y)=>F.overflows[1]-Y.overflows[1])[0])==null?void 0:I.placement;if(!N)switch(p){case"bestFit":{var $;const F=($=R.filter(Y=>{if(O){const ee=Ie(Y.placement);return ee===_||ee==="y"}return!0}).map(Y=>[Y.placement,Y.overflows.filter(ee=>ee>0).reduce((ee,de)=>ee+de,0)]).sort((Y,ee)=>Y[1]-ee[1])[0])==null?void 0:$[0];F&&(N=F);break}case"initialPlacement":N=i;break}if(r!==N)return{reset:{placement:N}}}return{}}}},di=new Set(["left","top"]);async function fi(n,a){const{placement:t,platform:e,elements:r}=n,o=await(e.isRTL==null?void 0:e.isRTL(r.floating)),s=tt(t),i=ht(t),c=Ie(t)==="y",l=di.has(s)?-1:1,u=o&&c?-1:1,d=Gt(a,n);let{mainAxis:f,crossAxis:p,alignmentAxis:h}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return i&&typeof h=="number"&&(p=i==="end"?h*-1:h),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}const pi=function(n){return n===void 0&&(n=0),{name:"offset",options:n,async fn(a){var t,e;const{x:r,y:o,placement:s,middlewareData:i}=a,c=await fi(a,n);return s===((t=i.offset)==null?void 0:t.placement)&&(e=i.arrow)!=null&&e.alignmentOffset?{}:{x:r+c.x,y:o+c.y,data:{...c,placement:s}}}}};function Wn(n){const a=ue(n);let t=parseFloat(a.width)||0,e=parseFloat(a.height)||0;const r=De(n),o=r?n.offsetWidth:t,s=r?n.offsetHeight:e,i=At(t)!==o||At(e)!==s;return i&&(t=o,e=s),{width:t,height:e,$:i}}function _r(n){return oe(n)?n:n.contextElement}function $e(n){const a=_r(n);if(!De(a))return be(1);const t=a.getBoundingClientRect(),{width:e,height:r,$:o}=Wn(a);let s=(o?At(t.width):t.width)/e,i=(o?At(t.height):t.height)/r;return(!s||!Number.isFinite(s))&&(s=1),(!i||!Number.isFinite(i))&&(i=1),{x:s,y:i}}const hi=be(0);function Hn(n){const a=se(n);return!Dr()||!a.visualViewport?hi:{x:a.visualViewport.offsetLeft,y:a.visualViewport.offsetTop}}function mi(n,a,t){return a===void 0&&(a=!1),!t||a&&t!==se(n)?!1:a}function Ve(n,a,t,e){a===void 0&&(a=!1),t===void 0&&(t=!1);const r=n.getBoundingClientRect(),o=_r(n);let s=be(1);a&&(e?oe(e)&&(s=$e(e)):s=$e(n));const i=mi(o,t,e)?Hn(o):be(0);let c=(r.left+i.x)/s.x,l=(r.top+i.y)/s.y,u=r.width/s.x,d=r.height/s.y;if(o){const f=se(o),p=e&&oe(e)?se(e):e;let h=f,v=fr(h);for(;v&&e&&p!==h;){const g=$e(v),b=v.getBoundingClientRect(),_=ue(v),y=b.left+(v.clientLeft+parseFloat(_.paddingLeft))*g.x,k=b.top+(v.clientTop+parseFloat(_.paddingTop))*g.y;c*=g.x,l*=g.y,u*=g.x,d*=g.y,c+=y,l+=k,h=se(v),v=fr(h)}}return Ht({width:u,height:d,x:c,y:l})}function Mr(n,a){const t=zt(n).scrollLeft;return a?a.left+t:Ve(ke(n)).left+t}function jn(n,a,t){t===void 0&&(t=!1);const e=n.getBoundingClientRect(),r=e.left+a.scrollLeft-(t?0:Mr(n,e)),o=e.top+a.scrollTop;return{x:r,y:o}}function gi(n){let{elements:a,rect:t,offsetParent:e,strategy:r}=n;const o=r==="fixed",s=ke(e),i=a?$t(a.floating):!1;if(e===s||i&&o)return t;let c={scrollLeft:0,scrollTop:0},l=be(1);const u=be(0),d=De(e);if((d||!d&&!o)&&((nt(e)!=="body"||pt(s))&&(c=zt(e)),De(e))){const p=Ve(e);l=$e(e),u.x=p.x+e.clientLeft,u.y=p.y+e.clientTop}const f=s&&!d&&!o?jn(s,c,!0):be(0);return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:t.y*l.y-c.scrollTop*l.y+u.y+f.y}}function vi(n){return Array.from(n.getClientRects())}function wi(n){const a=ke(n),t=zt(n),e=n.ownerDocument.body,r=je(a.scrollWidth,a.clientWidth,e.scrollWidth,e.clientWidth),o=je(a.scrollHeight,a.clientHeight,e.scrollHeight,e.clientHeight);let s=-t.scrollLeft+Mr(n);const i=-t.scrollTop;return ue(e).direction==="rtl"&&(s+=je(a.clientWidth,e.clientWidth)-r),{width:r,height:o,x:s,y:i}}function yi(n,a){const t=se(n),e=ke(n),r=t.visualViewport;let o=e.clientWidth,s=e.clientHeight,i=0,c=0;if(r){o=r.width,s=r.height;const l=Dr();(!l||l&&a==="fixed")&&(i=r.offsetLeft,c=r.offsetTop)}return{width:o,height:s,x:i,y:c}}const bi=new Set(["absolute","fixed"]);function Di(n,a){const t=Ve(n,!0,a==="fixed"),e=t.top+n.clientTop,r=t.left+n.clientLeft,o=De(n)?$e(n):be(1),s=n.clientWidth*o.x,i=n.clientHeight*o.y,c=r*o.x,l=e*o.y;return{width:s,height:i,x:c,y:l}}function qr(n,a,t){let e;if(a==="viewport")e=yi(n,t);else if(a==="document")e=wi(ke(n));else if(oe(a))e=Di(a,t);else{const r=Hn(n);e={x:a.x-r.x,y:a.y-r.y,width:a.width,height:a.height}}return Ht(e)}function Bn(n,a){const t=Le(n);return t===a||!oe(t)||Je(t)?!1:ue(t).position==="fixed"||Bn(t,a)}function ki(n,a){const t=a.get(n);if(t)return t;let e=dt(n,[],!1).filter(i=>oe(i)&&nt(i)!=="body"),r=null;const o=ue(n).position==="fixed";let s=o?Le(n):n;for(;oe(s)&&!Je(s);){const i=ue(s),c=br(s);!c&&i.position==="fixed"&&(r=null),(o?!c&&!r:!c&&i.position==="static"&&!!r&&bi.has(r.position)||pt(s)&&!c&&Bn(n,s))?e=e.filter(u=>u!==s):r=i,s=Le(s)}return a.set(n,e),e}function xi(n){let{element:a,boundary:t,rootBoundary:e,strategy:r}=n;const s=[...t==="clippingAncestors"?$t(a)?[]:ki(a,this._c):[].concat(t),e],i=s[0],c=s.reduce((l,u)=>{const d=qr(a,u,r);return l.top=je(d.top,l.top),l.right=et(d.right,l.right),l.bottom=et(d.bottom,l.bottom),l.left=je(d.left,l.left),l},qr(a,i,r));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function _i(n){const{width:a,height:t}=Wn(n);return{width:a,height:t}}function Mi(n,a,t){const e=De(a),r=ke(a),o=t==="fixed",s=Ve(n,!0,o,a);let i={scrollLeft:0,scrollTop:0};const c=be(0);function l(){c.x=Mr(r)}if(e||!e&&!o)if((nt(a)!=="body"||pt(r))&&(i=zt(a)),e){const p=Ve(a,!0,o,a);c.x=p.x+a.clientLeft,c.y=p.y+a.clientTop}else r&&l();o&&!e&&r&&l();const u=r&&!e&&!o?jn(r,i):be(0),d=s.left+i.scrollLeft-c.x-u.x,f=s.top+i.scrollTop-c.y-u.y;return{x:d,y:f,width:s.width,height:s.height}}function tr(n){return ue(n).position==="static"}function Kr(n,a){if(!De(n)||ue(n).position==="fixed")return null;if(a)return a(n);let t=n.offsetParent;return ke(n)===t&&(t=t.ownerDocument.body),t}function Qn(n,a){const t=se(n);if($t(n))return t;if(!De(n)){let r=Le(n);for(;r&&!Je(r);){if(oe(r)&&!tr(r))return r;r=Le(r)}return t}let e=Kr(n,a);for(;e&&Fs(e)&&tr(e);)e=Kr(e,a);return e&&Je(e)&&tr(e)&&!br(e)?t:e||js(n)||t}const Ci=async function(n){const a=this.getOffsetParent||Qn,t=this.getDimensions,e=await t(n.floating);return{reference:Mi(n.reference,await a(n.floating),n.strategy),floating:{x:0,y:0,width:e.width,height:e.height}}};function Si(n){return ue(n).direction==="rtl"}const Ei={convertOffsetParentRelativeRectToViewportRelativeRect:gi,getDocumentElement:ke,getClippingRect:xi,getOffsetParent:Qn,getElementRects:Ci,getClientRects:vi,getDimensions:_i,getScale:$e,isElement:oe,isRTL:Si};function Vn(n,a){return n.x===a.x&&n.y===a.y&&n.width===a.width&&n.height===a.height}function Pi(n,a){let t=null,e;const r=ke(n);function o(){var i;clearTimeout(e),(i=t)==null||i.disconnect(),t=null}function s(i,c){i===void 0&&(i=!1),c===void 0&&(c=1),o();const l=n.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(i||a(),!f||!p)return;const h=wt(d),v=wt(r.clientWidth-(u+f)),g=wt(r.clientHeight-(d+p)),b=wt(u),y={rootMargin:-h+"px "+-v+"px "+-g+"px "+-b+"px",threshold:je(0,et(1,c))||1};let k=!0;function T(O){const S=O[0].intersectionRatio;if(S!==c){if(!k)return s();S?s(!1,S):e=setTimeout(()=>{s(!1,1e-7)},1e3)}S===1&&!Vn(l,n.getBoundingClientRect())&&s(),k=!1}try{t=new IntersectionObserver(T,{...y,root:r.ownerDocument})}catch{t=new IntersectionObserver(T,y)}t.observe(n)}return s(!0),o}function Ti(n,a,t,e){e===void 0&&(e={});const{ancestorScroll:r=!0,ancestorResize:o=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:i=typeof IntersectionObserver=="function",animationFrame:c=!1}=e,l=_r(n),u=r||o?[...l?dt(l):[],...dt(a)]:[];u.forEach(b=>{r&&b.addEventListener("scroll",t,{passive:!0}),o&&b.addEventListener("resize",t)});const d=l&&i?Pi(l,t):null;let f=-1,p=null;s&&(p=new ResizeObserver(b=>{let[_]=b;_&&_.target===l&&p&&(p.unobserve(a),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var y;(y=p)==null||y.observe(a)})),t()}),l&&!c&&p.observe(l),p.observe(a));let h,v=c?Ve(n):null;c&&g();function g(){const b=Ve(n);v&&!Vn(v,b)&&t(),v=b,h=requestAnimationFrame(g)}return t(),()=>{var b;u.forEach(_=>{r&&_.removeEventListener("scroll",t),o&&_.removeEventListener("resize",t)}),d==null||d(),(b=p)==null||b.disconnect(),p=null,c&&cancelAnimationFrame(h)}}const Oi=pi,Ni=ui,Ur=li,Ri=(n,a,t)=>{const e=new Map,r={platform:Ei,...t},o={...r.platform,_c:e};return ii(n,a,{...r,platform:o})};var Yi=typeof document<"u",Li=function(){},St=Yi?w.useLayoutEffect:Li;function Bt(n,a){if(n===a)return!0;if(typeof n!=typeof a)return!1;if(typeof n=="function"&&n.toString()===a.toString())return!0;let t,e,r;if(n&&a&&typeof n=="object"){if(Array.isArray(n)){if(t=n.length,t!==a.length)return!1;for(e=t;e--!==0;)if(!Bt(n[e],a[e]))return!1;return!0}if(r=Object.keys(n),t=r.length,t!==Object.keys(a).length)return!1;for(e=t;e--!==0;)if(!{}.hasOwnProperty.call(a,r[e]))return!1;for(e=t;e--!==0;){const o=r[e];if(!(o==="_owner"&&n.$$typeof)&&!Bt(n[o],a[o]))return!1}return!0}return n!==n&&a!==a}function qn(n){return typeof window>"u"?1:(n.ownerDocument.defaultView||window).devicePixelRatio||1}function $r(n,a){const t=qn(n);return Math.round(a*t)/t}function rr(n){const a=w.useRef(n);return St(()=>{a.current=n}),a}function Fi(n){n===void 0&&(n={});const{placement:a="bottom",strategy:t="absolute",middleware:e=[],platform:r,elements:{reference:o,floating:s}={},transform:i=!0,whileElementsMounted:c,open:l}=n,[u,d]=w.useState({x:0,y:0,strategy:t,placement:a,middlewareData:{},isPositioned:!1}),[f,p]=w.useState(e);Bt(f,e)||p(e);const[h,v]=w.useState(null),[g,b]=w.useState(null),_=w.useCallback(Y=>{Y!==O.current&&(O.current=Y,v(Y))},[]),y=w.useCallback(Y=>{Y!==S.current&&(S.current=Y,b(Y))},[]),k=o||h,T=s||g,O=w.useRef(null),S=w.useRef(null),x=w.useRef(u),E=c!=null,R=rr(c),B=rr(r),I=rr(l),$=w.useCallback(()=>{if(!O.current||!S.current)return;const Y={placement:a,strategy:t,middleware:f};B.current&&(Y.platform=B.current),Ri(O.current,S.current,Y).then(ee=>{const de={...ee,isPositioned:I.current!==!1};Q.current&&!Bt(x.current,de)&&(x.current=de,aa.flushSync(()=>{d(de)}))})},[f,a,t,B,I]);St(()=>{l===!1&&x.current.isPositioned&&(x.current.isPositioned=!1,d(Y=>({...Y,isPositioned:!1})))},[l]);const Q=w.useRef(!1);St(()=>(Q.current=!0,()=>{Q.current=!1}),[]),St(()=>{if(k&&(O.current=k),T&&(S.current=T),k&&T){if(R.current)return R.current(k,T,$);$()}},[k,T,$,R,E]);const q=w.useMemo(()=>({reference:O,floating:S,setReference:_,setFloating:y}),[_,y]),N=w.useMemo(()=>({reference:k,floating:T}),[k,T]),F=w.useMemo(()=>{const Y={position:t,left:0,top:0};if(!N.floating)return Y;const ee=$r(N.floating,u.x),de=$r(N.floating,u.y);return i?{...Y,transform:"translate("+ee+"px, "+de+"px)",...qn(N.floating)>=1.5&&{willChange:"transform"}}:{position:t,left:ee,top:de}},[t,i,N.floating,u.x,u.y]);return w.useMemo(()=>({...u,update:$,refs:q,elements:N,floatingStyles:F}),[u,$,q,N,F])}const Ii=n=>{function a(t){return{}.hasOwnProperty.call(t,"current")}return{name:"arrow",options:n,fn(t){const{element:e,padding:r}=typeof n=="function"?n(t):n;return e&&a(e)?e.current!=null?Ur({element:e.current,padding:r}).fn(t):{}:e?Ur({element:e,padding:r}).fn(t):{}}}},Ai=(n,a)=>({...Oi(n),options:[n,a]}),Wi=(n,a)=>({...Ni(n),options:[n,a]}),Hi=(n,a)=>({...Ii(n),options:[n,a]}),ji={...yn};let zr=!1,Bi=0;const Gr=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Bi++;function Qi(){const[n,a]=w.useState(()=>zr?Gr():void 0);return jt(()=>{n==null&&a(Gr())},[]),w.useEffect(()=>{zr=!0},[]),n}const Vi=ji.useId,Kn=Vi||Qi,qi=w.forwardRef(function(a,t){const{context:{placement:e,elements:{floating:r},middlewareData:{arrow:o,shift:s}},width:i=14,height:c=7,tipRadius:l=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h,...v}={},...g}=a,b=Kn(),[_,y]=w.useState(!1);if(jt(()=>{if(!r)return;ue(r).direction==="rtl"&&y(!0)},[r]),!r)return null;const[k,T]=e.split("-"),O=k==="top"||k==="bottom";let S=d;(O&&s!=null&&s.x||!O&&s!=null&&s.y)&&(S=null);const x=u*2,E=x/2,R=i/2*(l/-8+1),B=c/2*l/4,I=!!p,$=S&&T==="end"?"bottom":"top";let Q=S&&T==="end"?"right":"left";S&&_&&(Q=T==="end"?"left":"right");const q=(o==null?void 0:o.x)!=null?S||o.x:"",N=(o==null?void 0:o.y)!=null?S||o.y:"",F=p||"M0,0"+(" H"+i)+(" L"+(i-R)+","+(c-B))+(" Q"+i/2+","+c+" "+R+","+(c-B))+" Z",Y={top:I?"rotate(180deg)":"",left:I?"rotate(90deg)":"rotate(-90deg)",bottom:I?"":"rotate(180deg)",right:I?"rotate(-90deg)":"rotate(90deg)"}[k];return D.jsxs("svg",{...g,"aria-hidden":!0,ref:t,width:I?i:i+x,height:i,viewBox:"0 0 "+i+" "+(c>i?c:i),style:{position:"absolute",pointerEvents:"none",[Q]:q,[$]:N,[k]:O||I?"100%":"calc(100% - "+x/2+"px)",transform:[Y,h].filter(ee=>!!ee).join(" "),...v},children:[x>0&&D.jsx("path",{clipPath:"url(#"+b+")",fill:"none",stroke:f,strokeWidth:x+(p?0:1),d:F}),D.jsx("path",{stroke:x&&!p?g.fill:"none",d:F}),D.jsx("clipPath",{id:b,children:D.jsx("rect",{x:-E,y:E*(I?-1:1),width:i+x,height:i})})]})});function Ki(){const n=new Map;return{emit(a,t){var e;(e=n.get(a))==null||e.forEach(r=>r(t))},on(a,t){n.has(a)||n.set(a,new Set),n.get(a).add(t)},off(a,t){var e;(e=n.get(a))==null||e.delete(t)}}}const Ui=w.createContext(null),$i=w.createContext(null),zi=()=>{var n;return((n=w.useContext(Ui))==null?void 0:n.id)||null},Gi=()=>w.useContext($i);function Xi(n){const{open:a=!1,onOpenChange:t,elements:e}=n,r=Kn(),o=w.useRef({}),[s]=w.useState(()=>Ki()),i=zi()!=null,[c,l]=w.useState(e.reference),u=si((p,h,v)=>{o.current.openEvent=p?h:void 0,s.emit("openchange",{open:p,event:h,reason:v,nested:i}),t==null||t(p,h,v)}),d=w.useMemo(()=>({setPositionReference:l}),[]),f=w.useMemo(()=>({reference:c||e.reference||null,floating:e.floating||null,domReference:e.reference}),[c,e.reference,e.floating]);return w.useMemo(()=>({dataRef:o,open:a,onOpenChange:u,elements:f,events:s,floatingId:r,refs:d}),[a,u,f,s,r,d])}function Zi(n){n===void 0&&(n={});const{nodeId:a}=n,t=Xi({...n,elements:{reference:null,floating:null,...n.elements}}),e=n.rootContext||t,r=e.elements,[o,s]=w.useState(null),[i,c]=w.useState(null),u=(r==null?void 0:r.domReference)||o,d=w.useRef(null),f=Gi();jt(()=>{u&&(d.current=u)},[u]);const p=Fi({...n,elements:{...r,...i&&{reference:i}}}),h=w.useCallback(y=>{const k=oe(y)?{getBoundingClientRect:()=>y.getBoundingClientRect(),getClientRects:()=>y.getClientRects(),contextElement:y}:y;c(k),p.refs.setReference(k)},[p.refs]),v=w.useCallback(y=>{(oe(y)||y===null)&&(d.current=y,s(y)),(oe(p.refs.reference.current)||p.refs.reference.current===null||y!==null&&!oe(y))&&p.refs.setReference(y)},[p.refs]),g=w.useMemo(()=>({...p.refs,setReference:v,setPositionReference:h,domReference:d}),[p.refs,v,h]),b=w.useMemo(()=>({...p.elements,domReference:u}),[p.elements,u]),_=w.useMemo(()=>({...p,...e,refs:g,elements:b,nodeId:a}),[p,g,b,a,e]);return jt(()=>{e.dataRef.current.floatingContext=_;const y=f==null?void 0:f.nodesRef.current.find(k=>k.id===a);y&&(y.context=_)}),w.useMemo(()=>({...p,context:_,refs:g,elements:b}),[p,g,b,_])}/*! react-datepicker v8.4.0 https://github.com/Hacker0x01/react-datepicker Released under the MIT License. -*/var mr=function(a,t){return mr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])},mr(a,t)};function te(n,a){if(typeof a!="function"&&a!==null)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");mr(n,a);function t(){this.constructor=n}n.prototype=a===null?Object.create(a):(t.prototype=a.prototype,new t)}var W=function(){return W=Object.assign||function(t){for(var e,r=1,o=arguments.length;r0?t[0]:t;return n&&z(n,r,e)||""}var zn=" - ";function nc(n,a,t){if(!n)return"";var e=ie(n,t),r=a?ie(a,t):"";return"".concat(e).concat(zn).concat(r)}function ac(n,a){if(!(n!=null&&n.length))return"";var t=n[0]?ie(n[0],a):"";if(n.length===1)return t;if(n.length===2&&n[1]){var e=ie(n[1],a);return"".concat(t,", ").concat(e)}var r=n.length-1;return"".concat(t," (+").concat(r,")")}function or(n,a){var t=a.hour,e=t===void 0?0:t,r=a.minute,o=r===void 0?0:r,s=a.second,i=s===void 0?0:s;return Mt(Ct(St(n,i),o),e)}function oc(n){return vr(n)}function sc(n,a){return z(n,"ddd",a)}function Pt(n){return Qe(n)}function Ye(n,a,t){var e=nt(a||Sr());return Pe(n,{locale:e,weekStartsOn:t})}function Ee(n){return Cn(n)}function lt(n){return $t(n)}function Zr(n){return ur(n)}function Jr(){return Qe(V())}function en(n){return _n(n)}function ic(n){return ya(n)}function cc(n){return Mn(n)}function ge(n,a){return n&&a?ws(n,a):!n&&!a}function ae(n,a){return n&&a?gs(n,a):!n&&!a}function Vt(n,a){return n&&a?vs(n,a):!n&&!a}function A(n,a){return n&&a?va(n,a):!n&&!a}function We(n,a){return n&&a?yo(n,a):!n&&!a}function ut(n,a,t){var e,r=Qe(a),o=_n(t);try{e=dt(n,{start:r,end:o})}catch{e=!1}return e}function Sr(){var n=Un();return n.__localeId__}function nt(n){if(typeof n=="string"){var a=Un();return a.__localeData__?a.__localeData__[n]:void 0}else return n}function lc(n,a,t){return a(z(n,"EEEE",t))}function uc(n,a){return z(n,"EEEEEE",a)}function dc(n,a){return z(n,"EEE",a)}function Er(n,a){return z(ce(V(),n),"LLLL",a)}function Gn(n,a){return z(ce(V(),n),"LLL",a)}function fc(n,a){return z(Ue(V(),n),"QQQ",a)}function le(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.excludeDateIntervals,i=t.includeDates,c=t.includeDateIntervals,l=t.filterDate;return vt(n,{minDate:e,maxDate:r})||o&&o.some(function(u){return u instanceof Date?A(n,u):A(n,u.date)})||s&&s.some(function(u){var d=u.start,f=u.end;return dt(n,{start:d,end:f})})||i&&!i.some(function(u){return A(n,u)})||c&&!c.some(function(u){var d=u.start,f=u.end;return dt(n,{start:d,end:f})})||l&&!l(V(n))||!1}function Pr(n,a){var t=a===void 0?{}:a,e=t.excludeDates,r=t.excludeDateIntervals;return r&&r.length>0?r.some(function(o){var s=o.start,i=o.end;return dt(n,{start:s,end:i})}):e&&e.some(function(o){var s;return o instanceof Date?A(n,o):A(n,(s=o.date)!==null&&s!==void 0?s:new Date)})||!1}function Xn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates,i=t.filterDate;return vt(n,{minDate:e?Cn(e):void 0,maxDate:r?Mn(r):void 0})||(o==null?void 0:o.some(function(c){return ae(n,c instanceof Date?c:c.date)}))||s&&!s.some(function(c){return ae(n,c)})||i&&!i(V(n))||!1}function Dt(n,a,t,e){var r=L(n),o=ne(n),s=L(a),i=ne(a),c=L(e);return r===s&&r===c?o<=t&&t<=i:r=t||cr:!1}function pc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates;return vt(n,{minDate:e,maxDate:r})||o&&o.some(function(i){return ae(i instanceof Date?i:i.date,n)})||s&&!s.some(function(i){return ae(i,n)})||!1}function bt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates,i=t.filterDate;return vt(n,{minDate:e,maxDate:r})||(o==null?void 0:o.some(function(c){return Vt(n,c instanceof Date?c:c.date)}))||s&&!s.some(function(c){return Vt(n,c)})||i&&!i(V(n))||!1}function kt(n,a,t){if(!a||!t||!Yt(a)||!Yt(t))return!1;var e=L(a),r=L(t);return e<=n&&r>=n}function Tt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates,i=t.filterDate,c=new Date(n,0,1);return vt(c,{minDate:e?$t(e):void 0,maxDate:r?Sn(r):void 0})||(o==null?void 0:o.some(function(l){return ge(c,l instanceof Date?l:l.date)}))||s&&!s.some(function(l){return ge(c,l)})||i&&!i(V(c))||!1}function xt(n,a,t,e){var r=L(n),o=He(n),s=L(a),i=He(a),c=L(e);return r===s&&r===c?o<=t&&t<=i:r=t||cr:!1}function vt(n,a){var t,e=a===void 0?{}:a,r=e.minDate,o=e.maxDate;return(t=r&&Ze(n,r)<0||o&&Ze(n,o)>0)!==null&&t!==void 0?t:!1}function tn(n,a){return a.some(function(t){return Ce(t)===Ce(n)&&Se(t)===Se(n)&&Re(t)===Re(n)})}function rn(n,a){var t=a===void 0?{}:a,e=t.excludeTimes,r=t.includeTimes,o=t.filterTime;return e&&tn(n,e)||r&&!tn(n,r)||o&&!o(n)||!1}function nn(n,a){var t=a.minTime,e=a.maxTime;if(!t||!e)throw new Error("Both minTime and maxTime props required");var r=V();r=Mt(r,Ce(n)),r=Ct(r,Se(n)),r=St(r,Re(n));var o=V();o=Mt(o,Ce(t)),o=Ct(o,Se(t)),o=St(o,Re(t));var s=V();s=Mt(s,Ce(e)),s=Ct(s,Se(e)),s=St(s,Re(e));var i;try{i=!dt(r,{start:o,end:s})}catch{i=!1}return i}function an(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=je(n,1);return e&&Lt(e,o)>0||r&&r.every(function(s){return Lt(s,o)>0})||!1}function on(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=he(n,1);return e&&Lt(o,e)>0||r&&r.every(function(s){return Lt(o,s)>0})||!1}function hc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=$t(n),s=Fn(o);return e&&Ft(e,s)>0||r&&r.every(function(i){return Ft(i,s)>0})||!1}function mc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=Sn(n),s=gr(o,1);return e&&Ft(s,e)>0||r&&r.every(function(i){return Ft(s,i)>0})||!1}function sn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=Je(n,1);return e&&It(e,o)>0||r&&r.every(function(s){return It(s,o)>0})||!1}function gc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.yearItemNumber,o=r===void 0?gt:r,s=lt(Je(n,o)),i=Ne(s,o).endPeriod,c=e&&L(e);return c&&c>i||!1}function cn(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=_e(n,1);return e&&It(o,e)>0||r&&r.every(function(s){return It(o,s)>0})||!1}function vc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.yearItemNumber,o=r===void 0?gt:r,s=_e(n,o),i=Ne(s,o).startPeriod,c=e&&L(e);return c&&c=0});return Rr(e)}else return t?Rr(t):a}function Jn(n){var a=n.maxDate,t=n.includeDates;if(t&&a){var e=t.filter(function(r){return Ze(r,a)<=0});return Nr(e)}else return t?Nr(t):a}function ln(n,a){var t;n===void 0&&(n=[]),a===void 0&&(a="react-datepicker__day--highlighted");for(var e=new Map,r=0,o=n.length;r=Sc,p=!r&&!t.isWeekInMonth(i);if(f||p)if(t.props.peekNextMonth)s=!0;else break}return e},t.onMonthClick=function(e,r){var o=t.isMonthDisabledForLabelDate(r),s=o.isDisabled,i=o.labelDate;s||t.handleDayClick(Ee(i),e)},t.onMonthMouseEnter=function(e){var r=t.isMonthDisabledForLabelDate(e),o=r.isDisabled,s=r.labelDate;o||t.handleDayMouseEnter(Ee(s))},t.handleMonthNavigation=function(e,r){var o,s,i,c;(s=(o=t.props).setPreSelection)===null||s===void 0||s.call(o,r),(c=(i=t.MONTH_REFS[e])===null||i===void 0?void 0:i.current)===null||c===void 0||c.focus()},t.handleKeyboardNavigation=function(e,r,o){var s,i=t.props,c=i.selected,l=i.preSelection,u=i.setPreSelection,d=i.minDate,f=i.maxDate,p=i.showFourColumnMonthYearPicker,h=i.showTwoColumnMonthYearPicker;if(l){var v=hn(p,h),g=t.getVerticalOffset(v),D=(s=sr[v])===null||s===void 0?void 0:s.grid,_=function(S,x,E){var R,B,I=x,U=E;switch(S){case M.ArrowRight:I=he(x,_t),U=E===11?0:E+_t;break;case M.ArrowLeft:I=je(x,_t),U=E===0?11:E-_t;break;case M.ArrowUp:I=je(x,g),U=!((R=D==null?void 0:D[0])===null||R===void 0)&&R.includes(E)?E+12-g:E-g;break;case M.ArrowDown:I=he(x,g),U=!((B=D==null?void 0:D[D.length-1])===null||B===void 0)&&B.includes(E)?E-12+g:E+g;break}return{newCalculatedDate:I,newCalculatedMonth:U}},y=function(S,x,E){for(var R=40,B=S,I=!1,U=0,Q=_(B,x,E),q=Q.newCalculatedDate,N=Q.newCalculatedMonth;!I;){if(U>=R){q=x,N=E;break}if(d&&qf){B=M.ArrowLeft;var F=_(B,q,N);q=F.newCalculatedDate,N=F.newCalculatedMonth}if(pc(q,t.props)){var F=_(B,q,N);q=F.newCalculatedDate,N=F.newCalculatedMonth}else I=!0;U++}return{newCalculatedDate:q,newCalculatedMonth:N}};if(r===M.Enter){t.isMonthDisabled(o)||(t.onMonthClick(e,o),u==null||u(c));return}var k=y(r,l,o),T=k.newCalculatedDate,O=k.newCalculatedMonth;switch(r){case M.ArrowRight:case M.ArrowLeft:case M.ArrowUp:case M.ArrowDown:t.handleMonthNavigation(O,T);break}}},t.getVerticalOffset=function(e){var r,o;return(o=(r=sr[e])===null||r===void 0?void 0:r.verticalNavigationOffset)!==null&&o!==void 0?o:0},t.onMonthKeyDown=function(e,r){var o=t.props,s=o.disabledKeyboardNavigation,i=o.handleOnMonthKeyDown,c=e.key;c!==M.Tab&&e.preventDefault(),s||t.handleKeyboardNavigation(e,c,r),i&&i(e)},t.onQuarterClick=function(e,r){var o=Ue(t.props.day,r);bt(o,t.props)||t.handleDayClick(Zr(o),e)},t.onQuarterMouseEnter=function(e){var r=Ue(t.props.day,e);bt(r,t.props)||t.handleDayMouseEnter(Zr(r))},t.handleQuarterNavigation=function(e,r){var o,s,i,c;t.isDisabled(r)||t.isExcluded(r)||((s=(o=t.props).setPreSelection)===null||s===void 0||s.call(o,r),(c=(i=t.QUARTER_REFS[e-1])===null||i===void 0?void 0:i.current)===null||c===void 0||c.focus())},t.onQuarterKeyDown=function(e,r){var o,s,i=e.key;if(!t.props.disabledKeyboardNavigation)switch(i){case M.Enter:t.onQuarterClick(e,r),(s=(o=t.props).setPreSelection)===null||s===void 0||s.call(o,t.props.selected);break;case M.ArrowRight:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===4?1:r+1,gr(t.props.preSelection,1));break;case M.ArrowLeft:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===1?4:r-1,Fn(t.props.preSelection));break}},t.isMonthDisabledForLabelDate=function(e){var r,o=t.props,s=o.day,i=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=ce(s,e);return{isDisabled:(r=(i||c||l||u)&&Xn(d,t.props))!==null&&r!==void 0?r:!1,labelDate:d}},t.isMonthDisabled=function(e){var r=t.isMonthDisabledForLabelDate(e).isDisabled;return r},t.getMonthClassNames=function(e){var r=t.props,o=r.day,s=r.startDate,i=r.endDate,c=r.preSelection,l=r.monthClassName,u=l?l(ce(o,e)):void 0,d=t.getSelection();return re("react-datepicker__month-text","react-datepicker__month-".concat(e),u,{"react-datepicker__month-text--disabled":t.isMonthDisabled(e),"react-datepicker__month-text--selected":d?t.isSelectMonthInList(o,e,d):void 0,"react-datepicker__month-text--keyboard-selected":!t.props.disabledKeyboardNavigation&&c&&t.isSelectedMonth(o,e,c)&&!t.isMonthSelected()&&!t.isMonthDisabled(e),"react-datepicker__month-text--in-selecting-range":t.isInSelectingRangeMonth(e),"react-datepicker__month-text--in-range":s&&i?Dt(s,i,e,o):void 0,"react-datepicker__month-text--range-start":t.isRangeStartMonth(e),"react-datepicker__month-text--range-end":t.isRangeEndMonth(e),"react-datepicker__month-text--selecting-range-start":t.isSelectingMonthRangeStart(e),"react-datepicker__month-text--selecting-range-end":t.isSelectingMonthRangeEnd(e),"react-datepicker__month-text--today":t.isCurrentMonth(o,e)})},t.getTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=ne(t.props.preSelection),o=t.isMonthDisabledForLabelDate(r).isDisabled,s=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return s},t.getQuarterTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=He(t.props.preSelection),o=bt(t.props.day,t.props),s=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return s},t.getAriaLabel=function(e){var r=t.props,o=r.chooseDayAriaLabelPrefix,s=o===void 0?"Choose":o,i=r.disabledDayAriaLabelPrefix,c=i===void 0?"Not available":i,l=r.day,u=r.locale,d=ce(l,e),f=t.isDisabled(d)||t.isExcluded(d)?c:s;return"".concat(f," ").concat(z(d,"MMMM yyyy",u))},t.getQuarterClassNames=function(e){var r=t.props,o=r.day,s=r.startDate,i=r.endDate,c=r.selected,l=r.minDate,u=r.maxDate,d=r.excludeDates,f=r.includeDates,p=r.filterDate,h=r.preSelection,v=r.disabledKeyboardNavigation,g=(l||u||d||f||p)&&bt(Ue(o,e),t.props);return re("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter-text--disabled":g,"react-datepicker__quarter-text--selected":c?t.isSelectedQuarter(o,e,c):void 0,"react-datepicker__quarter-text--keyboard-selected":!v&&h&&t.isSelectedQuarter(o,e,h)&&!g,"react-datepicker__quarter-text--in-selecting-range":t.isInSelectingRangeQuarter(e),"react-datepicker__quarter-text--in-range":s&&i?xt(s,i,e,o):void 0,"react-datepicker__quarter-text--range-start":t.isRangeStartQuarter(e),"react-datepicker__quarter-text--range-end":t.isRangeEndQuarter(e),"react-datepicker__quarter-text--today":t.isCurrentQuarter(o,e)})},t.getMonthContent=function(e){var r=t.props,o=r.showFullMonthYearPicker,s=r.renderMonthContent,i=r.locale,c=r.day,l=Gn(e,i),u=Er(e,i);return s?s(e,l,u,c):o?u:l},t.getQuarterContent=function(e){var r,o=t.props,s=o.renderQuarterContent,i=o.locale,c=fc(e,i);return(r=s==null?void 0:s(e,c))!==null&&r!==void 0?r:c},t.renderMonths=function(){var e,r=t.props,o=r.showTwoColumnMonthYearPicker,s=r.showFourColumnMonthYearPicker,i=r.day,c=r.selected,l=(e=sr[hn(s,o)])===null||e===void 0?void 0:e.grid;return l==null?void 0:l.map(function(u,d){return m.createElement("div",{className:"react-datepicker__month-wrapper",key:d},u.map(function(f,p){return m.createElement("div",{ref:t.MONTH_REFS[f],key:p,onClick:function(h){t.onMonthClick(h,f)},onKeyDown:function(h){ea(h)&&(h.preventDefault(),h.key=M.Enter),t.onMonthKeyDown(h,f)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onMonthMouseEnter(f)},onPointerEnter:t.props.usePointerEvent?function(){return t.onMonthMouseEnter(f)}:void 0,tabIndex:Number(t.getTabIndex(f)),className:t.getMonthClassNames(f),"aria-disabled":t.isMonthDisabled(f),role:"option","aria-label":t.getAriaLabel(f),"aria-current":t.isCurrentMonth(i,f)?"date":void 0,"aria-selected":c?t.isSelectedMonth(i,f,c):void 0},t.getMonthContent(f))}))})},t.renderQuarters=function(){var e=t.props,r=e.day,o=e.selected,s=[1,2,3,4];return m.createElement("div",{className:"react-datepicker__quarter-wrapper"},s.map(function(i,c){return m.createElement("div",{key:c,ref:t.QUARTER_REFS[c],role:"option",onClick:function(l){t.onQuarterClick(l,i)},onKeyDown:function(l){t.onQuarterKeyDown(l,i)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onQuarterMouseEnter(i)},onPointerEnter:t.props.usePointerEvent?function(){return t.onQuarterMouseEnter(i)}:void 0,className:t.getQuarterClassNames(i),"aria-selected":o?t.isSelectedQuarter(r,i,o):void 0,tabIndex:Number(t.getQuarterTabIndex(i)),"aria-current":t.isCurrentQuarter(r,i)?"date":void 0},t.getQuarterContent(i))}))},t.getClassNames=function(){var e=t.props,r=e.selectingDate,o=e.selectsStart,s=e.selectsEnd,i=e.showMonthYearPicker,c=e.showQuarterYearPicker,l=e.showWeekPicker;return re("react-datepicker__month",{"react-datepicker__month--selecting-range":r&&(o||s)},{"react-datepicker__monthPicker":i},{"react-datepicker__quarterPicker":c},{"react-datepicker__weekPicker":l})},t}return a.prototype.getSelection=function(){var t=this.props,e=t.selected,r=t.selectedDates,o=t.selectsMultiple;if(o)return r;if(e)return[e]},a.prototype.render=function(){var t=this.props,e=t.showMonthYearPicker,r=t.showQuarterYearPicker,o=t.day,s=t.ariaLabelPrefix,i=s===void 0?"Month ":s,c=i?i.trim()+" ":"";return m.createElement("div",{className:this.getClassNames(),onMouseLeave:this.props.usePointerEvent?void 0:this.handleMouseLeave,onPointerLeave:this.props.usePointerEvent?this.handleMouseLeave:void 0,"aria-label":"".concat(c).concat(z(o,"MMMM, yyyy",this.props.locale)),role:"listbox"},e?this.renderMonths():r?this.renderQuarters():this.renderWeeks())},a}(w.Component),Pc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.isSelectedMonth=function(e){return t.props.month===e},t.renderOptions=function(){return t.props.monthNames.map(function(e,r){return m.createElement("div",{className:t.isSelectedMonth(r)?"react-datepicker__month-option react-datepicker__month-option--selected_month":"react-datepicker__month-option",key:e,onClick:t.onChange.bind(t,r),"aria-selected":t.isSelectedMonth(r)?"true":void 0},t.isSelectedMonth(r)?m.createElement("span",{className:"react-datepicker__month-option--selected"},"✓"):"",e)})},t.onChange=function(e){return t.props.onChange(e)},t.handleClickOutside=function(){return t.props.onCancel()},t}return a.prototype.render=function(){return m.createElement(Zt,{className:"react-datepicker__month-dropdown",onClickOutside:this.handleClickOutside},this.renderOptions())},a}(w.Component),Tc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(e){return e.map(function(r,o){return m.createElement("option",{key:r,value:o},r)})},t.renderSelectMode=function(e){return m.createElement("select",{value:t.props.month,className:"react-datepicker__month-select",onChange:function(r){return t.onChange(parseInt(r.target.value))}},t.renderSelectOptions(e))},t.renderReadView=function(e,r){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-read-view--selected-month"},r[t.props.month]))},t.renderDropdown=function(e){return m.createElement(Pc,W({key:"dropdown"},t.props,{monthNames:e,onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(e){var r=t.state.dropdownVisible,o=[t.renderReadView(!r,e)];return r&&o.unshift(t.renderDropdown(e)),o},t.onChange=function(e){t.toggleDropdown(),e!==t.props.month&&t.props.onChange(e)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t=this,e=[0,1,2,3,4,5,6,7,8,9,10,11].map(this.props.useShortMonthInDropdown?function(o){return Gn(o,t.props.locale)}:function(o){return Er(o,t.props.locale)}),r;switch(this.props.dropdownMode){case"scroll":r=this.renderScrollMode(e);break;case"select":r=this.renderSelectMode(e);break}return m.createElement("div",{className:"react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode)},r)},a}(w.Component);function Oc(n,a){for(var t=[],e=Ee(n),r=Ee(a);!Le(e,r);)t.push(V(e)),e=he(e,1);return t}var Nc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.renderOptions=function(){return e.state.monthYearsList.map(function(r){var o=fr(r),s=ge(e.props.date,r)&&ae(e.props.date,r);return m.createElement("div",{className:s?"react-datepicker__month-year-option--selected_month-year":"react-datepicker__month-year-option",key:o,onClick:e.onChange.bind(e,o),"aria-selected":s?"true":void 0},s?m.createElement("span",{className:"react-datepicker__month-year-option--selected"},"✓"):"",z(r,e.props.dateFormat,e.props.locale))})},e.onChange=function(r){return e.props.onChange(r)},e.handleClickOutside=function(){e.props.onCancel()},e.state={monthYearsList:Oc(e.props.minDate,e.props.maxDate)},e}return a.prototype.render=function(){var t=re({"react-datepicker__month-year-dropdown":!0,"react-datepicker__month-year-dropdown--scrollable":this.props.scrollableMonthYearDropdown});return m.createElement(Zt,{className:t,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(w.Component),Rc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=Ee(t.props.minDate),r=Ee(t.props.maxDate),o=[];!Le(e,r);){var s=fr(e);o.push(m.createElement("option",{key:s,value:s},z(e,t.props.dateFormat,t.props.locale))),e=he(e,1)}return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:fr(Ee(t.props.date)),className:"react-datepicker__month-year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){var r=z(t.props.date,t.props.dateFormat,t.props.locale);return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-year-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-year-read-view--selected-month-year"},r))},t.renderDropdown=function(){return m.createElement(Nc,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown();var r=V(e);ge(t.props.date,r)&&ae(t.props.date,r)||t.props.onChange(r)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(w.Component),Yc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={height:null},t.scrollToTheSelectedTime=function(){requestAnimationFrame(function(){var e,r,o;t.list&&(t.list.scrollTop=(o=t.centerLi&&a.calcCenterPosition(t.props.monthRef?t.props.monthRef.clientHeight-((r=(e=t.header)===null||e===void 0?void 0:e.clientHeight)!==null&&r!==void 0?r:0):t.list.clientHeight,t.centerLi))!==null&&o!==void 0?o:0)})},t.handleClick=function(e){var r,o;(t.props.minTime||t.props.maxTime)&&nn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&rn(e,t.props)||(o=(r=t.props).onChange)===null||o===void 0||o.call(r,e)},t.isSelectedTime=function(e){return t.props.selected&&kc(t.props.selected,e)},t.isDisabledTime=function(e){return(t.props.minTime||t.props.maxTime)&&nn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&rn(e,t.props)},t.liClasses=function(e){var r,o=["react-datepicker__time-list-item",t.props.timeClassName?t.props.timeClassName(e):void 0];return t.isSelectedTime(e)&&o.push("react-datepicker__time-list-item--selected"),t.isDisabledTime(e)&&o.push("react-datepicker__time-list-item--disabled"),t.props.injectTimes&&(Ce(e)*3600+Se(e)*60+Re(e))%(((r=t.props.intervals)!==null&&r!==void 0?r:a.defaultProps.intervals)*60)!==0&&o.push("react-datepicker__time-list-item--injected"),o.join(" ")},t.handleOnKeyDown=function(e,r){var o,s;e.key===M.Space&&(e.preventDefault(),e.key=M.Enter),(e.key===M.ArrowUp||e.key===M.ArrowLeft)&&e.target instanceof HTMLElement&&e.target.previousSibling&&(e.preventDefault(),e.target.previousSibling instanceof HTMLElement&&e.target.previousSibling.focus()),(e.key===M.ArrowDown||e.key===M.ArrowRight)&&e.target instanceof HTMLElement&&e.target.nextSibling&&(e.preventDefault(),e.target.nextSibling instanceof HTMLElement&&e.target.nextSibling.focus()),e.key===M.Enter&&t.handleClick(r),(s=(o=t.props).handleOnKeyDown)===null||s===void 0||s.call(o,e)},t.renderTimes=function(){for(var e,r=[],o=typeof t.props.format=="string"?t.props.format:"p",s=(e=t.props.intervals)!==null&&e!==void 0?e:a.defaultProps.intervals,i=t.props.selected||t.props.openToDate||V(),c=Pt(i),l=t.props.injectTimes&&t.props.injectTimes.sort(function(g,D){return g.getTime()-D.getTime()}),u=60*bc(i),d=u/s,f=0;f=f?e.updateFocusOnPaginate(Math.abs(f-(r-p))):(l=(c=e.YEAR_REFS[r-p])===null||c===void 0?void 0:c.current)===null||l===void 0||l.focus())}},e.isSameDay=function(r,o){return A(r,o)},e.isCurrentYear=function(r){return r===L(V())},e.isRangeStart=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.startDate)},e.isRangeEnd=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.endDate)},e.isInRange=function(r){return kt(r,e.props.startDate,e.props.endDate)},e.isInSelectingRange=function(r){var o=e.props,s=o.selectsStart,i=o.selectsEnd,c=o.selectsRange,l=o.startDate,u=o.endDate;return!(s||i||c)||!e.selectingDate()?!1:s&&u?kt(r,e.selectingDate(),u):i&&l||c&&l&&!u?kt(r,l,e.selectingDate()):!1},e.isSelectingRangeStart=function(r){var o;if(!e.isInSelectingRange(r))return!1;var s=e.props,i=s.startDate,c=s.selectsStart,l=me(V(),r);return c?ge(l,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(l,i??null)},e.isSelectingRangeEnd=function(r){var o;if(!e.isInSelectingRange(r))return!1;var s=e.props,i=s.endDate,c=s.selectsEnd,l=s.selectsRange,u=me(V(),r);return c||l?ge(u,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(u,i??null)},e.isKeyboardSelected=function(r){if(!(e.props.date===void 0||e.props.selected==null||e.props.preSelection==null)){var o=e.props,s=o.minDate,i=o.maxDate,c=o.excludeDates,l=o.includeDates,u=o.filterDate,d=lt(me(e.props.date,r)),f=(s||i||c||l||u)&&Tt(r,e.props);return!e.props.disabledKeyboardNavigation&&!e.props.inline&&!A(d,lt(e.props.selected))&&A(d,lt(e.props.preSelection))&&!f}},e.isSelectedYear=function(r){var o=e.props,s=o.selectsMultiple,i=o.selected,c=o.selectedDates;return s?c==null?void 0:c.some(function(l){return r===L(l)}):!!i&&r===L(i)},e.onYearClick=function(r,o){var s=e.props.date;s!==void 0&&e.handleYearClick(lt(me(s,o)),r)},e.onYearKeyDown=function(r,o){var s,i,c=r.key,l=e.props,u=l.date,d=l.yearItemNumber,f=l.handleOnKeyDown;if(c!==M.Tab&&r.preventDefault(),!e.props.disabledKeyboardNavigation)switch(c){case M.Enter:if(e.props.selected==null)break;e.onYearClick(r,o),(i=(s=e.props).setPreSelection)===null||i===void 0||i.call(s,e.props.selected);break;case M.ArrowRight:if(e.props.preSelection==null)break;e.handleYearNavigation(o+1,_e(e.props.preSelection,1));break;case M.ArrowLeft:if(e.props.preSelection==null)break;e.handleYearNavigation(o-1,Je(e.props.preSelection,1));break;case M.ArrowUp:{if(u===void 0||d===void 0||e.props.preSelection==null)break;var p=Ne(u,d).startPeriod,h=mn,v=o-h;if(v=p&&oD){var g=d%h;o<=D&&o>D-g?h=g:h+=g,v=o+h}e.handleYearNavigation(v,_e(e.props.preSelection,h));break}}f&&f(r)},e.getYearClassNames=function(r){var o=e.props,s=o.date,i=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=o.filterDate,f=o.yearClassName;return re("react-datepicker__year-text","react-datepicker__year-".concat(r),s?f==null?void 0:f(me(s,r)):void 0,{"react-datepicker__year-text--selected":e.isSelectedYear(r),"react-datepicker__year-text--disabled":(i||c||l||u||d)&&Tt(r,e.props),"react-datepicker__year-text--keyboard-selected":e.isKeyboardSelected(r),"react-datepicker__year-text--range-start":e.isRangeStart(r),"react-datepicker__year-text--range-end":e.isRangeEnd(r),"react-datepicker__year-text--in-range":e.isInRange(r),"react-datepicker__year-text--in-selecting-range":e.isInSelectingRange(r),"react-datepicker__year-text--selecting-range-start":e.isSelectingRangeStart(r),"react-datepicker__year-text--selecting-range-end":e.isSelectingRangeEnd(r),"react-datepicker__year-text--today":e.isCurrentYear(r)})},e.getYearTabIndex=function(r){if(e.props.disabledKeyboardNavigation||e.props.preSelection==null)return"-1";var o=L(e.props.preSelection),s=Tt(r,e.props);return r===o&&!s?"0":"-1"},e.getYearContent=function(r){return e.props.renderYearContent?e.props.renderYearContent(r):r},e}return a.prototype.render=function(){var t=this,e=[],r=this.props,o=r.date,s=r.yearItemNumber,i=r.onYearMouseEnter,c=r.onYearMouseLeave;if(o===void 0)return null;for(var l=Ne(o,s),u=l.startPeriod,d=l.endPeriod,f=function(v){e.push(m.createElement("div",{ref:p.YEAR_REFS[v-u],onClick:function(g){t.onYearClick(g,v)},onKeyDown:function(g){ea(g)&&(g.preventDefault(),g.key=M.Enter),t.onYearKeyDown(g,v)},tabIndex:Number(p.getYearTabIndex(v)),className:p.getYearClassNames(v),onMouseEnter:p.props.usePointerEvent?void 0:function(g){return i(g,v)},onPointerEnter:p.props.usePointerEvent?function(g){return i(g,v)}:void 0,onMouseLeave:p.props.usePointerEvent?void 0:function(g){return c(g,v)},onPointerLeave:p.props.usePointerEvent?function(g){return c(g,v)}:void 0,key:v,"aria-current":p.isCurrentYear(v)?"date":void 0},p.getYearContent(v)))},p=this,h=u;h<=d;h++)f(h);return m.createElement("div",{className:"react-datepicker__year"},m.createElement("div",{className:"react-datepicker__year-wrapper",onMouseLeave:this.props.usePointerEvent?void 0:this.props.clearSelectingDate,onPointerLeave:this.props.usePointerEvent?this.props.clearSelectingDate:void 0},e))},a}(w.Component);function Fc(n,a,t,e){for(var r=[],o=0;o<2*a+1;o++){var s=n+a-o,i=!0;t&&(i=L(t)<=s),e&&i&&(i=L(e)>=s),i&&r.push(s)}return r}var Ic=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;e.renderOptions=function(){var i=e.props.year,c=e.state.yearsList.map(function(d){return m.createElement("div",{className:i===d?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:d,onClick:e.onChange.bind(e,d),"aria-selected":i===d?"true":void 0},i===d?m.createElement("span",{className:"react-datepicker__year-option--selected"},"✓"):"",d)}),l=e.props.minDate?L(e.props.minDate):null,u=e.props.maxDate?L(e.props.maxDate):null;return(!u||!e.state.yearsList.find(function(d){return d===u}))&&c.unshift(m.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:e.incrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),(!l||!e.state.yearsList.find(function(d){return d===l}))&&c.push(m.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:e.decrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),c},e.onChange=function(i){e.props.onChange(i)},e.handleClickOutside=function(){e.props.onCancel()},e.shiftYears=function(i){var c=e.state.yearsList.map(function(l){return l+i});e.setState({yearsList:c})},e.incrementYears=function(){return e.shiftYears(1)},e.decrementYears=function(){return e.shiftYears(-1)};var r=t.yearDropdownItemNumber,o=t.scrollableYearDropdown,s=r||(o?10:5);return e.state={yearsList:Fc(e.props.year,s,e.props.minDate,e.props.maxDate)},e.dropdownRef=w.createRef(),e}return a.prototype.componentDidMount=function(){var t=this.dropdownRef.current;if(t){var e=t.children?Array.from(t.children):null,r=e?e.find(function(o){return o.ariaSelected}):null;t.scrollTop=r&&r instanceof HTMLElement?r.offsetTop+(r.clientHeight-t.clientHeight)/2:(t.scrollHeight-t.clientHeight)/2}},a.prototype.render=function(){var t=re({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return m.createElement(Zt,{className:t,containerRef:this.dropdownRef,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(w.Component),Ac=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=t.props.minDate?L(t.props.minDate):1900,r=t.props.maxDate?L(t.props.maxDate):2100,o=[],s=e;s<=r;s++)o.push(m.createElement("option",{key:s,value:s},s));return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:t.props.year,className:"react-datepicker__year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__year-read-view",onClick:function(r){return t.toggleDropdown(r)}},m.createElement("span",{className:"react-datepicker__year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__year-read-view--selected-year"},t.props.year))},t.renderDropdown=function(){return m.createElement(Ic,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown(),e!==t.props.year&&t.props.onChange(e)},t.toggleDropdown=function(e){t.setState({dropdownVisible:!t.state.dropdownVisible},function(){t.props.adjustDateOnChange&&t.handleYearChange(t.props.date,e)})},t.handleYearChange=function(e,r){var o;(o=t.onSelect)===null||o===void 0||o.call(t,e,r),t.setOpen()},t.onSelect=function(e,r){var o,s;(s=(o=t.props).onSelect)===null||s===void 0||s.call(o,e,r)},t.setOpen=function(){var e,r;(r=(e=t.props).setOpen)===null||r===void 0||r.call(e,!0)},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(w.Component),Wc=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],Hc=function(n){var a=(n.className||"").split(/\s+/);return Wc.some(function(t){return a.indexOf(t)>=0})},jc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.monthContainer=void 0,e.handleClickOutside=function(r){e.props.onClickOutside(r)},e.setClickOutsideRef=function(){return e.containerRef.current},e.handleDropdownFocus=function(r){var o,s;Hc(r.target)&&((s=(o=e.props).onDropdownFocus)===null||s===void 0||s.call(o,r))},e.getDateInView=function(){var r=e.props,o=r.preSelection,s=r.selected,i=r.openToDate,c=Zn(e.props),l=Jn(e.props),u=V(),d=i||s||o;return d||(c&&Ve(u,c)?c:l&&Le(u,l)?l:u)},e.increaseMonth=function(){e.setState(function(r){var o=r.date;return{date:he(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.decreaseMonth=function(){e.setState(function(r){var o=r.date;return{date:je(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.handleDayClick=function(r,o,s){e.props.onSelect(r,o,s),e.props.setPreSelection&&e.props.setPreSelection(r)},e.handleDayMouseEnter=function(r){e.setState({selectingDate:r}),e.props.onDayMouseEnter&&e.props.onDayMouseEnter(r)},e.handleMonthMouseLeave=function(){e.setState({selectingDate:void 0}),e.props.onMonthMouseLeave&&e.props.onMonthMouseLeave()},e.handleYearMouseEnter=function(r,o){e.setState({selectingDate:me(V(),o)}),e.props.onYearMouseEnter&&e.props.onYearMouseEnter(r,o)},e.handleYearMouseLeave=function(r,o){e.props.onYearMouseLeave&&e.props.onYearMouseLeave(r,o)},e.handleYearChange=function(r){var o,s,i,c;(s=(o=e.props).onYearChange)===null||s===void 0||s.call(o,r),e.setState({isRenderAriaLiveMessage:!0}),e.props.adjustDateOnChange&&(e.props.onSelect(r),(c=(i=e.props).setOpen)===null||c===void 0||c.call(i,!0)),e.props.setPreSelection&&e.props.setPreSelection(r)},e.getEnabledPreSelectionDateForMonth=function(r){if(!le(r,e.props))return r;for(var o=Ee(r),s=cc(r),i=wa(s,o),c=null,l=0;l<=i;l++){var u=pe(o,l);if(!le(u,e.props)){c=u;break}}return c},e.handleMonthChange=function(r){var o,s,i,c=(o=e.getEnabledPreSelectionDateForMonth(r))!==null&&o!==void 0?o:r;e.handleCustomMonthChange(c),e.props.adjustDateOnChange&&(e.props.onSelect(c),(i=(s=e.props).setOpen)===null||i===void 0||i.call(s,!0)),e.props.setPreSelection&&e.props.setPreSelection(c)},e.handleCustomMonthChange=function(r){var o,s;(s=(o=e.props).onMonthChange)===null||s===void 0||s.call(o,r),e.setState({isRenderAriaLiveMessage:!0})},e.handleMonthYearChange=function(r){e.handleYearChange(r),e.handleMonthChange(r)},e.changeYear=function(r){e.setState(function(o){var s=o.date;return{date:me(s,Number(r))}},function(){return e.handleYearChange(e.state.date)})},e.changeMonth=function(r){e.setState(function(o){var s=o.date;return{date:ce(s,Number(r))}},function(){return e.handleMonthChange(e.state.date)})},e.changeMonthYear=function(r){e.setState(function(o){var s=o.date;return{date:me(ce(s,ne(r)),L(r))}},function(){return e.handleMonthYearChange(e.state.date)})},e.header=function(r){r===void 0&&(r=e.state.date);var o=Ye(r,e.props.locale,e.props.calendarStartDay),s=[];return e.props.showWeekNumbers&&s.push(m.createElement("div",{key:"W",className:"react-datepicker__day-name"},e.props.weekLabel||"#")),s.concat([0,1,2,3,4,5,6].map(function(i){var c=pe(o,i),l=e.formatWeekday(c,e.props.locale),u=e.props.weekDayClassName?e.props.weekDayClassName(c):void 0;return m.createElement("div",{key:i,"aria-label":z(c,"EEEE",e.props.locale),className:re("react-datepicker__day-name",u)},l)}))},e.formatWeekday=function(r,o){return e.props.formatWeekDay?lc(r,e.props.formatWeekDay,o):e.props.useWeekdaysShort?dc(r,o):uc(r,o)},e.decreaseYear=function(){e.setState(function(r){var o,s=r.date;return{date:Je(s,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.clearSelectingDate=function(){e.setState({selectingDate:void 0})},e.renderPreviousButton=function(){var r,o,s;if(!e.props.renderCustomHeader){var i=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?i-1:0,l=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,u=je(e.state.date,l),d;switch(!0){case e.props.showMonthYearPicker:d=sn(e.state.date,e.props);break;case e.props.showYearPicker:d=gc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:d=hc(e.state.date,e.props);break;default:d=an(u,e.props);break}if(!(!((s=e.props.forceShowMonthNavigation)!==null&&s!==void 0?s:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&d||e.props.showTimeSelectOnly)){var f=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--previous"],p=["react-datepicker__navigation","react-datepicker__navigation--previous"],h=e.decreaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(h=e.decreaseYear),d&&e.props.showDisabledMonthNavigation&&(p.push("react-datepicker__navigation--previous--disabled"),h=void 0);var v=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,g=e.props,D=g.previousMonthButtonLabel,_=D===void 0?a.defaultProps.previousMonthButtonLabel:D,y=g.previousYearButtonLabel,k=y===void 0?a.defaultProps.previousYearButtonLabel:y,T=e.props,O=T.previousMonthAriaLabel,S=O===void 0?typeof _=="string"?_:"Previous Month":O,x=T.previousYearAriaLabel,E=x===void 0?typeof k=="string"?k:"Previous Year":x;return m.createElement("button",{type:"button",className:p.join(" "),onClick:h,onKeyDown:e.props.handleOnKeyDown,"aria-label":v?E:S},m.createElement("span",{className:f.join(" ")},v?k:_))}}},e.increaseYear=function(){e.setState(function(r){var o,s=r.date;return{date:_e(s,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.renderNextButton=function(){var r;if(!e.props.renderCustomHeader){var o;switch(!0){case e.props.showMonthYearPicker:o=cn(e.state.date,e.props);break;case e.props.showYearPicker:o=vc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:o=mc(e.state.date,e.props);break;default:o=on(e.state.date,e.props);break}if(!(!((r=e.props.forceShowMonthNavigation)!==null&&r!==void 0?r:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&o||e.props.showTimeSelectOnly)){var s=["react-datepicker__navigation","react-datepicker__navigation--next"],i=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--next"];e.props.showTimeSelect&&s.push("react-datepicker__navigation--next--with-time"),e.props.todayButton&&s.push("react-datepicker__navigation--next--with-today-button");var c=e.increaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(c=e.increaseYear),o&&e.props.showDisabledMonthNavigation&&(s.push("react-datepicker__navigation--next--disabled"),c=void 0);var l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,u=e.props,d=u.nextMonthButtonLabel,f=d===void 0?a.defaultProps.nextMonthButtonLabel:d,p=u.nextYearButtonLabel,h=p===void 0?a.defaultProps.nextYearButtonLabel:p,v=e.props,g=v.nextMonthAriaLabel,D=g===void 0?typeof f=="string"?f:"Next Month":g,_=v.nextYearAriaLabel,y=_===void 0?typeof h=="string"?h:"Next Year":_;return m.createElement("button",{type:"button",className:s.join(" "),onClick:c,onKeyDown:e.props.handleOnKeyDown,"aria-label":l?y:D},m.createElement("span",{className:i.join(" ")},l?h:f))}}},e.renderCurrentMonth=function(r){r===void 0&&(r=e.state.date);var o=["react-datepicker__current-month"];return e.props.showYearDropdown&&o.push("react-datepicker__current-month--hasYearDropdown"),e.props.showMonthDropdown&&o.push("react-datepicker__current-month--hasMonthDropdown"),e.props.showMonthYearDropdown&&o.push("react-datepicker__current-month--hasMonthYearDropdown"),m.createElement("h2",{className:o.join(" ")},z(r,e.props.dateFormat,e.props.locale))},e.renderYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showYearDropdown||r))return m.createElement(Ac,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeYear,year:L(e.state.date)}))},e.renderMonthDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthDropdown||r))return m.createElement(Tc,W({},a.defaultProps,e.props,{month:ne(e.state.date),onChange:e.changeMonth}))},e.renderMonthYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthYearDropdown||r))return m.createElement(Rc,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeMonthYear}))},e.handleTodayButtonClick=function(r){e.props.onSelect(Jr(),r),e.props.setPreSelection&&e.props.setPreSelection(Jr())},e.renderTodayButton=function(){if(!(!e.props.todayButton||e.props.showTimeSelectOnly))return m.createElement("div",{className:"react-datepicker__today-button",onClick:e.handleTodayButtonClick},e.props.todayButton)},e.renderDefaultHeader=function(r){var o=r.monthDate,s=r.i;return m.createElement("div",{className:"react-datepicker__header ".concat(e.props.showTimeSelect?"react-datepicker__header--has-time-select":"")},e.renderCurrentMonth(o),m.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(e.props.dropdownMode),onFocus:e.handleDropdownFocus},e.renderMonthDropdown(s!==0),e.renderMonthYearDropdown(s!==0),e.renderYearDropdown(s!==0)),m.createElement("div",{className:"react-datepicker__day-names"},e.header(o)))},e.renderCustomHeader=function(r){var o,s,i=r.monthDate,c=r.i;if(e.props.showTimeSelect&&!e.state.monthContainer||e.props.showTimeSelectOnly)return null;var l=an(e.state.date,e.props),u=on(e.state.date,e.props),d=sn(e.state.date,e.props),f=cn(e.state.date,e.props),p=!e.props.showMonthYearPicker&&!e.props.showQuarterYearPicker&&!e.props.showYearPicker;return m.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:e.props.onDropdownFocus},(s=(o=e.props).renderCustomHeader)===null||s===void 0?void 0:s.call(o,W(W({},e.state),{customHeaderCount:c,monthDate:i,changeMonth:e.changeMonth,changeYear:e.changeYear,decreaseMonth:e.decreaseMonth,increaseMonth:e.increaseMonth,decreaseYear:e.decreaseYear,increaseYear:e.increaseYear,prevMonthButtonDisabled:l,nextMonthButtonDisabled:u,prevYearButtonDisabled:d,nextYearButtonDisabled:f})),p&&m.createElement("div",{className:"react-datepicker__day-names"},e.header(i)))},e.renderYearHeader=function(r){var o=r.monthDate,s=e.props,i=s.showYearPicker,c=s.yearItemNumber,l=c===void 0?a.defaultProps.yearItemNumber:c,u=Ne(o,l),d=u.startPeriod,f=u.endPeriod;return m.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},i?"".concat(d," - ").concat(f):L(o))},e.renderHeader=function(r){var o=r.monthDate,s=r.i,i=s===void 0?0:s,c={monthDate:o,i};switch(!0){case e.props.renderCustomHeader!==void 0:return e.renderCustomHeader(c);case(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker):return e.renderYearHeader(c);default:return e.renderDefaultHeader(c)}},e.renderMonths=function(){var r,o;if(!(e.props.showTimeSelectOnly||e.props.showYearPicker)){for(var s=[],i=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?i-1:0,l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker?_e(e.state.date,c):je(e.state.date,c),u=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,d=0;d0;s.push(m.createElement("div",{key:h,ref:function(D){e.monthContainer=D??void 0},className:"react-datepicker__month-container"},e.renderHeader({monthDate:p,i:d}),m.createElement(Ec,W({},a.defaultProps,e.props,{containerRef:e.containerRef,ariaLabelPrefix:e.props.monthAriaLabelPrefix,day:p,onDayClick:e.handleDayClick,handleOnKeyDown:e.props.handleOnDayKeyDown,handleOnMonthKeyDown:e.props.handleOnKeyDown,onDayMouseEnter:e.handleDayMouseEnter,onMouseLeave:e.handleMonthMouseLeave,orderInDisplay:d,selectingDate:e.state.selectingDate,monthShowsDuplicateDaysEnd:v,monthShowsDuplicateDaysStart:g}))))}return s}},e.renderYears=function(){if(!e.props.showTimeSelectOnly&&e.props.showYearPicker)return m.createElement("div",{className:"react-datepicker__year--container"},e.renderHeader({monthDate:e.state.date}),m.createElement(Lc,W({},a.defaultProps,e.props,{selectingDate:e.state.selectingDate,date:e.state.date,onDayClick:e.handleDayClick,clearSelectingDate:e.clearSelectingDate,onYearMouseEnter:e.handleYearMouseEnter,onYearMouseLeave:e.handleYearMouseLeave})))},e.renderTimeSection=function(){if(e.props.showTimeSelect&&(e.state.monthContainer||e.props.showTimeSelectOnly))return m.createElement(Yc,W({},a.defaultProps,e.props,{onChange:e.props.onTimeChange,format:e.props.timeFormat,intervals:e.props.timeIntervals,monthRef:e.state.monthContainer}))},e.renderInputTimeSection=function(){var r=e.props.selected?new Date(e.props.selected):void 0,o=r&&Jt(r)&&!!e.props.selected,s=o?"".concat(un(r.getHours()),":").concat(un(r.getMinutes())):"";if(e.props.showTimeInput)return m.createElement(xc,W({},a.defaultProps,e.props,{date:r,timeString:s,onChange:e.props.onTimeChange}))},e.renderAriaLiveRegion=function(){var r,o=Ne(e.state.date,(r=e.props.yearItemNumber)!==null&&r!==void 0?r:a.defaultProps.yearItemNumber),s=o.startPeriod,i=o.endPeriod,c;return e.props.showYearPicker?c="".concat(s," - ").concat(i):e.props.showMonthYearPicker||e.props.showQuarterYearPicker?c=L(e.state.date):c="".concat(Er(ne(e.state.date),e.props.locale)," ").concat(L(e.state.date)),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},e.state.isRenderAriaLiveMessage&&c)},e.renderChildren=function(){if(e.props.children)return m.createElement("div",{className:"react-datepicker__children-container"},e.props.children)},e.containerRef=w.createRef(),e.state={date:e.getDateInView(),selectingDate:void 0,monthContainer:void 0,isRenderAriaLiveMessage:!1},e}return Object.defineProperty(a,"defaultProps",{get:function(){return{monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousYearButtonLabel:"Previous Year",nextYearButtonLabel:"Next Year",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next Month",yearItemNumber:gt}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){var t=this;this.props.showTimeSelect&&(this.assignMonthContainer=function(){t.setState({monthContainer:t.monthContainer})}())},a.prototype.componentDidUpdate=function(t){var e=this;if(this.props.preSelection&&(!A(this.props.preSelection,t.preSelection)||this.props.monthSelectedIn!==t.monthSelectedIn)){var r=!ae(this.state.date,this.props.preSelection);this.setState({date:this.props.preSelection},function(){return r&&e.handleCustomMonthChange(e.state.date)})}else this.props.openToDate&&!A(this.props.openToDate,t.openToDate)&&this.setState({date:this.props.openToDate})},a.prototype.render=function(){var t=this.props.container||tc;return m.createElement(Zt,{onClickOutside:this.handleClickOutside,style:{display:"contents"},ignoreClass:this.props.outsideClickIgnoreClass},m.createElement("div",{style:{display:"contents"},ref:this.containerRef},m.createElement(t,{className:re("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly}),showTime:this.props.showTimeSelect||this.props.showTimeInput,showTimeSelectOnly:this.props.showTimeSelectOnly},this.renderAriaLiveRegion(),this.renderPreviousButton(),this.renderNextButton(),this.renderMonths(),this.renderYears(),this.renderTodayButton(),this.renderTimeSection(),this.renderInputTimeSection(),this.renderChildren())))},a}(w.Component),Bc=function(n){var a=n.icon,t=n.className,e=t===void 0?"":t,r=n.onClick,o="react-datepicker__calendar-icon";if(typeof a=="string")return m.createElement("i",{className:"".concat(o," ").concat(a," ").concat(e),"aria-hidden":"true",onClick:r});if(m.isValidElement(a)){var s=a;return m.cloneElement(s,{className:"".concat(s.props.className||""," ").concat(o," ").concat(e),onClick:function(i){typeof s.props.onClick=="function"&&s.props.onClick(i),typeof r=="function"&&r(i)}})}return m.createElement("svg",{className:"".concat(o," ").concat(e),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",onClick:r},m.createElement("path",{d:"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z"}))},ta=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.portalRoot=null,e.el=document.createElement("div"),e}return a.prototype.componentDidMount=function(){this.portalRoot=(this.props.portalHost||document).getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),(this.props.portalHost||document.body).appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)},a.prototype.componentWillUnmount=function(){this.portalRoot&&this.portalRoot.removeChild(this.el)},a.prototype.render=function(){return ia.createPortal(this.props.children,this.el)},a}(w.Component),Qc="[tabindex], a, button, input, select, textarea",Vc=function(n){return(n instanceof HTMLAnchorElement||!n.disabled)&&n.tabIndex!==-1},ra=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.getTabChildren=function(){var r;return Array.prototype.slice.call((r=e.tabLoopRef.current)===null||r===void 0?void 0:r.querySelectorAll(Qc),1,-1).filter(Vc)},e.handleFocusStart=function(){var r=e.getTabChildren();r&&r.length>1&&r[r.length-1].focus()},e.handleFocusEnd=function(){var r=e.getTabChildren();r&&r.length>1&&r[0].focus()},e.tabLoopRef=w.createRef(),e}return a.prototype.render=function(){var t;return((t=this.props.enableTabLoop)!==null&&t!==void 0?t:a.defaultProps.enableTabLoop)?m.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},m.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:0,onFocus:this.handleFocusStart}),this.props.children,m.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:0,onFocus:this.handleFocusEnd})):this.props.children},a.defaultProps={enableTabLoop:!0},a}(w.Component);function qc(n){var a=function(t){var e,r=typeof t.hidePopper=="boolean"?t.hidePopper:!0,o=w.useRef(null),s=ec(W({open:!r,whileElementsMounted:Ni,placement:t.popperPlacement,middleware:ye([ji({padding:15}),Hi(10),Bi({element:o})],(e=t.popperModifiers)!==null&&e!==void 0?e:[],!0)},t.popperProps)),i=W(W({},t),{hidePopper:r,popperProps:W(W({},s),{arrowRef:o})});return m.createElement(n,W({},i))};return a}var Kc=function(n){te(a,n);function a(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(a,"defaultProps",{get:function(){return{hidePopper:!0}},enumerable:!1,configurable:!0}),a.prototype.render=function(){var t=this.props,e=t.className,r=t.wrapperClassName,o=t.hidePopper,s=o===void 0?a.defaultProps.hidePopper:o,i=t.popperComponent,c=t.targetComponent,l=t.enableTabLoop,u=t.popperOnKeyDown,d=t.portalId,f=t.portalHost,p=t.popperProps,h=t.showArrow,v=void 0;if(!s){var g=re("react-datepicker-popper",e);v=m.createElement(ra,{enableTabLoop:l},m.createElement("div",{ref:p.refs.setFloating,style:p.floatingStyles,className:g,"data-placement":p.placement,onKeyDown:u},i,h&&m.createElement($i,{ref:p.arrowRef,context:p.context,fill:"currentColor",strokeWidth:1,height:8,width:16,style:{transform:"translateY(-1px)"},className:"react-datepicker__triangle"})))}this.props.popperContainer&&(v=w.createElement(this.props.popperContainer,{},v)),d&&!s&&(v=m.createElement(ta,{portalId:d,portalHost:f},v));var D=re("react-datepicker-wrapper",r);return m.createElement(m.Fragment,null,m.createElement("div",{ref:p.refs.setReference,className:D},c),v)},a}(w.Component),$c=qc(Kc),gn="react-datepicker-ignore-onclickoutside";function Uc(n,a){return n&&a?ne(n)!==ne(a)||L(n)!==L(a):n!==a}var ir="Date input not valid.",zc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.calendar=null,e.input=null,e.getPreSelection=function(){return e.props.openToDate?e.props.openToDate:e.props.selectsEnd&&e.props.startDate?e.props.startDate:e.props.selectsStart&&e.props.endDate?e.props.endDate:V()},e.modifyHolidays=function(){var r;return(r=e.props.holidays)===null||r===void 0?void 0:r.reduce(function(o,s){var i=new Date(s.date);return Jt(i)?ye(ye([],o,!0),[W(W({},s),{date:i})],!1):o},[])},e.calcInitialState=function(){var r,o=e.getPreSelection(),s=Zn(e.props),i=Jn(e.props),c=s&&Ve(o,Pt(s))?s:i&&Le(o,en(i))?i:o;return{open:e.props.startOpen||!1,preventFocus:!1,inputValue:null,preSelection:(r=e.props.selectsRange?e.props.startDate:e.props.selected)!==null&&r!==void 0?r:c,highlightDates:ln(e.props.highlightDates),focused:!1,shouldFocusDayInline:!1,isRenderAriaLiveMessage:!1,wasHidden:!1}},e.resetHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!1}))},e.setHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!0}))},e.setHiddenStateOnVisibilityHidden=function(){document.visibilityState==="hidden"&&e.setHiddenStatus()},e.clearPreventFocusTimeout=function(){e.preventFocusTimeout&&clearTimeout(e.preventFocusTimeout)},e.setFocus=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.focus)===null||o===void 0||o.call(r,{preventScroll:!0})},e.setBlur=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.blur)===null||o===void 0||o.call(r),e.cancelFocusInput()},e.deferBlur=function(){requestAnimationFrame(function(){e.setBlur()})},e.setOpen=function(r,o){o===void 0&&(o=!1),e.setState({open:r,preSelection:r&&e.state.open?e.state.preSelection:e.calcInitialState().preSelection,lastPreSelectChange:cr},function(){r||e.setState(function(s){return{focused:o?s.focused:!1}},function(){!o&&e.deferBlur(),e.setState({inputValue:null})})})},e.inputOk=function(){return Me(e.state.preSelection)},e.isCalendarOpen=function(){return e.props.open===void 0?e.state.open&&!e.props.disabled&&!e.props.readOnly:e.props.open},e.handleFocus=function(r){var o,s,i=e.state.wasHidden,c=i?e.state.open:!0;i&&e.resetHiddenStatus(),e.state.preventFocus||((s=(o=e.props).onFocus)===null||s===void 0||s.call(o,r),c&&!e.props.preventOpenOnFocus&&!e.props.readOnly&&e.setOpen(!0)),e.setState({focused:!0})},e.sendFocusBackToInput=function(){e.preventFocusTimeout&&e.clearPreventFocusTimeout(),e.setState({preventFocus:!0},function(){e.preventFocusTimeout=setTimeout(function(){e.setFocus(),e.setState({preventFocus:!1})})})},e.cancelFocusInput=function(){clearTimeout(e.inputFocusTimeout),e.inputFocusTimeout=void 0},e.deferFocusInput=function(){e.cancelFocusInput(),e.inputFocusTimeout=setTimeout(function(){return e.setFocus()},1)},e.handleDropdownFocus=function(){e.cancelFocusInput()},e.handleBlur=function(r){var o,s;(!e.state.open||e.props.withPortal||e.props.showTimeInput)&&((s=(o=e.props).onBlur)===null||s===void 0||s.call(o,r)),e.state.open&&e.props.open===!1&&e.setOpen(!1),e.setState({focused:!1})},e.handleCalendarClickOutside=function(r){var o,s;e.props.inline||e.setOpen(!1),(s=(o=e.props).onClickOutside)===null||s===void 0||s.call(o,r),e.props.withPortal&&r.preventDefault()},e.handleChange=function(){for(var r,o,s,i,c,l=[],u=0;u=F){fe=N;break}f&&fep&&(Y=M.ArrowLeft,fe=le(p,e.props)?x(Y,fe):p),le(fe,e.props)?((Y===M.PageUp||Y===M.Home)&&(Y=M.ArrowRight),(Y===M.PageDown||Y===M.End)&&(Y=M.ArrowLeft),fe=x(Y,fe)):ee=!0,de++}return fe};if(T===M.Enter){r.preventDefault(),e.handleSelect(S,r),!g&&e.setPreSelection(S);return}else if(T===M.Escape){r.preventDefault(),e.setOpen(!1),e.inputOk()||(c=(i=e.props).onInputError)===null||c===void 0||c.call(i,{code:1,msg:ir});return}var R=null;switch(T){case M.ArrowLeft:case M.ArrowRight:case M.ArrowUp:case M.ArrowDown:case M.PageUp:case M.PageDown:case M.Home:case M.End:R=E(T,S);break}if(!R){(u=(l=e.props).onInputError)===null||u===void 0||u.call(l,{code:1,msg:ir});return}if(r.preventDefault(),e.setState({lastPreSelectChange:cr}),y&&e.setSelected(R),e.setPreSelection(R),k){var B=ne(S),I=ne(R),U=L(S),Q=L(R);B!==I||U!==Q?e.setState({shouldFocusDayInline:!0}):e.setState({shouldFocusDayInline:!1})}}},e.onPopperKeyDown=function(r){var o=r.key;o===M.Escape&&(r.preventDefault(),e.sendFocusBackToInput(),e.setOpen(!1))},e.onClearClick=function(r){r&&r.preventDefault&&r.preventDefault(),e.sendFocusBackToInput();var o=e.props,s=o.selectsRange,i=o.onChange;s?i==null||i([null,null],r):i==null||i(null,r),e.setState({inputValue:null})},e.clear=function(){e.onClearClick()},e.onScroll=function(r){typeof e.props.closeOnScroll=="boolean"&&e.props.closeOnScroll?(r.target===document||r.target===document.documentElement||r.target===document.body)&&e.setOpen(!1):typeof e.props.closeOnScroll=="function"&&e.props.closeOnScroll(r)&&e.setOpen(!1)},e.renderCalendar=function(){var r,o;return!e.props.inline&&!e.isCalendarOpen()?null:m.createElement(jc,W({showMonthYearDropdown:void 0,ref:function(s){e.calendar=s}},e.props,e.state,{setOpen:e.setOpen,dateFormat:(r=e.props.dateFormatCalendar)!==null&&r!==void 0?r:a.defaultProps.dateFormatCalendar,onSelect:e.handleSelect,onClickOutside:e.handleCalendarClickOutside,holidays:yc(e.modifyHolidays()),outsideClickIgnoreClass:gn,onDropdownFocus:e.handleDropdownFocus,onTimeChange:e.handleTimeChange,className:e.props.calendarClassName,container:e.props.calendarContainer,handleOnKeyDown:e.props.onKeyDown,handleOnDayKeyDown:e.onDayKeyDown,setPreSelection:e.setPreSelection,dropdownMode:(o=e.props.dropdownMode)!==null&&o!==void 0?o:a.defaultProps.dropdownMode}),e.props.children)},e.renderAriaLiveRegion=function(){var r=e.props,o=r.dateFormat,s=o===void 0?a.defaultProps.dateFormat:o,i=r.locale,c=e.props.showTimeInput||e.props.showTimeSelect,l=c?"PPPPp":"PPPP",u;return e.props.selectsRange?u="Selected start date: ".concat(ie(e.props.startDate,{dateFormat:l,locale:i}),". ").concat(e.props.endDate?"End date: "+ie(e.props.endDate,{dateFormat:l,locale:i}):""):e.props.showTimeSelectOnly?u="Selected time: ".concat(ie(e.props.selected,{dateFormat:s,locale:i})):e.props.showYearPicker?u="Selected year: ".concat(ie(e.props.selected,{dateFormat:"yyyy",locale:i})):e.props.showMonthYearPicker?u="Selected month: ".concat(ie(e.props.selected,{dateFormat:"MMMM yyyy",locale:i})):e.props.showQuarterYearPicker?u="Selected quarter: ".concat(ie(e.props.selected,{dateFormat:"yyyy, QQQ",locale:i})):u="Selected date: ".concat(ie(e.props.selected,{dateFormat:l,locale:i})),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},u)},e.renderDateInput=function(){var r,o,s,i=re(e.props.className,(r={},r[gn]=e.state.open,r)),c=e.props.customInput||m.createElement("input",{type:"text"}),l=e.props.customInputRef||"ref",u=e.props,d=u.dateFormat,f=d===void 0?a.defaultProps.dateFormat:d,p=u.locale,h=typeof e.props.value=="string"?e.props.value:typeof e.state.inputValue=="string"?e.state.inputValue:e.props.selectsRange?nc(e.props.startDate,e.props.endDate,{dateFormat:f,locale:p}):e.props.selectsMultiple?ac((s=e.props.selectedDates)!==null&&s!==void 0?s:[],{dateFormat:f,locale:p}):ie(e.props.selected,{dateFormat:f,locale:p});return w.cloneElement(c,(o={},o[l]=function(v){e.input=v},o.value=h,o.onBlur=e.handleBlur,o.onChange=e.handleChange,o.onClick=e.onInputClick,o.onFocus=e.handleFocus,o.onKeyDown=e.onInputKeyDown,o.id=e.props.id,o.name=e.props.name,o.form=e.props.form,o.autoFocus=e.props.autoFocus,o.placeholder=e.props.placeholderText,o.disabled=e.props.disabled,o.autoComplete=e.props.autoComplete,o.className=re(c.props.className,i),o.title=e.props.title,o.readOnly=e.props.readOnly,o.required=e.props.required,o.tabIndex=e.props.tabIndex,o["aria-describedby"]=e.props.ariaDescribedBy,o["aria-invalid"]=e.props.ariaInvalid,o["aria-labelledby"]=e.props.ariaLabelledBy,o["aria-required"]=e.props.ariaRequired,o))},e.renderClearButton=function(){var r=e.props,o=r.isClearable,s=r.disabled,i=r.selected,c=r.startDate,l=r.endDate,u=r.clearButtonTitle,d=r.clearButtonClassName,f=d===void 0?"":d,p=r.ariaLabelClose,h=p===void 0?"Close":p,v=r.selectedDates,g=r.readOnly;return o&&!g&&(i!=null||c!=null||l!=null||v!=null&&v.length)?m.createElement("button",{type:"button",className:re("react-datepicker__close-icon",f,{"react-datepicker__close-icon--disabled":s}),disabled:s,"aria-label":h,onClick:e.onClearClick,title:u,tabIndex:-1}):null},e.state=e.calcInitialState(),e.preventFocusTimeout=void 0,e}return Object.defineProperty(a,"defaultProps",{get:function(){return{allowSameDay:!1,dateFormat:"MM/dd/yyyy",dateFormatCalendar:"LLLL yyyy",disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",preventOpenOnFocus:!1,monthsShown:1,readOnly:!1,withPortal:!1,selectsDisabledDaysInRange:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showTwoColumnMonthYearPicker:!1,showFourColumnMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,showWeekPicker:!1,strictParsing:!1,swapRange:!1,timeIntervals:30,timeCaption:"Time",previousMonthAriaLabel:"Previous Month",previousMonthButtonLabel:"Previous Month",nextMonthAriaLabel:"Next Month",nextMonthButtonLabel:"Next Month",previousYearAriaLabel:"Previous Year",previousYearButtonLabel:"Previous Year",nextYearAriaLabel:"Next Year",nextYearButtonLabel:"Next Year",timeInputLabel:"Time",enableTabLoop:!0,yearItemNumber:gt,focusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null,calendarStartDay:void 0,toggleCalendarOnIconClick:!1,usePointerEvent:!1}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){window.addEventListener("scroll",this.onScroll,!0),document.addEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.componentDidUpdate=function(t,e){var r,o,s,i;t.inline&&Uc(t.selected,this.props.selected)&&this.setPreSelection(this.props.selected),this.state.monthSelectedIn!==void 0&&t.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),t.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:ln(this.props.highlightDates)}),!e.focused&&!We(t.selected,this.props.selected)&&this.setState({inputValue:null}),e.open!==this.state.open&&(e.open===!1&&this.state.open===!0&&((o=(r=this.props).onCalendarOpen)===null||o===void 0||o.call(r)),e.open===!0&&this.state.open===!1&&((i=(s=this.props).onCalendarClose)===null||i===void 0||i.call(s)))},a.prototype.componentWillUnmount=function(){this.clearPreventFocusTimeout(),window.removeEventListener("scroll",this.onScroll,!0),document.removeEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.renderInputContainer=function(){var t=this.props,e=t.showIcon,r=t.icon,o=t.calendarIconClassname,s=t.calendarIconClassName,i=t.toggleCalendarOnIconClick,c=this.state.open;return o&&console.warn("calendarIconClassname props is deprecated. should use calendarIconClassName props."),m.createElement("div",{className:"react-datepicker__input-container".concat(e?" react-datepicker__view-calendar-icon":"")},e&&m.createElement(Bc,W({icon:r,className:re(s,!s&&o,c&&"react-datepicker-ignore-onclickoutside")},i?{onClick:this.toggleCalendar}:null)),this.state.isRenderAriaLiveMessage&&this.renderAriaLiveRegion(),this.renderDateInput(),this.renderClearButton())},a.prototype.render=function(){var t=this.renderCalendar();if(this.props.inline)return t;if(this.props.withPortal){var e=this.state.open?m.createElement(ra,{enableTabLoop:this.props.enableTabLoop},m.createElement("div",{className:"react-datepicker__portal",tabIndex:-1,onKeyDown:this.onPortalKeyDown},t)):null;return this.state.open&&this.props.portalId&&(e=m.createElement(ta,W({portalId:this.props.portalId},this.props),e)),m.createElement("div",null,this.renderInputContainer(),e)}return m.createElement($c,W({},this.props,{className:this.props.popperClassName,hidePopper:!this.isCalendarOpen(),targetComponent:this.renderInputContainer(),popperComponent:t,popperOnKeyDown:this.onPopperKeyDown,showArrow:this.props.showPopperArrow}))},a}(w.Component),Gc="input",cr="navigate";const Xc=H.div` +*/var hr=function(a,t){return hr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])},hr(a,t)};function te(n,a){if(typeof a!="function"&&a!==null)throw new TypeError("Class extends value "+String(a)+" is not a constructor or null");hr(n,a);function t(){this.constructor=n}n.prototype=a===null?Object.create(a):(t.prototype=a.prototype,new t)}var W=function(){return W=Object.assign||function(t){for(var e,r=1,o=arguments.length;r0?t[0]:t;return n&&z(n,r,e)||""}var $n=" - ";function tc(n,a,t){if(!n)return"";var e=ie(n,t),r=a?ie(a,t):"";return"".concat(e).concat($n).concat(r)}function rc(n,a){if(!(n!=null&&n.length))return"";var t=n[0]?ie(n[0],a):"";if(n.length===1)return t;if(n.length===2&&n[1]){var e=ie(n[1],a);return"".concat(t,", ").concat(e)}var r=n.length-1;return"".concat(t," (+").concat(r,")")}function ar(n,a){var t=a.hour,e=t===void 0?0:t,r=a.minute,o=r===void 0?0:r,s=a.second,i=s===void 0?0:s;return _t(Mt(Ct(n,i),o),e)}function nc(n){return gr(n)}function ac(n,a){return z(n,"ddd",a)}function Et(n){return Be(n)}function Re(n,a,t){var e=rt(a||Cr());return Ee(n,{locale:e,weekStartsOn:t})}function Se(n){return Mn(n)}function ct(n){return Kt(n)}function Xr(n){return lr(n)}function Zr(){return Be(V())}function Jr(n){return xn(n)}function oc(n){return va(n)}function sc(n){return _n(n)}function ge(n,a){return n&&a?gs(n,a):!n&&!a}function ae(n,a){return n&&a?hs(n,a):!n&&!a}function Qt(n,a){return n&&a?ms(n,a):!n&&!a}function A(n,a){return n&&a?ma(n,a):!n&&!a}function Ae(n,a){return n&&a?vo(n,a):!n&&!a}function lt(n,a,t){var e,r=Be(a),o=xn(t);try{e=ut(n,{start:r,end:o})}catch{e=!1}return e}function Cr(){var n=Un();return n.__localeId__}function rt(n){if(typeof n=="string"){var a=Un();return a.__localeData__?a.__localeData__[n]:void 0}else return n}function ic(n,a,t){return a(z(n,"EEEE",t))}function cc(n,a){return z(n,"EEEEEE",a)}function lc(n,a){return z(n,"EEE",a)}function Sr(n,a){return z(ce(V(),n),"LLLL",a)}function zn(n,a){return z(ce(V(),n),"LLL",a)}function uc(n,a){return z(Ue(V(),n),"QQQ",a)}function le(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.excludeDateIntervals,i=t.includeDates,c=t.includeDateIntervals,l=t.filterDate;return gt(n,{minDate:e,maxDate:r})||o&&o.some(function(u){return u instanceof Date?A(n,u):A(n,u.date)})||s&&s.some(function(u){var d=u.start,f=u.end;return ut(n,{start:d,end:f})})||i&&!i.some(function(u){return A(n,u)})||c&&!c.some(function(u){var d=u.start,f=u.end;return ut(n,{start:d,end:f})})||l&&!l(V(n))||!1}function Er(n,a){var t=a===void 0?{}:a,e=t.excludeDates,r=t.excludeDateIntervals;return r&&r.length>0?r.some(function(o){var s=o.start,i=o.end;return ut(n,{start:s,end:i})}):e&&e.some(function(o){var s;return o instanceof Date?A(n,o):A(n,(s=o.date)!==null&&s!==void 0?s:new Date)})||!1}function Gn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates,i=t.filterDate;return gt(n,{minDate:e?Mn(e):void 0,maxDate:r?_n(r):void 0})||(o==null?void 0:o.some(function(c){return ae(n,c instanceof Date?c:c.date)}))||s&&!s.some(function(c){return ae(n,c)})||i&&!i(V(n))||!1}function yt(n,a,t,e){var r=L(n),o=ne(n),s=L(a),i=ne(a),c=L(e);return r===s&&r===c?o<=t&&t<=i:r=t||cr:!1}function dc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates;return gt(n,{minDate:e,maxDate:r})||o&&o.some(function(i){return ae(i instanceof Date?i:i.date,n)})||s&&!s.some(function(i){return ae(i,n)})||!1}function bt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates,i=t.filterDate;return gt(n,{minDate:e,maxDate:r})||(o==null?void 0:o.some(function(c){return Qt(n,c instanceof Date?c:c.date)}))||s&&!s.some(function(c){return Qt(n,c)})||i&&!i(V(n))||!1}function Dt(n,a,t){if(!a||!t||!Rt(a)||!Rt(t))return!1;var e=L(a),r=L(t);return e<=n&&r>=n}function Pt(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.maxDate,o=t.excludeDates,s=t.includeDates,i=t.filterDate,c=new Date(n,0,1);return gt(c,{minDate:e?Kt(e):void 0,maxDate:r?Cn(r):void 0})||(o==null?void 0:o.some(function(l){return ge(c,l instanceof Date?l:l.date)}))||s&&!s.some(function(l){return ge(c,l)})||i&&!i(V(c))||!1}function kt(n,a,t,e){var r=L(n),o=We(n),s=L(a),i=We(a),c=L(e);return r===s&&r===c?o<=t&&t<=i:r=t||cr:!1}function gt(n,a){var t,e=a===void 0?{}:a,r=e.minDate,o=e.maxDate;return(t=r&&Xe(n,r)<0||o&&Xe(n,o)>0)!==null&&t!==void 0?t:!1}function en(n,a){return a.some(function(t){return Me(t)===Me(n)&&Ce(t)===Ce(n)&&Ne(t)===Ne(n)})}function tn(n,a){var t=a===void 0?{}:a,e=t.excludeTimes,r=t.includeTimes,o=t.filterTime;return e&&en(n,e)||r&&!en(n,r)||o&&!o(n)||!1}function rn(n,a){var t=a.minTime,e=a.maxTime;if(!t||!e)throw new Error("Both minTime and maxTime props required");var r=V();r=_t(r,Me(n)),r=Mt(r,Ce(n)),r=Ct(r,Ne(n));var o=V();o=_t(o,Me(t)),o=Mt(o,Ce(t)),o=Ct(o,Ne(t));var s=V();s=_t(s,Me(e)),s=Mt(s,Ce(e)),s=Ct(s,Ne(e));var i;try{i=!ut(r,{start:o,end:s})}catch{i=!1}return i}function nn(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=He(n,1);return e&&Yt(e,o)>0||r&&r.every(function(s){return Yt(s,o)>0})||!1}function an(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=he(n,1);return e&&Yt(o,e)>0||r&&r.every(function(s){return Yt(o,s)>0})||!1}function fc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=Kt(n),s=Ln(o);return e&&Lt(e,s)>0||r&&r.every(function(i){return Lt(i,s)>0})||!1}function pc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=Cn(n),s=mr(o,1);return e&&Lt(s,e)>0||r&&r.every(function(i){return Lt(s,i)>0})||!1}function on(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.includeDates,o=Ze(n,1);return e&&Ft(e,o)>0||r&&r.every(function(s){return Ft(s,o)>0})||!1}function hc(n,a){var t=a===void 0?{}:a,e=t.minDate,r=t.yearItemNumber,o=r===void 0?mt:r,s=ct(Ze(n,o)),i=Oe(s,o).endPeriod,c=e&&L(e);return c&&c>i||!1}function sn(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.includeDates,o=xe(n,1);return e&&Ft(o,e)>0||r&&r.every(function(s){return Ft(o,s)>0})||!1}function mc(n,a){var t=a===void 0?{}:a,e=t.maxDate,r=t.yearItemNumber,o=r===void 0?mt:r,s=xe(n,o),i=Oe(s,o).startPeriod,c=e&&L(e);return c&&c=0});return Nr(e)}else return t?Nr(t):a}function Zn(n){var a=n.maxDate,t=n.includeDates;if(t&&a){var e=t.filter(function(r){return Xe(r,a)<=0});return Or(e)}else return t?Or(t):a}function cn(n,a){var t;n===void 0&&(n=[]),a===void 0&&(a="react-datepicker__day--highlighted");for(var e=new Map,r=0,o=n.length;r=Mc,p=!r&&!t.isWeekInMonth(i);if(f||p)if(t.props.peekNextMonth)s=!0;else break}return e},t.onMonthClick=function(e,r){var o=t.isMonthDisabledForLabelDate(r),s=o.isDisabled,i=o.labelDate;s||t.handleDayClick(Se(i),e)},t.onMonthMouseEnter=function(e){var r=t.isMonthDisabledForLabelDate(e),o=r.isDisabled,s=r.labelDate;o||t.handleDayMouseEnter(Se(s))},t.handleMonthNavigation=function(e,r){var o,s,i,c;(s=(o=t.props).setPreSelection)===null||s===void 0||s.call(o,r),(c=(i=t.MONTH_REFS[e])===null||i===void 0?void 0:i.current)===null||c===void 0||c.focus()},t.handleKeyboardNavigation=function(e,r,o){var s,i=t.props,c=i.selected,l=i.preSelection,u=i.setPreSelection,d=i.minDate,f=i.maxDate,p=i.showFourColumnMonthYearPicker,h=i.showTwoColumnMonthYearPicker;if(l){var v=pn(p,h),g=t.getVerticalOffset(v),b=(s=or[v])===null||s===void 0?void 0:s.grid,_=function(S,x,E){var R,B,I=x,$=E;switch(S){case M.ArrowRight:I=he(x,xt),$=E===11?0:E+xt;break;case M.ArrowLeft:I=He(x,xt),$=E===0?11:E-xt;break;case M.ArrowUp:I=He(x,g),$=!((R=b==null?void 0:b[0])===null||R===void 0)&&R.includes(E)?E+12-g:E-g;break;case M.ArrowDown:I=he(x,g),$=!((B=b==null?void 0:b[b.length-1])===null||B===void 0)&&B.includes(E)?E-12+g:E+g;break}return{newCalculatedDate:I,newCalculatedMonth:$}},y=function(S,x,E){for(var R=40,B=S,I=!1,$=0,Q=_(B,x,E),q=Q.newCalculatedDate,N=Q.newCalculatedMonth;!I;){if($>=R){q=x,N=E;break}if(d&&qf){B=M.ArrowLeft;var F=_(B,q,N);q=F.newCalculatedDate,N=F.newCalculatedMonth}if(dc(q,t.props)){var F=_(B,q,N);q=F.newCalculatedDate,N=F.newCalculatedMonth}else I=!0;$++}return{newCalculatedDate:q,newCalculatedMonth:N}};if(r===M.Enter){t.isMonthDisabled(o)||(t.onMonthClick(e,o),u==null||u(c));return}var k=y(r,l,o),T=k.newCalculatedDate,O=k.newCalculatedMonth;switch(r){case M.ArrowRight:case M.ArrowLeft:case M.ArrowUp:case M.ArrowDown:t.handleMonthNavigation(O,T);break}}},t.getVerticalOffset=function(e){var r,o;return(o=(r=or[e])===null||r===void 0?void 0:r.verticalNavigationOffset)!==null&&o!==void 0?o:0},t.onMonthKeyDown=function(e,r){var o=t.props,s=o.disabledKeyboardNavigation,i=o.handleOnMonthKeyDown,c=e.key;c!==M.Tab&&e.preventDefault(),s||t.handleKeyboardNavigation(e,c,r),i&&i(e)},t.onQuarterClick=function(e,r){var o=Ue(t.props.day,r);bt(o,t.props)||t.handleDayClick(Xr(o),e)},t.onQuarterMouseEnter=function(e){var r=Ue(t.props.day,e);bt(r,t.props)||t.handleDayMouseEnter(Xr(r))},t.handleQuarterNavigation=function(e,r){var o,s,i,c;t.isDisabled(r)||t.isExcluded(r)||((s=(o=t.props).setPreSelection)===null||s===void 0||s.call(o,r),(c=(i=t.QUARTER_REFS[e-1])===null||i===void 0?void 0:i.current)===null||c===void 0||c.focus())},t.onQuarterKeyDown=function(e,r){var o,s,i=e.key;if(!t.props.disabledKeyboardNavigation)switch(i){case M.Enter:t.onQuarterClick(e,r),(s=(o=t.props).setPreSelection)===null||s===void 0||s.call(o,t.props.selected);break;case M.ArrowRight:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===4?1:r+1,mr(t.props.preSelection,1));break;case M.ArrowLeft:if(!t.props.preSelection)break;t.handleQuarterNavigation(r===1?4:r-1,Ln(t.props.preSelection));break}},t.isMonthDisabledForLabelDate=function(e){var r,o=t.props,s=o.day,i=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=ce(s,e);return{isDisabled:(r=(i||c||l||u)&&Gn(d,t.props))!==null&&r!==void 0?r:!1,labelDate:d}},t.isMonthDisabled=function(e){var r=t.isMonthDisabledForLabelDate(e).isDisabled;return r},t.getMonthClassNames=function(e){var r=t.props,o=r.day,s=r.startDate,i=r.endDate,c=r.preSelection,l=r.monthClassName,u=l?l(ce(o,e)):void 0,d=t.getSelection();return re("react-datepicker__month-text","react-datepicker__month-".concat(e),u,{"react-datepicker__month-text--disabled":t.isMonthDisabled(e),"react-datepicker__month-text--selected":d?t.isSelectMonthInList(o,e,d):void 0,"react-datepicker__month-text--keyboard-selected":!t.props.disabledKeyboardNavigation&&c&&t.isSelectedMonth(o,e,c)&&!t.isMonthSelected()&&!t.isMonthDisabled(e),"react-datepicker__month-text--in-selecting-range":t.isInSelectingRangeMonth(e),"react-datepicker__month-text--in-range":s&&i?yt(s,i,e,o):void 0,"react-datepicker__month-text--range-start":t.isRangeStartMonth(e),"react-datepicker__month-text--range-end":t.isRangeEndMonth(e),"react-datepicker__month-text--selecting-range-start":t.isSelectingMonthRangeStart(e),"react-datepicker__month-text--selecting-range-end":t.isSelectingMonthRangeEnd(e),"react-datepicker__month-text--today":t.isCurrentMonth(o,e)})},t.getTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=ne(t.props.preSelection),o=t.isMonthDisabledForLabelDate(r).isDisabled,s=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return s},t.getQuarterTabIndex=function(e){if(t.props.preSelection==null)return"-1";var r=We(t.props.preSelection),o=bt(t.props.day,t.props),s=e===r&&!(o||t.props.disabledKeyboardNavigation)?"0":"-1";return s},t.getAriaLabel=function(e){var r=t.props,o=r.chooseDayAriaLabelPrefix,s=o===void 0?"Choose":o,i=r.disabledDayAriaLabelPrefix,c=i===void 0?"Not available":i,l=r.day,u=r.locale,d=ce(l,e),f=t.isDisabled(d)||t.isExcluded(d)?c:s;return"".concat(f," ").concat(z(d,"MMMM yyyy",u))},t.getQuarterClassNames=function(e){var r=t.props,o=r.day,s=r.startDate,i=r.endDate,c=r.selected,l=r.minDate,u=r.maxDate,d=r.excludeDates,f=r.includeDates,p=r.filterDate,h=r.preSelection,v=r.disabledKeyboardNavigation,g=(l||u||d||f||p)&&bt(Ue(o,e),t.props);return re("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter-text--disabled":g,"react-datepicker__quarter-text--selected":c?t.isSelectedQuarter(o,e,c):void 0,"react-datepicker__quarter-text--keyboard-selected":!v&&h&&t.isSelectedQuarter(o,e,h)&&!g,"react-datepicker__quarter-text--in-selecting-range":t.isInSelectingRangeQuarter(e),"react-datepicker__quarter-text--in-range":s&&i?kt(s,i,e,o):void 0,"react-datepicker__quarter-text--range-start":t.isRangeStartQuarter(e),"react-datepicker__quarter-text--range-end":t.isRangeEndQuarter(e),"react-datepicker__quarter-text--today":t.isCurrentQuarter(o,e)})},t.getMonthContent=function(e){var r=t.props,o=r.showFullMonthYearPicker,s=r.renderMonthContent,i=r.locale,c=r.day,l=zn(e,i),u=Sr(e,i);return s?s(e,l,u,c):o?u:l},t.getQuarterContent=function(e){var r,o=t.props,s=o.renderQuarterContent,i=o.locale,c=uc(e,i);return(r=s==null?void 0:s(e,c))!==null&&r!==void 0?r:c},t.renderMonths=function(){var e,r=t.props,o=r.showTwoColumnMonthYearPicker,s=r.showFourColumnMonthYearPicker,i=r.day,c=r.selected,l=(e=or[pn(s,o)])===null||e===void 0?void 0:e.grid;return l==null?void 0:l.map(function(u,d){return m.createElement("div",{className:"react-datepicker__month-wrapper",key:d},u.map(function(f,p){return m.createElement("div",{ref:t.MONTH_REFS[f],key:p,onClick:function(h){t.onMonthClick(h,f)},onKeyDown:function(h){Jn(h)&&(h.preventDefault(),h.key=M.Enter),t.onMonthKeyDown(h,f)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onMonthMouseEnter(f)},onPointerEnter:t.props.usePointerEvent?function(){return t.onMonthMouseEnter(f)}:void 0,tabIndex:Number(t.getTabIndex(f)),className:t.getMonthClassNames(f),"aria-disabled":t.isMonthDisabled(f),role:"option","aria-label":t.getAriaLabel(f),"aria-current":t.isCurrentMonth(i,f)?"date":void 0,"aria-selected":c?t.isSelectedMonth(i,f,c):void 0},t.getMonthContent(f))}))})},t.renderQuarters=function(){var e=t.props,r=e.day,o=e.selected,s=[1,2,3,4];return m.createElement("div",{className:"react-datepicker__quarter-wrapper"},s.map(function(i,c){return m.createElement("div",{key:c,ref:t.QUARTER_REFS[c],role:"option",onClick:function(l){t.onQuarterClick(l,i)},onKeyDown:function(l){t.onQuarterKeyDown(l,i)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onQuarterMouseEnter(i)},onPointerEnter:t.props.usePointerEvent?function(){return t.onQuarterMouseEnter(i)}:void 0,className:t.getQuarterClassNames(i),"aria-selected":o?t.isSelectedQuarter(r,i,o):void 0,tabIndex:Number(t.getQuarterTabIndex(i)),"aria-current":t.isCurrentQuarter(r,i)?"date":void 0},t.getQuarterContent(i))}))},t.getClassNames=function(){var e=t.props,r=e.selectingDate,o=e.selectsStart,s=e.selectsEnd,i=e.showMonthYearPicker,c=e.showQuarterYearPicker,l=e.showWeekPicker;return re("react-datepicker__month",{"react-datepicker__month--selecting-range":r&&(o||s)},{"react-datepicker__monthPicker":i},{"react-datepicker__quarterPicker":c},{"react-datepicker__weekPicker":l})},t}return a.prototype.getSelection=function(){var t=this.props,e=t.selected,r=t.selectedDates,o=t.selectsMultiple;if(o)return r;if(e)return[e]},a.prototype.render=function(){var t=this.props,e=t.showMonthYearPicker,r=t.showQuarterYearPicker,o=t.day,s=t.ariaLabelPrefix,i=s===void 0?"Month ":s,c=i?i.trim()+" ":"";return m.createElement("div",{className:this.getClassNames(),onMouseLeave:this.props.usePointerEvent?void 0:this.handleMouseLeave,onPointerLeave:this.props.usePointerEvent?this.handleMouseLeave:void 0,"aria-label":"".concat(c).concat(z(o,"MMMM, yyyy",this.props.locale)),role:"listbox"},e?this.renderMonths():r?this.renderQuarters():this.renderWeeks())},a}(w.Component),Sc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.isSelectedMonth=function(e){return t.props.month===e},t.renderOptions=function(){return t.props.monthNames.map(function(e,r){return m.createElement("div",{className:t.isSelectedMonth(r)?"react-datepicker__month-option react-datepicker__month-option--selected_month":"react-datepicker__month-option",key:e,onClick:t.onChange.bind(t,r),"aria-selected":t.isSelectedMonth(r)?"true":void 0},t.isSelectedMonth(r)?m.createElement("span",{className:"react-datepicker__month-option--selected"},"✓"):"",e)})},t.onChange=function(e){return t.props.onChange(e)},t.handleClickOutside=function(){return t.props.onCancel()},t}return a.prototype.render=function(){return m.createElement(Xt,{className:"react-datepicker__month-dropdown",onClickOutside:this.handleClickOutside},this.renderOptions())},a}(w.Component),Ec=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(e){return e.map(function(r,o){return m.createElement("option",{key:r,value:o},r)})},t.renderSelectMode=function(e){return m.createElement("select",{value:t.props.month,className:"react-datepicker__month-select",onChange:function(r){return t.onChange(parseInt(r.target.value))}},t.renderSelectOptions(e))},t.renderReadView=function(e,r){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-read-view--selected-month"},r[t.props.month]))},t.renderDropdown=function(e){return m.createElement(Sc,W({key:"dropdown"},t.props,{monthNames:e,onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(e){var r=t.state.dropdownVisible,o=[t.renderReadView(!r,e)];return r&&o.unshift(t.renderDropdown(e)),o},t.onChange=function(e){t.toggleDropdown(),e!==t.props.month&&t.props.onChange(e)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t=this,e=[0,1,2,3,4,5,6,7,8,9,10,11].map(this.props.useShortMonthInDropdown?function(o){return zn(o,t.props.locale)}:function(o){return Sr(o,t.props.locale)}),r;switch(this.props.dropdownMode){case"scroll":r=this.renderScrollMode(e);break;case"select":r=this.renderSelectMode(e);break}return m.createElement("div",{className:"react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode)},r)},a}(w.Component);function Pc(n,a){for(var t=[],e=Se(n),r=Se(a);!Ye(e,r);)t.push(V(e)),e=he(e,1);return t}var Tc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.renderOptions=function(){return e.state.monthYearsList.map(function(r){var o=dr(r),s=ge(e.props.date,r)&&ae(e.props.date,r);return m.createElement("div",{className:s?"react-datepicker__month-year-option--selected_month-year":"react-datepicker__month-year-option",key:o,onClick:e.onChange.bind(e,o),"aria-selected":s?"true":void 0},s?m.createElement("span",{className:"react-datepicker__month-year-option--selected"},"✓"):"",z(r,e.props.dateFormat,e.props.locale))})},e.onChange=function(r){return e.props.onChange(r)},e.handleClickOutside=function(){e.props.onCancel()},e.state={monthYearsList:Pc(e.props.minDate,e.props.maxDate)},e}return a.prototype.render=function(){var t=re({"react-datepicker__month-year-dropdown":!0,"react-datepicker__month-year-dropdown--scrollable":this.props.scrollableMonthYearDropdown});return m.createElement(Xt,{className:t,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(w.Component),Oc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=Se(t.props.minDate),r=Se(t.props.maxDate),o=[];!Ye(e,r);){var s=dr(e);o.push(m.createElement("option",{key:s,value:s},z(e,t.props.dateFormat,t.props.locale))),e=he(e,1)}return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:dr(Se(t.props.date)),className:"react-datepicker__month-year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){var r=z(t.props.date,t.props.dateFormat,t.props.locale);return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-year-read-view",onClick:t.toggleDropdown},m.createElement("span",{className:"react-datepicker__month-year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__month-year-read-view--selected-month-year"},r))},t.renderDropdown=function(){return m.createElement(Tc,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown();var r=V(e);ge(t.props.date,r)&&ae(t.props.date,r)||t.props.onChange(r)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(w.Component),Nc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={height:null},t.scrollToTheSelectedTime=function(){requestAnimationFrame(function(){var e,r,o;t.list&&(t.list.scrollTop=(o=t.centerLi&&a.calcCenterPosition(t.props.monthRef?t.props.monthRef.clientHeight-((r=(e=t.header)===null||e===void 0?void 0:e.clientHeight)!==null&&r!==void 0?r:0):t.list.clientHeight,t.centerLi))!==null&&o!==void 0?o:0)})},t.handleClick=function(e){var r,o;(t.props.minTime||t.props.maxTime)&&rn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&tn(e,t.props)||(o=(r=t.props).onChange)===null||o===void 0||o.call(r,e)},t.isSelectedTime=function(e){return t.props.selected&&bc(t.props.selected,e)},t.isDisabledTime=function(e){return(t.props.minTime||t.props.maxTime)&&rn(e,t.props)||(t.props.excludeTimes||t.props.includeTimes||t.props.filterTime)&&tn(e,t.props)},t.liClasses=function(e){var r,o=["react-datepicker__time-list-item",t.props.timeClassName?t.props.timeClassName(e):void 0];return t.isSelectedTime(e)&&o.push("react-datepicker__time-list-item--selected"),t.isDisabledTime(e)&&o.push("react-datepicker__time-list-item--disabled"),t.props.injectTimes&&(Me(e)*3600+Ce(e)*60+Ne(e))%(((r=t.props.intervals)!==null&&r!==void 0?r:a.defaultProps.intervals)*60)!==0&&o.push("react-datepicker__time-list-item--injected"),o.join(" ")},t.handleOnKeyDown=function(e,r){var o,s;e.key===M.Space&&(e.preventDefault(),e.key=M.Enter),(e.key===M.ArrowUp||e.key===M.ArrowLeft)&&e.target instanceof HTMLElement&&e.target.previousSibling&&(e.preventDefault(),e.target.previousSibling instanceof HTMLElement&&e.target.previousSibling.focus()),(e.key===M.ArrowDown||e.key===M.ArrowRight)&&e.target instanceof HTMLElement&&e.target.nextSibling&&(e.preventDefault(),e.target.nextSibling instanceof HTMLElement&&e.target.nextSibling.focus()),e.key===M.Enter&&t.handleClick(r),(s=(o=t.props).handleOnKeyDown)===null||s===void 0||s.call(o,e)},t.renderTimes=function(){for(var e,r=[],o=typeof t.props.format=="string"?t.props.format:"p",s=(e=t.props.intervals)!==null&&e!==void 0?e:a.defaultProps.intervals,i=t.props.selected||t.props.openToDate||V(),c=Et(i),l=t.props.injectTimes&&t.props.injectTimes.sort(function(g,b){return g.getTime()-b.getTime()}),u=60*yc(i),d=u/s,f=0;f=f?e.updateFocusOnPaginate(Math.abs(f-(r-p))):(l=(c=e.YEAR_REFS[r-p])===null||c===void 0?void 0:c.current)===null||l===void 0||l.focus())}},e.isSameDay=function(r,o){return A(r,o)},e.isCurrentYear=function(r){return r===L(V())},e.isRangeStart=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.startDate)},e.isRangeEnd=function(r){return e.props.startDate&&e.props.endDate&&ge(me(V(),r),e.props.endDate)},e.isInRange=function(r){return Dt(r,e.props.startDate,e.props.endDate)},e.isInSelectingRange=function(r){var o=e.props,s=o.selectsStart,i=o.selectsEnd,c=o.selectsRange,l=o.startDate,u=o.endDate;return!(s||i||c)||!e.selectingDate()?!1:s&&u?Dt(r,e.selectingDate(),u):i&&l||c&&l&&!u?Dt(r,l,e.selectingDate()):!1},e.isSelectingRangeStart=function(r){var o;if(!e.isInSelectingRange(r))return!1;var s=e.props,i=s.startDate,c=s.selectsStart,l=me(V(),r);return c?ge(l,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(l,i??null)},e.isSelectingRangeEnd=function(r){var o;if(!e.isInSelectingRange(r))return!1;var s=e.props,i=s.endDate,c=s.selectsEnd,l=s.selectsRange,u=me(V(),r);return c||l?ge(u,(o=e.selectingDate())!==null&&o!==void 0?o:null):ge(u,i??null)},e.isKeyboardSelected=function(r){if(!(e.props.date===void 0||e.props.selected==null||e.props.preSelection==null)){var o=e.props,s=o.minDate,i=o.maxDate,c=o.excludeDates,l=o.includeDates,u=o.filterDate,d=ct(me(e.props.date,r)),f=(s||i||c||l||u)&&Pt(r,e.props);return!e.props.disabledKeyboardNavigation&&!e.props.inline&&!A(d,ct(e.props.selected))&&A(d,ct(e.props.preSelection))&&!f}},e.isSelectedYear=function(r){var o=e.props,s=o.selectsMultiple,i=o.selected,c=o.selectedDates;return s?c==null?void 0:c.some(function(l){return r===L(l)}):!!i&&r===L(i)},e.onYearClick=function(r,o){var s=e.props.date;s!==void 0&&e.handleYearClick(ct(me(s,o)),r)},e.onYearKeyDown=function(r,o){var s,i,c=r.key,l=e.props,u=l.date,d=l.yearItemNumber,f=l.handleOnKeyDown;if(c!==M.Tab&&r.preventDefault(),!e.props.disabledKeyboardNavigation)switch(c){case M.Enter:if(e.props.selected==null)break;e.onYearClick(r,o),(i=(s=e.props).setPreSelection)===null||i===void 0||i.call(s,e.props.selected);break;case M.ArrowRight:if(e.props.preSelection==null)break;e.handleYearNavigation(o+1,xe(e.props.preSelection,1));break;case M.ArrowLeft:if(e.props.preSelection==null)break;e.handleYearNavigation(o-1,Ze(e.props.preSelection,1));break;case M.ArrowUp:{if(u===void 0||d===void 0||e.props.preSelection==null)break;var p=Oe(u,d).startPeriod,h=hn,v=o-h;if(v=p&&ob){var g=d%h;o<=b&&o>b-g?h=g:h+=g,v=o+h}e.handleYearNavigation(v,xe(e.props.preSelection,h));break}}f&&f(r)},e.getYearClassNames=function(r){var o=e.props,s=o.date,i=o.minDate,c=o.maxDate,l=o.excludeDates,u=o.includeDates,d=o.filterDate,f=o.yearClassName;return re("react-datepicker__year-text","react-datepicker__year-".concat(r),s?f==null?void 0:f(me(s,r)):void 0,{"react-datepicker__year-text--selected":e.isSelectedYear(r),"react-datepicker__year-text--disabled":(i||c||l||u||d)&&Pt(r,e.props),"react-datepicker__year-text--keyboard-selected":e.isKeyboardSelected(r),"react-datepicker__year-text--range-start":e.isRangeStart(r),"react-datepicker__year-text--range-end":e.isRangeEnd(r),"react-datepicker__year-text--in-range":e.isInRange(r),"react-datepicker__year-text--in-selecting-range":e.isInSelectingRange(r),"react-datepicker__year-text--selecting-range-start":e.isSelectingRangeStart(r),"react-datepicker__year-text--selecting-range-end":e.isSelectingRangeEnd(r),"react-datepicker__year-text--today":e.isCurrentYear(r)})},e.getYearTabIndex=function(r){if(e.props.disabledKeyboardNavigation||e.props.preSelection==null)return"-1";var o=L(e.props.preSelection),s=Pt(r,e.props);return r===o&&!s?"0":"-1"},e.getYearContent=function(r){return e.props.renderYearContent?e.props.renderYearContent(r):r},e}return a.prototype.render=function(){var t=this,e=[],r=this.props,o=r.date,s=r.yearItemNumber,i=r.onYearMouseEnter,c=r.onYearMouseLeave;if(o===void 0)return null;for(var l=Oe(o,s),u=l.startPeriod,d=l.endPeriod,f=function(v){e.push(m.createElement("div",{ref:p.YEAR_REFS[v-u],onClick:function(g){t.onYearClick(g,v)},onKeyDown:function(g){Jn(g)&&(g.preventDefault(),g.key=M.Enter),t.onYearKeyDown(g,v)},tabIndex:Number(p.getYearTabIndex(v)),className:p.getYearClassNames(v),onMouseEnter:p.props.usePointerEvent?void 0:function(g){return i(g,v)},onPointerEnter:p.props.usePointerEvent?function(g){return i(g,v)}:void 0,onMouseLeave:p.props.usePointerEvent?void 0:function(g){return c(g,v)},onPointerLeave:p.props.usePointerEvent?function(g){return c(g,v)}:void 0,key:v,"aria-current":p.isCurrentYear(v)?"date":void 0},p.getYearContent(v)))},p=this,h=u;h<=d;h++)f(h);return m.createElement("div",{className:"react-datepicker__year"},m.createElement("div",{className:"react-datepicker__year-wrapper",onMouseLeave:this.props.usePointerEvent?void 0:this.props.clearSelectingDate,onPointerLeave:this.props.usePointerEvent?this.props.clearSelectingDate:void 0},e))},a}(w.Component);function Yc(n,a,t,e){for(var r=[],o=0;o<2*a+1;o++){var s=n+a-o,i=!0;t&&(i=L(t)<=s),e&&i&&(i=L(e)>=s),i&&r.push(s)}return r}var Lc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;e.renderOptions=function(){var i=e.props.year,c=e.state.yearsList.map(function(d){return m.createElement("div",{className:i===d?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:d,onClick:e.onChange.bind(e,d),"aria-selected":i===d?"true":void 0},i===d?m.createElement("span",{className:"react-datepicker__year-option--selected"},"✓"):"",d)}),l=e.props.minDate?L(e.props.minDate):null,u=e.props.maxDate?L(e.props.maxDate):null;return(!u||!e.state.yearsList.find(function(d){return d===u}))&&c.unshift(m.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:e.incrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),(!l||!e.state.yearsList.find(function(d){return d===l}))&&c.push(m.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:e.decrementYears},m.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),c},e.onChange=function(i){e.props.onChange(i)},e.handleClickOutside=function(){e.props.onCancel()},e.shiftYears=function(i){var c=e.state.yearsList.map(function(l){return l+i});e.setState({yearsList:c})},e.incrementYears=function(){return e.shiftYears(1)},e.decrementYears=function(){return e.shiftYears(-1)};var r=t.yearDropdownItemNumber,o=t.scrollableYearDropdown,s=r||(o?10:5);return e.state={yearsList:Yc(e.props.year,s,e.props.minDate,e.props.maxDate)},e.dropdownRef=w.createRef(),e}return a.prototype.componentDidMount=function(){var t=this.dropdownRef.current;if(t){var e=t.children?Array.from(t.children):null,r=e?e.find(function(o){return o.ariaSelected}):null;t.scrollTop=r&&r instanceof HTMLElement?r.offsetTop+(r.clientHeight-t.clientHeight)/2:(t.scrollHeight-t.clientHeight)/2}},a.prototype.render=function(){var t=re({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return m.createElement(Xt,{className:t,containerRef:this.dropdownRef,onClickOutside:this.handleClickOutside},this.renderOptions())},a}(w.Component),Fc=function(n){te(a,n);function a(){var t=n!==null&&n.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=t.props.minDate?L(t.props.minDate):1900,r=t.props.maxDate?L(t.props.maxDate):2100,o=[],s=e;s<=r;s++)o.push(m.createElement("option",{key:s,value:s},s));return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return m.createElement("select",{value:t.props.year,className:"react-datepicker__year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){return m.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__year-read-view",onClick:function(r){return t.toggleDropdown(r)}},m.createElement("span",{className:"react-datepicker__year-read-view--down-arrow"}),m.createElement("span",{className:"react-datepicker__year-read-view--selected-year"},t.props.year))},t.renderDropdown=function(){return m.createElement(Lc,W({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,r=[t.renderReadView(!e)];return e&&r.unshift(t.renderDropdown()),r},t.onChange=function(e){t.toggleDropdown(),e!==t.props.year&&t.props.onChange(e)},t.toggleDropdown=function(e){t.setState({dropdownVisible:!t.state.dropdownVisible},function(){t.props.adjustDateOnChange&&t.handleYearChange(t.props.date,e)})},t.handleYearChange=function(e,r){var o;(o=t.onSelect)===null||o===void 0||o.call(t,e,r),t.setOpen()},t.onSelect=function(e,r){var o,s;(s=(o=t.props).onSelect)===null||s===void 0||s.call(o,e,r)},t.setOpen=function(){var e,r;(r=(e=t.props).setOpen)===null||r===void 0||r.call(e,!0)},t}return a.prototype.render=function(){var t;switch(this.props.dropdownMode){case"scroll":t=this.renderScrollMode();break;case"select":t=this.renderSelectMode();break}return m.createElement("div",{className:"react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode)},t)},a}(w.Component),Ic=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],Ac=function(n){var a=(n.className||"").split(/\s+/);return Ic.some(function(t){return a.indexOf(t)>=0})},Wc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.monthContainer=void 0,e.handleClickOutside=function(r){e.props.onClickOutside(r)},e.setClickOutsideRef=function(){return e.containerRef.current},e.handleDropdownFocus=function(r){var o,s;Ac(r.target)&&((s=(o=e.props).onDropdownFocus)===null||s===void 0||s.call(o,r))},e.getDateInView=function(){var r=e.props,o=r.preSelection,s=r.selected,i=r.openToDate,c=Xn(e.props),l=Zn(e.props),u=V(),d=i||s||o;return d||(c&&Qe(u,c)?c:l&&Ye(u,l)?l:u)},e.increaseMonth=function(){e.setState(function(r){var o=r.date;return{date:he(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.decreaseMonth=function(){e.setState(function(r){var o=r.date;return{date:He(o,1)}},function(){return e.handleMonthChange(e.state.date)})},e.handleDayClick=function(r,o,s){e.props.onSelect(r,o,s),e.props.setPreSelection&&e.props.setPreSelection(r)},e.handleDayMouseEnter=function(r){e.setState({selectingDate:r}),e.props.onDayMouseEnter&&e.props.onDayMouseEnter(r)},e.handleMonthMouseLeave=function(){e.setState({selectingDate:void 0}),e.props.onMonthMouseLeave&&e.props.onMonthMouseLeave()},e.handleYearMouseEnter=function(r,o){e.setState({selectingDate:me(V(),o)}),e.props.onYearMouseEnter&&e.props.onYearMouseEnter(r,o)},e.handleYearMouseLeave=function(r,o){e.props.onYearMouseLeave&&e.props.onYearMouseLeave(r,o)},e.handleYearChange=function(r){var o,s,i,c;(s=(o=e.props).onYearChange)===null||s===void 0||s.call(o,r),e.setState({isRenderAriaLiveMessage:!0}),e.props.adjustDateOnChange&&(e.props.onSelect(r),(c=(i=e.props).setOpen)===null||c===void 0||c.call(i,!0)),e.props.setPreSelection&&e.props.setPreSelection(r)},e.getEnabledPreSelectionDateForMonth=function(r){if(!le(r,e.props))return r;for(var o=Se(r),s=sc(r),i=ga(s,o),c=null,l=0;l<=i;l++){var u=pe(o,l);if(!le(u,e.props)){c=u;break}}return c},e.handleMonthChange=function(r){var o,s,i,c=(o=e.getEnabledPreSelectionDateForMonth(r))!==null&&o!==void 0?o:r;e.handleCustomMonthChange(c),e.props.adjustDateOnChange&&(e.props.onSelect(c),(i=(s=e.props).setOpen)===null||i===void 0||i.call(s,!0)),e.props.setPreSelection&&e.props.setPreSelection(c)},e.handleCustomMonthChange=function(r){var o,s;(s=(o=e.props).onMonthChange)===null||s===void 0||s.call(o,r),e.setState({isRenderAriaLiveMessage:!0})},e.handleMonthYearChange=function(r){e.handleYearChange(r),e.handleMonthChange(r)},e.changeYear=function(r){e.setState(function(o){var s=o.date;return{date:me(s,Number(r))}},function(){return e.handleYearChange(e.state.date)})},e.changeMonth=function(r){e.setState(function(o){var s=o.date;return{date:ce(s,Number(r))}},function(){return e.handleMonthChange(e.state.date)})},e.changeMonthYear=function(r){e.setState(function(o){var s=o.date;return{date:me(ce(s,ne(r)),L(r))}},function(){return e.handleMonthYearChange(e.state.date)})},e.header=function(r){r===void 0&&(r=e.state.date);var o=Re(r,e.props.locale,e.props.calendarStartDay),s=[];return e.props.showWeekNumbers&&s.push(m.createElement("div",{key:"W",className:"react-datepicker__day-name"},e.props.weekLabel||"#")),s.concat([0,1,2,3,4,5,6].map(function(i){var c=pe(o,i),l=e.formatWeekday(c,e.props.locale),u=e.props.weekDayClassName?e.props.weekDayClassName(c):void 0;return m.createElement("div",{key:i,"aria-label":z(c,"EEEE",e.props.locale),className:re("react-datepicker__day-name",u)},l)}))},e.formatWeekday=function(r,o){return e.props.formatWeekDay?ic(r,e.props.formatWeekDay,o):e.props.useWeekdaysShort?lc(r,o):cc(r,o)},e.decreaseYear=function(){e.setState(function(r){var o,s=r.date;return{date:Ze(s,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.clearSelectingDate=function(){e.setState({selectingDate:void 0})},e.renderPreviousButton=function(){var r,o,s;if(!e.props.renderCustomHeader){var i=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?i-1:0,l=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,u=He(e.state.date,l),d;switch(!0){case e.props.showMonthYearPicker:d=on(e.state.date,e.props);break;case e.props.showYearPicker:d=hc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:d=fc(e.state.date,e.props);break;default:d=nn(u,e.props);break}if(!(!((s=e.props.forceShowMonthNavigation)!==null&&s!==void 0?s:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&d||e.props.showTimeSelectOnly)){var f=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--previous"],p=["react-datepicker__navigation","react-datepicker__navigation--previous"],h=e.decreaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(h=e.decreaseYear),d&&e.props.showDisabledMonthNavigation&&(p.push("react-datepicker__navigation--previous--disabled"),h=void 0);var v=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,g=e.props,b=g.previousMonthButtonLabel,_=b===void 0?a.defaultProps.previousMonthButtonLabel:b,y=g.previousYearButtonLabel,k=y===void 0?a.defaultProps.previousYearButtonLabel:y,T=e.props,O=T.previousMonthAriaLabel,S=O===void 0?typeof _=="string"?_:"Previous Month":O,x=T.previousYearAriaLabel,E=x===void 0?typeof k=="string"?k:"Previous Year":x;return m.createElement("button",{type:"button",className:p.join(" "),onClick:h,onKeyDown:e.props.handleOnKeyDown,"aria-label":v?E:S},m.createElement("span",{className:f.join(" ")},v?k:_))}}},e.increaseYear=function(){e.setState(function(r){var o,s=r.date;return{date:xe(s,e.props.showYearPicker?(o=e.props.yearItemNumber)!==null&&o!==void 0?o:a.defaultProps.yearItemNumber:1)}},function(){return e.handleYearChange(e.state.date)})},e.renderNextButton=function(){var r;if(!e.props.renderCustomHeader){var o;switch(!0){case e.props.showMonthYearPicker:o=sn(e.state.date,e.props);break;case e.props.showYearPicker:o=mc(e.state.date,e.props);break;case e.props.showQuarterYearPicker:o=pc(e.state.date,e.props);break;default:o=an(e.state.date,e.props);break}if(!(!((r=e.props.forceShowMonthNavigation)!==null&&r!==void 0?r:a.defaultProps.forceShowMonthNavigation)&&!e.props.showDisabledMonthNavigation&&o||e.props.showTimeSelectOnly)){var s=["react-datepicker__navigation","react-datepicker__navigation--next"],i=["react-datepicker__navigation-icon","react-datepicker__navigation-icon--next"];e.props.showTimeSelect&&s.push("react-datepicker__navigation--next--with-time"),e.props.todayButton&&s.push("react-datepicker__navigation--next--with-today-button");var c=e.increaseMonth;(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker)&&(c=e.increaseYear),o&&e.props.showDisabledMonthNavigation&&(s.push("react-datepicker__navigation--next--disabled"),c=void 0);var l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker,u=e.props,d=u.nextMonthButtonLabel,f=d===void 0?a.defaultProps.nextMonthButtonLabel:d,p=u.nextYearButtonLabel,h=p===void 0?a.defaultProps.nextYearButtonLabel:p,v=e.props,g=v.nextMonthAriaLabel,b=g===void 0?typeof f=="string"?f:"Next Month":g,_=v.nextYearAriaLabel,y=_===void 0?typeof h=="string"?h:"Next Year":_;return m.createElement("button",{type:"button",className:s.join(" "),onClick:c,onKeyDown:e.props.handleOnKeyDown,"aria-label":l?y:b},m.createElement("span",{className:i.join(" ")},l?h:f))}}},e.renderCurrentMonth=function(r){r===void 0&&(r=e.state.date);var o=["react-datepicker__current-month"];return e.props.showYearDropdown&&o.push("react-datepicker__current-month--hasYearDropdown"),e.props.showMonthDropdown&&o.push("react-datepicker__current-month--hasMonthDropdown"),e.props.showMonthYearDropdown&&o.push("react-datepicker__current-month--hasMonthYearDropdown"),m.createElement("h2",{className:o.join(" ")},z(r,e.props.dateFormat,e.props.locale))},e.renderYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showYearDropdown||r))return m.createElement(Fc,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeYear,year:L(e.state.date)}))},e.renderMonthDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthDropdown||r))return m.createElement(Ec,W({},a.defaultProps,e.props,{month:ne(e.state.date),onChange:e.changeMonth}))},e.renderMonthYearDropdown=function(r){if(r===void 0&&(r=!1),!(!e.props.showMonthYearDropdown||r))return m.createElement(Oc,W({},a.defaultProps,e.props,{date:e.state.date,onChange:e.changeMonthYear}))},e.handleTodayButtonClick=function(r){e.props.onSelect(Zr(),r),e.props.setPreSelection&&e.props.setPreSelection(Zr())},e.renderTodayButton=function(){if(!(!e.props.todayButton||e.props.showTimeSelectOnly))return m.createElement("div",{className:"react-datepicker__today-button",onClick:e.handleTodayButtonClick},e.props.todayButton)},e.renderDefaultHeader=function(r){var o=r.monthDate,s=r.i;return m.createElement("div",{className:"react-datepicker__header ".concat(e.props.showTimeSelect?"react-datepicker__header--has-time-select":"")},e.renderCurrentMonth(o),m.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(e.props.dropdownMode),onFocus:e.handleDropdownFocus},e.renderMonthDropdown(s!==0),e.renderMonthYearDropdown(s!==0),e.renderYearDropdown(s!==0)),m.createElement("div",{className:"react-datepicker__day-names"},e.header(o)))},e.renderCustomHeader=function(r){var o,s,i=r.monthDate,c=r.i;if(e.props.showTimeSelect&&!e.state.monthContainer||e.props.showTimeSelectOnly)return null;var l=nn(e.state.date,e.props),u=an(e.state.date,e.props),d=on(e.state.date,e.props),f=sn(e.state.date,e.props),p=!e.props.showMonthYearPicker&&!e.props.showQuarterYearPicker&&!e.props.showYearPicker;return m.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:e.props.onDropdownFocus},(s=(o=e.props).renderCustomHeader)===null||s===void 0?void 0:s.call(o,W(W({},e.state),{customHeaderCount:c,monthDate:i,changeMonth:e.changeMonth,changeYear:e.changeYear,decreaseMonth:e.decreaseMonth,increaseMonth:e.increaseMonth,decreaseYear:e.decreaseYear,increaseYear:e.increaseYear,prevMonthButtonDisabled:l,nextMonthButtonDisabled:u,prevYearButtonDisabled:d,nextYearButtonDisabled:f})),p&&m.createElement("div",{className:"react-datepicker__day-names"},e.header(i)))},e.renderYearHeader=function(r){var o=r.monthDate,s=e.props,i=s.showYearPicker,c=s.yearItemNumber,l=c===void 0?a.defaultProps.yearItemNumber:c,u=Oe(o,l),d=u.startPeriod,f=u.endPeriod;return m.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},i?"".concat(d," - ").concat(f):L(o))},e.renderHeader=function(r){var o=r.monthDate,s=r.i,i=s===void 0?0:s,c={monthDate:o,i};switch(!0){case e.props.renderCustomHeader!==void 0:return e.renderCustomHeader(c);case(e.props.showMonthYearPicker||e.props.showQuarterYearPicker||e.props.showYearPicker):return e.renderYearHeader(c);default:return e.renderDefaultHeader(c)}},e.renderMonths=function(){var r,o;if(!(e.props.showTimeSelectOnly||e.props.showYearPicker)){for(var s=[],i=(r=e.props.monthsShown)!==null&&r!==void 0?r:a.defaultProps.monthsShown,c=e.props.showPreviousMonths?i-1:0,l=e.props.showMonthYearPicker||e.props.showQuarterYearPicker?xe(e.state.date,c):He(e.state.date,c),u=(o=e.props.monthSelectedIn)!==null&&o!==void 0?o:c,d=0;d0;s.push(m.createElement("div",{key:h,ref:function(b){e.monthContainer=b??void 0},className:"react-datepicker__month-container"},e.renderHeader({monthDate:p,i:d}),m.createElement(Cc,W({},a.defaultProps,e.props,{containerRef:e.containerRef,ariaLabelPrefix:e.props.monthAriaLabelPrefix,day:p,onDayClick:e.handleDayClick,handleOnKeyDown:e.props.handleOnDayKeyDown,handleOnMonthKeyDown:e.props.handleOnKeyDown,onDayMouseEnter:e.handleDayMouseEnter,onMouseLeave:e.handleMonthMouseLeave,orderInDisplay:d,selectingDate:e.state.selectingDate,monthShowsDuplicateDaysEnd:v,monthShowsDuplicateDaysStart:g}))))}return s}},e.renderYears=function(){if(!e.props.showTimeSelectOnly&&e.props.showYearPicker)return m.createElement("div",{className:"react-datepicker__year--container"},e.renderHeader({monthDate:e.state.date}),m.createElement(Rc,W({},a.defaultProps,e.props,{selectingDate:e.state.selectingDate,date:e.state.date,onDayClick:e.handleDayClick,clearSelectingDate:e.clearSelectingDate,onYearMouseEnter:e.handleYearMouseEnter,onYearMouseLeave:e.handleYearMouseLeave})))},e.renderTimeSection=function(){if(e.props.showTimeSelect&&(e.state.monthContainer||e.props.showTimeSelectOnly))return m.createElement(Nc,W({},a.defaultProps,e.props,{onChange:e.props.onTimeChange,format:e.props.timeFormat,intervals:e.props.timeIntervals,monthRef:e.state.monthContainer}))},e.renderInputTimeSection=function(){var r=e.props.selected?new Date(e.props.selected):void 0,o=r&&Zt(r)&&!!e.props.selected,s=o?"".concat(ln(r.getHours()),":").concat(ln(r.getMinutes())):"";if(e.props.showTimeInput)return m.createElement(Dc,W({},a.defaultProps,e.props,{date:r,timeString:s,onChange:e.props.onTimeChange}))},e.renderAriaLiveRegion=function(){var r,o=Oe(e.state.date,(r=e.props.yearItemNumber)!==null&&r!==void 0?r:a.defaultProps.yearItemNumber),s=o.startPeriod,i=o.endPeriod,c;return e.props.showYearPicker?c="".concat(s," - ").concat(i):e.props.showMonthYearPicker||e.props.showQuarterYearPicker?c=L(e.state.date):c="".concat(Sr(ne(e.state.date),e.props.locale)," ").concat(L(e.state.date)),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},e.state.isRenderAriaLiveMessage&&c)},e.renderChildren=function(){if(e.props.children)return m.createElement("div",{className:"react-datepicker__children-container"},e.props.children)},e.containerRef=w.createRef(),e.state={date:e.getDateInView(),selectingDate:void 0,monthContainer:void 0,isRenderAriaLiveMessage:!1},e}return Object.defineProperty(a,"defaultProps",{get:function(){return{monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousYearButtonLabel:"Previous Year",nextYearButtonLabel:"Next Year",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next Month",yearItemNumber:mt}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){var t=this;this.props.showTimeSelect&&(this.assignMonthContainer=function(){t.setState({monthContainer:t.monthContainer})}())},a.prototype.componentDidUpdate=function(t){var e=this;if(this.props.preSelection&&(!A(this.props.preSelection,t.preSelection)||this.props.monthSelectedIn!==t.monthSelectedIn)){var r=!ae(this.state.date,this.props.preSelection);this.setState({date:this.props.preSelection},function(){return r&&e.handleCustomMonthChange(e.state.date)})}else this.props.openToDate&&!A(this.props.openToDate,t.openToDate)&&this.setState({date:this.props.openToDate})},a.prototype.render=function(){var t=this.props.container||Ji;return m.createElement(Xt,{onClickOutside:this.handleClickOutside,style:{display:"contents"},ignoreClass:this.props.outsideClickIgnoreClass},m.createElement("div",{style:{display:"contents"},ref:this.containerRef},m.createElement(t,{className:re("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly}),showTime:this.props.showTimeSelect||this.props.showTimeInput,showTimeSelectOnly:this.props.showTimeSelectOnly},this.renderAriaLiveRegion(),this.renderPreviousButton(),this.renderNextButton(),this.renderMonths(),this.renderYears(),this.renderTodayButton(),this.renderTimeSection(),this.renderInputTimeSection(),this.renderChildren())))},a}(w.Component),Hc=function(n){var a=n.icon,t=n.className,e=t===void 0?"":t,r=n.onClick,o="react-datepicker__calendar-icon";if(typeof a=="string")return m.createElement("i",{className:"".concat(o," ").concat(a," ").concat(e),"aria-hidden":"true",onClick:r});if(m.isValidElement(a)){var s=a;return m.cloneElement(s,{className:"".concat(s.props.className||""," ").concat(o," ").concat(e),onClick:function(i){typeof s.props.onClick=="function"&&s.props.onClick(i),typeof r=="function"&&r(i)}})}return m.createElement("svg",{className:"".concat(o," ").concat(e),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",onClick:r},m.createElement("path",{d:"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z"}))},ea=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.portalRoot=null,e.el=document.createElement("div"),e}return a.prototype.componentDidMount=function(){this.portalRoot=(this.props.portalHost||document).getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),(this.props.portalHost||document.body).appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)},a.prototype.componentWillUnmount=function(){this.portalRoot&&this.portalRoot.removeChild(this.el)},a.prototype.render=function(){return oa.createPortal(this.props.children,this.el)},a}(w.Component),jc="[tabindex], a, button, input, select, textarea",Bc=function(n){return(n instanceof HTMLAnchorElement||!n.disabled)&&n.tabIndex!==-1},ta=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.getTabChildren=function(){var r;return Array.prototype.slice.call((r=e.tabLoopRef.current)===null||r===void 0?void 0:r.querySelectorAll(jc),1,-1).filter(Bc)},e.handleFocusStart=function(){var r=e.getTabChildren();r&&r.length>1&&r[r.length-1].focus()},e.handleFocusEnd=function(){var r=e.getTabChildren();r&&r.length>1&&r[0].focus()},e.tabLoopRef=w.createRef(),e}return a.prototype.render=function(){var t;return((t=this.props.enableTabLoop)!==null&&t!==void 0?t:a.defaultProps.enableTabLoop)?m.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},m.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:0,onFocus:this.handleFocusStart}),this.props.children,m.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:0,onFocus:this.handleFocusEnd})):this.props.children},a.defaultProps={enableTabLoop:!0},a}(w.Component);function Qc(n){var a=function(t){var e,r=typeof t.hidePopper=="boolean"?t.hidePopper:!0,o=w.useRef(null),s=Zi(W({open:!r,whileElementsMounted:Ti,placement:t.popperPlacement,middleware:ye([Wi({padding:15}),Ai(10),Hi({element:o})],(e=t.popperModifiers)!==null&&e!==void 0?e:[],!0)},t.popperProps)),i=W(W({},t),{hidePopper:r,popperProps:W(W({},s),{arrowRef:o})});return m.createElement(n,W({},i))};return a}var Vc=function(n){te(a,n);function a(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(a,"defaultProps",{get:function(){return{hidePopper:!0}},enumerable:!1,configurable:!0}),a.prototype.render=function(){var t=this.props,e=t.className,r=t.wrapperClassName,o=t.hidePopper,s=o===void 0?a.defaultProps.hidePopper:o,i=t.popperComponent,c=t.targetComponent,l=t.enableTabLoop,u=t.popperOnKeyDown,d=t.portalId,f=t.portalHost,p=t.popperProps,h=t.showArrow,v=void 0;if(!s){var g=re("react-datepicker-popper",e);v=m.createElement(ta,{enableTabLoop:l},m.createElement("div",{ref:p.refs.setFloating,style:p.floatingStyles,className:g,"data-placement":p.placement,onKeyDown:u},i,h&&m.createElement(qi,{ref:p.arrowRef,context:p.context,fill:"currentColor",strokeWidth:1,height:8,width:16,style:{transform:"translateY(-1px)"},className:"react-datepicker__triangle"})))}this.props.popperContainer&&(v=w.createElement(this.props.popperContainer,{},v)),d&&!s&&(v=m.createElement(ea,{portalId:d,portalHost:f},v));var b=re("react-datepicker-wrapper",r);return m.createElement(m.Fragment,null,m.createElement("div",{ref:p.refs.setReference,className:b},c),v)},a}(w.Component),qc=Qc(Vc),mn="react-datepicker-ignore-onclickoutside";function Kc(n,a){return n&&a?ne(n)!==ne(a)||L(n)!==L(a):n!==a}var sr="Date input not valid.",Uc=function(n){te(a,n);function a(t){var e=n.call(this,t)||this;return e.calendar=null,e.input=null,e.getPreSelection=function(){return e.props.openToDate?e.props.openToDate:e.props.selectsEnd&&e.props.startDate?e.props.startDate:e.props.selectsStart&&e.props.endDate?e.props.endDate:V()},e.modifyHolidays=function(){var r;return(r=e.props.holidays)===null||r===void 0?void 0:r.reduce(function(o,s){var i=new Date(s.date);return Zt(i)?ye(ye([],o,!0),[W(W({},s),{date:i})],!1):o},[])},e.calcInitialState=function(){var r,o=e.getPreSelection(),s=Xn(e.props),i=Zn(e.props),c=s&&Qe(o,Et(s))?s:i&&Ye(o,Jr(i))?i:o;return{open:e.props.startOpen||!1,preventFocus:!1,inputValue:null,preSelection:(r=e.props.selectsRange?e.props.startDate:e.props.selected)!==null&&r!==void 0?r:c,highlightDates:cn(e.props.highlightDates),focused:!1,shouldFocusDayInline:!1,isRenderAriaLiveMessage:!1,wasHidden:!1}},e.resetHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!1}))},e.setHiddenStatus=function(){e.setState(W(W({},e.state),{wasHidden:!0}))},e.setHiddenStateOnVisibilityHidden=function(){document.visibilityState==="hidden"&&e.setHiddenStatus()},e.clearPreventFocusTimeout=function(){e.preventFocusTimeout&&clearTimeout(e.preventFocusTimeout)},e.setFocus=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.focus)===null||o===void 0||o.call(r,{preventScroll:!0})},e.setBlur=function(){var r,o;(o=(r=e.input)===null||r===void 0?void 0:r.blur)===null||o===void 0||o.call(r),e.cancelFocusInput()},e.deferBlur=function(){requestAnimationFrame(function(){e.setBlur()})},e.setOpen=function(r,o){o===void 0&&(o=!1),e.setState({open:r,preSelection:r&&e.state.open?e.state.preSelection:e.calcInitialState().preSelection,lastPreSelectChange:ir},function(){r||e.setState(function(s){return{focused:o?s.focused:!1}},function(){!o&&e.deferBlur(),e.setState({inputValue:null})})})},e.inputOk=function(){return _e(e.state.preSelection)},e.isCalendarOpen=function(){return e.props.open===void 0?e.state.open&&!e.props.disabled&&!e.props.readOnly:e.props.open},e.handleFocus=function(r){var o,s,i=e.state.wasHidden,c=i?e.state.open:!0;i&&e.resetHiddenStatus(),e.state.preventFocus||((s=(o=e.props).onFocus)===null||s===void 0||s.call(o,r),c&&!e.props.preventOpenOnFocus&&!e.props.readOnly&&e.setOpen(!0)),e.setState({focused:!0})},e.sendFocusBackToInput=function(){e.preventFocusTimeout&&e.clearPreventFocusTimeout(),e.setState({preventFocus:!0},function(){e.preventFocusTimeout=setTimeout(function(){e.setFocus(),e.setState({preventFocus:!1})})})},e.cancelFocusInput=function(){clearTimeout(e.inputFocusTimeout),e.inputFocusTimeout=void 0},e.deferFocusInput=function(){e.cancelFocusInput(),e.inputFocusTimeout=setTimeout(function(){return e.setFocus()},1)},e.handleDropdownFocus=function(){e.cancelFocusInput()},e.handleBlur=function(r){var o,s;(!e.state.open||e.props.withPortal||e.props.showTimeInput)&&((s=(o=e.props).onBlur)===null||s===void 0||s.call(o,r)),e.state.open&&e.props.open===!1&&e.setOpen(!1),e.setState({focused:!1})},e.handleCalendarClickOutside=function(r){var o,s;e.props.inline||e.setOpen(!1),(s=(o=e.props).onClickOutside)===null||s===void 0||s.call(o,r),e.props.withPortal&&r.preventDefault()},e.handleChange=function(){for(var r,o,s,i,c,l=[],u=0;u=F){fe=N;break}f&&fep&&(Y=M.ArrowLeft,fe=le(p,e.props)?x(Y,fe):p),le(fe,e.props)?((Y===M.PageUp||Y===M.Home)&&(Y=M.ArrowRight),(Y===M.PageDown||Y===M.End)&&(Y=M.ArrowLeft),fe=x(Y,fe)):ee=!0,de++}return fe};if(T===M.Enter){r.preventDefault(),e.handleSelect(S,r),!g&&e.setPreSelection(S);return}else if(T===M.Escape){r.preventDefault(),e.setOpen(!1),e.inputOk()||(c=(i=e.props).onInputError)===null||c===void 0||c.call(i,{code:1,msg:sr});return}var R=null;switch(T){case M.ArrowLeft:case M.ArrowRight:case M.ArrowUp:case M.ArrowDown:case M.PageUp:case M.PageDown:case M.Home:case M.End:R=E(T,S);break}if(!R){(u=(l=e.props).onInputError)===null||u===void 0||u.call(l,{code:1,msg:sr});return}if(r.preventDefault(),e.setState({lastPreSelectChange:ir}),y&&e.setSelected(R),e.setPreSelection(R),k){var B=ne(S),I=ne(R),$=L(S),Q=L(R);B!==I||$!==Q?e.setState({shouldFocusDayInline:!0}):e.setState({shouldFocusDayInline:!1})}}},e.onPopperKeyDown=function(r){var o=r.key;o===M.Escape&&(r.preventDefault(),e.sendFocusBackToInput(),e.setOpen(!1))},e.onClearClick=function(r){r&&r.preventDefault&&r.preventDefault(),e.sendFocusBackToInput();var o=e.props,s=o.selectsRange,i=o.onChange;s?i==null||i([null,null],r):i==null||i(null,r),e.setState({inputValue:null})},e.clear=function(){e.onClearClick()},e.onScroll=function(r){typeof e.props.closeOnScroll=="boolean"&&e.props.closeOnScroll?(r.target===document||r.target===document.documentElement||r.target===document.body)&&e.setOpen(!1):typeof e.props.closeOnScroll=="function"&&e.props.closeOnScroll(r)&&e.setOpen(!1)},e.renderCalendar=function(){var r,o;return!e.props.inline&&!e.isCalendarOpen()?null:m.createElement(Wc,W({showMonthYearDropdown:void 0,ref:function(s){e.calendar=s}},e.props,e.state,{setOpen:e.setOpen,dateFormat:(r=e.props.dateFormatCalendar)!==null&&r!==void 0?r:a.defaultProps.dateFormatCalendar,onSelect:e.handleSelect,onClickOutside:e.handleCalendarClickOutside,holidays:vc(e.modifyHolidays()),outsideClickIgnoreClass:mn,onDropdownFocus:e.handleDropdownFocus,onTimeChange:e.handleTimeChange,className:e.props.calendarClassName,container:e.props.calendarContainer,handleOnKeyDown:e.props.onKeyDown,handleOnDayKeyDown:e.onDayKeyDown,setPreSelection:e.setPreSelection,dropdownMode:(o=e.props.dropdownMode)!==null&&o!==void 0?o:a.defaultProps.dropdownMode}),e.props.children)},e.renderAriaLiveRegion=function(){var r=e.props,o=r.dateFormat,s=o===void 0?a.defaultProps.dateFormat:o,i=r.locale,c=e.props.showTimeInput||e.props.showTimeSelect,l=c?"PPPPp":"PPPP",u;return e.props.selectsRange?u="Selected start date: ".concat(ie(e.props.startDate,{dateFormat:l,locale:i}),". ").concat(e.props.endDate?"End date: "+ie(e.props.endDate,{dateFormat:l,locale:i}):""):e.props.showTimeSelectOnly?u="Selected time: ".concat(ie(e.props.selected,{dateFormat:s,locale:i})):e.props.showYearPicker?u="Selected year: ".concat(ie(e.props.selected,{dateFormat:"yyyy",locale:i})):e.props.showMonthYearPicker?u="Selected month: ".concat(ie(e.props.selected,{dateFormat:"MMMM yyyy",locale:i})):e.props.showQuarterYearPicker?u="Selected quarter: ".concat(ie(e.props.selected,{dateFormat:"yyyy, QQQ",locale:i})):u="Selected date: ".concat(ie(e.props.selected,{dateFormat:l,locale:i})),m.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},u)},e.renderDateInput=function(){var r,o,s,i=re(e.props.className,(r={},r[mn]=e.state.open,r)),c=e.props.customInput||m.createElement("input",{type:"text"}),l=e.props.customInputRef||"ref",u=e.props,d=u.dateFormat,f=d===void 0?a.defaultProps.dateFormat:d,p=u.locale,h=typeof e.props.value=="string"?e.props.value:typeof e.state.inputValue=="string"?e.state.inputValue:e.props.selectsRange?tc(e.props.startDate,e.props.endDate,{dateFormat:f,locale:p}):e.props.selectsMultiple?rc((s=e.props.selectedDates)!==null&&s!==void 0?s:[],{dateFormat:f,locale:p}):ie(e.props.selected,{dateFormat:f,locale:p});return w.cloneElement(c,(o={},o[l]=function(v){e.input=v},o.value=h,o.onBlur=e.handleBlur,o.onChange=e.handleChange,o.onClick=e.onInputClick,o.onFocus=e.handleFocus,o.onKeyDown=e.onInputKeyDown,o.id=e.props.id,o.name=e.props.name,o.form=e.props.form,o.autoFocus=e.props.autoFocus,o.placeholder=e.props.placeholderText,o.disabled=e.props.disabled,o.autoComplete=e.props.autoComplete,o.className=re(c.props.className,i),o.title=e.props.title,o.readOnly=e.props.readOnly,o.required=e.props.required,o.tabIndex=e.props.tabIndex,o["aria-describedby"]=e.props.ariaDescribedBy,o["aria-invalid"]=e.props.ariaInvalid,o["aria-labelledby"]=e.props.ariaLabelledBy,o["aria-required"]=e.props.ariaRequired,o))},e.renderClearButton=function(){var r=e.props,o=r.isClearable,s=r.disabled,i=r.selected,c=r.startDate,l=r.endDate,u=r.clearButtonTitle,d=r.clearButtonClassName,f=d===void 0?"":d,p=r.ariaLabelClose,h=p===void 0?"Close":p,v=r.selectedDates,g=r.readOnly;return o&&!g&&(i!=null||c!=null||l!=null||v!=null&&v.length)?m.createElement("button",{type:"button",className:re("react-datepicker__close-icon",f,{"react-datepicker__close-icon--disabled":s}),disabled:s,"aria-label":h,onClick:e.onClearClick,title:u,tabIndex:-1}):null},e.state=e.calcInitialState(),e.preventFocusTimeout=void 0,e}return Object.defineProperty(a,"defaultProps",{get:function(){return{allowSameDay:!1,dateFormat:"MM/dd/yyyy",dateFormatCalendar:"LLLL yyyy",disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",preventOpenOnFocus:!1,monthsShown:1,readOnly:!1,withPortal:!1,selectsDisabledDaysInRange:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showTwoColumnMonthYearPicker:!1,showFourColumnMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,showWeekPicker:!1,strictParsing:!1,swapRange:!1,timeIntervals:30,timeCaption:"Time",previousMonthAriaLabel:"Previous Month",previousMonthButtonLabel:"Previous Month",nextMonthAriaLabel:"Next Month",nextMonthButtonLabel:"Next Month",previousYearAriaLabel:"Previous Year",previousYearButtonLabel:"Previous Year",nextYearAriaLabel:"Next Year",nextYearButtonLabel:"Next Year",timeInputLabel:"Time",enableTabLoop:!0,yearItemNumber:mt,focusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null,calendarStartDay:void 0,toggleCalendarOnIconClick:!1,usePointerEvent:!1}},enumerable:!1,configurable:!0}),a.prototype.componentDidMount=function(){window.addEventListener("scroll",this.onScroll,!0),document.addEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.componentDidUpdate=function(t,e){var r,o,s,i;t.inline&&Kc(t.selected,this.props.selected)&&this.setPreSelection(this.props.selected),this.state.monthSelectedIn!==void 0&&t.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),t.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:cn(this.props.highlightDates)}),!e.focused&&!Ae(t.selected,this.props.selected)&&this.setState({inputValue:null}),e.open!==this.state.open&&(e.open===!1&&this.state.open===!0&&((o=(r=this.props).onCalendarOpen)===null||o===void 0||o.call(r)),e.open===!0&&this.state.open===!1&&((i=(s=this.props).onCalendarClose)===null||i===void 0||i.call(s)))},a.prototype.componentWillUnmount=function(){this.clearPreventFocusTimeout(),window.removeEventListener("scroll",this.onScroll,!0),document.removeEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},a.prototype.renderInputContainer=function(){var t=this.props,e=t.showIcon,r=t.icon,o=t.calendarIconClassname,s=t.calendarIconClassName,i=t.toggleCalendarOnIconClick,c=this.state.open;return o&&console.warn("calendarIconClassname props is deprecated. should use calendarIconClassName props."),m.createElement("div",{className:"react-datepicker__input-container".concat(e?" react-datepicker__view-calendar-icon":"")},e&&m.createElement(Hc,W({icon:r,className:re(s,!s&&o,c&&"react-datepicker-ignore-onclickoutside")},i?{onClick:this.toggleCalendar}:null)),this.state.isRenderAriaLiveMessage&&this.renderAriaLiveRegion(),this.renderDateInput(),this.renderClearButton())},a.prototype.render=function(){var t=this.renderCalendar();if(this.props.inline)return t;if(this.props.withPortal){var e=this.state.open?m.createElement(ta,{enableTabLoop:this.props.enableTabLoop},m.createElement("div",{className:"react-datepicker__portal",tabIndex:-1,onKeyDown:this.onPortalKeyDown},t)):null;return this.state.open&&this.props.portalId&&(e=m.createElement(ea,W({portalId:this.props.portalId},this.props),e)),m.createElement("div",null,this.renderInputContainer(),e)}return m.createElement(qc,W({},this.props,{className:this.props.popperClassName,hidePopper:!this.isCalendarOpen(),targetComponent:this.renderInputContainer(),popperComponent:t,popperOnKeyDown:this.onPopperKeyDown,showArrow:this.props.showPopperArrow}))},a}(w.Component),$c="input",ir="navigate";const zc=H.div` background: white; border-radius: 0.75rem; padding: 1.5rem; box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); border: 1px solid #e5e7eb; -`,Zc=H.div` +`,Gc=H.div` display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; -`,Jc=H.h3` +`,Xc=H.h3` font-size: 1.125rem; font-weight: 600; color: #111827; margin: 0; -`,el=H.div` +`,Zc=H.div` display: flex; gap: 1rem; align-items: center; flex-wrap: wrap; -`,tl=H.div` +`,Jc=H.div` display: flex; flex-direction: column; min-width: 150px; -`,rl=H.label` +`,el=H.label` font-size: 0.875rem; font-weight: 500; color: #374151; margin-bottom: 0.5rem; -`,nl=H(zc)` +`,tl=H(Uc)` width: 100%; padding: 0.5rem 0.75rem; border: 1px solid #d1d5db; @@ -53,7 +53,7 @@ var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,config &:hover { border-color: #9ca3af; } -`,al=H.button` +`,rl=H.button` padding: 0.5rem 1rem; background-color: #f3f4f6; color: #374151; @@ -73,28 +73,28 @@ var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,config outline: none; box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); } -`,ol=H.div` +`,nl=H.div` display: flex; align-items: center; color: #6b7280; font-size: 0.875rem; -`,vn=({label:n,selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:s,minDate:i,maxDate:c,placeholderText:l})=>b.jsxs(tl,{children:[b.jsx(rl,{children:n}),b.jsx(nl,{selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:s,minDate:i,maxDate:c,dateFormat:"MMM dd, yyyy",placeholderText:l})]}),sl=({onDateChange:n,initialStartDate:a,initialEndDate:t})=>{const{startDate:e,endDate:r,handleStartDateChange:o,handleEndDateChange:s,handleReset:i}=ua(n,a,t);return b.jsxs(Xc,{children:[b.jsxs(Zc,{children:[b.jsx(Jc,{children:"Date Range"}),b.jsx(al,{onClick:i,children:"Reset"})]}),b.jsxs(el,{children:[b.jsx(vn,{label:"Start Date",selected:e,onChange:o,selectsStart:!0,startDate:e,endDate:r,maxDate:r,placeholderText:"Select start date"}),b.jsx(ol,{children:b.jsx("span",{children:"to"})}),b.jsx(vn,{label:"End Date",selected:r,onChange:s,selectsEnd:!0,startDate:e,endDate:r,minDate:e,maxDate:new Date,placeholderText:"Select end date"})]})]})},il=H.div` +`,gn=({label:n,selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:s,minDate:i,maxDate:c,placeholderText:l})=>D.jsxs(Jc,{children:[D.jsx(el,{children:n}),D.jsx(tl,{selected:a,onChange:t,selectsStart:e,selectsEnd:r,startDate:o,endDate:s,minDate:i,maxDate:c,dateFormat:"MMM dd, yyyy",placeholderText:l})]}),al=({onDateChange:n,initialStartDate:a,initialEndDate:t})=>{const{startDate:e,endDate:r,handleStartDateChange:o,handleEndDateChange:s,handleReset:i}=ca(n,a,t);return D.jsxs(zc,{children:[D.jsxs(Gc,{children:[D.jsx(Xc,{children:"Date Range"}),D.jsx(rl,{onClick:i,children:"Reset"})]}),D.jsxs(Zc,{children:[D.jsx(gn,{label:"Start Date",selected:e,onChange:o,selectsStart:!0,startDate:e,endDate:r,maxDate:r,placeholderText:"Select start date"}),D.jsx(nl,{children:D.jsx("span",{children:"to"})}),D.jsx(gn,{label:"End Date",selected:r,onChange:s,selectsEnd:!0,startDate:e,endDate:r,minDate:e,maxDate:new Date,placeholderText:"Select end date"})]})]})},ol=H.div` background: white; border-radius: 0.75rem; padding: 1.5rem; box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); border: 1px solid #e5e7eb; -`,cl=H.div` +`,sl=H.div` display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; -`,ll=H.h3` +`,il=H.h3` font-size: 1.125rem; font-weight: 600; color: #111827; margin: 0; -`,ul=H.input` +`,cl=H.input` width: 100%; padding: 0.5rem 0.75rem; border: 1px solid #d1d5db; @@ -113,13 +113,13 @@ var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,config &:hover { border-color: #9ca3af; } -`,dl=H.div` +`,ll=H.div` max-height: 200px; overflow-y: auto; border: 1px solid #e5e7eb; border-radius: 0.5rem; background-color: white; -`,fl=H.label` +`,ul=H.label` display: flex; align-items: center; padding: 0.75rem; @@ -138,26 +138,26 @@ var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,config &:focus-within { background-color: #f0fdf4; } -`,pl=H.input` +`,dl=H.input` margin-right: 0.75rem; width: 1rem; height: 1rem; accent-color: #10b981; -`,hl=H.div` +`,fl=H.div` flex: 1; -`,ml=H.div` +`,pl=H.div` font-weight: 500; color: #111827; font-size: 0.875rem; -`,gl=H.div` +`,hl=H.div` font-size: 0.75rem; color: #6b7280; margin-top: 0.25rem; -`,vl=H.div` +`,ml=H.div` font-size: 0.75rem; color: #6b7280; margin-top: 0.5rem; -`,wl=H.button` +`,gl=H.button` padding: 0.5rem 1rem; background-color: #f3f4f6; color: #374151; @@ -177,26 +177,26 @@ var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,config outline: none; box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); } -`,yl=[{id:1,name:"Forest A",region:"North Region",treeCount:2500,area:"150 ha"},{id:2,name:"Forest B",region:"South Region",treeCount:3200,area:"200 ha"},{id:3,name:"Forest C",region:"East Region",treeCount:1800,area:"120 ha"},{id:4,name:"Forest D",region:"West Region",treeCount:2750,area:"180 ha"},{id:5,name:"Forest E",region:"Central Region",treeCount:4100,area:"250 ha"}],Dl=({selectedForests:n=[],onChange:a,forests:t=yl})=>{const[e,r]=w.useState(""),[o,s]=w.useState(t);w.useEffect(()=>{const d=t.filter(f=>f.name.toLowerCase().includes(e.toLowerCase())||f.region.toLowerCase().includes(e.toLowerCase()));s(d)},[e,t]);const i=d=>{a&&(n.includes(d)?a(n.filter(f=>f!==d)):a([...n,d]))},c=()=>{a&&a(t.map(d=>d.id))},l=()=>{a&&a([])},u=()=>{a&&a([]),r("")};return b.jsxs(il,{children:[b.jsxs(cl,{children:[b.jsx(ll,{children:"Forest Selection"}),b.jsx(wl,{onClick:u,children:"Reset"})]}),b.jsx(ul,{type:"text",placeholder:"Search forests by name or region...",value:e,onChange:d=>r(d.target.value)}),b.jsxs("div",{className:"flex gap-2 mb-3",children:[b.jsx("button",{onClick:c,className:"px-3 py-1 text-xs bg-green-100 text-green-700 rounded border border-green-200 hover:bg-green-200 transition-colors",children:"Select All"}),b.jsx("button",{onClick:l,className:"px-3 py-1 text-xs bg-gray-100 text-gray-700 rounded border border-gray-200 hover:bg-gray-200 transition-colors",children:"Select None"})]}),b.jsxs(dl,{children:[o.map(d=>b.jsxs(fl,{children:[b.jsx(pl,{type:"checkbox",checked:n.includes(d.id),onChange:()=>i(d.id)}),b.jsxs(hl,{children:[b.jsx(ml,{children:d.name}),b.jsxs(gl,{children:[d.region," • ",d.treeCount," trees • ",d.area]})]})]},d.id)),o.length===0&&b.jsx("div",{className:"p-4 text-center text-gray-500 text-sm",children:"No forests found matching your search."})]}),b.jsxs(vl,{children:[n.length," of ",t.length," forests selected"]})]})},bl=({errors:n})=>!n||Object.keys(n).length===0?null:b.jsxs("div",{className:"mb-4 p-3 bg-red-50 border border-red-200 rounded-lg",children:[b.jsxs("div",{className:"flex items-center mb-2",children:[b.jsx("svg",{className:"w-5 h-5 text-red-500 mr-2",fill:"currentColor",viewBox:"0 0 20 20",children:b.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})}),b.jsx("span",{className:"font-medium text-red-800",children:"Filter Validation Errors"})]}),b.jsx("ul",{className:"text-sm text-red-700 space-y-1",children:Object.entries(n).map(([a,t])=>b.jsxs("li",{children:["• ",t]},a))})]}),pt={MAX_DATE_RANGE_YEARS:5,MAX_SELECTED_FORESTS:10,MILLISECONDS_PER_YEAR:1e3*60*60*24*365},Ot={DATE_ORDER:"Start date must be before or equal to end date",DATE_FUTURE:"End date cannot be in the future",DATE_RANGE_TOO_LARGE:`Date range cannot exceed ${pt.MAX_DATE_RANGE_YEARS} years`,TOO_MANY_FORESTS:`Cannot select more than ${pt.MAX_SELECTED_FORESTS} forests at once`},kl=n=>{if(!n||!n.startDate||!n.endDate)return null;const{startDate:a,endDate:t}=n;return a>t?Ot.DATE_ORDER:t>new Date?Ot.DATE_FUTURE:(t-a)/pt.MILLISECONDS_PER_YEAR>pt.MAX_DATE_RANGE_YEARS?Ot.DATE_RANGE_TOO_LARGE:null},xl=n=>!n||!Array.isArray(n)?null:n.length>pt.MAX_SELECTED_FORESTS?Ot.TOO_MANY_FORESTS:null,_l=n=>{const a={},t=kl(n.dateRange);t&&(a.dateRange=t);const e=xl(n.selectedForests);return e&&(a.selectedForests=e),a},wn=()=>({dateRange:{startDate:new Date(new Date().getFullYear(),0,1),endDate:new Date},selectedForests:[]}),Ml=H.div` +`,vl=[{id:1,name:"Forest A",region:"North Region",treeCount:2500,area:"150 ha"},{id:2,name:"Forest B",region:"South Region",treeCount:3200,area:"200 ha"},{id:3,name:"Forest C",region:"East Region",treeCount:1800,area:"120 ha"},{id:4,name:"Forest D",region:"West Region",treeCount:2750,area:"180 ha"},{id:5,name:"Forest E",region:"Central Region",treeCount:4100,area:"250 ha"}],wl=({selectedForests:n=[],onChange:a,forests:t=vl})=>{const[e,r]=w.useState(""),[o,s]=w.useState(t);w.useEffect(()=>{const d=t.filter(f=>f.name.toLowerCase().includes(e.toLowerCase())||f.region.toLowerCase().includes(e.toLowerCase()));s(d)},[e,t]);const i=d=>{a&&(n.includes(d)?a(n.filter(f=>f!==d)):a([...n,d]))},c=()=>{a&&a(t.map(d=>d.id))},l=()=>{a&&a([])},u=()=>{a&&a([]),r("")};return D.jsxs(ol,{children:[D.jsxs(sl,{children:[D.jsx(il,{children:"Forest Selection"}),D.jsx(gl,{onClick:u,children:"Reset"})]}),D.jsx(cl,{type:"text",placeholder:"Search forests by name or region...",value:e,onChange:d=>r(d.target.value)}),D.jsxs("div",{className:"flex gap-2 mb-3",children:[D.jsx("button",{onClick:c,className:"px-3 py-1 text-xs bg-green-100 text-green-700 rounded border border-green-200 hover:bg-green-200 transition-colors",children:"Select All"}),D.jsx("button",{onClick:l,className:"px-3 py-1 text-xs bg-gray-100 text-gray-700 rounded border border-gray-200 hover:bg-gray-200 transition-colors",children:"Select None"})]}),D.jsxs(ll,{children:[o.map(d=>D.jsxs(ul,{children:[D.jsx(dl,{type:"checkbox",checked:n.includes(d.id),onChange:()=>i(d.id)}),D.jsxs(fl,{children:[D.jsx(pl,{children:d.name}),D.jsxs(hl,{children:[d.region," • ",d.treeCount," trees • ",d.area]})]})]},d.id)),o.length===0&&D.jsx("div",{className:"p-4 text-center text-gray-500 text-sm",children:"No forests found matching your search."})]}),D.jsxs(ml,{children:[n.length," of ",t.length," forests selected"]})]})},yl=({errors:n})=>!n||Object.keys(n).length===0?null:D.jsxs("div",{className:"mb-4 p-3 bg-red-50 border border-red-200 rounded-lg",children:[D.jsxs("div",{className:"flex items-center mb-2",children:[D.jsx("svg",{className:"w-5 h-5 text-red-500 mr-2",fill:"currentColor",viewBox:"0 0 20 20",children:D.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})}),D.jsx("span",{className:"font-medium text-red-800",children:"Filter Validation Errors"})]}),D.jsx("ul",{className:"text-sm text-red-700 space-y-1",children:Object.entries(n).map(([a,t])=>D.jsxs("li",{children:["• ",t]},a))})]}),ft={MAX_DATE_RANGE_YEARS:5,MAX_SELECTED_FORESTS:10,MILLISECONDS_PER_YEAR:1e3*60*60*24*365},Tt={DATE_ORDER:"Start date must be before or equal to end date",DATE_FUTURE:"End date cannot be in the future",DATE_RANGE_TOO_LARGE:`Date range cannot exceed ${ft.MAX_DATE_RANGE_YEARS} years`,TOO_MANY_FORESTS:`Cannot select more than ${ft.MAX_SELECTED_FORESTS} forests at once`},bl=n=>{if(!n||!n.startDate||!n.endDate)return null;const{startDate:a,endDate:t}=n;return a>t?Tt.DATE_ORDER:t>new Date?Tt.DATE_FUTURE:(t-a)/ft.MILLISECONDS_PER_YEAR>ft.MAX_DATE_RANGE_YEARS?Tt.DATE_RANGE_TOO_LARGE:null},Dl=n=>!n||!Array.isArray(n)?null:n.length>ft.MAX_SELECTED_FORESTS?Tt.TOO_MANY_FORESTS:null,kl=n=>{const a={},t=bl(n.dateRange);t&&(a.dateRange=t);const e=Dl(n.selectedForests);return e&&(a.selectedForests=e),a},vn=()=>({dateRange:{startDate:new Date(new Date().getFullYear(),0,1),endDate:new Date},selectedForests:[]}),xl=H.div` background: #f9fafb; border-radius: 0.75rem; padding: 1.5rem; margin-bottom: 2rem; -`,Cl=H.div` +`,_l=H.div` display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; -`,Sl=H.h2` +`,Ml=H.h2` font-size: 1.5rem; font-weight: 700; color: #111827; margin: 0; -`,El=H.p` +`,Cl=H.p` color: #6b7280; margin: 0.5rem 0 0 0; font-size: 0.875rem; -`,Pl=H.div` +`,Sl=H.div` display: grid; grid-template-columns: 1fr; gap: 1.5rem; @@ -208,14 +208,14 @@ var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,config @media (min-width: 1024px) { grid-template-columns: 1fr 1fr; } -`,Tl=H.div` +`,El=H.div` display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 1rem; padding-top: 1rem; border-top: 1px solid #e5e7eb; -`,Ol=H.span` +`,Pl=H.span` display: inline-flex; align-items: center; padding: 0.25rem 0.75rem; @@ -224,7 +224,7 @@ var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,config border-radius: 9999px; font-size: 0.75rem; font-weight: 500; -`,Nl=H.button` +`,Tl=H.button` padding: 0.5rem 1rem; background-color: #ef4444; color: white; @@ -243,7 +243,7 @@ var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,config outline: none; box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); } -`,Wl=({onFiltersChange:n,initialFilters:a={}})=>{const[t,e]=ca(),r=w.useRef(!1),o=w.useRef(n),s=w.useRef(!1);w.useEffect(()=>{o.current=n},[n]);const i=w.useCallback(()=>{const y=t.get("startDate"),k=t.get("endDate"),T=t.get("forests"),O={};if(y&&k)try{const S=new Date(y),x=new Date(k);!isNaN(S.getTime())&&!isNaN(x.getTime())&&S<=x&&(O.dateRange={startDate:S,endDate:x})}catch(S){console.warn("Invalid date parameters in URL:",S)}if(T)try{const S=T.split(",").map(x=>parseInt(x,10)).filter(x=>!isNaN(x));S.length>0&&(O.selectedForests=S)}catch(S){console.warn("Invalid forest parameters in URL:",S)}return O},[t]),[c,l]=w.useState(()=>{const y=i();return{...wn(),...a,...y}}),[u,d]=w.useState({}),f=w.useCallback(y=>{const k=_l(y);return d(k),Object.keys(k).length===0},[]),p=w.useCallback(y=>{var T,O;const k=new URLSearchParams;(T=y.dateRange)!=null&&T.startDate&&((O=y.dateRange)!=null&&O.endDate)&&(k.set("startDate",Tr(y.dateRange.startDate)),k.set("endDate",Tr(y.dateRange.endDate))),y.selectedForests&&y.selectedForests.length>0&&k.set("forests",y.selectedForests.join(",")),e(k,{replace:!0})},[e]);w.useEffect(()=>{!r.current&&Object.keys(a).length>0&&(l(y=>({...y,...a})),r.current=!0)},[]);const[h,v]=w.useState([]);w.useEffect(()=>{const y=[];if(c.dateRange.startDate&&c.dateRange.endDate){const k=c.dateRange.startDate.toLocaleDateString(),T=c.dateRange.endDate.toLocaleDateString();y.push(`Date: ${k} - ${T}`)}c.selectedForests.length>0&&y.push(`${c.selectedForests.length} forests selected`),v(y)},[c]),w.useEffect(()=>{if(!s.current){s.current=!0;return}const y=setTimeout(()=>{f(c)&&(p(c),o.current&&o.current(c))},1e3);return()=>clearTimeout(y)},[c,f,p]);const g=w.useCallback(y=>{l(k=>({...k,dateRange:y}))},[]),D=w.useCallback(y=>{l(k=>({...k,selectedForests:y}))},[]),_=w.useCallback(()=>{const y=wn();l(y),d({}),e({},{replace:!0})},[e]);return b.jsxs(Ml,{children:[b.jsxs(Cl,{children:[b.jsxs("div",{children:[b.jsx(Sl,{children:"Global Filters"}),b.jsx(El,{children:"Filter your data by date range and forest selection"})]}),h.length>0&&b.jsx(Nl,{onClick:_,children:"Clear All"})]}),b.jsx(bl,{errors:u}),b.jsxs(Pl,{children:[b.jsx(sl,{onDateChange:g,initialStartDate:c.dateRange.startDate,initialEndDate:c.dateRange.endDate}),b.jsx(Dl,{selectedForests:c.selectedForests,onChange:D})]}),h.length>0&&b.jsx(Tl,{children:h.map((y,k)=>b.jsx(Ol,{children:y},k))})]})};H.div` +`,Fl=({onFiltersChange:n,initialFilters:a={}})=>{const[t,e]=sa(),r=w.useRef(!1),o=w.useRef(n),s=w.useRef(!1);w.useEffect(()=>{o.current=n},[n]);const i=w.useCallback(()=>{const y=t.get("startDate"),k=t.get("endDate"),T=t.get("forests"),O={};if(y&&k)try{const S=new Date(y),x=new Date(k);!isNaN(S.getTime())&&!isNaN(x.getTime())&&S<=x&&(O.dateRange={startDate:S,endDate:x})}catch(S){console.warn("Invalid date parameters in URL:",S)}if(T)try{const S=T.split(",").map(x=>parseInt(x,10)).filter(x=>!isNaN(x));S.length>0&&(O.selectedForests=S)}catch(S){console.warn("Invalid forest parameters in URL:",S)}return O},[t]),[c,l]=w.useState(()=>{const y=i();return{...vn(),...a,...y}}),[u,d]=w.useState({}),f=w.useCallback(y=>{const k=kl(y);return d(k),Object.keys(k).length===0},[]),p=w.useCallback(y=>{var T,O;const k=new URLSearchParams;(T=y.dateRange)!=null&&T.startDate&&((O=y.dateRange)!=null&&O.endDate)&&(k.set("startDate",Pr(y.dateRange.startDate)),k.set("endDate",Pr(y.dateRange.endDate))),y.selectedForests&&y.selectedForests.length>0&&k.set("forests",y.selectedForests.join(",")),e(k,{replace:!0})},[e]);w.useEffect(()=>{!r.current&&Object.keys(a).length>0&&(l(y=>({...y,...a})),r.current=!0)},[]);const[h,v]=w.useState([]);w.useEffect(()=>{const y=[];if(c.dateRange.startDate&&c.dateRange.endDate){const k=c.dateRange.startDate.toLocaleDateString(),T=c.dateRange.endDate.toLocaleDateString();y.push(`Date: ${k} - ${T}`)}c.selectedForests.length>0&&y.push(`${c.selectedForests.length} forests selected`),v(y)},[c]),w.useEffect(()=>{if(!s.current){s.current=!0;return}const y=setTimeout(()=>{f(c)&&(p(c),o.current&&o.current(c))},1e3);return()=>clearTimeout(y)},[c,f,p]);const g=w.useCallback(y=>{l(k=>({...k,dateRange:y}))},[]),b=w.useCallback(y=>{l(k=>({...k,selectedForests:y}))},[]),_=w.useCallback(()=>{const y=vn();l(y),d({}),e({},{replace:!0})},[e]);return D.jsxs(xl,{children:[D.jsxs(_l,{children:[D.jsxs("div",{children:[D.jsx(Ml,{children:"Global Filters"}),D.jsx(Cl,{children:"Filter your data by date range and forest selection"})]}),h.length>0&&D.jsx(Tl,{onClick:_,children:"Clear All"})]}),D.jsx(yl,{errors:u}),D.jsxs(Sl,{children:[D.jsx(al,{onDateChange:g,initialStartDate:c.dateRange.startDate,initialEndDate:c.dateRange.endDate}),D.jsx(wl,{selectedForests:c.selectedForests,onChange:b})]}),h.length>0&&D.jsx(El,{children:h.map((y,k)=>D.jsx(Pl,{children:y},k))})]})};H.div` display: flex; justify-content: space-between; align-items: center; @@ -276,4 +276,4 @@ var na=Object.defineProperty;var aa=(n,a,t)=>a in n?na(n,a,{enumerable:!0,config outline: none; box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); } -`;const Hl=(n=!1)=>{const[a,t]=w.useState(n),e=w.useCallback(()=>{t(s=>!s)},[]),r=w.useCallback(()=>{t(!0)},[]),o=w.useCallback(()=>{t(!1)},[]);return{sidebarOpen:a,toggleSidebar:e,openSidebar:r,closeSidebar:o}};export{Il as D,Wl as G,Al as a,Fl as t,Hl as u}; +`;const Il=(n=!1)=>{const[a,t]=w.useState(n),e=w.useCallback(()=>{t(s=>!s)},[]),r=w.useCallback(()=>{t(!0)},[]),o=w.useCallback(()=>{t(!1)},[]);return{sidebarOpen:a,toggleSidebar:e,openSidebar:r,closeSidebar:o}};export{Yl as D,Fl as G,Ll as a,Il as u}; diff --git a/frontend/dist/index.html b/frontend/dist/index.html index 694c39876b..c2d9933df3 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -21,9 +21,9 @@ } })(); - + - +
diff --git a/frontend/src/components/admin/TreeFormModal.jsx b/frontend/src/components/admin/TreeFormModal.jsx new file mode 100644 index 0000000000..e78ab86218 --- /dev/null +++ b/frontend/src/components/admin/TreeFormModal.jsx @@ -0,0 +1,415 @@ +import { useState, useEffect } from 'react'; +import { Modal } from '../ui/Modal'; +import { FormField } from '../ui/FormField'; +import { MapLocationPicker } from '../ui/MapLocationPicker'; +import { forestAPI, treeAPI } from '../../lib/api'; +import { useAuth } from '../../contexts/AuthContext'; + +export const TreeFormModal = ({ + isOpen, + onClose, + tree = null, + onSuccess +}) => { + const { user } = useAuth(); + const [forests, setForests] = useState([]); + const [loading, setLoading] = useState(false); + const [errors, setErrors] = useState({}); + const [useMapPicker, setUseMapPicker] = useState(false); + const [formData, setFormData] = useState({ + treeId: '', + forestId: '', + species: '', + plantedDate: '', + latitude: '', + longitude: '', + soilCondition: '', + sunlightExposure: '', + notes: '' + }); + + const isEditMode = !!tree; + + // Load forests on mount + useEffect(() => { + const loadForests = async () => { + try { + const response = await forestAPI.getAll(); + const forestsData = response.data?.forests || response.data || []; + setForests(forestsData); + } catch (error) { + console.error('Failed to load forests:', error); + } + }; + + if (isOpen) { + loadForests(); + } + }, [isOpen]); + + // Initialize form data when tree changes + useEffect(() => { + if (tree) { + setFormData({ + treeId: tree.treeId || '', + forestId: tree.forestId?._id || tree.forestId || '', + species: tree.species || '', + plantedDate: tree.plantedDate ? new Date(tree.plantedDate).toISOString().split('T')[0] : '', + latitude: tree.location?.coordinates?.[1] || tree.lat || '', + longitude: tree.location?.coordinates?.[0] || tree.lng || '', + soilCondition: tree.metadata?.soilCondition || '', + sunlightExposure: tree.metadata?.sunlightExposure || '', + notes: tree.metadata?.notes || '' + }); + } else { + // Reset form for create mode + setFormData({ + treeId: '', + forestId: '', + species: '', + plantedDate: '', + latitude: '', + longitude: '', + soilCondition: '', + sunlightExposure: '', + notes: '' + }); + } + setErrors({}); + }, [tree]); + + const handleChange = (name, value) => { + setFormData(prev => ({ + ...prev, + [name]: value + })); + + // Clear error for this field + if (errors[name]) { + setErrors(prev => ({ + ...prev, + [name]: null + })); + } + }; + + const handleLocationChange = ({ latitude, longitude }) => { + setFormData(prev => ({ + ...prev, + latitude, + longitude + })); + + // Clear location errors + setErrors(prev => ({ + ...prev, + latitude: null, + longitude: null + })); + }; + + const validateForm = () => { + const newErrors = {}; + + if (!formData.treeId.trim()) { + newErrors.treeId = 'Tree ID is required'; + } + + if (!formData.forestId) { + newErrors.forestId = 'Forest is required'; + } + + if (!formData.species.trim()) { + newErrors.species = 'Species is required'; + } + + if (!formData.plantedDate) { + newErrors.plantedDate = 'Planted date is required'; + } + + if (!formData.latitude || isNaN(parseFloat(formData.latitude))) { + newErrors.latitude = 'Valid latitude is required'; + } else { + const lat = parseFloat(formData.latitude); + if (lat < -90 || lat > 90) { + newErrors.latitude = 'Latitude must be between -90 and 90'; + } + } + + if (!formData.longitude || isNaN(parseFloat(formData.longitude))) { + newErrors.longitude = 'Valid longitude is required'; + } else { + const lng = parseFloat(formData.longitude); + if (lng < -180 || lng > 180) { + newErrors.longitude = 'Longitude must be between -180 and 180'; + } + } + + setErrors(newErrors); + return Object.keys(newErrors).length === 0; + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + + if (!validateForm()) { + return; + } + + setLoading(true); + + try { + const treeData = { + treeId: formData.treeId, + forestId: formData.forestId, + species: formData.species, + plantedDate: formData.plantedDate, + location: { + type: 'Point', + coordinates: [parseFloat(formData.longitude), parseFloat(formData.latitude)] + }, + metadata: { + soilCondition: formData.soilCondition || undefined, + sunlightExposure: formData.sunlightExposure || undefined, + notes: formData.notes || undefined + } + }; + + if (isEditMode) { + await treeAPI.update(tree._id, treeData); + } else { + await treeAPI.create(treeData); + } + + onSuccess?.(); + onClose(); + } catch (error) { + console.error('Failed to save tree:', error); + setErrors({ + submit: error.response?.data?.message || `Failed to ${isEditMode ? 'update' : 'create'} tree` + }); + } finally { + setLoading(false); + } + }; + + const sunlightOptions = [ + { value: '', label: 'Select sunlight exposure' }, + { value: 'full_sun', label: 'Full Sun' }, + { value: 'partial_sun', label: 'Partial Sun' }, + { value: 'partial_shade', label: 'Partial Shade' }, + { value: 'full_shade', label: 'Full Shade' } + ]; + + return ( + +
+ {errors.submit && ( +
+ {errors.submit} +
+ )} + +
+ + handleChange('treeId', e.target.value)} + className="form-input" + placeholder="e.g., TREE-001" + disabled={loading} + /> + + + + + +
+ +
+ + handleChange('species', e.target.value)} + className="form-input" + placeholder="e.g., Pine, Oak, Birch" + disabled={loading} + /> + + + + handleChange('plantedDate', e.target.value)} + className="form-input" + disabled={loading} + /> + +
+ + {/* Location Input Method Toggle */} +
+

+ Tree Location +

+ +
+ + {useMapPicker ? ( + + + + ) : ( +
+ + handleChange('latitude', e.target.value)} + className="form-input" + placeholder="e.g., 59.3293" + disabled={loading} + /> + + + + handleChange('longitude', e.target.value)} + className="form-input" + placeholder="e.g., 18.0686" + disabled={loading} + /> + +
+ )} + +
+ + handleChange('soilCondition', e.target.value)} + className="form-input" + placeholder="e.g., Sandy, Clay, Loamy" + disabled={loading} + /> + + + + + +
+ + +